From 1e93e06503996222260a6293f91bda5b4ab56d73 Mon Sep 17 00:00:00 2001 From: AxiBright Date: Sat, 18 Apr 2026 01:07:12 +0800 Subject: [PATCH] vault backup: 2026-04-18 01:07:12 --- .obsidian/plugins/i18n/metadata.json | 32 +- .obsidian/plugins/i18n/states.json | 12 +- .../CR5aPHe1OQzsTosQljlx090kiuFI8sfb.json | 163 - .../VUU_QlXXk1BoU0wRbeGYhF9Gpoi_1zRs.json | 181 + .obsidian/plugins/multi-properties/data.json | 5 +- .obsidian/plugins/multi-properties/main.js | 6483 +---------------- .obsidian/workspace.json | 70 +- Archive/test.md | 5 +- Archive/未命名 1.md | 3 + Archive/未命名.md | 3 + Bases/为什么会消失.md | 6 +- Bases/元数据列表.base | 27 +- .../Article/Debian从零开始使用pnpm部署项目.md | 9 + BlogWebsite/Article/MarkdownTest.md | 8 +- .../Obsidian使用飞牛WebDAV实现多端同步.md | 13 +- .../Article/docker的容器和镜像的删除操作.md | 8 +- ...的Ubuntu中使用Docker Compose部署MTPhotos.md | 9 + .../Article/通过SSH密钥连接LINUX服务器.md | 9 + ...用passnet内网穿透服务优雅快速的分享照片访问.md | 9 + BlogWebsite/Page/关于与声明.md | 9 + BlogWebsite/Page/友情链接.md | 9 + Collection/KMP算法.md | 9 +- Collection/Markdown语法.md | 12 +- Collection/PID控制算法.md | 9 +- Collection/YAML用法.md | 8 +- .../YoudaoyunNotes/01Linux基础/00-简介.md | 9 + .../01Linux基础/01-开发环境安装.md | 9 + .../01Linux基础/02_Linux概述.md | 9 + .../YoudaoyunNotes/01Linux基础/03_文件互通.md | 9 + .../01Linux基础/04_命令行编辑与编译.md | 9 + .../YoudaoyunNotes/01Linux基础/05_网络配置.md | 9 + .../01Linux基础/06_常用Shell命令.md | 9 + .../YoudaoyunNotes/02C语言/01-C语言概述.md | 9 + .../02C语言/03-数据类型及IO流.md | 9 + .../YoudaoyunNotes/02C语言/05-控制与分支.md | 9 + .../YoudaoyunNotes/02C语言/06-函数基础.md | 9 + Collection/YoudaoyunNotes/02C语言/07-数组.md | 8 +- Collection/YoudaoyunNotes/02C语言/08-指针.md | 9 + .../02C语言/09-数组与指针进阶.md | 9 + .../YoudaoyunNotes/02C语言/10-函数进阶.md | 9 + .../YoudaoyunNotes/02C语言/11-内存管理.md | 9 + .../02C语言/14-预处理与文件组织.md | 9 + Collection/linux命令.md | 7 +- Collection/未命名.md | 11 +- Collection/连~都忘记了的小知识.md | 8 +- .../配置备忘/Typecho插件Aplayer使用教程.md | 9 + Collection/配置备忘/navidrome.md | 8 +- Collection/配置备忘/openclash配置.md | 9 +- Diary/2026/01/2026-01-19 周一.md | 2 +- Excalidraw/Drawing 20260122.md | 1 - Meta/🏡HOME.md | 2 +- School/AI实验报告提示词.md | 6 +- School/vivado_ip.md | 4 +- .../大三下嵌入式软件测试论文文献引用清单.md | 6 +- YueQian/Homework/1-23-5题存疑.md | 1 - YueQian/Homework/1-29作业.md | 1 - YueQian/Homework/1.19-已完成.md | 3 + YueQian/Homework/2-4.md | 1 - .../相关网站/相关网站_Excalidraw20260121.md | 5 +- 59 files changed, 586 insertions(+), 6761 deletions(-) delete mode 100644 .obsidian/plugins/i18n/translations/CR5aPHe1OQzsTosQljlx090kiuFI8sfb.json create mode 100644 .obsidian/plugins/i18n/translations/VUU_QlXXk1BoU0wRbeGYhF9Gpoi_1zRs.json create mode 100644 Archive/未命名 1.md create mode 100644 Archive/未命名.md diff --git a/.obsidian/plugins/i18n/metadata.json b/.obsidian/plugins/i18n/metadata.json index e323815..274df70 100644 --- a/.obsidian/plugins/i18n/metadata.json +++ b/.obsidian/plugins/i18n/metadata.json @@ -108,22 +108,6 @@ "updatedAt": 1776342507550, "createdAt": 1776342507550 }, - "CR5aPHe1OQzsTosQljlx090kiuFI8sfb": { - "id": "CR5aPHe1OQzsTosQljlx090kiuFI8sfb", - "plugin": "multi-properties", - "title": "Multi Properties", - "type": "plugin", - "origin": "cloud", - "isActive": true, - "checksum": "6efcc9db5e800792ba76361c99af645bba57a6ae494b9cf0cb6704ac879e9ccc", - "cloud": { - "owner": "yunrr", - "repo": "obsidian-i18n-resources", - "hash": "6072b29b6072b29b6072b29b6072b29b" - }, - "updatedAt": 1776342508913, - "createdAt": 1776342508913 - }, "6P9TFNP8FuH4-ZjEPny-uk_a0wz1_sCk": { "id": "6P9TFNP8FuH4-ZjEPny-uk_a0wz1_sCk", "plugin": "nutstore-sync", @@ -246,6 +230,22 @@ }, "updatedAt": 1776342728534, "createdAt": 1776342728534 + }, + "VUU_QlXXk1BoU0wRbeGYhF9Gpoi_1zRs": { + "id": "VUU_QlXXk1BoU0wRbeGYhF9Gpoi_1zRs", + "plugin": "multi-properties", + "title": "Multi Properties", + "type": "plugin", + "origin": "cloud", + "isActive": true, + "checksum": "f50c2fffeecd6896a3ff00b2574712b03e5f6fa3f709cb2fda13822683687f87", + "cloud": { + "owner": "yunrr", + "repo": "obsidian-i18n-resources", + "hash": "6b47cc816b47cc816b47cc816b47cc81" + }, + "updatedAt": 1776444516042, + "createdAt": 1776444516042 } } } diff --git a/.obsidian/plugins/i18n/states.json b/.obsidian/plugins/i18n/states.json index 565fc15..b7df989 100644 --- a/.obsidian/plugins/i18n/states.json +++ b/.obsidian/plugins/i18n/states.json @@ -42,12 +42,6 @@ "pluginVersion": "4.4.0", "translationVersion": "2.0.0" }, - "multi-properties": { - "id": "multi-properties", - "isApplied": true, - "pluginVersion": "1.4.0", - "translationVersion": "2.0.0" - }, "nutstore-sync": { "id": "nutstore-sync", "isApplied": true, @@ -95,6 +89,12 @@ "isApplied": true, "pluginVersion": "1.0.9", "translationVersion": "1.0.0" + }, + "multi-properties": { + "id": "multi-properties", + "isApplied": true, + "pluginVersion": "1.4.0", + "translationVersion": "1.0.0" } }, "themes": {} diff --git a/.obsidian/plugins/i18n/translations/CR5aPHe1OQzsTosQljlx090kiuFI8sfb.json b/.obsidian/plugins/i18n/translations/CR5aPHe1OQzsTosQljlx090kiuFI8sfb.json deleted file mode 100644 index 747a536..0000000 --- a/.obsidian/plugins/i18n/translations/CR5aPHe1OQzsTosQljlx090kiuFI8sfb.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "schemaVersion": 1, - "metadata": { - "plugin": "multi-properties", - "version": "2.0.0", - "title": "Multi Properties", - "description": "Adds Properties to multiple notes at once. Either right-click a folder, or select multiple notes and right-click the selection.", - "language": "zh-cn", - "supportedVersions": "1.1.2", - "author": "" - }, - "dict": { - "main.js": { - "ast": [], - "regex": [ - { - "source": "Notice(\"Delimiter must be a single character.\")", - "target": "Notice(\"分隔符必须是单个字符。\")" - }, - { - "source": "Notice(\"Please check at least one property to remove.\")", - "target": "Notice(\"请检查至少一个要删除的属性。\")" - }, - { - "source": "Notice(\"No properties to remove\")", - "target": "Notice(\"没有要删除的属性\")" - }, - { - "source": "Notice(\"No files to add properties to.\", 4e3)", - "target": "Notice(\"没有要添加属性的文件。\", 4e3)" - }, - { - "source": "Notice(\"No files to remove properties from.\", 4e3)", - "target": "Notice(\"没有要从中删除属性的文件。\", 4e3)" - }, - { - "source": "text: \"Add Properties\"", - "target": "text: \"添加属性\"" - }, - { - "source": "text: \"Remove Properties\"", - "target": "text: \"移除属性\"" - }, - { - "source": ".setName(\"Overwrite existing text\")", - "target": ".setName(\"覆盖现有文本\")" - }, - { - "source": ".setName(\"Recursive Iteration\")", - "target": ".setName(\"递归迭代\")" - }, - { - "source": ".setName(\"List Delimiter\")", - "target": ".setName(\"列表分隔符\")" - }, - { - "source": ".setDesc(\n \"When adding a property with a name that already exists, the text will overwrite the prop's existing value. If left disabled, the new value will be appended to the old as a List.\"\n )", - "target": ".setDesc(\n \"添加名称已经存在的属性时,文本将覆盖该属性的现有值。 如果保持禁用状态,新值将作为列表添加到旧值。 \"\n )" - }, - { - "source": ".setDesc(\n \"When toggled on, while looping through all files in a folder, you will also loop through any sub-folders.\"\n )", - "target": ".setDesc(\n \"启用后,在循环遍历文件夹中的所有文件时,还将循环遍历任何子文件夹。 \"\n )" - }, - { - "source": ".setDesc(\n \"Set delimiter to use when creating a list. Commas(,) are used by default.\"\n )", - "target": ".setDesc(\n \"设置要在创建列表时使用的分隔符。 默认使用逗号(,)。 \"\n )" - }, - { - "source": ".setTitle(\"Add props to folder's notes\")", - "target": ".setTitle(\"在文件夹的注释中添加props\")" - }, - { - "source": ".setTitle(\"Remove props from folder's notes\")", - "target": ".setTitle(\"从文件夹的笔记中删除props\")" - }, - { - "source": ".setTitle(\"Add props to selected files\")", - "target": ".setTitle(\"向所选文件添加props\")" - }, - { - "source": ".setTitle(\"Remove props from selected files\")", - "target": ".setTitle(\"从选定的文件中删除props\")" - }, - { - "source": ".setTitle(\"Add props to search results\")", - "target": ".setTitle(\"在搜索结果中添加props\")" - }, - { - "source": ".setTitle(\"Remove props from search results\")", - "target": ".setTitle(\"在搜索结果中移除props\")" - }, - { - "source": "Type in a property name, then value. Use the dropbox to choose what type of\\r\\n data you wish to store.", - "target": "输入属性名称和值。使用下拉框选择您希望存储的\\r\\n 数据类型。" - }, - { - "source": "If you want to make a List property, use the Text data type and separate\\r\\n each value with a", - "target": "如需创建列表属性,请使用文本数据类型并用符号分隔\\r\\n 每个值。" - }, - { - "source": "If you want to add Tags, use the name \"tags\".", - "target": "如需添加标签,请使用属性名 \"tags\"。" - }, - { - "source": "Overwrite existing properties", - "target": "覆盖已有属性" - }, - { - "source": "Select the properties you wish to remove from the file selection.", - "target": "从文件选择中勾选您希望移除的属性。" - }, - { - "source": "Please select at least one property to remove.", - "target": "请至少选择一个要移除的属性。" - }, - { - "source": "The following props will be added:", - "target": "以下属性将被添加:" - }, - { - "source": "Are you sure you wish to proceed?", - "target": "确认要继续执行吗?" - }, - { - "source": "will be removed", - "target": "将被移除" - }, - { - "source": "`The following", - "target": "`下列" - }, - { - "source": "\"Delete\"", - "target": "\"删除\"" - }, - { - "source": "Check if you entered a valid path in the Default Props File setting.", - "target": "请检查默认属性文件设置中输入的路径是否有效。" - }, - { - "source": "No properties to remove", - "target": "无属性可移除" - }, - { - "source": "Not a valid Props template.", - "target": "无效的属性模板。" - }, - { - "source": "Function called outside component initialization", - "target": "函数在组件初始化之外被调用" - }, - { - "source": "\"Default Props File\"", - "target": "\"默认属性文件\"" - }, - { - "source": "Select a file with properties that you want to load into the Multi Properties form by default. Type in the full path of the desired file.(ex. Templates/PropFile 1)", - "target": "选择一个包含属性的文件,该文件将默认载入多属性表单。请输入目标文件的完整路径。(例如:Templates/PropFile 1)" - } - ] - } - } -} \ No newline at end of file diff --git a/.obsidian/plugins/i18n/translations/VUU_QlXXk1BoU0wRbeGYhF9Gpoi_1zRs.json b/.obsidian/plugins/i18n/translations/VUU_QlXXk1BoU0wRbeGYhF9Gpoi_1zRs.json new file mode 100644 index 0000000..cff3238 --- /dev/null +++ b/.obsidian/plugins/i18n/translations/VUU_QlXXk1BoU0wRbeGYhF9Gpoi_1zRs.json @@ -0,0 +1,181 @@ +{ + "schemaVersion": 1, + "metadata": { + "plugin": "multi-properties", + "version": "1.0.0", + "title": "Multi Properties", + "description": "Multi Properties Localization & Tweaks", + "language": "zh-cn", + "supportedVersions": "1.4.0", + "author": "" + }, + "dict": { + "main.js": { + "ast": [ + { + "type": "AssignmentExpression", + "name": "nodeValue", + "source": "How to alter props that already exist on notes. ", + "target": "如何修改笔记中已存在的属性。" + }, + { + "type": "AssignmentExpression", + "name": "title", + "source": "Add props to file.", + "target": "向文件添加属性。" + }, + { + "type": "AssignmentExpression", + "name": "title", + "source": "Add props to folder.", + "target": "向文件夹添加属性。" + }, + { + "type": "CallExpression", + "name": "addOption", + "source": "Ignore prop", + "target": "忽略属性" + }, + { + "type": "CallExpression", + "name": "addOption", + "source": "Append to prop", + "target": "追加到属性" + }, + { + "type": "CallExpression", + "name": "addOption", + "source": "Overwrite prop", + "target": "覆盖属性" + }, + { + "type": "CallExpression", + "name": "setDesc", + "source": "Determine what to do when a property with the same name already exists in a file. Note that incompatible types cannot be appended.(adding a number to a date)", + "target": "当文件中已存在同名属性时,确定要执行的操作。注意,不兼容的类型无法追加。(例如将数字添加到日期)" + }, + { + "type": "CallExpression", + "name": "setDesc", + "source": "When toggled on, while looping through all files in a folder, you will also loop through any sub-folders.", + "target": "启用后,在遍历文件夹中的所有文件时,也会遍历任何子文件夹。" + }, + { + "type": "CallExpression", + "name": "setDesc", + "source": "Set delimiter to use when creating a list. Commas(,) are used by default.", + "target": "设置创建列表时使用的分隔符。默认使用逗号(,)。" + }, + { + "type": "CallExpression", + "name": "setName", + "source": "How to alter existing properties.", + "target": "如何修改现有属性。" + }, + { + "type": "CallExpression", + "name": "setName", + "source": "Recursive Iteration", + "target": "递归迭代" + }, + { + "type": "CallExpression", + "name": "setName", + "source": "List Delimiter", + "target": "列表分隔符" + }, + { + "type": "CallExpression", + "name": "setName", + "source": "Default Props File", + "target": "默认 Props 文件" + }, + { + "type": "CallExpression", + "name": "setTitle", + "source": "Add props from all tabs", + "target": "从所有选项卡添加 props" + }, + { + "type": "CallExpression", + "name": "setTitle", + "source": "Add props to selected files", + "target": "向选定文件添加 props" + }, + { + "type": "CallExpression", + "name": "setTitle", + "source": "Add props to search results", + "target": "向搜索结果添加 props" + }, + { + "type": "CallExpression", + "name": "warn", + "source": "%c[svelte] lifecycle_double_unmount\n%cTried to unmount a component that was not mounted\nhttps://svelte.dev/e/lifecycle_double_unmount", + "target": "%c[svelte] lifecycle_double_unmount\n%c尝试卸载一个未挂载的组件\nhttps://svelte.dev/e/lifecycle_double_unmount" + }, + { + "type": "CallExpression", + "name": "warn", + "source": "%c[svelte] state_proxy_unmount\n%cTried to unmount a state proxy, rather than a component\nhttps://svelte.dev/e/state_proxy_unmount", + "target": "%c[svelte] state_proxy_unmount\n%c尝试卸载状态代理,而不是组件\nhttps://svelte.dev/e/state_proxy_unmount" + }, + { + "type": "CallExpression", + "name": "warn", + "source": "%c[svelte] svelte_boundary_reset_noop\n%cA \\`\\` \\`reset\\` function only resets the boundary the first time it is called\nhttps://svelte.dev/e/svelte_boundary_reset_noop", + "target": "%c[svelte] svelte_boundary_reset_noop\n%c\\`\\` 的 \\`reset\\` 函数只在首次调用时重置边界\nhttps://svelte.dev/e/svelte_boundary_reset_noop" + }, + { + "type": "CallExpression", + "name": "warn", + "source": "Failed to hydrate: ", + "target": "水合失败:" + }, + { + "type": "NewExpression", + "name": "Notice", + "source": "Delimiter must be a single character.", + "target": "分隔符必须是单个字符。" + }, + { + "type": "NewExpression", + "name": "Notice", + "source": "No active file to add properties to.", + "target": "没有可添加属性的活动文件。" + }, + { + "type": "NewExpression", + "name": "Notice", + "source": "No open tabs in the active tab group to add properties to.", + "target": "活动标签组中没有可添加属性的打开标签页。" + }, + { + "type": "NewExpression", + "name": "Notice", + "source": "No files to add properties to.", + "target": "没有可添加属性的文件。" + }, + { + "type": "ObjectProperty", + "name": "name", + "source": "Add props to current note", + "target": "将属性添加到当前笔记" + }, + { + "type": "ObjectProperty", + "name": "name", + "source": "Add props to tabs in active tab group", + "target": "将属性添加到活动标签组中的标签页" + }, + { + "type": "ObjectProperty", + "name": "text", + "source": "Add Properties", + "target": "添加属性" + } + ], + "regex": [] + } + } +} \ No newline at end of file diff --git a/.obsidian/plugins/multi-properties/data.json b/.obsidian/plugins/multi-properties/data.json index bb2689f..8560943 100644 --- a/.obsidian/plugins/multi-properties/data.json +++ b/.obsidian/plugins/multi-properties/data.json @@ -1,6 +1,7 @@ { - "overwrite": false, + "alterProp": "ignore", "recursive": true, "delimiter": ",", - "defaultPropPath": "" + "defaultPropPath": "/Template/Autoadd", + "overwrite": false } \ No newline at end of file diff --git a/.obsidian/plugins/multi-properties/main.js b/.obsidian/plugins/multi-properties/main.js index cec1e28..05e75e1 100644 --- a/.obsidian/plugins/multi-properties/main.js +++ b/.obsidian/plugins/multi-properties/main.js @@ -1,6470 +1,53 @@ -/* -THIS IS A GENERATED/BUNDLED FILE BY ESBUILD -if you want to view the source, please visit the github repository of this plugin -*/ - -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key2 of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key2) && key2 !== except) - __defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable }); - } - return to; -}; -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); - -// src/main.ts -var main_exports = {}; -__export(main_exports, { - default: () => MultiPropPlugin2 -}); -module.exports = __toCommonJS(main_exports); -var import_obsidian7 = require("obsidian"); - -// src/AddPropModal.ts -var import_obsidian2 = require("obsidian"); - -// node_modules/esm-env/dev-fallback.js -var node_env = globalThis.process?.env?.NODE_ENV; -var dev_fallback_default = node_env && !node_env.toLowerCase().startsWith("prod"); - -// node_modules/svelte/src/internal/shared/utils.js -var is_array = Array.isArray; -var index_of = Array.prototype.indexOf; -var array_from = Array.from; -var object_keys = Object.keys; -var define_property = Object.defineProperty; -var get_descriptor = Object.getOwnPropertyDescriptor; -var get_descriptors = Object.getOwnPropertyDescriptors; -var object_prototype = Object.prototype; -var array_prototype = Array.prototype; -var get_prototype_of = Object.getPrototypeOf; -var is_extensible = Object.isExtensible; -function run_all(arr) { - for (var i = 0; i < arr.length; i++) { - arr[i](); - } -} -function deferred() { - var resolve; - var reject; - var promise = new Promise((res, rej) => { - resolve = res; - reject = rej; - }); - return { promise, resolve, reject }; -} -function to_array(value, n) { - if (Array.isArray(value)) { - return value; - } - if (n === void 0 || !(Symbol.iterator in value)) { - return Array.from(value); - } - const array = []; - for (const element2 of value) { - array.push(element2); - if (array.length === n) break; - } - return array; -} - -// node_modules/svelte/src/internal/client/constants.js -var DERIVED = 1 << 1; -var EFFECT = 1 << 2; -var RENDER_EFFECT = 1 << 3; -var MANAGED_EFFECT = 1 << 24; -var BLOCK_EFFECT = 1 << 4; -var BRANCH_EFFECT = 1 << 5; -var ROOT_EFFECT = 1 << 6; -var BOUNDARY_EFFECT = 1 << 7; -var CONNECTED = 1 << 9; -var CLEAN = 1 << 10; -var DIRTY = 1 << 11; -var MAYBE_DIRTY = 1 << 12; -var INERT = 1 << 13; -var DESTROYED = 1 << 14; -var EFFECT_RAN = 1 << 15; -var EFFECT_TRANSPARENT = 1 << 16; -var EAGER_EFFECT = 1 << 17; -var HEAD_EFFECT = 1 << 18; -var EFFECT_PRESERVED = 1 << 19; -var USER_EFFECT = 1 << 20; -var EFFECT_OFFSCREEN = 1 << 25; -var WAS_MARKED = 1 << 15; -var REACTION_IS_UPDATING = 1 << 21; -var ASYNC = 1 << 22; -var ERROR_VALUE = 1 << 23; -var STATE_SYMBOL = Symbol("$state"); -var LEGACY_PROPS = Symbol("legacy props"); -var LOADING_ATTR_SYMBOL = Symbol(""); -var PROXY_PATH_SYMBOL = Symbol("proxy path"); -var STALE_REACTION = new class StaleReactionError extends Error { - name = "StaleReactionError"; - message = "The reaction that called `getAbortSignal()` was re-run or destroyed"; -}(); -var TEXT_NODE = 3; -var COMMENT_NODE = 8; - -// node_modules/svelte/src/internal/shared/errors.js -function lifecycle_outside_component(name) { - if (dev_fallback_default) { - const error = new Error(`lifecycle_outside_component +var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from==="object"||typeof from==="function"){for(let key2 of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key2)&&key2!==except)__defProp(to,key2,{get:()=>from[key2],enumerable:!(desc=__getOwnPropDesc(from,key2))||desc.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:true}),mod);var main_exports={};__export(main_exports,{default:()=>MultiPropPlugin2});module.exports=__toCommonJS(main_exports);var import_obsidian7=require("obsidian");var import_obsidian2=require("obsidian");var node_env=globalThis.process?.env?.NODE_ENV;var dev_fallback_default=node_env&&!node_env.toLowerCase().startsWith("prod");var is_array=Array.isArray;var index_of=Array.prototype.indexOf;var array_from=Array.from;var object_keys=Object.keys;var define_property=Object.defineProperty;var get_descriptor=Object.getOwnPropertyDescriptor;var get_descriptors=Object.getOwnPropertyDescriptors;var object_prototype=Object.prototype;var array_prototype=Array.prototype;var get_prototype_of=Object.getPrototypeOf;var is_extensible=Object.isExtensible;function run_all(arr){for(var i=0;i{resolve=res;reject=rej});return{promise,resolve,reject}}function to_array(value,n){if(Array.isArray(value)){return value}if(n===void 0||!(Symbol.iterator in value)){return Array.from(value)}const array=[];for(const element2 of value){array.push(element2);if(array.length===n)break}return array}var DERIVED=1<<1;var EFFECT=1<<2;var RENDER_EFFECT=1<<3;var MANAGED_EFFECT=1<<24;var BLOCK_EFFECT=1<<4;var BRANCH_EFFECT=1<<5;var ROOT_EFFECT=1<<6;var BOUNDARY_EFFECT=1<<7;var CONNECTED=1<<9;var CLEAN=1<<10;var DIRTY=1<<11;var MAYBE_DIRTY=1<<12;var INERT=1<<13;var DESTROYED=1<<14;var EFFECT_RAN=1<<15;var EFFECT_TRANSPARENT=1<<16;var EAGER_EFFECT=1<<17;var HEAD_EFFECT=1<<18;var EFFECT_PRESERVED=1<<19;var USER_EFFECT=1<<20;var EFFECT_OFFSCREEN=1<<25;var WAS_MARKED=1<<15;var REACTION_IS_UPDATING=1<<21;var ASYNC=1<<22;var ERROR_VALUE=1<<23;var STATE_SYMBOL=Symbol("$state");var LEGACY_PROPS=Symbol("legacy props");var LOADING_ATTR_SYMBOL=Symbol("");var PROXY_PATH_SYMBOL=Symbol("proxy path");var STALE_REACTION=new class StaleReactionError extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"};var TEXT_NODE=3;var COMMENT_NODE=8;function lifecycle_outside_component(name){if(dev_fallback_default){const error=new Error(`lifecycle_outside_component \`${name}(...)\` can only be used during component initialisation -https://svelte.dev/e/lifecycle_outside_component`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/lifecycle_outside_component`); - } -} - -// node_modules/svelte/src/internal/client/errors.js -function async_derived_orphan() { - if (dev_fallback_default) { - const error = new Error(`async_derived_orphan +https://svelte.dev/e/lifecycle_outside_component`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/lifecycle_outside_component`)}}function async_derived_orphan(){if(dev_fallback_default){const error=new Error(`async_derived_orphan Cannot create a \`$derived(...)\` with an \`await\` expression outside of an effect tree -https://svelte.dev/e/async_derived_orphan`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/async_derived_orphan`); - } -} -function bind_invalid_checkbox_value() { - if (dev_fallback_default) { - const error = new Error(`bind_invalid_checkbox_value +https://svelte.dev/e/async_derived_orphan`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/async_derived_orphan`)}}function bind_invalid_checkbox_value(){if(dev_fallback_default){const error=new Error(`bind_invalid_checkbox_value Using \`bind:value\` together with a checkbox input is not allowed. Use \`bind:checked\` instead -https://svelte.dev/e/bind_invalid_checkbox_value`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/bind_invalid_checkbox_value`); - } -} -function derived_references_self() { - if (dev_fallback_default) { - const error = new Error(`derived_references_self +https://svelte.dev/e/bind_invalid_checkbox_value`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/bind_invalid_checkbox_value`)}}function derived_references_self(){if(dev_fallback_default){const error=new Error(`derived_references_self A derived value cannot reference itself recursively -https://svelte.dev/e/derived_references_self`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/derived_references_self`); - } -} -function effect_in_teardown(rune) { - if (dev_fallback_default) { - const error = new Error(`effect_in_teardown +https://svelte.dev/e/derived_references_self`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/derived_references_self`)}}function effect_in_teardown(rune){if(dev_fallback_default){const error=new Error(`effect_in_teardown \`${rune}\` cannot be used inside an effect cleanup function -https://svelte.dev/e/effect_in_teardown`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/effect_in_teardown`); - } -} -function effect_in_unowned_derived() { - if (dev_fallback_default) { - const error = new Error(`effect_in_unowned_derived +https://svelte.dev/e/effect_in_teardown`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/effect_in_teardown`)}}function effect_in_unowned_derived(){if(dev_fallback_default){const error=new Error(`effect_in_unowned_derived Effect cannot be created inside a \`$derived\` value that was not itself created inside an effect -https://svelte.dev/e/effect_in_unowned_derived`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`); - } -} -function effect_orphan(rune) { - if (dev_fallback_default) { - const error = new Error(`effect_orphan +https://svelte.dev/e/effect_in_unowned_derived`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`)}}function effect_orphan(rune){if(dev_fallback_default){const error=new Error(`effect_orphan \`${rune}\` can only be used inside an effect (e.g. during component initialisation) -https://svelte.dev/e/effect_orphan`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/effect_orphan`); - } -} -function effect_update_depth_exceeded() { - if (dev_fallback_default) { - const error = new Error(`effect_update_depth_exceeded +https://svelte.dev/e/effect_orphan`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/effect_orphan`)}}function effect_update_depth_exceeded(){if(dev_fallback_default){const error=new Error(`effect_update_depth_exceeded Maximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state -https://svelte.dev/e/effect_update_depth_exceeded`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`); - } -} -function hydration_failed() { - if (dev_fallback_default) { - const error = new Error(`hydration_failed +https://svelte.dev/e/effect_update_depth_exceeded`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`)}}function hydration_failed(){if(dev_fallback_default){const error=new Error(`hydration_failed Failed to hydrate the application -https://svelte.dev/e/hydration_failed`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/hydration_failed`); - } -} -function props_invalid_value(key2) { - if (dev_fallback_default) { - const error = new Error(`props_invalid_value +https://svelte.dev/e/hydration_failed`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/hydration_failed`)}}function props_invalid_value(key2){if(dev_fallback_default){const error=new Error(`props_invalid_value Cannot do \`bind:${key2}={undefined}\` when \`${key2}\` has a fallback value -https://svelte.dev/e/props_invalid_value`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/props_invalid_value`); - } -} -function rune_outside_svelte(rune) { - if (dev_fallback_default) { - const error = new Error(`rune_outside_svelte +https://svelte.dev/e/props_invalid_value`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/props_invalid_value`)}}function rune_outside_svelte(rune){if(dev_fallback_default){const error=new Error(`rune_outside_svelte The \`${rune}\` rune is only available inside \`.svelte\` and \`.svelte.js/ts\` files -https://svelte.dev/e/rune_outside_svelte`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/rune_outside_svelte`); - } -} -function state_descriptors_fixed() { - if (dev_fallback_default) { - const error = new Error(`state_descriptors_fixed +https://svelte.dev/e/rune_outside_svelte`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/rune_outside_svelte`)}}function state_descriptors_fixed(){if(dev_fallback_default){const error=new Error(`state_descriptors_fixed Property descriptors defined on \`$state\` objects must contain \`value\` and always be \`enumerable\`, \`configurable\` and \`writable\`. -https://svelte.dev/e/state_descriptors_fixed`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/state_descriptors_fixed`); - } -} -function state_prototype_fixed() { - if (dev_fallback_default) { - const error = new Error(`state_prototype_fixed +https://svelte.dev/e/state_descriptors_fixed`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/state_descriptors_fixed`)}}function state_prototype_fixed(){if(dev_fallback_default){const error=new Error(`state_prototype_fixed Cannot set prototype of \`$state\` object -https://svelte.dev/e/state_prototype_fixed`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/state_prototype_fixed`); - } -} -function state_unsafe_mutation() { - if (dev_fallback_default) { - const error = new Error(`state_unsafe_mutation +https://svelte.dev/e/state_prototype_fixed`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/state_prototype_fixed`)}}function state_unsafe_mutation(){if(dev_fallback_default){const error=new Error(`state_unsafe_mutation Updating state inside \`$derived(...)\`, \`$inspect(...)\` or a template expression is forbidden. If the value should not be reactive, declare it without \`$state\` -https://svelte.dev/e/state_unsafe_mutation`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/state_unsafe_mutation`); - } -} -function svelte_boundary_reset_onerror() { - if (dev_fallback_default) { - const error = new Error(`svelte_boundary_reset_onerror +https://svelte.dev/e/state_unsafe_mutation`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/state_unsafe_mutation`)}}function svelte_boundary_reset_onerror(){if(dev_fallback_default){const error=new Error(`svelte_boundary_reset_onerror A \`\` \`reset\` function cannot be called while an error is still being handled -https://svelte.dev/e/svelte_boundary_reset_onerror`); - error.name = "Svelte error"; - throw error; - } else { - throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`); - } -} - -// node_modules/svelte/src/constants.js -var EACH_ITEM_REACTIVE = 1; -var EACH_INDEX_REACTIVE = 1 << 1; -var EACH_IS_CONTROLLED = 1 << 2; -var EACH_IS_ANIMATED = 1 << 3; -var EACH_ITEM_IMMUTABLE = 1 << 4; -var PROPS_IS_IMMUTABLE = 1; -var PROPS_IS_RUNES = 1 << 1; -var PROPS_IS_UPDATED = 1 << 2; -var PROPS_IS_BINDABLE = 1 << 3; -var PROPS_IS_LAZY_INITIAL = 1 << 4; -var TRANSITION_OUT = 1 << 1; -var TRANSITION_GLOBAL = 1 << 2; -var TEMPLATE_FRAGMENT = 1; -var TEMPLATE_USE_IMPORT_NODE = 1 << 1; -var TEMPLATE_USE_SVG = 1 << 2; -var TEMPLATE_USE_MATHML = 1 << 3; -var HYDRATION_START = "["; -var HYDRATION_START_ELSE = "[!"; -var HYDRATION_END = "]"; -var HYDRATION_ERROR = {}; -var ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1; -var ELEMENT_IS_INPUT = 1 << 2; -var UNINITIALIZED = Symbol(); -var FILENAME = Symbol("filename"); -var HMR = Symbol("hmr"); -var NAMESPACE_HTML = "http://www.w3.org/1999/xhtml"; - -// node_modules/svelte/src/internal/client/warnings.js -var bold = "font-weight: bold"; -var normal = "font-weight: normal"; -function await_waterfall(name, location) { - if (dev_fallback_default) { - console.warn(`%c[svelte] await_waterfall +https://svelte.dev/e/svelte_boundary_reset_onerror`);error.name="Svelte error";throw error}else{throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`)}}var EACH_ITEM_REACTIVE=1;var EACH_INDEX_REACTIVE=1<<1;var EACH_IS_CONTROLLED=1<<2;var EACH_IS_ANIMATED=1<<3;var EACH_ITEM_IMMUTABLE=1<<4;var PROPS_IS_IMMUTABLE=1;var PROPS_IS_RUNES=1<<1;var PROPS_IS_UPDATED=1<<2;var PROPS_IS_BINDABLE=1<<3;var PROPS_IS_LAZY_INITIAL=1<<4;var TRANSITION_OUT=1<<1;var TRANSITION_GLOBAL=1<<2;var TEMPLATE_FRAGMENT=1;var TEMPLATE_USE_IMPORT_NODE=1<<1;var TEMPLATE_USE_SVG=1<<2;var TEMPLATE_USE_MATHML=1<<3;var HYDRATION_START="[";var HYDRATION_START_ELSE="[!";var HYDRATION_END="]";var HYDRATION_ERROR={};var ELEMENT_PRESERVE_ATTRIBUTE_CASE=1<<1;var ELEMENT_IS_INPUT=1<<2;var UNINITIALIZED=Symbol();var FILENAME=Symbol("filename");var HMR=Symbol("hmr");var NAMESPACE_HTML="http://www.w3.org/1999/xhtml";var bold="font-weight: bold";var normal="font-weight: normal";function await_waterfall(name,location){if(dev_fallback_default){console.warn(`%c[svelte] await_waterfall %cAn async derived, \`${name}\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app -https://svelte.dev/e/await_waterfall`, bold, normal); - } else { - console.warn(`https://svelte.dev/e/await_waterfall`); - } -} -function hydration_attribute_changed(attribute, html2, value) { - if (dev_fallback_default) { - console.warn(`%c[svelte] hydration_attribute_changed +https://svelte.dev/e/await_waterfall`,bold,normal)}else{console.warn(`https://svelte.dev/e/await_waterfall`)}}function hydration_attribute_changed(attribute,html2,value){if(dev_fallback_default){console.warn(`%c[svelte] hydration_attribute_changed %cThe \`${attribute}\` attribute on \`${html2}\` changed its value between server and client renders. The client value, \`${value}\`, will be ignored in favour of the server value -https://svelte.dev/e/hydration_attribute_changed`, bold, normal); - } else { - console.warn(`https://svelte.dev/e/hydration_attribute_changed`); - } -} -function hydration_mismatch(location) { - if (dev_fallback_default) { - console.warn( - `%c[svelte] hydration_mismatch -%c${location ? `Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}` : "Hydration failed because the initial UI does not match what was rendered on the server"} -https://svelte.dev/e/hydration_mismatch`, - bold, - normal - ); - } else { - console.warn(`https://svelte.dev/e/hydration_mismatch`); - } -} -function lifecycle_double_unmount() { - if (dev_fallback_default) { - console.warn(`%c[svelte] lifecycle_double_unmount -%cTried to unmount a component that was not mounted -https://svelte.dev/e/lifecycle_double_unmount`, bold, normal); - } else { - console.warn(`https://svelte.dev/e/lifecycle_double_unmount`); - } -} -function select_multiple_invalid_value() { - if (dev_fallback_default) { - console.warn(`%c[svelte] select_multiple_invalid_value +https://svelte.dev/e/hydration_attribute_changed`,bold,normal)}else{console.warn(`https://svelte.dev/e/hydration_attribute_changed`)}}function hydration_mismatch(location){if(dev_fallback_default){console.warn(`%c[svelte] hydration_mismatch +%c${location?`Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}`:"Hydration failed because the initial UI does not match what was rendered on the server"} +https://svelte.dev/e/hydration_mismatch`,bold,normal)}else{console.warn(`https://svelte.dev/e/hydration_mismatch`)}}function lifecycle_double_unmount(){if(dev_fallback_default){console.warn(`%c[svelte] lifecycle_double_unmount +%c尝试卸载一个未挂载的组件 +https://svelte.dev/e/lifecycle_double_unmount`,bold,normal)}else{console.warn(`https://svelte.dev/e/lifecycle_double_unmount`)}}function select_multiple_invalid_value(){if(dev_fallback_default){console.warn(`%c[svelte] select_multiple_invalid_value %cThe \`value\` property of a \` `); -var $$css = { - hash: "svelte-1jh3cip", - code: "input.svelte-1jh3cip {max-height:25px;overflow-x:auto;}select.svelte-1jh3cip {height:21px;}#name-input.svelte-1jh3cip {flex-grow:0;width:auto;}.modal-input-container.svelte-1jh3cip {width:95%;display:flex;flex-direction:row;align-items:center;gap:10px;margin-top:10px;}.btn-inactive.svelte-1jh3cip {cursor:not-allowed;pointer-events:none;opacity:0.7;}" -}; -function AddPropInput($$anchor, $$props) { - push($$props, true); - append_styles($$anchor, $$css); - let totalInputs = prop($$props, "totalInputs", 11, 0), typeVal = prop($$props, "typeVal", 11, "text"), nameVal = prop($$props, "nameVal", 15, ""), valueVal = prop($$props, "valueVal", 15, ""); - let inputEl = state(proxy(document.createElement("input"))); - let valueEl = state(proxy(document.createElement("input"))); - const options = { - Text: "string", - Number: "number", - Checkbox: "checkbox", - Date: "date", - Datetime: "datetime-local" - }; - const convertProps = { - text: "Text", - multitext: "Text", - tags: "Text", - aliases: "Text", - number: "Number", - checkbox: "Checkbox", - date: "Date", - datetime: "Datetime" - }; - let optionVal = state(proxy(options[convertProps[typeVal()]])); - onMount(() => __awaiter(void 0, void 0, void 0, function* () { - yield tick(); - get(inputEl).focus(); - get(inputEl).select(); - set( - optionVal, - options[convertProps[typeVal()]], - //Load default type. - true - ); - if (typeVal() !== "text") changeType(get(optionVal)); - })); - function changeType(type) { - get(valueEl).type = type; - } - var div = root(); - var a = child(div); - a.__click = () => { - if (totalInputs() <= 1) return; - $$props.removeInput($$props.id); - }; - var select = sibling(a, 2); - select.__change = () => changeType(get(optionVal)); - each(select, 21, () => Object.keys(options), index, ($$anchor2, key2) => { - var option = root_1(); - var text2 = child(option, true); - reset(option); - var option_value = {}; - template_effect(() => { - set_text(text2, get(key2)); - if (option_value !== (option_value = options[get(key2)])) { - option.value = (option.__value = options[get(key2)]) ?? ""; - } - }); - append($$anchor2, option); - }); - reset(select); - var input = sibling(select, 2); - remove_input_defaults(input); - bind_this(input, ($$value) => set(inputEl, $$value), () => get(inputEl)); - var input_1 = sibling(input, 2); - remove_input_defaults(input_1); - bind_this(input_1, ($$value) => set(valueEl, $$value), () => get(valueEl)); - reset(div); - template_effect(() => { - set_class(a, 1, `btn-del ${totalInputs() <= 1 ? "btn-inactive" : ""}`, "svelte-1jh3cip"); - set_attribute2(a, "tabindex", totalInputs() <= 1 ? -1 : 0); - }); - bind_select_value(select, () => get(optionVal), ($$value) => set(optionVal, $$value)); - bind_value(input, nameVal); - bind_value(input_1, valueVal); - append($$anchor, div); - pop(); -} -delegate(["click", "change"]); - -// src/helpers.ts -function parseValue(input, type) { - switch (type) { - case "number": - return Number(input.value); - case "checkbox": - return Boolean(input.checked); - default: - return input.value; - } -} -function removeExtraCommas(str) { - return str.replace(/^,*(.*?),*$/g, "$1").replace(/,{2,}/g, ","); -} -function cleanTags(str) { - let cleanStr = str; - for (let index2 in KNOWN_BAD_CHARACTERS) { - cleanStr = cleanStr.replaceAll(KNOWN_BAD_CHARACTERS[index2], ""); - } - return cleanStr; -} -var KNOWN_BAD_CHARACTERS = [ - "\u2012", - "\u2013", - "\u2014", - "\u2015", - "\u204F", - "\u203D", - "\u2018", - "\u201A", - "\u201B", - "\u2039", - "\u203A", - "\u201C", - "\u201D", - "\u201E", - "\u201F", - "\u2045", - "\u2046", - "\u204B", - "\u204E", - "\u2051", - "\u2044", - "\u204A", - "\u2030", - "\u2031", - "\u2052", - "\u2020", - "\u2021", - "\u2022", - "\u2023", - "\u2043", - "\u204C", - "\u204D", - "\u2032", - "\u2035", - "\u2038", - "\u203B", - "\u2050", - "\u2041", - "\u2042", - "\u2016", - "\u2011", - "\u2033", - "\u2034", - "\u2057", - "\u2036", - "\u2037", - "`", - "^", - "\u203E", - "\u2017", - "\u2053", - ";", - ":", - "!", - "\u203C", - "\u2049", - "?", - "\u2048", - "\u2047", - ".", - "\u2024", - "\u2025", - "\u2026", - "'", - '"', - "(", - ")", - "[", - "]", - "{", - "}", - "@", - "*", - "&", - "%", - "\u2054", - "+", - "<", - "=", - ">", - "|", - "~", - "$", - "\u2055", - "\u2056", - "\u2058", - "\u2059", - "\u205A", - "\u205B", - "\u205C", - "\u205D", - "\u205E", - "\u2E00", - "\u2E01", - "\u2E02", - "\u2E03", - "\u2E04", - "\u2E05", - "\u2E06", - "\u2E07", - "\u2E08", - "\u2E09", - "\u2E0A", - "\u2E0B", - "\u2E0C", - "\u2E0D", - "\u2E0E", - "\u2E0F", - "\u2E10", - "\u2E11", - "\u2E12", - "\u2E13", - "\u2E14", - "\u2E15", - "\u2E16", - "\u2E17", - "\u2E1C", - "\u2E1D", - " ", - "#" -]; - -// src/AddPropForm.svelte -var root_12 = from_html(``); -var root2 = from_html(``); -var $$css2 = { - hash: "svelte-18exwij", - code: ".modal-inputs-container.svelte-18exwij {height:200px;width:100%;overflow-y:scroll;border-radius:5px;border-style:solid;display:flex;flex-direction:column;align-items:center;}.modal-add-container.svelte-18exwij {margin-top:10px;}.alert-container.svelte-18exwij {display:flex;flex-direction:column;align-items:center;justify-content:center;margin-bottom:10px;background-color:red;font-weight:bold;}.suggested-props.svelte-18exwij {overflow-y:scroll;max-height:100px;}.hidden.svelte-18exwij {display:none;}" -}; -function AddPropForm($$anchor, $$props) { - push($$props, true); - append_styles($$anchor, $$css2); - let alterProp = prop($$props, "alterProp", 15); - let countInputs = 0; - let formEl = state(proxy(document.createElement("form"))); - let errorEl = state(proxy(document.createElement("div"))); - let alertText = state("."); - let inputEls = state(proxy([])); - function onDropdownChange(newSetting) { - $$props.changeSetting(newSetting); - } - onMount(() => { - $$props.defaultProps.length > 0 ? addInputs($$props.defaultProps) : addInputs([{ type: "text", name: "", value: "" }]); - }); - function addInputs(inputs = [{ type: "text", name: "", value: "" }]) { - let arr = []; - for (let input of inputs) { - countInputs++; - arr.push({ - id: countInputs, - totalInputs: countInputs, - typeDef: input.type, - nameDef: input.name, - valueDef: input.value - }); - } - set(inputEls, [...get(inputEls), ...arr], true); - } - function removeInput(id) { - return __awaiter(this, void 0, void 0, function* () { - set(inputEls, get(inputEls).filter((input) => input.id !== id), true); - yield tick(); - let inputs = get(formEl).querySelectorAll("input"); - if (!inputs) return; - inputs[inputs.length - 2].focus(); - }); - } - function addSuggested(prop2) { - if (!get(inputEls).find((el) => el.nameDef === prop2.name)) { - addInputs([{ type: prop2.widget, name: prop2.name, value: "" }]); - } - } - function checkDuplicateNames() { - let set2 = /* @__PURE__ */ new Set(); - for (let input of get(inputEls)) set2.add(input.nameDef); - if (set2.size < get(inputEls).length) return true; - else return false; - } - function runError(errorText) { - set(alertText, errorText, true); - get( - errorEl - //Should I have this error message fade away? - ).classList.remove("hidden"); - } - function onSubmit(e) { - e.preventDefault(); - if (checkDuplicateNames()) { - runError("Duplicate property names are not allowed."); - return; - } - let obj = /* @__PURE__ */ new Map(); - let inputs = get(formEl).querySelectorAll('input[name^="name[]"]'); - inputs.forEach((input) => { - var _a; - if (!(input.nextElementSibling instanceof HTMLInputElement)) return; - if (!(input.previousElementSibling instanceof HTMLSelectElement)) return; - if (!(input.previousElementSibling.children[0] instanceof HTMLOptionElement)) return; - let name = input.value; - if (name === "") { - input.reportValidity(); - return; - } - const selectEl = input.previousElementSibling; - const htmlType = selectEl.value; - const reverseOptions = { - string: "text", - number: "number", - checkbox: "checkbox", - date: "date", - "datetime-local": "datetime" - }; - const obsidianType = (_a = reverseOptions[htmlType]) !== null && _a !== void 0 ? _a : "text"; - let value = parseValue(input.nextElementSibling, input.nextElementSibling.type); - if (typeof value === "string") { - if (name === "tags") { - value = cleanTags(value); - } - if (typeof value === "string" && value.includes(",")) { - let str = removeExtraCommas(value); - value = str.split($$props.delimiter); - } - } - if (value === "") value = null; - let propObj = { - type: obsidianType, - data: value, - alterProp: alterProp(), - delimiter: $$props.delimiter - }; - obj.set(name, propObj); - }); - if (obj.size < inputs.length) return; - $$props.submission(obj); - } - var div = root2(); - var div_1 = child(div); - var div_2 = sibling(child(div_1), 2); - var text2 = child(div_2, true); - reset(div_2); - reset(div_1); - bind_this(div_1, ($$value) => set(errorEl, $$value), () => get(errorEl)); - var div_3 = sibling(div_1, 4); - each(div_3, 21, () => $$props.suggestedProps, index, ($$anchor2, prop2) => { - var button = root_12(); - button.__click = () => addSuggested(get(prop2)); - var text_1 = child(button, true); - reset(button); - template_effect(() => set_text(text_1, get(prop2).name)); - append($$anchor2, button); - }); - reset(div_3); - var p = sibling(div_3, 4); - var text_2 = child(p); - reset(p); - var form = sibling(p, 4); - var label = child(form); - var text_3 = child(label); - text_3.nodeValue = "How to alter props that already exist on notes. "; - var select = sibling(text_3); - select.__change = () => onDropdownChange(alterProp()); - var option = child(select); - option.value = option.__value = "ignore"; - var option_1 = sibling(option); - option_1.value = option_1.__value = "overwrite"; - var option_2 = sibling(option_1); - option_2.value = option_2.__value = "append"; - reset(select); - reset(label); - var div_4 = sibling(label, 2); - each(div_4, 21, () => get(inputEls), (input) => input.id, ($$anchor2, input, $$index_1) => { - AddPropInput($$anchor2, { - get id() { - return get(input).id; - }, - get totalInputs() { - return get(inputEls).length; - }, - removeInput, - get typeVal() { - return get(input).typeDef; - }, - set typeVal($$value) { - get(input).typeDef = $$value; - }, - get nameVal() { - return get(input).nameDef; - }, - set nameVal($$value) { - get(input).nameDef = $$value; - }, - get valueVal() { - return get(input).valueDef; - }, - set valueVal($$value) { - get(input).valueDef = $$value; - } - }); - }); - reset(div_4); - var div_5 = sibling(div_4, 2); - var button_1 = child(div_5); - button_1.__click = () => addInputs([{ type: "text", name: "", value: "" }]); - reset(div_5); - next(2); - reset(form); - bind_this(form, ($$value) => set(formEl, $$value), () => get(formEl)); - reset(div); - template_effect(() => { - set_text(text2, get(alertText)); - set_text(text_2, `If you want to make a List property, use the Text data type and separate - each value with a "${$$props.delimiter ?? ""}".`); - }); - event("submit", form, onSubmit); - bind_select_value(select, alterProp); - append($$anchor, div); - pop(); -} -delegate(["click", "change"]); - -// src/AddConfirmModal.ts -var import_obsidian = require("obsidian"); - -// src/AddConfirmForm.svelte -var root_13 = from_html(`
  • `); -var root3 = from_html(`

    以下属性将被添加:

      确认要继续执行吗?

      `); -var $$css3 = { - hash: "svelte-n0gky0", - code: ".msg.svelte-n0gky0 {font-weight:bold;padding-bottom:10px;}" -}; -function AddConfirmForm($$anchor, $$props) { - push($$props, true); - append_styles($$anchor, $$css3); - let btnCancel = state(null); - let msg = user_derived(() => createPropMsg($$props.alterProp)); - function createPropMsg(value) { - switch (value) { - case "ignore": - return "Any of these text props on existing notes will not be affected."; - case "append": - return "NOTE: Any pre-existing text props will have their values be appended to."; - case "overwrite": - return "WARNING: Any pre-existing text props will have their values overwritten."; - } - } - function onSubmit(e) { - e.preventDefault(); - $$props.submission(); - } - onMount(() => { - get(btnCancel) === null || get(btnCancel) === void 0 ? void 0 : get(btnCancel).focus(); - }); - var div = root3(); - var form = child(div); - var p = child(form); - var text2 = child(p, true); - reset(p); - var ul = sibling(p, 4); - each(ul, 21, () => [...$$props.newProps], index, ($$anchor2, $$item) => { - var $$array = user_derived(() => to_array(get($$item), 2)); - let propName = () => get($$array)[0]; - let prop2 = () => get($$array)[1]; - var li = root_13(); - var text_1 = child(li); - reset(li); - template_effect(() => set_text(text_1, `${propName() ?? ""}: ${prop2().data ?? ""}`)); - append($$anchor2, li); - }); - reset(ul); - var button = sibling(ul, 6); - button.__click = function(...$$args) { - $$props.cancel?.apply(this, $$args); - }; - bind_this(button, ($$value) => set(btnCancel, $$value), () => get(btnCancel)); - reset(form); - reset(div); - template_effect(() => set_text(text2, get(msg))); - event("submit", form, onSubmit); - append($$anchor, div); - pop(); -} -delegate(["click"]); - -// src/AddConfirmModal.ts -var AddConfirmModal = class extends import_obsidian.Modal { - constructor(app, props, alterProp, submission) { - super(app); - this.props = props; - this.alterProp = alterProp; - this.submission = submission; - } - onSubmit() { - this.submission(); - this.close(); - } - onCancel() { - this.close(); - } - onOpen() { - this.titleEl.createEl("h2", { text: "添加属性" }); - this.component = mount(AddConfirmForm, { - target: this.contentEl, - props: { - newProps: this.props, - alterProp: this.alterProp, - submission: this.onSubmit.bind(this), - cancel: this.onCancel.bind(this) - } - }); - } -}; - -// src/AddPropModal.ts -var PropModal = class extends import_obsidian2.Modal { - constructor(app, submission, alterProp, delimiter, defaultProps, changeSetting, suggestedProps) { - super(app); - this.submission = submission; - this.alterProp = alterProp; - this.delimiter = delimiter; - this.defaultProps = defaultProps; - this.changeSetting = changeSetting; - this.suggestedProps = suggestedProps; - } - //Run form submission if user clicks confirm. - onConfirm() { - this.submission(this.props); - this.close(); - } - updateSetting(value) { - this.alterProp = value; - this.changeSetting(value); - } - //Pull up confirmation form when user submits base form. - onSubmit(props) { - this.props = props; - new AddConfirmModal( - this.app, - this.props, - this.alterProp, - this.onConfirm.bind(this) - ).open(); - } - onOpen() { - this.titleEl.createEl("h2", { text: "添加属性" }); - this.component = mount(AddPropForm, { - target: this.contentEl, - props: { - submission: this.onSubmit.bind(this), - alterProp: this.alterProp, - delimiter: this.delimiter, - defaultProps: this.defaultProps, - changeSetting: this.updateSetting.bind(this), - suggestedProps: this.suggestedProps - } - }); - } -}; - -// src/SettingTab.ts -var import_obsidian3 = require("obsidian"); -var SettingTab = class extends import_obsidian3.PluginSettingTab { - constructor(app, plugin) { - super(app, plugin); - this.plugin = plugin; - } - display() { - let { containerEl } = this; - containerEl.empty(); - new import_obsidian3.Setting(containerEl).setName("How to alter existing properties.").setDesc( - "Determine what to do when a property with the same name already exists in a file. Note that incompatible types cannot be appended.(adding a number to a date)" - ).addDropdown((dropdown) => { - dropdown.addOption("overwrite", "Overwrite prop").addOption("append", "Append to prop").addOption("ignore", "Ignore prop").setValue(this.plugin.settings.alterProp).onChange(async (value) => { - this.plugin.settings.alterProp = value; - await this.plugin.saveSettings(); - }); - }); - new import_obsidian3.Setting(containerEl).setName("递归迭代").setDesc( - "When toggled on, while looping through all files in a folder, you will also loop through any sub-folders." - ).addToggle((toggle) => { - toggle.setValue(this.plugin.settings.recursive); - toggle.onChange(async (value) => { - this.plugin.settings.recursive = value; - await this.plugin.saveSettings(); - }); - }); - new import_obsidian3.Setting(containerEl).setName("列表分隔符").setDesc( - "Set delimiter to use when creating a list. Commas(,) are used by default." - ).addText((text2) => { - text2.setValue(this.plugin.settings.delimiter); - text2.onChange(async (value) => { - if (value.length > 1) { - text2.setValue(value[0]); - new import_obsidian3.Notice("分隔符必须是单个字符。"); - return; - } - this.plugin.settings.delimiter = value; - await this.plugin.saveSettings(); - }); - }); - new import_obsidian3.Setting(containerEl).setName("默认属性文件").setDesc( - "选择一个包含属性的文件,该文件将默认载入多属性表单。请输入目标文件的完整路径。(例如:Templates/PropFile 1)" - ).addText((text2) => { - text2.setValue(this.plugin.settings.defaultPropPath); - text2.onChange(async (value) => { - this.plugin.settings.defaultPropPath = value; - await this.plugin.saveSettings(); - }); - }); - } -}; - -// src/RemoveModal.ts -var import_obsidian5 = require("obsidian"); - -// src/RemovePropForm.svelte -var root_14 = from_html(``); -var root4 = from_html(`

      从文件选择中勾选您希望移除的属性。

      `); -var $$css4 = { - hash: "svelte-1c8m26c", - code: ".name-container.svelte-1c8m26c {display:flex;flex-direction:column;gap:5px;margin-top:10px;margin-bottom:20px;}.alert-container.svelte-1c8m26c {display:flex;flex-direction:column;align-items:center;justify-content:center;margin-bottom:10px;background-color:red;font-weight:bold;}.button-container.svelte-1c8m26c {display:flex;flex-direction:row;justify-content:space-between;}.hidden.svelte-1c8m26c {display:none;}" -}; -function RemovePropForm($$anchor, $$props) { - push($$props, true); - append_styles($$anchor, $$css4); - let names = prop($$props, "names", 19, () => []); - let errorEl = state(null); - let alertText = state("."); - let checkCount = state(0); - let inputs = state(proxy([])); - user_effect(() => { - const sortedNames = [...names()].sort(); - set(inputs, sortedNames.map((name) => ({ name, isChecked: false })), true); - set(checkCount, 0); - }); - let isMaxChecked = user_derived(() => get(inputs).length > 0 && get(checkCount) >= get(inputs).length); - function onCheckboxChange(event2) { - const target = event2.currentTarget; - target.checked ? update(checkCount) : update(checkCount, -1); - } - function toggleAll() { - const shouldCheckAll = !get(isMaxChecked); - set(inputs, get(inputs).map((input) => Object.assign(Object.assign({}, input), { isChecked: shouldCheckAll })), true); - set(checkCount, shouldCheckAll ? get(inputs).length : 0, true); - } - function onSubmit(e) { - e.preventDefault(); - if (get(checkCount) === 0) { - set(alertText, "请至少选择一个要移除的属性。"); - get(errorEl) === null || get(errorEl) === void 0 ? void 0 : get(errorEl).classList.remove("hidden"); - return; - } - let propNames = get(inputs).filter((input) => input.isChecked).map((input) => input.name); - $$props.submission(propNames); - } - var div = root4(); - var div_1 = child(div); - var div_2 = sibling(child(div_1), 2); - var text2 = child(div_2, true); - reset(div_2); - reset(div_1); - bind_this(div_1, ($$value) => set(errorEl, $$value), () => get(errorEl)); - var form = sibling(div_1, 4); - var div_3 = child(form); - each(div_3, 21, () => get(inputs), (input) => input.name, ($$anchor2, input, $$index) => { - var label = root_14(); - var input_1 = child(label); - remove_input_defaults(input_1); - input_1.__change = (event2) => onCheckboxChange(event2); - var text_1 = sibling(input_1); - reset(label); - template_effect(() => set_text(text_1, ` ${get(input).name ?? ""}`)); - bind_checked(input_1, () => get(input).isChecked, ($$value) => get(input).isChecked = $$value); - append($$anchor2, label); - }); - reset(div_3); - var div_4 = sibling(div_3, 2); - var button = sibling(child(div_4), 2); - button.__click = toggleAll; - var text_2 = child(button, true); - reset(button); - reset(div_4); - reset(form); - reset(div); - template_effect(() => { - set_text(text2, get(alertText)); - set_text(text_2, get(isMaxChecked) ? "Uncheck All" : "Check All"); - }); - event("submit", form, onSubmit); - append($$anchor, div); - pop(); -} -delegate(["change", "click"]); - -// src/RemoveConfirmModal.ts -var import_obsidian4 = require("obsidian"); - -// src/RemoveConfirmForm.svelte -var root_15 = from_html(`
    • `); -var root5 = from_html(`

        确认要继续执行吗?

        `); -function RemoveConfirmForm($$anchor, $$props) { - push($$props, true); - let names = prop($$props, "names", 19, () => ["test", "test2"]); - let btnCancel = state(null); - let word = user_derived(() => names().length > 1 ? "properties" : "property"); - function onSubmit(e) { - e.preventDefault(); - $$props.submission(); - } - onMount(() => { - get(btnCancel) === null || get(btnCancel) === void 0 ? void 0 : get(btnCancel).focus(); - }); - var div = root5(); - var form = child(div); - var p = child(form); - var text2 = child(p); - reset(p); - var ul = sibling(p, 2); - each(ul, 21, names, index, ($$anchor2, name) => { - var li = root_15(); - var text_1 = child(li, true); - reset(li); - template_effect(() => set_text(text_1, get(name))); - append($$anchor2, li); - }); - reset(ul); - var button = sibling(ul, 6); - button.__click = function(...$$args) { - $$props.cancel?.apply(this, $$args); - }; - bind_this(button, ($$value) => set(btnCancel, $$value), () => get(btnCancel)); - reset(form); - reset(div); - template_effect(() => set_text(text2, `下列 ${get(word) ?? ""} 将被移除:`)); - event("submit", form, onSubmit); - append($$anchor, div); - pop(); -} -delegate(["click"]); - -// src/RemoveConfirmModal.ts -var RemoveConfirmModal = class extends import_obsidian4.Modal { - constructor(app, names, submission) { - super(app); - this.names = names; - this.submission = submission; - } - onSubmit() { - this.submission(); - this.close(); - } - onCancel() { - this.close(); - } - onOpen() { - if (!this.names || this.names.length === 0) { - new import_obsidian4.Notice("请检查至少一个要删除的属性。"); - this.close(); - } - this.titleEl.createEl("h2", { text: "移除属性" }); - this.component = mount(RemoveConfirmForm, { - target: this.contentEl, - props: { - names: this.names, - submission: this.onSubmit.bind(this), - cancel: this.onCancel.bind(this) - } - }); - } -}; - -// src/RemoveModal.ts -var RemoveModal = class extends import_obsidian5.Modal { - constructor(app, names, submission) { - if (!names || names.length === 0) { - new import_obsidian5.Notice("没有要删除的属性"); - return; - } - super(app); - this.names = names; - this.submission = submission; - } - onConfirm() { - this.submission(this.props); - this.close(); - } - onSubmit(props) { - this.props = props; - new RemoveConfirmModal( - this.app, - this.props, - this.onConfirm.bind(this) - ).open(); - } - onOpen() { - this.titleEl.createEl("h2", { text: "移除属性" }); - this.component = mount(RemovePropForm, { - target: this.contentEl, - props: { - names: this.names, - submission: this.onSubmit.bind(this) - } - }); - } -}; - -// src/frontmatter.ts -var import_obsidian6 = require("obsidian"); -async function addProperties(fileProcessor, file, props, alterProp, propCache) { - await fileProcessor(file, (frontmatter) => { - for (const [key2, value] of props) { - if (alterProp === "ignore" && frontmatter[key2]) { - continue; - } - if (key2 === "tags" && !frontmatter.hasOwnProperty("tags") && !Array.isArray(value.data)) { - frontmatter[key2] = [value.data]; - continue; - } - if (!frontmatter[key2] || alterProp === "overwrite") { - frontmatter[key2] = value.data; - continue; - } - let type1 = value.type; - let type2 = propCache[key2.toLowerCase()].widget; - if (canBeAppended(type1, type2)) { - if (frontmatter[key2] === value.data) continue; - if (!value.data) continue; - let arr = mergeIntoArrays(frontmatter[key2], value.data); - frontmatter[key2] = arr; - continue; - } else { - continue; - } - } - }); -} -async function addPropToSet(fileProcessor, set2, file) { - await fileProcessor(file, (frontmatter) => { - for (const key2 in frontmatter) { - set2.add(key2); - } - }); - return set2; -} -async function removeProperties(fileProcessor, file, props) { - await fileProcessor(file, (frontmatter) => { - for (const prop2 of props) { - frontmatter[prop2] = void 0; - } - }); -} -function canBeAppended(str1, str2) { - let arr = ["number", "date", "datetime", "checkbox"]; - if (arr.includes(str1) || arr.includes(str2)) return false; - return true; -} -function mergeIntoArrays(...args) { - const arrays = args.map((arg) => Array.isArray(arg) ? arg : [arg]); - const flattened = arrays.flat(); - const unique = [...new Set(flattened)]; - return unique; -} - -// src/main.ts -var defaultSettings = { - alterProp: "ignore", - recursive: true, - delimiter: ",", - defaultPropPath: "" -}; -var MultiPropPlugin2 = class extends import_obsidian7.Plugin { - async loadSettings() { - this.settings = Object.assign({}, defaultSettings, await this.loadData()); - } - async saveSettings() { - await this.saveData(this.settings); - } - async changeAlterProp(value) { - this.settings.alterProp = value; - await this.saveSettings(); - } - _getFilesFromTabGroup(leaf) { - if (!leaf) { - return []; - } - const files = []; - const fileSet = /* @__PURE__ */ new Set(); - const activeParent = leaf.parent; - if (activeParent instanceof import_obsidian7.WorkspaceTabs) { - this.app.workspace.iterateAllLeaves((l) => { - if (l.parent === activeParent && l.view instanceof import_obsidian7.FileView) { - const file = l.view.file; - if (file && !fileSet.has(file.path)) { - files.push(file); - fileSet.add(file.path); - } - } - }); - } else { - const activeWindowRoot = leaf.getRoot(); - this.app.workspace.iterateAllLeaves((l) => { - if (l.getRoot() === activeWindowRoot && l.view instanceof import_obsidian7.FileView) { - const file = l.view.file; - if (file && !fileSet.has(file.path)) { - files.push(file); - fileSet.add(file.path); - } - } - }); - } - return files; - } - async onload() { - await this.loadSettings(); - this.addSettingTab(new SettingTab(this.app, this)); - this.addCommand({ - id: "add-props-to-current-note", - name: "Add props to current note", - callback: async () => { - const file = this.app.workspace.getActiveFile(); - if (!file) { - new import_obsidian7.Notice("No active file to add properties to.", 4e3); - return; - } - await this.createPropModal([file]); - } - }); - this.registerEvent( - this.app.workspace.on("file-menu", (menu, node) => { - let title = ""; - let obj; - if (node instanceof import_obsidian7.TFile) { - obj = [node]; - title = "Add props to file."; - } else { - obj = node; - title = "Add props to folder."; - } - menu.addItem((item) => { - item.setIcon("archive").setTitle(title).onClick(() => this.createPropModal(obj)); - }); - }) - ); - this.addCommand({ - id: "remove-props-from-current-note", - name: "Remove props from current note", - callback: async () => { - const file = this.app.workspace.getActiveFile(); - if (!file) { - new import_obsidian7.Notice("No active file to remove properties from.", 4e3); - return; - } - await this.createRemoveModal([file]); - } - }); - this.registerEvent( - this.app.workspace.on("file-menu", (menu, node) => { - let title = ""; - let obj; - if (node instanceof import_obsidian7.TFile) { - obj = [node]; - title = "Remove props from file."; - } else { - obj = node; - title = "Remove props from folder."; - } - menu.addItem((item) => { - item.setIcon("archive").setTitle(title).onClick(() => this.createRemoveModal(obj)); - }); - }) - ); - this.addCommand({ - id: "add-props-to-tab-group", - name: "Add props to tabs in active tab group", - callback: async () => { - const files = this._getFilesFromTabGroup(this.app.workspace.activeLeaf); - if (!files || !files.length) { - new import_obsidian7.Notice( - "No open tabs in the active tab group to add properties to.", - 4e3 - ); - return; - } - await this.createPropModal(files); - } - }); - this.registerEvent( - this.app.workspace.on("tab-group-menu", (menu) => { - const obj = this._getFilesFromTabGroup( - this.app.workspace.getLeaf(false) - ); - menu.addItem((item) => { - item.setIcon("archive").setTitle("Add props from all tabs").onClick(() => this.createPropModal(obj)); - }); - }) - ); - this.addCommand({ - id: "remove-props-from-tab-group", - name: "Remove props from tabs in active tab group", - callback: async () => { - const files = this._getFilesFromTabGroup( - this.app.workspace.getLeaf(false) - ); - if (!files || !files.length) { - new import_obsidian7.Notice( - "No open tabs in the active tab group to remove properties from.", - 4e3 - ); - return; - } - await this.createRemoveModal(files); - } - }); - this.registerEvent( - this.app.workspace.on("tab-group-menu", (menu) => { - const obj = this._getFilesFromTabGroup( - this.app.workspace.getLeaf(false) - ); - menu.addItem((item) => { - item.setIcon("archive").setTitle("Remove props from all tabs").onClick(() => this.createRemoveModal(obj)); - }); - }) - ); - this.registerEvent( - this.app.workspace.on("files-menu", (menu, nodes) => { - let obj = nodes; - menu.addItem((item) => { - item.setIcon("archive").setTitle("向所选文件添加props").onClick(() => this.createPropModal(obj)); - }); - }) - ); - this.registerEvent( - this.app.workspace.on("files-menu", (menu, nodes) => { - let obj = nodes; - menu.addItem((item) => { - item.setIcon("archive").setTitle("从选定的文件中删除props").onClick(async () => this.createRemoveModal(obj)); - }); - }) - ); - this.registerEvent( - this.app.workspace.on("search:results-menu", (menu, leaf) => { - menu.addItem((item) => { - item.setIcon("archive").setTitle("在搜索结果中添加props").onClick(() => { - let files = this.getFilesFromSearch(leaf); - if (!files.length) { - new import_obsidian7.Notice("没有要添加属性的文件。", 4e3); - return; - } - this.createPropModal(files); - }); - }); - }) - ); - this.registerEvent( - this.app.workspace.on("search:results-menu", (menu, leaf) => { - menu.addItem((item) => { - item.setIcon("archive").setTitle("在搜索结果中移除props").onClick(async () => { - let files = this.getFilesFromSearch(leaf); - if (!files.length) { - new import_obsidian7.Notice("没有要从中删除属性的文件。", 4e3); - return; - } - this.createRemoveModal(files); - }); - }); - }) - ); - } - async getPropsFromFolder(iterable, names) { - let objs = iterable instanceof import_obsidian7.TFolder ? iterable.children : iterable; - for (let obj of objs) { - if (obj instanceof import_obsidian7.TFile && obj.extension === "md") { - names = await addPropToSet( - this.app.fileManager.processFrontMatter.bind(this.app.fileManager), - names, - obj - ); - } - if (obj instanceof import_obsidian7.TFolder) { - if (this.settings.recursive) { - await this.getPropsFromFolder(obj, names); - } - } - } - return [...names].sort(); - } - async getPropsFromFiles(files, names) { - for (let file of files) { - if (file instanceof import_obsidian7.TFile && file.extension === "md") { - names = await addPropToSet( - this.app.fileManager.processFrontMatter.bind(this.app.fileManager), - names, - file - ); - } - } - return [...names]; - } - /** Iterates through all files in a folder and runs callback on each file. */ - async searchFolders(iterable, callback) { - let objs = iterable instanceof import_obsidian7.TFolder ? iterable.children : iterable; - for (let obj of objs) { - if (obj instanceof import_obsidian7.TFolder) { - if (this.settings.recursive) { - await this.searchFolders(obj, callback); - } - } - if (obj instanceof import_obsidian7.TFile && obj.extension === "md") { - await callback(obj); - } - } - } - async searchFiles(files, callback) { - for (let file of files) { - if (file instanceof import_obsidian7.TFile && file.extension === "md") { - await callback(file); - } - } - } - getFilesFromSearch(leaf) { - let files = []; - leaf.dom.vChildren.children.forEach((e) => { - files.push(e.file); - }); - return files; - } - async createPropModal(iterable) { - let iterateFunc; - const allFiles = []; - this.searchFolders(iterable, async (f) => allFiles.push(f)); - iterateFunc = async (props) => this.searchFolders( - iterable, - await this.addPropsCallback(props, allFiles.length) - ); - let defaultProps; - defaultProps = this.loadDefaultProps(); - const allProps = this.getAllUsedProperties(); - new PropModal( - this.app, - iterateFunc, - this.settings.alterProp, - this.settings.delimiter, - defaultProps, - this.changeAlterProp.bind(this), - allProps - ).open(); - } - getAllUsedProperties() { - const allProps = this.app.metadataCache.getAllPropertyInfos(); - return Object.values(allProps).sort( - (a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()) - ); - } - /** Create modal for removing properties. - * Will create a different callback function depending on whether files or a folder is used. */ - async createRemoveModal(iterable) { - let names; - let iterateFunc; - names = await this.getPropsFromFolder(iterable, /* @__PURE__ */ new Set()); - const allFiles = []; - this.searchFolders(iterable, async (f) => allFiles.push(f)); - iterateFunc = (props) => this.searchFolders( - iterable, - this.removePropsCallback(props, allFiles.length) - ); - if (names.length === 0) { - new import_obsidian7.Notice("无属性可移除", 4e3); - return; - } - const sortedNames = [...names].sort( - (a, b) => a.toLowerCase() > b.toLowerCase() ? 1 : -1 - ); - new RemoveModal(this.app, sortedNames, iterateFunc).open(); - } - /** Read through a given file and get name/value of props. - * Revised from https://forum.obsidian.md/t/how-to-programmatically-access-a-files-properties-types/77826/4. - */ - readYamlProperties(file) { - const metadata = this.app.metadataCache.getFileCache(file); - const frontmatter = metadata?.frontmatter; - if (!frontmatter) { - new import_obsidian7.Notice("无效的属性模板。", 4e3); - return; - } - const allPropsWithType = this.app.metadataCache.getAllPropertyInfos(); - let result = []; - for (let [key2, value] of Object.entries(frontmatter)) { - const keyLower = key2.toLowerCase(); - const obj = { - name: key2, - value, - type: allPropsWithType[keyLower].widget - }; - result.push(obj); - } - return result; - } - loadDefaultProps() { - if (this.settings.defaultPropPath) { - try { - const file = this.app.vault.getAbstractFileByPath( - `${this.settings.defaultPropPath}.md` - ); - let tmp = this.readYamlProperties(file); - if (tmp === void 0) throw Error("Undefined path."); - return tmp; - } catch (e) { - new import_obsidian7.Notice( - `${e}. 请检查默认属性文件设置中输入的路径是否有效。`, - 1e4 - ); - } - } - return [{ name: "", value: "", type: "text" }]; - } - async addPropsCallback(props, totalFiles) { - const statusBarItem = this.addStatusBarItem(); - let count = 0; - return async (file) => { - await addProperties( - this.app.fileManager.processFrontMatter.bind(this.app.fileManager), - file, - props, - this.settings.alterProp, - this.app.metadataCache.getAllPropertyInfos() - ); - count++; - statusBarItem.setText( - "Added props to " + count + "/" + totalFiles + " files" - ); - if (count === totalFiles) { - setTimeout(() => { - statusBarItem.remove(); - }, 5e3); - } - }; - } - removePropsCallback(props, totalFiles) { - const statusBarItem = this.addStatusBarItem(); - let count = 0; - return async (file) => { - await removeProperties( - this.app.fileManager.processFrontMatter.bind(this.app.fileManager), - file, - props - ); - count++; - statusBarItem.setText( - "Removed props from " + count + "/" + totalFiles + " files" - ); - if (count === totalFiles) { - setTimeout(() => { - statusBarItem.remove(); - }, 5e3); - } - }; - } -}; - -/* nosourcemap */ \ No newline at end of file +`,stack:error.stack?.split("\n").filter(line=>!line.includes("svelte/src/internal")).join("\n")}}function apply_adjustments(error){const adjusted=adjustments.get(error);if(adjusted){define_property(error,"message",{value:adjusted.message});define_property(error,"stack",{value:adjusted.stack})}}var STATUS_MASK=~(DIRTY|MAYBE_DIRTY|CLEAN);function set_signal_status(signal,status){signal.f=signal.f&STATUS_MASK|status}function update_derived_status(derived2){if((derived2.f&CONNECTED)!==0||derived2.deps===null){set_signal_status(derived2,CLEAN)}else{set_signal_status(derived2,MAYBE_DIRTY)}}function clear_marked(deps){if(deps===null)return;for(const dep of deps){if((dep.f&DERIVED)===0||(dep.f&WAS_MARKED)===0){continue}dep.f^=WAS_MARKED;clear_marked(dep.deps)}}function defer_effect(effect2,dirty_effects,maybe_dirty_effects){if((effect2.f&DIRTY)!==0){dirty_effects.add(effect2)}else if((effect2.f&MAYBE_DIRTY)!==0){maybe_dirty_effects.add(effect2)}clear_marked(effect2.deps);set_signal_status(effect2,CLEAN)}var batches=new Set;var current_batch=null;var previous_batch=null;var batch_values=null;var queued_root_effects=[];var last_scheduled_effect=null;var is_flushing=false;var is_flushing_sync=false;var Batch=class _Batch{committed=false;current=new Map;previous=new Map;#commit_callbacks=new Set;#discard_callbacks=new Set;#pending=0;#blocking_pending=0;#deferred=null;#dirty_effects=new Set;#maybe_dirty_effects=new Set;skipped_effects=new Set;is_fork=false;is_deferred(){return this.is_fork||this.#blocking_pending>0}process(root_effects){queued_root_effects=[];previous_batch=null;this.apply();var effects=[];var render_effects=[];for(const root6 of root_effects){this.#traverse_effect_tree(root6,effects,render_effects)}if(!this.is_fork){this.#resolve()}if(this.is_deferred()){this.#defer_effects(render_effects);this.#defer_effects(effects)}else{previous_batch=this;current_batch=null;flush_queued_effects(render_effects);flush_queued_effects(effects);previous_batch=null;this.#deferred?.resolve()}batch_values=null}#traverse_effect_tree(root6,effects,render_effects){root6.f^=CLEAN;var effect2=root6.first;var pending_boundary=null;while(effect2!==null){var flags2=effect2.f;var is_branch=(flags2&(BRANCH_EFFECT|ROOT_EFFECT))!==0;var is_skippable_branch=is_branch&&(flags2&CLEAN)!==0;var skip=is_skippable_branch||(flags2&INERT)!==0||this.skipped_effects.has(effect2);if(async_mode_flag&&pending_boundary===null&&(flags2&BOUNDARY_EFFECT)!==0&&effect2.b?.is_pending){pending_boundary=effect2}if(!skip&&effect2.fn!==null){if(is_branch){effect2.f^=CLEAN}else if(pending_boundary!==null&&(flags2&(EFFECT|RENDER_EFFECT|MANAGED_EFFECT))!==0){pending_boundary.b.defer_effect(effect2)}else if((flags2&EFFECT)!==0){effects.push(effect2)}else if(async_mode_flag&&(flags2&(RENDER_EFFECT|MANAGED_EFFECT))!==0){render_effects.push(effect2)}else if(is_dirty(effect2)){if((flags2&BLOCK_EFFECT)!==0)this.#dirty_effects.add(effect2);update_effect(effect2)}var child2=effect2.first;if(child2!==null){effect2=child2;continue}}var parent=effect2.parent;effect2=effect2.next;while(effect2===null&&parent!==null){if(parent===pending_boundary){pending_boundary=null}effect2=parent.next;parent=parent.parent}}}#defer_effects(effects){for(var i=0;i0){flush_effects();if(current_batch!==null&¤t_batch!==this){return}}else if(this.#pending===0){this.process([])}this.deactivate()}discard(){for(const fn of this.#discard_callbacks)fn(this);this.#discard_callbacks.clear()}#resolve(){if(this.#blocking_pending===0){for(const fn of this.#commit_callbacks)fn();this.#commit_callbacks.clear()}if(this.#pending===0){this.#commit()}}#commit(){if(batches.size>1){this.previous.clear();var previous_batch_values=batch_values;var is_earlier=true;for(const batch of batches){if(batch===this){is_earlier=false;continue}const sources=[];for(const[source2,value]of this.current){if(batch.current.has(source2)){if(is_earlier&&value!==batch.current.get(source2)){batch.current.set(source2,value)}else{continue}}sources.push(source2)}if(sources.length===0){continue}const others=[...batch.current.keys()].filter(s=>!this.current.has(s));if(others.length>0){var prev_queued_root_effects=queued_root_effects;queued_root_effects=[];const marked=new Set;const checked=new Map;for(const source2 of sources){mark_effects(source2,others,marked,checked)}if(queued_root_effects.length>0){current_batch=batch;batch.apply();for(const root6 of queued_root_effects){batch.#traverse_effect_tree(root6,[],[])}batch.deactivate()}queued_root_effects=prev_queued_root_effects}}current_batch=null;batch_values=previous_batch_values}this.committed=true;batches.delete(this)}increment(blocking){this.#pending+=1;if(blocking)this.#blocking_pending+=1}decrement(blocking){this.#pending-=1;if(blocking)this.#blocking_pending-=1;this.revive()}revive(){for(const e of this.#dirty_effects){this.#maybe_dirty_effects.delete(e);set_signal_status(e,DIRTY);schedule_effect(e)}for(const e of this.#maybe_dirty_effects){set_signal_status(e,MAYBE_DIRTY);schedule_effect(e)}this.flush()}oncommit(fn){this.#commit_callbacks.add(fn)}ondiscard(fn){this.#discard_callbacks.add(fn)}settled(){return(this.#deferred??=deferred()).promise}static ensure(){if(current_batch===null){const batch=current_batch=new _Batch;batches.add(current_batch);if(!is_flushing_sync){_Batch.enqueue(()=>{if(current_batch!==batch){return}batch.flush()})}}return current_batch}static enqueue(task){queue_micro_task(task)}apply(){if(!async_mode_flag||!this.is_fork&&batches.size===1)return;batch_values=new Map(this.current);for(const batch of batches){if(batch===this)continue;for(const[source2,previous]of batch.previous){if(!batch_values.has(source2)){batch_values.set(source2,previous)}}}}};function flushSync(fn){var was_flushing_sync=is_flushing_sync;is_flushing_sync=true;try{var result;if(fn){if(current_batch!==null){flush_effects()}result=fn()}while(true){flush_tasks();if(queued_root_effects.length===0){current_batch?.flush();if(queued_root_effects.length===0){last_scheduled_effect=null;return result}}flush_effects()}}finally{is_flushing_sync=was_flushing_sync}}function flush_effects(){var was_updating_effect=is_updating_effect;is_flushing=true;var source_stacks=dev_fallback_default?new Set:null;try{var flush_count=0;set_is_updating_effect(true);while(queued_root_effects.length>0){var batch=Batch.ensure();if(flush_count++>1e3){if(dev_fallback_default){var updates=new Map;for(const source2 of batch.current.keys()){for(const[stack2,update2]of source2.updated??[]){var entry=updates.get(stack2);if(!entry){entry={error:update2.error,count:0};updates.set(stack2,entry)}entry.count+=update2.count}}for(const update2 of updates.values()){if(update2.error){console.error(update2.error)}}}infinite_loop_guard()}batch.process(queued_root_effects);old_values.clear();if(dev_fallback_default){for(const source2 of batch.current.keys()){source_stacks.add(source2)}}}}finally{is_flushing=false;set_is_updating_effect(was_updating_effect);last_scheduled_effect=null;if(dev_fallback_default){for(const source2 of source_stacks){source2.updated=null}}}}function infinite_loop_guard(){try{effect_update_depth_exceeded()}catch(error){if(dev_fallback_default){define_property(error,"stack",{value:""})}invoke_error_boundary(error,last_scheduled_effect)}}var eager_block_effects=null;function flush_queued_effects(effects){var length=effects.length;if(length===0)return;var i=0;while(i0){old_values.clear();for(const e of eager_block_effects){if((e.f&(DESTROYED|INERT))!==0)continue;const ordered_effects=[e];let ancestor=e.parent;while(ancestor!==null){if(eager_block_effects.has(ancestor)){eager_block_effects.delete(ancestor);ordered_effects.push(ancestor)}ancestor=ancestor.parent}for(let j=ordered_effects.length-1;j>=0;j--){const e2=ordered_effects[j];if((e2.f&(DESTROYED|INERT))!==0)continue;update_effect(e2)}}eager_block_effects.clear()}}}eager_block_effects=null}function mark_effects(value,sources,marked,checked){if(marked.has(value))return;marked.add(value);if(value.reactions!==null){for(const reaction of value.reactions){const flags2=reaction.f;if((flags2&DERIVED)!==0){mark_effects(reaction,sources,marked,checked)}else if((flags2&(ASYNC|BLOCK_EFFECT))!==0&&(flags2&DIRTY)===0&&depends_on(reaction,sources,checked)){set_signal_status(reaction,DIRTY);schedule_effect(reaction)}}}}function depends_on(reaction,sources,checked){const depends=checked.get(reaction);if(depends!==void 0)return depends;if(reaction.deps!==null){for(const dep of reaction.deps){if(sources.includes(dep)){return true}if((dep.f&DERIVED)!==0&&depends_on(dep,sources,checked)){checked.set(dep,true);return true}}}checked.set(reaction,false);return false}function schedule_effect(signal){var effect2=last_scheduled_effect=signal;while(effect2.parent!==null){effect2=effect2.parent;var flags2=effect2.f;if(is_flushing&&effect2===active_effect&&(flags2&BLOCK_EFFECT)!==0&&(flags2&HEAD_EFFECT)===0){return}if((flags2&(ROOT_EFFECT|BRANCH_EFFECT))!==0){if((flags2&CLEAN)===0)return;effect2.f^=CLEAN}}queued_root_effects.push(effect2)}function createSubscriber(start){let subscribers=0;let version=source(0);let stop;if(dev_fallback_default){tag(version,"createSubscriber version")}return()=>{if(effect_tracking()){get(version);render_effect(()=>{if(subscribers===0){stop=untrack(()=>start(()=>increment(version)))}subscribers+=1;return()=>{queue_micro_task(()=>{subscribers-=1;if(subscribers===0){stop?.();stop=void 0;increment(version)}})}})}}}var flags=EFFECT_TRANSPARENT|EFFECT_PRESERVED|BOUNDARY_EFFECT;function boundary(node,props,children){new Boundary(node,props,children)}var Boundary=class{parent;is_pending=false;#anchor;#hydrate_open=hydrating?hydrate_node:null;#props;#children;#effect;#main_effect=null;#pending_effect=null;#failed_effect=null;#offscreen_fragment=null;#pending_anchor=null;#local_pending_count=0;#pending_count=0;#is_creating_fallback=false;#dirty_effects=new Set;#maybe_dirty_effects=new Set;#effect_pending=null;#effect_pending_subscriber=createSubscriber(()=>{this.#effect_pending=source(this.#local_pending_count);if(dev_fallback_default){tag(this.#effect_pending,"$effect.pending()")}return()=>{this.#effect_pending=null}});constructor(node,props,children){this.#anchor=node;this.#props=props;this.#children=children;this.parent=active_effect.b;this.is_pending=!!this.#props.pending;this.#effect=block(()=>{active_effect.b=this;if(hydrating){const comment2=this.#hydrate_open;hydrate_next();const server_rendered_pending=comment2.nodeType===COMMENT_NODE&&comment2.data===HYDRATION_START_ELSE;if(server_rendered_pending){this.#hydrate_pending_content()}else{this.#hydrate_resolved_content();if(this.#pending_count===0){this.is_pending=false}}}else{var anchor=this.#get_anchor();try{this.#main_effect=branch(()=>children(anchor))}catch(error){this.error(error)}if(this.#pending_count>0){this.#show_pending_snippet()}else{this.is_pending=false}}return()=>{this.#pending_anchor?.remove()}},flags);if(hydrating){this.#anchor=hydrate_node}}#hydrate_resolved_content(){try{this.#main_effect=branch(()=>this.#children(this.#anchor))}catch(error){this.error(error)}}#hydrate_pending_content(){const pending2=this.#props.pending;if(!pending2){return}this.#pending_effect=branch(()=>pending2(this.#anchor));Batch.enqueue(()=>{var anchor=this.#get_anchor();this.#main_effect=this.#run(()=>{Batch.ensure();return branch(()=>this.#children(anchor))});if(this.#pending_count>0){this.#show_pending_snippet()}else{pause_effect(this.#pending_effect,()=>{this.#pending_effect=null});this.is_pending=false}})}#get_anchor(){var anchor=this.#anchor;if(this.is_pending){this.#pending_anchor=create_text();this.#anchor.before(this.#pending_anchor);anchor=this.#pending_anchor}return anchor}defer_effect(effect2){defer_effect(effect2,this.#dirty_effects,this.#maybe_dirty_effects)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#props.pending}#run(fn){var previous_effect=active_effect;var previous_reaction=active_reaction;var previous_ctx=component_context;set_active_effect(this.#effect);set_active_reaction(this.#effect);set_component_context(this.#effect.ctx);try{return fn()}catch(e){handle_error(e);return null}finally{set_active_effect(previous_effect);set_active_reaction(previous_reaction);set_component_context(previous_ctx)}}#show_pending_snippet(){const pending2=this.#props.pending;if(this.#main_effect!==null){this.#offscreen_fragment=document.createDocumentFragment();this.#offscreen_fragment.append(this.#pending_anchor);move_effect(this.#main_effect,this.#offscreen_fragment)}if(this.#pending_effect===null){this.#pending_effect=branch(()=>pending2(this.#anchor))}}#update_pending_count(d){if(!this.has_pending_snippet()){if(this.parent){this.parent.#update_pending_count(d)}return}this.#pending_count+=d;if(this.#pending_count===0){this.is_pending=false;for(const e of this.#dirty_effects){set_signal_status(e,DIRTY);schedule_effect(e)}for(const e of this.#maybe_dirty_effects){set_signal_status(e,MAYBE_DIRTY);schedule_effect(e)}this.#dirty_effects.clear();this.#maybe_dirty_effects.clear();if(this.#pending_effect){pause_effect(this.#pending_effect,()=>{this.#pending_effect=null})}if(this.#offscreen_fragment){this.#anchor.before(this.#offscreen_fragment);this.#offscreen_fragment=null}}}update_pending_count(d){this.#update_pending_count(d);this.#local_pending_count+=d;if(this.#effect_pending){internal_set(this.#effect_pending,this.#local_pending_count)}}get_effect_pending(){this.#effect_pending_subscriber();return get(this.#effect_pending)}error(error){var onerror=this.#props.onerror;let failed=this.#props.failed;if(this.#is_creating_fallback||!onerror&&!failed){throw error}if(this.#main_effect){destroy_effect(this.#main_effect);this.#main_effect=null}if(this.#pending_effect){destroy_effect(this.#pending_effect);this.#pending_effect=null}if(this.#failed_effect){destroy_effect(this.#failed_effect);this.#failed_effect=null}if(hydrating){set_hydrate_node(this.#hydrate_open);next();set_hydrate_node(skip_nodes())}var did_reset=false;var calling_on_error=false;const reset2=()=>{if(did_reset){svelte_boundary_reset_noop();return}did_reset=true;if(calling_on_error){svelte_boundary_reset_onerror()}Batch.ensure();this.#local_pending_count=0;if(this.#failed_effect!==null){pause_effect(this.#failed_effect,()=>{this.#failed_effect=null})}this.is_pending=this.has_pending_snippet();this.#main_effect=this.#run(()=>{this.#is_creating_fallback=false;return branch(()=>this.#children(this.#anchor))});if(this.#pending_count>0){this.#show_pending_snippet()}else{this.is_pending=false}};var previous_reaction=active_reaction;try{set_active_reaction(null);calling_on_error=true;onerror?.(error,reset2);calling_on_error=false}catch(error2){invoke_error_boundary(error2,this.#effect&&this.#effect.parent)}finally{set_active_reaction(previous_reaction)}if(failed){queue_micro_task(()=>{this.#failed_effect=this.#run(()=>{Batch.ensure();this.#is_creating_fallback=true;try{return branch(()=>{failed(this.#anchor,()=>error,()=>reset2)})}catch(error2){invoke_error_boundary(error2,this.#effect.parent);return null}finally{this.#is_creating_fallback=false}})})}}};function flatten(blockers,sync,async2,fn){const d=is_runes()?derived:derived_safe_equal;if(async2.length===0&&blockers.length===0){fn(sync.map(d));return}var batch=current_batch;var parent=active_effect;var restore=capture();function run3(){Promise.all(async2.map(expression=>async_derived(expression))).then(result=>{restore();try{fn([...sync.map(d),...result])}catch(error){if((parent.f&DESTROYED)===0){invoke_error_boundary(error,parent)}}batch?.deactivate();unset_context()}).catch(error=>{invoke_error_boundary(error,parent)})}if(blockers.length>0){Promise.all(blockers).then(()=>{restore();try{return run3()}finally{batch?.deactivate();unset_context()}})}else{run3()}}function capture(){var previous_effect=active_effect;var previous_reaction=active_reaction;var previous_component_context=component_context;var previous_batch2=current_batch;if(dev_fallback_default){var previous_dev_stack=dev_stack}return function restore(activate_batch=true){set_active_effect(previous_effect);set_active_reaction(previous_reaction);set_component_context(previous_component_context);if(activate_batch)previous_batch2?.activate();if(dev_fallback_default){set_from_async_derived(null);set_dev_stack(previous_dev_stack)}}}function unset_context(){set_active_effect(null);set_active_reaction(null);set_component_context(null);if(dev_fallback_default){set_from_async_derived(null);set_dev_stack(null)}}var current_async_effect=null;function set_from_async_derived(v){current_async_effect=v}var recent_async_deriveds=new Set;function derived(fn){var flags2=DERIVED|DIRTY;var parent_derived=active_reaction!==null&&(active_reaction.f&DERIVED)!==0?active_reaction:null;if(active_effect!==null){active_effect.f|=EFFECT_PRESERVED}const signal={ctx:component_context,deps:null,effects:null,equals,f:flags2,fn,reactions:null,rv:0,v:UNINITIALIZED,wv:0,parent:parent_derived??active_effect,ac:null};if(dev_fallback_default&&tracing_mode_flag){signal.created=get_error("created at")}return signal}function async_derived(fn,label,location){let parent=active_effect;if(parent===null){async_derived_orphan()}var boundary2=parent.b;var promise=void 0;var signal=source(UNINITIALIZED);if(dev_fallback_default)signal.label=label;var should_suspend=!active_reaction;var deferreds=new Map;async_effect(()=>{if(dev_fallback_default)current_async_effect=active_effect;var d=deferred();promise=d.promise;try{Promise.resolve(fn()).then(d.resolve,d.reject).then(()=>{if(batch===current_batch&&batch.committed){batch.deactivate()}unset_context()})}catch(error){d.reject(error);unset_context()}if(dev_fallback_default)current_async_effect=null;var batch=current_batch;if(should_suspend){var blocking=boundary2.is_rendered();boundary2.update_pending_count(1);batch.increment(blocking);deferreds.get(batch)?.reject(STALE_REACTION);deferreds.delete(batch);deferreds.set(batch,d)}const handler=(value,error=void 0)=>{current_async_effect=null;batch.activate();if(error){if(error!==STALE_REACTION){signal.f|=ERROR_VALUE;internal_set(signal,error)}}else{if((signal.f&ERROR_VALUE)!==0){signal.f^=ERROR_VALUE}internal_set(signal,value);for(const[b,d2]of deferreds){deferreds.delete(b);if(b===batch)break;d2.reject(STALE_REACTION)}if(dev_fallback_default&&location!==void 0){recent_async_deriveds.add(signal);setTimeout(()=>{if(recent_async_deriveds.has(signal)){await_waterfall(signal.label,location);recent_async_deriveds.delete(signal)}})}}if(should_suspend){boundary2.update_pending_count(-1);batch.decrement(blocking)}};d.promise.then(handler,e=>handler(null,e||"unknown"))});teardown(()=>{for(const d of deferreds.values()){d.reject(STALE_REACTION)}});if(dev_fallback_default){signal.f|=ASYNC}return new Promise(fulfil=>{function next2(p){function go(){if(p===promise){fulfil(signal)}else{next2(promise)}}p.then(go,go)}next2(promise)})}function user_derived(fn){const d=derived(fn);if(!async_mode_flag)push_reaction_value(d);return d}function derived_safe_equal(fn){const signal=derived(fn);signal.equals=safe_equals;return signal}function destroy_derived_effects(derived2){var effects=derived2.effects;if(effects!==null){derived2.effects=null;for(var i=0;i5){const error=get_error("updated at");if(error!==null){let entry=source2.updated.get(error.stack);if(!entry){entry={error,count:0};source2.updated.set(error.stack,entry)}entry.count++}}}if(active_effect!==null){source2.set_during_effect=true}}if((source2.f&DERIVED)!==0){const derived2=source2;if((source2.f&DIRTY)!==0){execute_derived(derived2)}update_derived_status(derived2)}source2.wv=increment_write_version();mark_reactions(source2,DIRTY);if(is_runes()&&active_effect!==null&&(active_effect.f&CLEAN)!==0&&(active_effect.f&(BRANCH_EFFECT|ROOT_EFFECT))===0){if(untracked_writes===null){set_untracked_writes([source2])}else{untracked_writes.push(source2)}}if(!batch.is_fork&&eager_effects.size>0&&!eager_effects_deferred){flush_eager_effects()}}return value}function flush_eager_effects(){eager_effects_deferred=false;var prev_is_updating_effect=is_updating_effect;set_is_updating_effect(true);const inspects=Array.from(eager_effects);try{for(const effect2 of inspects){if((effect2.f&CLEAN)!==0){set_signal_status(effect2,MAYBE_DIRTY)}if(is_dirty(effect2)){update_effect(effect2)}}}finally{set_is_updating_effect(prev_is_updating_effect)}eager_effects.clear()}function update(source2,d=1){var value=get(source2);var result=d===1?value++:value--;set(source2,value);return result}function increment(source2){set(source2,source2.v+1)}function mark_reactions(signal,status){var reactions=signal.reactions;if(reactions===null)return;var runes=is_runes();var length=reactions.length;for(var i=0;i{if(update_version===parent_version){return fn()}var reaction=active_reaction;var version2=update_version;set_active_reaction(null);set_update_version(parent_version);var result=fn();set_active_reaction(reaction);set_update_version(version2);return result};if(is_proxied_array){sources.set("length",state(value.length,stack2));if(dev_fallback_default){value=inspectable_array(value)}}var path="";let updating=false;function update_path(new_path){if(updating)return;updating=true;path=new_path;tag(version,`${path} version`);for(const[prop2,source2]of sources){tag(source2,get_label(path,prop2))}updating=false}return new Proxy(value,{defineProperty(_,prop2,descriptor){if(!("value"in descriptor)||descriptor.configurable===false||descriptor.enumerable===false||descriptor.writable===false){state_descriptors_fixed()}var s=sources.get(prop2);if(s===void 0){s=with_parent(()=>{var s2=state(descriptor.value,stack2);sources.set(prop2,s2);if(dev_fallback_default&&typeof prop2==="string"){tag(s2,get_label(path,prop2))}return s2})}else{set(s,descriptor.value,true)}return true},deleteProperty(target,prop2){var s=sources.get(prop2);if(s===void 0){if(prop2 in target){const s2=with_parent(()=>state(UNINITIALIZED,stack2));sources.set(prop2,s2);increment(version);if(dev_fallback_default){tag(s2,get_label(path,prop2))}}}else{set(s,UNINITIALIZED);increment(version)}return true},get(target,prop2,receiver){if(prop2===STATE_SYMBOL){return value}if(dev_fallback_default&&prop2===PROXY_PATH_SYMBOL){return update_path}var s=sources.get(prop2);var exists=prop2 in target;if(s===void 0&&(!exists||get_descriptor(target,prop2)?.writable)){s=with_parent(()=>{var p=proxy(exists?target[prop2]:UNINITIALIZED);var s2=state(p,stack2);if(dev_fallback_default){tag(s2,get_label(path,prop2))}return s2});sources.set(prop2,s)}if(s!==void 0){var v=get(s);return v===UNINITIALIZED?void 0:v}return Reflect.get(target,prop2,receiver)},getOwnPropertyDescriptor(target,prop2){var descriptor=Reflect.getOwnPropertyDescriptor(target,prop2);if(descriptor&&"value"in descriptor){var s=sources.get(prop2);if(s)descriptor.value=get(s)}else if(descriptor===void 0){var source2=sources.get(prop2);var value2=source2?.v;if(source2!==void 0&&value2!==UNINITIALIZED){return{enumerable:true,configurable:true,value:value2,writable:true}}}return descriptor},has(target,prop2){if(prop2===STATE_SYMBOL){return true}var s=sources.get(prop2);var has=s!==void 0&&s.v!==UNINITIALIZED||Reflect.has(target,prop2);if(s!==void 0||active_effect!==null&&(!has||get_descriptor(target,prop2)?.writable)){if(s===void 0){s=with_parent(()=>{var p=has?proxy(target[prop2]):UNINITIALIZED;var s2=state(p,stack2);if(dev_fallback_default){tag(s2,get_label(path,prop2))}return s2});sources.set(prop2,s)}var value2=get(s);if(value2===UNINITIALIZED){return false}}return has},set(target,prop2,value2,receiver){var s=sources.get(prop2);var has=prop2 in target;if(is_proxied_array&&prop2==="length"){for(var i=value2;istate(UNINITIALIZED,stack2));sources.set(i+"",other_s);if(dev_fallback_default){tag(other_s,get_label(path,i))}}}}if(s===void 0){if(!has||get_descriptor(target,prop2)?.writable){s=with_parent(()=>state(void 0,stack2));if(dev_fallback_default){tag(s,get_label(path,prop2))}set(s,proxy(value2));sources.set(prop2,s)}}else{has=s.v!==UNINITIALIZED;var p=with_parent(()=>proxy(value2));set(s,p)}var descriptor=Reflect.getOwnPropertyDescriptor(target,prop2);if(descriptor?.set){descriptor.set.call(receiver,value2)}if(!has){if(is_proxied_array&&typeof prop2==="string"){var ls=sources.get("length");var n=Number(prop2);if(Number.isInteger(n)&&n>=ls.v){set(ls,n+1)}}increment(version)}return true},ownKeys(target){get(version);var own_keys=Reflect.ownKeys(target).filter(key3=>{var source3=sources.get(key3);return source3===void 0||source3.v!==UNINITIALIZED});for(var[key2,source2]of sources){if(source2.v!==UNINITIALIZED&&!(key2 in target)){own_keys.push(key2)}}return own_keys},setPrototypeOf(){state_prototype_fixed()}})}function get_label(path,prop2){if(typeof prop2==="symbol")return`${path}[Symbol(${prop2.description??""})]`;if(regex_is_valid_identifier.test(prop2))return`${path}.${prop2}`;return /^\d+$/.test(prop2)?`${path}[${prop2}]`:`${path}['${prop2}']`}function get_proxied_value(value){try{if(value!==null&&typeof value==="object"&&STATE_SYMBOL in value){return value[STATE_SYMBOL]}}catch{}return value}function is(a,b){return Object.is(get_proxied_value(a),get_proxied_value(b))}var ARRAY_MUTATING_METHODS=new Set(["copyWithin","fill","pop","push","reverse","shift","sort","splice","unshift"]);function inspectable_array(array){return new Proxy(array,{get(target,prop2,receiver){var value=Reflect.get(target,prop2,receiver);if(!ARRAY_MUTATING_METHODS.has(prop2)){return value}return function(...args){set_eager_effects_deferred();var result=value.apply(this,args);flush_eager_effects();return result}}})}function init_array_prototype_warnings(){const array_prototype2=Array.prototype;const cleanup=Array.__svelte_cleanup;if(cleanup){cleanup()}const{indexOf,lastIndexOf,includes}=array_prototype2;array_prototype2.indexOf=function(item,from_index){const index2=indexOf.call(this,item,from_index);if(index2===-1){for(let i=from_index??0;i{array_prototype2.indexOf=indexOf;array_prototype2.lastIndexOf=lastIndexOf;array_prototype2.includes=includes}}var $window;var $document;var is_firefox;var first_child_getter;var next_sibling_getter;function init_operations(){if($window!==void 0){return}$window=window;$document=document;is_firefox=/Firefox/.test(navigator.userAgent);var element_prototype=Element.prototype;var node_prototype=Node.prototype;var text_prototype=Text.prototype;first_child_getter=get_descriptor(node_prototype,"firstChild").get;next_sibling_getter=get_descriptor(node_prototype,"nextSibling").get;if(is_extensible(element_prototype)){element_prototype.__click=void 0;element_prototype.__className=void 0;element_prototype.__attributes=null;element_prototype.__style=void 0;element_prototype.__e=void 0}if(is_extensible(text_prototype)){text_prototype.__t=void 0}if(dev_fallback_default){element_prototype.__svelte_meta=null;init_array_prototype_warnings()}}function create_text(value=""){return document.createTextNode(value)}function get_first_child(node){return first_child_getter.call(node)}function get_next_sibling(node){return next_sibling_getter.call(node)}function child(node,is_text){if(!hydrating){return get_first_child(node)}var child2=get_first_child(hydrate_node);if(child2===null){child2=hydrate_node.appendChild(create_text())}else if(is_text&&child2.nodeType!==TEXT_NODE){var text2=create_text();child2?.before(text2);set_hydrate_node(text2);return text2}set_hydrate_node(child2);return child2}function sibling(node,count=1,is_text=false){let next_sibling=hydrating?hydrate_node:node;var last_sibling;while(count--){last_sibling=next_sibling;next_sibling=get_next_sibling(next_sibling)}if(!hydrating){return next_sibling}if(is_text&&next_sibling?.nodeType!==TEXT_NODE){var text2=create_text();if(next_sibling===null){last_sibling?.after(text2)}else{next_sibling.before(text2)}set_hydrate_node(text2);return text2}set_hydrate_node(next_sibling);return next_sibling}function clear_text_content(node){node.textContent=""}function should_defer_append(){if(!async_mode_flag)return false;if(eager_block_effects!==null)return false;var flags2=active_effect.f;return(flags2&EFFECT_RAN)!==0}var listening_to_form_reset=false;function add_form_reset_listener(){if(!listening_to_form_reset){listening_to_form_reset=true;document.addEventListener("reset",evt=>{Promise.resolve().then(()=>{if(!evt.defaultPrevented){for(const e of evt.target.elements){e.__on_r?.()}}})},{capture:true})}}function without_reactive_context(fn){var previous_reaction=active_reaction;var previous_effect=active_effect;set_active_reaction(null);set_active_effect(null);try{return fn()}finally{set_active_reaction(previous_reaction);set_active_effect(previous_effect)}}function listen_to_event_and_reset_event(element2,event2,handler,on_reset=handler){element2.addEventListener(event2,()=>without_reactive_context(handler));const prev=element2.__on_r;if(prev){element2.__on_r=()=>{prev();on_reset(true)}}else{element2.__on_r=()=>on_reset(true)}add_form_reset_listener()}function validate_effect(rune){if(active_effect===null){if(active_reaction===null){effect_orphan(rune)}effect_in_unowned_derived()}if(is_destroying_effect){effect_in_teardown(rune)}}function push_effect(effect2,parent_effect){var parent_last=parent_effect.last;if(parent_last===null){parent_effect.last=parent_effect.first=effect2}else{parent_last.next=effect2;effect2.prev=parent_last;parent_effect.last=effect2}}function create_effect(type,fn,sync){var parent=active_effect;if(dev_fallback_default){while(parent!==null&&(parent.f&EAGER_EFFECT)!==0){parent=parent.parent}}if(parent!==null&&(parent.f&INERT)!==0){type|=INERT}var effect2={ctx:component_context,deps:null,nodes:null,f:type|DIRTY|CONNECTED,first:null,fn,last:null,next:null,parent,b:parent&&parent.b,prev:null,teardown:null,wv:0,ac:null};if(dev_fallback_default){effect2.component_function=dev_current_component_function}if(sync){try{update_effect(effect2);effect2.f|=EFFECT_RAN}catch(e2){destroy_effect(effect2);throw e2}}else if(fn!==null){schedule_effect(effect2)}var e=effect2;if(sync&&e.deps===null&&e.teardown===null&&e.nodes===null&&e.first===e.last&&(e.f&EFFECT_PRESERVED)===0){e=e.first;if((type&BLOCK_EFFECT)!==0&&(type&EFFECT_TRANSPARENT)!==0&&e!==null){e.f|=EFFECT_TRANSPARENT}}if(e!==null){e.parent=parent;if(parent!==null){push_effect(e,parent)}if(active_reaction!==null&&(active_reaction.f&DERIVED)!==0&&(type&ROOT_EFFECT)===0){var derived2=active_reaction;(derived2.effects??=[]).push(e)}}return effect2}function effect_tracking(){return active_reaction!==null&&!untracking}function teardown(fn){const effect2=create_effect(RENDER_EFFECT,null,false);set_signal_status(effect2,CLEAN);effect2.teardown=fn;return effect2}function user_effect(fn){validate_effect("$effect");if(dev_fallback_default){define_property(fn,"name",{value:"$effect"})}var flags2=active_effect.f;var defer=!active_reaction&&(flags2&BRANCH_EFFECT)!==0&&(flags2&EFFECT_RAN)===0;if(defer){var context=component_context;(context.e??=[]).push(fn)}else{return create_user_effect(fn)}}function create_user_effect(fn){return create_effect(EFFECT|USER_EFFECT,fn,false)}function effect_root(fn){Batch.ensure();const effect2=create_effect(ROOT_EFFECT|EFFECT_PRESERVED,fn,true);return()=>{destroy_effect(effect2)}}function component_root(fn){Batch.ensure();const effect2=create_effect(ROOT_EFFECT|EFFECT_PRESERVED,fn,true);return(options={})=>{return new Promise(fulfil=>{if(options.outro){pause_effect(effect2,()=>{destroy_effect(effect2);fulfil(void 0)})}else{destroy_effect(effect2);fulfil(void 0)}})}}function effect(fn){return create_effect(EFFECT,fn,false)}function async_effect(fn){return create_effect(ASYNC|EFFECT_PRESERVED,fn,true)}function render_effect(fn,flags2=0){return create_effect(RENDER_EFFECT|flags2,fn,true)}function template_effect(fn,sync=[],async2=[],blockers=[]){flatten(blockers,sync,async2,values=>{create_effect(RENDER_EFFECT,()=>fn(...values.map(get)),true)})}function block(fn,flags2=0){var effect2=create_effect(BLOCK_EFFECT|flags2,fn,true);if(dev_fallback_default){effect2.dev_stack=dev_stack}return effect2}function branch(fn){return create_effect(BRANCH_EFFECT|EFFECT_PRESERVED,fn,true)}function execute_effect_teardown(effect2){var teardown2=effect2.teardown;if(teardown2!==null){const previously_destroying_effect=is_destroying_effect;const previous_reaction=active_reaction;set_is_destroying_effect(true);set_active_reaction(null);try{teardown2.call(null)}finally{set_is_destroying_effect(previously_destroying_effect);set_active_reaction(previous_reaction)}}}function destroy_effect_children(signal,remove_dom=false){var effect2=signal.first;signal.first=signal.last=null;while(effect2!==null){const controller=effect2.ac;if(controller!==null){without_reactive_context(()=>{controller.abort(STALE_REACTION)})}var next2=effect2.next;if((effect2.f&ROOT_EFFECT)!==0){effect2.parent=null}else{destroy_effect(effect2,remove_dom)}effect2=next2}}function destroy_block_effect_children(signal){var effect2=signal.first;while(effect2!==null){var next2=effect2.next;if((effect2.f&BRANCH_EFFECT)===0){destroy_effect(effect2)}effect2=next2}}function destroy_effect(effect2,remove_dom=true){var removed=false;if((remove_dom||(effect2.f&HEAD_EFFECT)!==0)&&effect2.nodes!==null&&effect2.nodes.end!==null){remove_effect_dom(effect2.nodes.start,effect2.nodes.end);removed=true}destroy_effect_children(effect2,remove_dom&&!removed);remove_reactions(effect2,0);set_signal_status(effect2,DESTROYED);var transitions=effect2.nodes&&effect2.nodes.t;if(transitions!==null){for(const transition2 of transitions){transition2.stop()}}execute_effect_teardown(effect2);var parent=effect2.parent;if(parent!==null&&parent.first!==null){unlink_effect(effect2)}if(dev_fallback_default){effect2.component_function=null}effect2.next=effect2.prev=effect2.teardown=effect2.ctx=effect2.deps=effect2.fn=effect2.nodes=effect2.ac=null}function remove_effect_dom(node,end){while(node!==null){var next2=node===end?null:get_next_sibling(node);node.remove();node=next2}}function unlink_effect(effect2){var parent=effect2.parent;var prev=effect2.prev;var next2=effect2.next;if(prev!==null)prev.next=next2;if(next2!==null)next2.prev=prev;if(parent!==null){if(parent.first===effect2)parent.first=next2;if(parent.last===effect2)parent.last=prev}}function pause_effect(effect2,callback,destroy=true){var transitions=[];pause_children(effect2,transitions,true);var fn=()=>{if(destroy)destroy_effect(effect2);if(callback)callback()};var remaining=transitions.length;if(remaining>0){var check=()=>--remaining||fn();for(var transition2 of transitions){transition2.out(check)}}else{fn()}}function pause_children(effect2,transitions,local){if((effect2.f&INERT)!==0)return;effect2.f^=INERT;var t=effect2.nodes&&effect2.nodes.t;if(t!==null){for(const transition2 of t){if(transition2.is_global||local){transitions.push(transition2)}}}var child2=effect2.first;while(child2!==null){var sibling2=child2.next;var transparent=(child2.f&EFFECT_TRANSPARENT)!==0||(child2.f&BRANCH_EFFECT)!==0&&(effect2.f&BLOCK_EFFECT)!==0;pause_children(child2,transitions,transparent?local:false);child2=sibling2}}function resume_effect(effect2){resume_children(effect2,true)}function resume_children(effect2,local){if((effect2.f&INERT)===0)return;effect2.f^=INERT;if((effect2.f&CLEAN)===0){set_signal_status(effect2,DIRTY);schedule_effect(effect2)}var child2=effect2.first;while(child2!==null){var sibling2=child2.next;var transparent=(child2.f&EFFECT_TRANSPARENT)!==0||(child2.f&BRANCH_EFFECT)!==0;resume_children(child2,transparent?local:false);child2=sibling2}var t=effect2.nodes&&effect2.nodes.t;if(t!==null){for(const transition2 of t){if(transition2.is_global||local){transition2.in()}}}}function move_effect(effect2,fragment){if(!effect2.nodes)return;var node=effect2.nodes.start;var end=effect2.nodes.end;while(node!==null){var next2=node===end?null:get_next_sibling(node);fragment.append(node);node=next2}}var captured_signals=null;var is_updating_effect=false;function set_is_updating_effect(value){is_updating_effect=value}var is_destroying_effect=false;function set_is_destroying_effect(value){is_destroying_effect=value}var active_reaction=null;var untracking=false;function set_active_reaction(reaction){active_reaction=reaction}var active_effect=null;function set_active_effect(effect2){active_effect=effect2}var current_sources=null;function push_reaction_value(value){if(active_reaction!==null&&(!async_mode_flag||(active_reaction.f&DERIVED)!==0)){if(current_sources===null){current_sources=[value]}else{current_sources.push(value)}}}var new_deps=null;var skipped_deps=0;var untracked_writes=null;function set_untracked_writes(value){untracked_writes=value}var write_version=1;var read_version=0;var update_version=read_version;function set_update_version(value){update_version=value}function increment_write_version(){return++write_version}function is_dirty(reaction){var flags2=reaction.f;if((flags2&DIRTY)!==0){return true}if(flags2&DERIVED){reaction.f&=~WAS_MARKED}if((flags2&MAYBE_DIRTY)!==0){var dependencies=reaction.deps;var length=dependencies.length;for(var i=0;ireaction.wv){return true}}if((flags2&CONNECTED)!==0&&batch_values===null){set_signal_status(reaction,CLEAN)}}return false}function schedule_possible_effect_self_invalidation(signal,effect2,root6=true){var reactions=signal.reactions;if(reactions===null)return;if(!async_mode_flag&¤t_sources?.includes(signal)){return}for(var i=0;i{reaction.ac.abort(STALE_REACTION)});reaction.ac=null}try{reaction.f|=REACTION_IS_UPDATING;var fn=reaction.fn;var result=fn();var deps=reaction.deps;if(new_deps!==null){var i;remove_reactions(reaction,skipped_deps);if(deps!==null&&skipped_deps>0){deps.length=skipped_deps+new_deps.length;for(i=0;i{requestAnimationFrame(()=>f());setTimeout(()=>f())})}await Promise.resolve();flushSync()}function get(signal){var flags2=signal.f;var is_derived=(flags2&DERIVED)!==0;captured_signals?.add(signal);if(active_reaction!==null&&!untracking){var destroyed=active_effect!==null&&(active_effect.f&DESTROYED)!==0;if(!destroyed&&!current_sources?.includes(signal)){var deps=active_reaction.deps;if((active_reaction.f&REACTION_IS_UPDATING)!==0){if(signal.rv{return handler?.call(this,event2)})}}if(event_name.startsWith("pointer")||event_name.startsWith("touch")||event_name==="wheel"){queue_micro_task(()=>{dom.addEventListener(event_name,target_handler,options)})}else{dom.addEventListener(event_name,target_handler,options)}return target_handler}function event(event_name,dom,handler,capture2,passive2){var options={capture:capture2,passive:passive2};var target_handler=create_event(event_name,dom,handler,options);if(dom===document.body||dom===window||dom===document||dom instanceof HTMLMediaElement){teardown(()=>{dom.removeEventListener(event_name,target_handler,options)})}}function delegate(events){for(var i=0;i{throw error})}throw throw_error}}finally{event2.__root=handler_element;delete event2.currentTarget;set_active_reaction(previous_reaction);set_active_effect(previous_effect)}}function create_fragment_from_html(html2){var elem=document.createElement("template");elem.innerHTML=html2.replaceAll("","");return elem.content}function assign_nodes(start,end){var effect2=active_effect;if(effect2.nodes===null){effect2.nodes={start,end,a:null,t:null}}}function from_html(content,flags2){var is_fragment=(flags2&TEMPLATE_FRAGMENT)!==0;var use_import_node=(flags2&TEMPLATE_USE_IMPORT_NODE)!==0;var node;var has_start=!content.startsWith("");return()=>{if(hydrating){assign_nodes(hydrate_node,null);return hydrate_node}if(node===void 0){node=create_fragment_from_html(has_start?content:""+content);if(!is_fragment)node=get_first_child(node)}var clone=use_import_node||is_firefox?document.importNode(node,true):node.cloneNode(true);if(is_fragment){var start=get_first_child(clone);var end=clone.lastChild;assign_nodes(start,end)}else{assign_nodes(clone,clone)}return clone}}function append(anchor,dom){if(hydrating){var effect2=active_effect;if((effect2.f&EFFECT_RAN)===0||effect2.nodes.end===null){effect2.nodes.end=hydrate_node}hydrate_next();return}if(anchor===null){return}anchor.before(dom)}var should_intro=true;function set_text(text2,value){var str=value==null?"":typeof value==="object"?value+"":value;if(str!==(text2.__t??=text2.nodeValue)){text2.__t=str;text2.nodeValue=str+""}}function mount(component2,options){return _mount(component2,options)}function hydrate(component2,options){init_operations();options.intro=options.intro??false;const target=options.target;const was_hydrating=hydrating;const previous_hydrate_node=hydrate_node;try{var anchor=get_first_child(target);while(anchor&&(anchor.nodeType!==COMMENT_NODE||anchor.data!==HYDRATION_START)){anchor=get_next_sibling(anchor)}if(!anchor){throw HYDRATION_ERROR}set_hydrating(true);set_hydrate_node(anchor);const instance=_mount(component2,{...options,anchor});set_hydrating(false);return instance}catch(error){if(error instanceof Error&&error.message.split("\n").some(line=>line.startsWith("https://svelte.dev/e/"))){throw error}if(error!==HYDRATION_ERROR){console.warn("水合失败:",error)}if(options.recover===false){hydration_failed()}init_operations();clear_text_content(target);set_hydrating(false);return mount(component2,options)}finally{set_hydrating(was_hydrating);set_hydrate_node(previous_hydrate_node)}}var document_listeners=new Map;function _mount(Component,{target,anchor,props={},events,context,intro=true}){init_operations();var registered_events=new Set;var event_handle=events2=>{for(var i=0;i{var anchor_node=anchor??target.appendChild(create_text());boundary(anchor_node,{pending:()=>{}},anchor_node2=>{if(context){push({});var ctx=component_context;ctx.c=context}if(events){props.$$events=events}if(hydrating){assign_nodes(anchor_node2,null)}should_intro=intro;component2=Component(anchor_node2,props)||{};should_intro=true;if(hydrating){active_effect.nodes.end=hydrate_node;if(hydrate_node===null||hydrate_node.nodeType!==COMMENT_NODE||hydrate_node.data!==HYDRATION_END){hydration_mismatch();throw HYDRATION_ERROR}}if(context){pop()}});return()=>{for(var event_name of registered_events){target.removeEventListener(event_name,handle_event_propagation);var n=document_listeners.get(event_name);if(--n===0){document.removeEventListener(event_name,handle_event_propagation);document_listeners.delete(event_name)}else{document_listeners.set(event_name,n)}}root_event_handles.delete(event_handle);if(anchor_node!==anchor){anchor_node.parentNode?.removeChild(anchor_node)}}});mounted_components.set(component2,unmount2);return component2}var mounted_components=new WeakMap;function unmount(component2,options){const fn=mounted_components.get(component2);if(fn){mounted_components.delete(component2);return fn(options)}if(dev_fallback_default){if(STATE_SYMBOL in component2){state_proxy_unmount()}else{lifecycle_double_unmount()}}return Promise.resolve()}function index(_,i){return i}function pause_effects(state2,to_destroy,controlled_anchor){var transitions=[];var length=to_destroy.length;var group;var remaining=to_destroy.length;for(var i=0;i{if(group){group.pending.delete(effect2);group.done.add(effect2);if(group.pending.size===0){var groups=state2.outrogroups;destroy_effects(array_from(group.done));groups.delete(group);if(groups.size===0){state2.outrogroups=null}}}else{remaining-=1}},false)}if(remaining===0){var fast_path=transitions.length===0&&controlled_anchor!==null;if(fast_path){var anchor=controlled_anchor;var parent_node=anchor.parentNode;clear_text_content(parent_node);parent_node.append(anchor);state2.items.clear()}destroy_effects(to_destroy,!fast_path)}else{group={pending:new Set(to_destroy),done:new Set};(state2.outrogroups??=new Set).add(group)}}function destroy_effects(to_destroy,remove_dom=true){for(var i=0;i{var collection=get_collection();return is_array(collection)?collection:collection==null?[]:array_from(collection)});var array;var first_run=true;function commit(){state2.fallback=fallback2;reconcile(state2,array,anchor,flags2,get_key);if(fallback2!==null){if(array.length===0){if((fallback2.f&EFFECT_OFFSCREEN)===0){resume_effect(fallback2)}else{fallback2.f^=EFFECT_OFFSCREEN;move(fallback2,null,anchor)}}else{pause_effect(fallback2,()=>{fallback2=null})}}}var effect2=block(()=>{array=get(each_array);var length=array.length;let mismatch=false;if(hydrating){var is_else=read_hydration_instruction(anchor)===HYDRATION_START_ELSE;if(is_else!==(length===0)){anchor=skip_nodes();set_hydrate_node(anchor);set_hydrating(false);mismatch=true}}var keys=new Set;var batch=current_batch;var defer=should_defer_append();for(var index2=0;index2fallback_fn(anchor))}else{fallback2=branch(()=>fallback_fn(offscreen_anchor??=create_text()));fallback2.f|=EFFECT_OFFSCREEN}}if(hydrating&&length>0){set_hydrate_node(skip_nodes())}if(!first_run){if(defer){for(const[key3,item2]of items){if(!keys.has(key3)){batch.skipped_effects.add(item2.e)}}batch.oncommit(commit);batch.ondiscard(()=>{})}else{commit()}}if(mismatch){set_hydrating(true)}get(each_array)});var state2={effect:effect2,flags:flags2,items,outrogroups:null,fallback:fallback2};first_run=false;if(hydrating){anchor=hydrate_node}}function reconcile(state2,array,anchor,flags2,get_key){var is_animated=(flags2&EACH_IS_ANIMATED)!==0;var length=array.length;var items=state2.items;var current=state2.effect.first;var seen;var prev=null;var to_animate;var matched=[];var stashed=[];var value;var key2;var effect2;var i;if(is_animated){for(i=0;i0){var controlled_anchor=(flags2&EACH_IS_CONTROLLED)!==0&&length===0?anchor:null;if(is_animated){for(i=0;i{if(to_animate===void 0)return;for(effect2 of to_animate){effect2.nodes?.a?.apply()}})}}function create_item(items,anchor,value,key2,index2,render_fn,flags2,get_collection){var v=(flags2&EACH_ITEM_REACTIVE)!==0?(flags2&EACH_ITEM_IMMUTABLE)===0?mutable_source(value,false,false):source(value):null;var i=(flags2&EACH_INDEX_REACTIVE)!==0?source(index2):null;if(dev_fallback_default&&v){v.trace=()=>{get_collection()[i?.v??index2]}}return{v,i,e:branch(()=>{render_fn(anchor,v??value,i??index2,get_collection);return()=>{items.delete(key2)}})}}function move(effect2,next2,anchor){if(!effect2.nodes)return;var node=effect2.nodes.start;var end=effect2.nodes.end;var dest=next2&&(next2.f&EFFECT_OFFSCREEN)===0?next2.nodes.start:anchor;while(node!==null){var next_node=get_next_sibling(node);dest.before(node);if(node===end){return}node=next_node}}function link(state2,prev,next2){if(prev===null){state2.effect.first=next2}else{prev.next=next2}if(next2===null){state2.effect.last=prev}else{next2.prev=prev}}function append_styles(anchor,css){effect(()=>{var root6=anchor.getRootNode();var target=root6.host?root6:root6.head??root6.ownerDocument.head;if(!target.querySelector("#"+css.hash)){const style=document.createElement("style");style.id=css.hash;style.textContent=css.code;target.appendChild(style);if(dev_fallback_default){register_style(css.hash,style)}}})}var whitespace=[..." \t\n\r\f\xA0 "];function to_class(value,hash2,directives){var classname=value==null?"":""+value;if(hash2){classname=classname?classname+" "+hash2:hash2}if(directives){for(var key2 in directives){if(directives[key2]){classname=classname?classname+" "+key2:key2}else if(classname.length){var len=key2.length;var a=0;while((a=classname.indexOf(key2,a))>=0){var b=a+len;if((a===0||whitespace.includes(classname[a-1]))&&(b===classname.length||whitespace.includes(classname[b]))){classname=(a===0?"":classname.substring(0,a))+classname.substring(b+1)}else{a=b}}}}}return classname===""?null:classname}function set_class(dom,is_html,value,hash2,prev_classes,next_classes){var prev=dom.__className;if(hydrating||prev!==value||prev===void 0){var next_class_name=to_class(value,hash2,next_classes);if(!hydrating||next_class_name!==dom.getAttribute("class")){if(next_class_name==null){dom.removeAttribute("class")}else if(is_html){dom.className=next_class_name}else{dom.setAttribute("class",next_class_name)}}dom.__className=value}else if(next_classes&&prev_classes!==next_classes){for(var key2 in next_classes){var is_present=!!next_classes[key2];if(prev_classes==null||is_present!==!!prev_classes[key2]){dom.classList.toggle(key2,is_present)}}}return next_classes}function select_option(select,value,mounting=false){if(select.multiple){if(value==void 0){return}if(!is_array(value)){return select_multiple_invalid_value()}for(var option of select.options){option.selected=value.includes(get_option_value(option))}return}for(option of select.options){var option_value=get_option_value(option);if(is(option_value,value)){option.selected=true;return}}if(!mounting||value!==void 0){select.selectedIndex=-1}}function init_select(select){var observer=new MutationObserver(()=>{select_option(select,select.__value)});observer.observe(select,{childList:true,subtree:true,attributes:true,attributeFilter:["value"]});teardown(()=>{observer.disconnect()})}function bind_select_value(select,get3,set2=get3){var batches2=new WeakSet;var mounting=true;listen_to_event_and_reset_event(select,"change",is_reset=>{var query=is_reset?"[selected]":":checked";var value;if(select.multiple){value=[].map.call(select.querySelectorAll(query),get_option_value)}else{var selected_option=select.querySelector(query)??select.querySelector("option:not([disabled])");value=selected_option&&get_option_value(selected_option)}set2(value);if(current_batch!==null){batches2.add(current_batch)}});effect(()=>{var value=get3();if(select===document.activeElement){var batch=previous_batch??current_batch;if(batches2.has(batch)){return}}select_option(select,value,mounting);if(mounting&&value===void 0){var selected_option=select.querySelector(":checked");if(selected_option!==null){value=get_option_value(selected_option);set2(value)}}select.__value=value;mounting=false});init_select(select)}function get_option_value(option){if("__value"in option){return option.__value}else{return option.value}}var CLASS=Symbol("class");var STYLE=Symbol("style");var IS_CUSTOM_ELEMENT=Symbol("is custom element");var IS_HTML=Symbol("is html");function remove_input_defaults(input){if(!hydrating)return;var already_removed=false;var remove_defaults=()=>{if(already_removed)return;already_removed=true;if(input.hasAttribute("value")){var value=input.value;set_attribute2(input,"value",null);input.value=value}if(input.hasAttribute("checked")){var checked=input.checked;set_attribute2(input,"checked",null);input.checked=checked}};input.__on_r=remove_defaults;queue_micro_task(remove_defaults);add_form_reset_listener()}function set_attribute2(element2,attribute,value,skip_warning){var attributes=get_attributes(element2);if(hydrating){attributes[attribute]=element2.getAttribute(attribute);if(attribute==="src"||attribute==="srcset"||attribute==="href"&&element2.nodeName==="LINK"){if(!skip_warning){check_src_in_dev_hydration(element2,attribute,value??"")}return}}if(attributes[attribute]===(attributes[attribute]=value))return;if(attribute==="loading"){element2[LOADING_ATTR_SYMBOL]=value}if(value==null){element2.removeAttribute(attribute)}else if(typeof value!=="string"&&get_setters(element2).includes(attribute)){element2[attribute]=value}else{element2.setAttribute(attribute,value)}}function get_attributes(element2){return element2.__attributes??={[IS_CUSTOM_ELEMENT]:element2.nodeName.includes("-"),[IS_HTML]:element2.namespaceURI===NAMESPACE_HTML}}var setters_cache=new Map;function get_setters(element2){var cache_key=element2.getAttribute("is")||element2.nodeName;var setters=setters_cache.get(cache_key);if(setters)return setters;setters_cache.set(cache_key,setters=[]);var descriptors;var proto=element2;var element_proto=Element.prototype;while(element_proto!==proto){descriptors=get_descriptors(proto);for(var key2 in descriptors){if(descriptors[key2].set){setters.push(key2)}}proto=get_prototype_of(proto)}return setters}function check_src_in_dev_hydration(element2,attribute,value){if(!dev_fallback_default)return;if(attribute==="srcset"&&srcset_url_equal(element2,value))return;if(src_url_equal(element2.getAttribute(attribute)??"",value))return;hydration_attribute_changed(attribute,element2.outerHTML.replace(element2.innerHTML,element2.innerHTML&&"..."),String(value))}function src_url_equal(element_src,url){if(element_src===url)return true;return new URL(element_src,document.baseURI).href===new URL(url,document.baseURI).href}function split_srcset(srcset){return srcset.split(",").map(src=>src.trim().split(" ").filter(Boolean))}function srcset_url_equal(element2,srcset){var element_urls=split_srcset(element2.srcset);var urls=split_srcset(srcset);return urls.length===element_urls.length&&urls.every(([url,width],i)=>width===element_urls[i][1]&&(src_url_equal(element_urls[i][0],url)||src_url_equal(url,element_urls[i][0])))}function bind_value(input,get3,set2=get3){var batches2=new WeakSet;listen_to_event_and_reset_event(input,"input",async is_reset=>{if(dev_fallback_default&&input.type==="checkbox"){bind_invalid_checkbox_value()}var value=is_reset?input.defaultValue:input.value;value=is_numberlike_input(input)?to_number(value):value;set2(value);if(current_batch!==null){batches2.add(current_batch)}await tick();if(value!==(value=get3())){var start=input.selectionStart;var end=input.selectionEnd;var length=input.value.length;input.value=value??"";if(end!==null){var new_length=input.value.length;if(start===end&&end===length&&new_length>length){input.selectionStart=new_length;input.selectionEnd=new_length}else{input.selectionStart=start;input.selectionEnd=Math.min(end,new_length)}}}});if(hydrating&&input.defaultValue!==input.value||untrack(get3)==null&&input.value){set2(is_numberlike_input(input)?to_number(input.value):input.value);if(current_batch!==null){batches2.add(current_batch)}}render_effect(()=>{if(dev_fallback_default&&input.type==="checkbox"){bind_invalid_checkbox_value()}var value=get3();if(input===document.activeElement){var batch=previous_batch??current_batch;if(batches2.has(batch)){return}}if(is_numberlike_input(input)&&value===to_number(input.value)){return}if(input.type==="date"&&!value&&!input.value){return}if(value!==input.value){input.value=value??""}})}function bind_checked(input,get3,set2=get3){listen_to_event_and_reset_event(input,"change",is_reset=>{var value=is_reset?input.defaultChecked:input.checked;set2(value)});if(hydrating&&input.defaultChecked!==input.checked||untrack(get3)==null){set2(input.checked)}render_effect(()=>{var value=get3();input.checked=Boolean(value)})}function is_numberlike_input(input){var type=input.type;return type==="number"||type==="range"}function to_number(value){return value===""?null:+value}function is_bound_this(bound_value,element_or_component){return bound_value===element_or_component||bound_value?.[STATE_SYMBOL]===element_or_component}function bind_this(element_or_component={},update2,get_value,get_parts){effect(()=>{var old_parts;var parts;render_effect(()=>{old_parts=parts;parts=get_parts?.()||[];untrack(()=>{if(element_or_component!==get_value(...parts)){update2(element_or_component,...parts);if(old_parts&&is_bound_this(get_value(...old_parts),element_or_component)){update2(null,...old_parts)}}})});return()=>{queue_micro_task(()=>{if(parts&&is_bound_this(get_value(...parts),element_or_component)){update2(null,...parts)}})}});return element_or_component}var is_store_binding=false;var IS_UNMOUNTED=Symbol();function capture_store_binding(fn){var previous_is_store_binding=is_store_binding;try{is_store_binding=false;return[fn(),is_store_binding]}finally{is_store_binding=previous_is_store_binding}}function prop(props,key2,flags2,fallback2){var runes=!legacy_mode_flag||(flags2&PROPS_IS_RUNES)!==0;var bindable=(flags2&PROPS_IS_BINDABLE)!==0;var lazy=(flags2&PROPS_IS_LAZY_INITIAL)!==0;var fallback_value=fallback2;var fallback_dirty=true;var get_fallback=()=>{if(fallback_dirty){fallback_dirty=false;fallback_value=lazy?untrack(fallback2):fallback2}return fallback_value};var setter;if(bindable){var is_entry_props=STATE_SYMBOL in props||LEGACY_PROPS in props;setter=get_descriptor(props,key2)?.set??(is_entry_props&&key2 in props?v=>props[key2]=v:void 0)}var initial_value;var is_store_sub=false;if(bindable){[initial_value,is_store_sub]=capture_store_binding(()=>props[key2])}else{initial_value=props[key2]}if(initial_value===void 0&&fallback2!==void 0){initial_value=get_fallback();if(setter){if(runes)props_invalid_value(key2);setter(initial_value)}}var getter;if(runes){getter=()=>{var value=props[key2];if(value===void 0)return get_fallback();fallback_dirty=true;return value}}else{getter=()=>{var value=props[key2];if(value!==void 0){fallback_value=void 0}return value===void 0?fallback_value:value}}if(runes&&(flags2&PROPS_IS_UPDATED)===0){return getter}if(setter){var legacy_parent=props.$$legacy;return function(value,mutation){if(arguments.length>0){if(!runes||!mutation||legacy_parent||is_store_sub){setter(mutation?getter():value)}return value}return getter()}}var overridden=false;var d=((flags2&PROPS_IS_IMMUTABLE)!==0?derived:derived_safe_equal)(()=>{overridden=false;return getter()});if(dev_fallback_default){d.label=key2}if(bindable)get(d);var parent_effect=active_effect;return function(value,mutation){if(arguments.length>0){const new_value=mutation?get(d):runes&&bindable?proxy(value):value;set(d,new_value);overridden=true;if(fallback_value!==void 0){fallback_value=new_value}return value}if(is_destroying_effect&&overridden||(parent_effect.f&DESTROYED)!==0){return d.v}return get(d)}}function createClassComponent(options){return new Svelte4Component(options)}var Svelte4Component=class{#events;#instance;constructor(options){var sources=new Map;var add_source=(key2,value)=>{var s=mutable_source(value,false,false);sources.set(key2,s);return s};const props=new Proxy({...(options.props||{}),$$events:{}},{get(target,prop2){return get(sources.get(prop2)??add_source(prop2,Reflect.get(target,prop2)))},has(target,prop2){if(prop2===LEGACY_PROPS)return true;get(sources.get(prop2)??add_source(prop2,Reflect.get(target,prop2)));return Reflect.has(target,prop2)},set(target,prop2,value){set(sources.get(prop2)??add_source(prop2,value),value);return Reflect.set(target,prop2,value)}});this.#instance=(options.hydrate?hydrate:mount)(options.component,{target:options.target,anchor:options.anchor,props,context:options.context,intro:options.intro??false,recover:options.recover});if(!async_mode_flag&&(!options?.props?.$$host||options.sync===false)){flushSync()}this.#events=props.$$events;for(const key2 of Object.keys(this.#instance)){if(key2==="$set"||key2==="$destroy"||key2==="$on")continue;define_property(this,key2,{get(){return this.#instance[key2]},set(value){this.#instance[key2]=value},enumerable:true})}this.#instance.$set=next2=>{Object.assign(props,next2)};this.#instance.$destroy=()=>{unmount(this.#instance)}}$set(props){this.#instance.$set(props)}$on(event2,callback){this.#events[event2]=this.#events[event2]||[];const cb=(...args)=>callback.call(this,...args);this.#events[event2].push(cb);return()=>{this.#events[event2]=this.#events[event2].filter(fn=>fn!==cb)}}$destroy(){this.#instance.$destroy()}};var SvelteElement;if(typeof HTMLElement==="function"){SvelteElement=class extends HTMLElement{$$ctor;$$s;$$c;$$cn=false;$$d={};$$r=false;$$p_d={};$$l={};$$l_u=new Map;$$me;constructor($$componentCtor,$$slots,use_shadow_dom){super();this.$$ctor=$$componentCtor;this.$$s=$$slots;if(use_shadow_dom){this.attachShadow({mode:"open"})}}addEventListener(type,listener,options){this.$$l[type]=this.$$l[type]||[];this.$$l[type].push(listener);if(this.$$c){const unsub=this.$$c.$on(type,listener);this.$$l_u.set(listener,unsub)}super.addEventListener(type,listener,options)}removeEventListener(type,listener,options){super.removeEventListener(type,listener,options);if(this.$$c){const unsub=this.$$l_u.get(listener);if(unsub){unsub();this.$$l_u.delete(listener)}}}async connectedCallback(){this.$$cn=true;if(!this.$$c){let create_slot=function(name){return anchor=>{const slot2=document.createElement("slot");if(name!=="default")slot2.name=name;append(anchor,slot2)}};await Promise.resolve();if(!this.$$cn||this.$$c){return}const $$slots={};const existing_slots=get_custom_elements_slots(this);for(const name of this.$$s){if(name in existing_slots){if(name==="default"&&!this.$$d.children){this.$$d.children=create_slot(name);$$slots.default=true}else{$$slots[name]=create_slot(name)}}}for(const attribute of this.attributes){const name=this.$$g_p(attribute.name);if(!(name in this.$$d)){this.$$d[name]=get_custom_element_value(name,attribute.value,this.$$p_d,"toProp")}}for(const key2 in this.$$p_d){if(!(key2 in this.$$d)&&this[key2]!==void 0){this.$$d[key2]=this[key2];delete this[key2]}}this.$$c=createClassComponent({component:this.$$ctor,target:this.shadowRoot||this,props:{...this.$$d,$$slots,$$host:this}});this.$$me=effect_root(()=>{render_effect(()=>{this.$$r=true;for(const key2 of object_keys(this.$$c)){if(!this.$$p_d[key2]?.reflect)continue;this.$$d[key2]=this.$$c[key2];const attribute_value=get_custom_element_value(key2,this.$$d[key2],this.$$p_d,"toAttribute");if(attribute_value==null){this.removeAttribute(this.$$p_d[key2].attribute||key2)}else{this.setAttribute(this.$$p_d[key2].attribute||key2,attribute_value)}}this.$$r=false})});for(const type in this.$$l){for(const listener of this.$$l[type]){const unsub=this.$$c.$on(type,listener);this.$$l_u.set(listener,unsub)}}this.$$l={}}}attributeChangedCallback(attr2,_oldValue,newValue){if(this.$$r)return;attr2=this.$$g_p(attr2);this.$$d[attr2]=get_custom_element_value(attr2,newValue,this.$$p_d,"toProp");this.$$c?.$set({[attr2]:this.$$d[attr2]})}disconnectedCallback(){this.$$cn=false;Promise.resolve().then(()=>{if(!this.$$cn&&this.$$c){this.$$c.$destroy();this.$$me();this.$$c=void 0}})}$$g_p(attribute_name){return object_keys(this.$$p_d).find(key2=>this.$$p_d[key2].attribute===attribute_name||!this.$$p_d[key2].attribute&&key2.toLowerCase()===attribute_name)||attribute_name}}}function get_custom_element_value(prop2,value,props_definition,transform){const type=props_definition[prop2]?.type;value=type==="Boolean"&&typeof value!=="boolean"?value!=null:value;if(!transform||!props_definition[prop2]){return value}else if(transform==="toAttribute"){switch(type){case"Object":case"Array":return value==null?null:JSON.stringify(value);case"Boolean":return value?"":null;case"Number":return value==null?null:value;default:return value}}else{switch(type){case"Object":case"Array":return value&&JSON.parse(value);case"Boolean":return value;case"Number":return value!=null?+value:value;default:return value}}}function get_custom_elements_slots(element2){const result={};element2.childNodes.forEach(node=>{result[node.slot||"default"]=true});return result}if(dev_fallback_default){let throw_rune_error=function(rune){if(!(rune in globalThis)){let value;Object.defineProperty(globalThis,rune,{configurable:true,get:()=>{if(value!==void 0){return value}rune_outside_svelte(rune)},set:v=>{value=v}})}};throw_rune_error("$state");throw_rune_error("$effect");throw_rune_error("$derived");throw_rune_error("$inspect");throw_rune_error("$props");throw_rune_error("$bindable")}function onMount(fn){if(component_context===null){lifecycle_outside_component("onMount")}if(legacy_mode_flag&&component_context.l!==null){init_update_callbacks(component_context).m.push(fn)}else{user_effect(()=>{const cleanup=untrack(fn);if(typeof cleanup==="function")return cleanup})}}function init_update_callbacks(context){var l=context.l;return l.u??={a:[],b:[],m:[]}}var PUBLIC_VERSION="5";if(typeof window!=="undefined"){((window.__svelte??={}).v??=new Set).add(PUBLIC_VERSION)}function __awaiter(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value)})}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})}var root_1=from_html(``);var root=from_html(``);var $$css={hash:"svelte-1jh3cip",code:"input.svelte-1jh3cip {max-height:25px;overflow-x:auto;}select.svelte-1jh3cip {height:21px;}#name-input.svelte-1jh3cip {flex-grow:0;width:auto;}.modal-input-container.svelte-1jh3cip {width:95%;display:flex;flex-direction:row;align-items:center;gap:10px;margin-top:10px;}.btn-inactive.svelte-1jh3cip {cursor:not-allowed;pointer-events:none;opacity:0.7;}"};function AddPropInput($$anchor,$$props){push($$props,true);append_styles($$anchor,$$css);let totalInputs=prop($$props,"totalInputs",11,0),typeVal=prop($$props,"typeVal",11,"text"),nameVal=prop($$props,"nameVal",15,""),valueVal=prop($$props,"valueVal",15,"");let inputEl=state(proxy(document.createElement("input")));let valueEl=state(proxy(document.createElement("input")));const options={Text:"string",Number:"number",Checkbox:"checkbox",Date:"date",Datetime:"datetime-local"};const convertProps={text:"Text",multitext:"Text",tags:"Text",aliases:"Text",number:"Number",checkbox:"Checkbox",date:"Date",datetime:"Datetime"};let optionVal=state(proxy(options[convertProps[typeVal()]]));onMount(()=>__awaiter(void 0,void 0,void 0,function*(){yield tick();get(inputEl).focus();get(inputEl).select();set(optionVal,options[convertProps[typeVal()]],true);if(typeVal()!=="text")changeType(get(optionVal))}));function changeType(type){get(valueEl).type=type}var div=root();var a=child(div);a.__click=()=>{if(totalInputs()<=1)return;$$props.removeInput($$props.id)};var select=sibling(a,2);select.__change=()=>changeType(get(optionVal));each(select,21,()=>Object.keys(options),index,($$anchor2,key2)=>{var option=root_1();var text2=child(option,true);reset(option);var option_value={};template_effect(()=>{set_text(text2,get(key2));if(option_value!==(option_value=options[get(key2)])){option.value=(option.__value=options[get(key2)])??""}});append($$anchor2,option)});reset(select);var input=sibling(select,2);remove_input_defaults(input);bind_this(input,$$value=>set(inputEl,$$value),()=>get(inputEl));var input_1=sibling(input,2);remove_input_defaults(input_1);bind_this(input_1,$$value=>set(valueEl,$$value),()=>get(valueEl));reset(div);template_effect(()=>{set_class(a,1,`btn-del ${totalInputs()<=1?"btn-inactive":""}`,"svelte-1jh3cip");set_attribute2(a,"tabindex",totalInputs()<=1?-1:0)});bind_select_value(select,()=>get(optionVal),$$value=>set(optionVal,$$value));bind_value(input,nameVal);bind_value(input_1,valueVal);append($$anchor,div);pop()}delegate(["click","change"]);function parseValue(input,type){switch(type){case"number":return Number(input.value);case"checkbox":return Boolean(input.checked);default:return input.value}}function removeExtraCommas(str){return str.replace(/^,*(.*?),*$/g,"$1").replace(/,{2,}/g,",")}function cleanTags(str){let cleanStr=str;for(let index2 in KNOWN_BAD_CHARACTERS){cleanStr=cleanStr.replaceAll(KNOWN_BAD_CHARACTERS[index2],"")}return cleanStr}var KNOWN_BAD_CHARACTERS=["‒","–","—","―","⁏","‽","‘","‚","‛","‹","›","“","”","„","‟","⁅","⁆","⁋","⁎","⁑","⁄","⁊","‰","‱","⁒","†","‡","•","‣","⁃","⁌","⁍","′","‵","‸","※","⁐","⁁","⁂","‖","‑","″","‴","⁗","‶","‷","`","^","‾","‗","⁓",";",":","!","‼","⁉","?","⁈","⁇",".","․","‥","…","'","\"","(",")","[","]","{","}","@","*","&","%","⁔","+","<","=",">","|","~","$","⁕","⁖","⁘","⁙","⁚","⁛","⁜","⁝","⁞","⸀","⸁","⸂","⸃","⸄","⸅","⸆","⸇","⸈","⸉","⸊","⸋","⸌","⸍","⸎","⸏","⸐","⸑","⸒","⸓","⸔","⸕","⸖","⸗","⸜","⸝"," ","#"];var root_12=from_html(``);var root2=from_html(``);var $$css2={hash:"svelte-18exwij",code:".modal-inputs-container.svelte-18exwij {height:200px;width:100%;overflow-y:scroll;border-radius:5px;border-style:solid;display:flex;flex-direction:column;align-items:center;}.modal-add-container.svelte-18exwij {margin-top:10px;}.alert-container.svelte-18exwij {display:flex;flex-direction:column;align-items:center;justify-content:center;margin-bottom:10px;background-color:red;font-weight:bold;}.suggested-props.svelte-18exwij {overflow-y:scroll;max-height:100px;}.hidden.svelte-18exwij {display:none;}"};function AddPropForm($$anchor,$$props){push($$props,true);append_styles($$anchor,$$css2);let alterProp=prop($$props,"alterProp",15);let countInputs=0;let formEl=state(proxy(document.createElement("form")));let errorEl=state(proxy(document.createElement("div")));let alertText=state(".");let inputEls=state(proxy([]));function onDropdownChange(newSetting){$$props.changeSetting(newSetting)}onMount(()=>{$$props.defaultProps.length>0?addInputs($$props.defaultProps):addInputs([{type:"text",name:"",value:""}])});function addInputs(inputs=[{type:"text",name:"",value:""}]){let arr=[];for(let input of inputs){countInputs++;arr.push({id:countInputs,totalInputs:countInputs,typeDef:input.type,nameDef:input.name,valueDef:input.value})}set(inputEls,[...get(inputEls),...arr],true)}function removeInput(id){return __awaiter(this,void 0,void 0,function*(){set(inputEls,get(inputEls).filter(input=>input.id!==id),true);yield tick();let inputs=get(formEl).querySelectorAll("input");if(!inputs)return;inputs[inputs.length-2].focus()})}function addSuggested(prop2){if(!get(inputEls).find(el=>el.nameDef===prop2.name)){addInputs([{type:prop2.widget,name:prop2.name,value:""}])}}function checkDuplicateNames(){let set2=new Set;for(let input of get(inputEls))set2.add(input.nameDef);if(set2.size{var _a;if(!(input.nextElementSibling instanceof HTMLInputElement))return;if(!(input.previousElementSibling instanceof HTMLSelectElement))return;if(!(input.previousElementSibling.children[0]instanceof HTMLOptionElement))return;let name=input.value;if(name===""){input.reportValidity();return}const selectEl=input.previousElementSibling;const htmlType=selectEl.value;const reverseOptions={string:"text",number:"number",checkbox:"checkbox",date:"date","datetime-local":"datetime"};const obsidianType=(_a=reverseOptions[htmlType])!==null&&_a!==void 0?_a:"text";let value=parseValue(input.nextElementSibling,input.nextElementSibling.type);if(typeof value==="string"){if(name==="tags"){value=cleanTags(value)}if(typeof value==="string"&&value.includes(",")){let str=removeExtraCommas(value);value=str.split($$props.delimiter)}}if(value==="")value=null;let propObj={type:obsidianType,data:value,alterProp:alterProp(),delimiter:$$props.delimiter};obj.set(name,propObj)});if(obj.sizeset(errorEl,$$value),()=>get(errorEl));var div_3=sibling(div_1,4);each(div_3,21,()=>$$props.suggestedProps,index,($$anchor2,prop2)=>{var button=root_12();button.__click=()=>addSuggested(get(prop2));var text_1=child(button,true);reset(button);template_effect(()=>set_text(text_1,get(prop2).name));append($$anchor2,button)});reset(div_3);var p=sibling(div_3,4);var text_2=child(p);reset(p);var form=sibling(p,4);var label=child(form);var text_3=child(label);text_3.nodeValue="如何修改笔记中已存在的属性。";var select=sibling(text_3);select.__change=()=>onDropdownChange(alterProp());var option=child(select);option.value=option.__value="ignore";var option_1=sibling(option);option_1.value=option_1.__value="overwrite";var option_2=sibling(option_1);option_2.value=option_2.__value="append";reset(select);reset(label);var div_4=sibling(label,2);each(div_4,21,()=>get(inputEls),input=>input.id,($$anchor2,input,$$index_1)=>{AddPropInput($$anchor2,{get id(){return get(input).id},get totalInputs(){return get(inputEls).length},removeInput,get typeVal(){return get(input).typeDef},set typeVal($$value){get(input).typeDef=$$value},get nameVal(){return get(input).nameDef},set nameVal($$value){get(input).nameDef=$$value},get valueVal(){return get(input).valueDef},set valueVal($$value){get(input).valueDef=$$value}})});reset(div_4);var div_5=sibling(div_4,2);var button_1=child(div_5);button_1.__click=()=>addInputs([{type:"text",name:"",value:""}]);reset(div_5);next(2);reset(form);bind_this(form,$$value=>set(formEl,$$value),()=>get(formEl));reset(div);template_effect(()=>{set_text(text2,get(alertText));set_text(text_2,`If you want to make a List property, use the Text data type and separate + each value with a "${$$props.delimiter??""}".`)});event("submit",form,onSubmit);bind_select_value(select,alterProp);append($$anchor,div);pop()}delegate(["click","change"]);var import_obsidian=require("obsidian");var root_13=from_html(`
      • `);var root3=from_html(`

        以下属性将被添加:

          确认要继续执行吗?

          `);var $$css3={hash:"svelte-n0gky0",code:".msg.svelte-n0gky0 {font-weight:bold;padding-bottom:10px;}"};function AddConfirmForm($$anchor,$$props){push($$props,true);append_styles($$anchor,$$css3);let btnCancel=state(null);let msg=user_derived(()=>createPropMsg($$props.alterProp));function createPropMsg(value){switch(value){case"ignore":return"Any of these text props on existing notes will not be affected.";case"append":return"NOTE: Any pre-existing text props will have their values be appended to.";case"overwrite":return"WARNING: Any pre-existing text props will have their values overwritten."}}function onSubmit(e){e.preventDefault();$$props.submission()}onMount(()=>{get(btnCancel)===null||get(btnCancel)===void 0?void 0:get(btnCancel).focus()});var div=root3();var form=child(div);var p=child(form);var text2=child(p,true);reset(p);var ul=sibling(p,4);each(ul,21,()=>[...$$props.newProps],index,($$anchor2,$$item)=>{var $$array=user_derived(()=>to_array(get($$item),2));let propName=()=>get($$array)[0];let prop2=()=>get($$array)[1];var li=root_13();var text_1=child(li);reset(li);template_effect(()=>set_text(text_1,`${propName()??""}: ${prop2().data??""}`));append($$anchor2,li)});reset(ul);var button=sibling(ul,6);button.__click=function(...$$args){$$props.cancel?.apply(this,$$args)};bind_this(button,$$value=>set(btnCancel,$$value),()=>get(btnCancel));reset(form);reset(div);template_effect(()=>set_text(text2,get(msg)));event("submit",form,onSubmit);append($$anchor,div);pop()}delegate(["click"]);var AddConfirmModal=class extends import_obsidian.Modal{constructor(app,props,alterProp,submission){super(app);this.props=props;this.alterProp=alterProp;this.submission=submission}onSubmit(){this.submission();this.close()}onCancel(){this.close()}onOpen(){this.titleEl.createEl("h2",{text:"添加属性"});this.component=mount(AddConfirmForm,{target:this.contentEl,props:{newProps:this.props,alterProp:this.alterProp,submission:this.onSubmit.bind(this),cancel:this.onCancel.bind(this)}})}};var PropModal=class extends import_obsidian2.Modal{constructor(app,submission,alterProp,delimiter,defaultProps,changeSetting,suggestedProps){super(app);this.submission=submission;this.alterProp=alterProp;this.delimiter=delimiter;this.defaultProps=defaultProps;this.changeSetting=changeSetting;this.suggestedProps=suggestedProps}onConfirm(){this.submission(this.props);this.close()}updateSetting(value){this.alterProp=value;this.changeSetting(value)}onSubmit(props){this.props=props;new AddConfirmModal(this.app,this.props,this.alterProp,this.onConfirm.bind(this)).open()}onOpen(){this.titleEl.createEl("h2",{text:"添加属性"});this.component=mount(AddPropForm,{target:this.contentEl,props:{submission:this.onSubmit.bind(this),alterProp:this.alterProp,delimiter:this.delimiter,defaultProps:this.defaultProps,changeSetting:this.updateSetting.bind(this),suggestedProps:this.suggestedProps}})}};var import_obsidian3=require("obsidian");var SettingTab=class extends import_obsidian3.PluginSettingTab{constructor(app,plugin){super(app,plugin);this.plugin=plugin}display(){let{containerEl}=this;containerEl.empty();new import_obsidian3.Setting(containerEl).setName("如何修改现有属性。").setDesc("当文件中已存在同名属性时,确定要执行的操作。注意,不兼容的类型无法追加。(例如将数字添加到日期)").addDropdown(dropdown=>{dropdown.addOption("overwrite","覆盖属性").addOption("append","追加到属性").addOption("ignore","忽略属性").setValue(this.plugin.settings.alterProp).onChange(async value=>{this.plugin.settings.alterProp=value;await this.plugin.saveSettings()})});new import_obsidian3.Setting(containerEl).setName("递归迭代").setDesc("启用后,在遍历文件夹中的所有文件时,也会遍历任何子文件夹。").addToggle(toggle=>{toggle.setValue(this.plugin.settings.recursive);toggle.onChange(async value=>{this.plugin.settings.recursive=value;await this.plugin.saveSettings()})});new import_obsidian3.Setting(containerEl).setName("列表分隔符").setDesc("设置创建列表时使用的分隔符。默认使用逗号(,)。").addText(text2=>{text2.setValue(this.plugin.settings.delimiter);text2.onChange(async value=>{if(value.length>1){text2.setValue(value[0]);new import_obsidian3.Notice("分隔符必须是单个字符。");return}this.plugin.settings.delimiter=value;await this.plugin.saveSettings()})});new import_obsidian3.Setting(containerEl).setName("默认属性文件").setDesc("选择一个包含属性的文件,该文件将默认载入多属性表单。请输入目标文件的完整路径。(例如:Templates/PropFile 1)").addText(text2=>{text2.setValue(this.plugin.settings.defaultPropPath);text2.onChange(async value=>{this.plugin.settings.defaultPropPath=value;await this.plugin.saveSettings()})})}};var import_obsidian5=require("obsidian");var root_14=from_html(``);var root4=from_html(`

          从文件选择中勾选您希望移除的属性。

          `);var $$css4={hash:"svelte-1c8m26c",code:".name-container.svelte-1c8m26c {display:flex;flex-direction:column;gap:5px;margin-top:10px;margin-bottom:20px;}.alert-container.svelte-1c8m26c {display:flex;flex-direction:column;align-items:center;justify-content:center;margin-bottom:10px;background-color:red;font-weight:bold;}.button-container.svelte-1c8m26c {display:flex;flex-direction:row;justify-content:space-between;}.hidden.svelte-1c8m26c {display:none;}"};function RemovePropForm($$anchor,$$props){push($$props,true);append_styles($$anchor,$$css4);let names=prop($$props,"names",19,()=>[]);let errorEl=state(null);let alertText=state(".");let checkCount=state(0);let inputs=state(proxy([]));user_effect(()=>{const sortedNames=[...names()].sort();set(inputs,sortedNames.map(name=>({name,isChecked:false})),true);set(checkCount,0)});let isMaxChecked=user_derived(()=>get(inputs).length>0&&get(checkCount)>=get(inputs).length);function onCheckboxChange(event2){const target=event2.currentTarget;target.checked?update(checkCount):update(checkCount,-1)}function toggleAll(){const shouldCheckAll=!get(isMaxChecked);set(inputs,get(inputs).map(input=>Object.assign(Object.assign({},input),{isChecked:shouldCheckAll})),true);set(checkCount,shouldCheckAll?get(inputs).length:0,true)}function onSubmit(e){e.preventDefault();if(get(checkCount)===0){set(alertText,"请至少选择一个要移除的属性。");get(errorEl)===null||get(errorEl)===void 0?void 0:get(errorEl).classList.remove("hidden");return}let propNames=get(inputs).filter(input=>input.isChecked).map(input=>input.name);$$props.submission(propNames)}var div=root4();var div_1=child(div);var div_2=sibling(child(div_1),2);var text2=child(div_2,true);reset(div_2);reset(div_1);bind_this(div_1,$$value=>set(errorEl,$$value),()=>get(errorEl));var form=sibling(div_1,4);var div_3=child(form);each(div_3,21,()=>get(inputs),input=>input.name,($$anchor2,input,$$index)=>{var label=root_14();var input_1=child(label);remove_input_defaults(input_1);input_1.__change=event2=>onCheckboxChange(event2);var text_1=sibling(input_1);reset(label);template_effect(()=>set_text(text_1,` ${get(input).name??""}`));bind_checked(input_1,()=>get(input).isChecked,$$value=>get(input).isChecked=$$value);append($$anchor2,label)});reset(div_3);var div_4=sibling(div_3,2);var button=sibling(child(div_4),2);button.__click=toggleAll;var text_2=child(button,true);reset(button);reset(div_4);reset(form);reset(div);template_effect(()=>{set_text(text2,get(alertText));set_text(text_2,get(isMaxChecked)?"Uncheck All":"Check All")});event("submit",form,onSubmit);append($$anchor,div);pop()}delegate(["change","click"]);var import_obsidian4=require("obsidian");var root_15=from_html(`
        • `);var root5=from_html(`

            确认要继续执行吗?

            `);function RemoveConfirmForm($$anchor,$$props){push($$props,true);let names=prop($$props,"names",19,()=>["test","test2"]);let btnCancel=state(null);let word=user_derived(()=>names().length>1?"properties":"property");function onSubmit(e){e.preventDefault();$$props.submission()}onMount(()=>{get(btnCancel)===null||get(btnCancel)===void 0?void 0:get(btnCancel).focus()});var div=root5();var form=child(div);var p=child(form);var text2=child(p);reset(p);var ul=sibling(p,2);each(ul,21,names,index,($$anchor2,name)=>{var li=root_15();var text_1=child(li,true);reset(li);template_effect(()=>set_text(text_1,get(name)));append($$anchor2,li)});reset(ul);var button=sibling(ul,6);button.__click=function(...$$args){$$props.cancel?.apply(this,$$args)};bind_this(button,$$value=>set(btnCancel,$$value),()=>get(btnCancel));reset(form);reset(div);template_effect(()=>set_text(text2,`下列 ${get(word)??""} 将被移除:`));event("submit",form,onSubmit);append($$anchor,div);pop()}delegate(["click"]);var RemoveConfirmModal=class extends import_obsidian4.Modal{constructor(app,names,submission){super(app);this.names=names;this.submission=submission}onSubmit(){this.submission();this.close()}onCancel(){this.close()}onOpen(){if(!this.names||this.names.length===0){new import_obsidian4.Notice("请检查至少一个要删除的属性。");this.close()}this.titleEl.createEl("h2",{text:"移除属性"});this.component=mount(RemoveConfirmForm,{target:this.contentEl,props:{names:this.names,submission:this.onSubmit.bind(this),cancel:this.onCancel.bind(this)}})}};var RemoveModal=class extends import_obsidian5.Modal{constructor(app,names,submission){if(!names||names.length===0){new import_obsidian5.Notice("没有要删除的属性");return}super(app);this.names=names;this.submission=submission}onConfirm(){this.submission(this.props);this.close()}onSubmit(props){this.props=props;new RemoveConfirmModal(this.app,this.props,this.onConfirm.bind(this)).open()}onOpen(){this.titleEl.createEl("h2",{text:"移除属性"});this.component=mount(RemovePropForm,{target:this.contentEl,props:{names:this.names,submission:this.onSubmit.bind(this)}})}};var import_obsidian6=require("obsidian");async function addProperties(fileProcessor,file,props,alterProp,propCache){await fileProcessor(file,frontmatter=>{for(const[key2,value]of props){if(alterProp==="ignore"&&frontmatter[key2]){continue}if(key2==="tags"&&!frontmatter.hasOwnProperty("tags")&&!Array.isArray(value.data)){frontmatter[key2]=[value.data];continue}if(!frontmatter[key2]||alterProp==="overwrite"){frontmatter[key2]=value.data;continue}let type1=value.type;let type2=propCache[key2.toLowerCase()].widget;if(canBeAppended(type1,type2)){if(frontmatter[key2]===value.data)continue;if(!value.data)continue;let arr=mergeIntoArrays(frontmatter[key2],value.data);frontmatter[key2]=arr;continue}else{continue}}})}async function addPropToSet(fileProcessor,set2,file){await fileProcessor(file,frontmatter=>{for(const key2 in frontmatter){set2.add(key2)}});return set2}async function removeProperties(fileProcessor,file,props){await fileProcessor(file,frontmatter=>{for(const prop2 of props){frontmatter[prop2]=void 0}})}function canBeAppended(str1,str2){let arr=["number","date","datetime","checkbox"];if(arr.includes(str1)||arr.includes(str2))return false;return true}function mergeIntoArrays(...args){const arrays=args.map(arg=>Array.isArray(arg)?arg:[arg]);const flattened=arrays.flat();const unique=[...new Set(flattened)];return unique}var defaultSettings={alterProp:"ignore",recursive:true,delimiter:",",defaultPropPath:""};var MultiPropPlugin2=class extends import_obsidian7.Plugin{async loadSettings(){this.settings=Object.assign({},defaultSettings,await this.loadData())}async saveSettings(){await this.saveData(this.settings)}async changeAlterProp(value){this.settings.alterProp=value;await this.saveSettings()}_getFilesFromTabGroup(leaf){if(!leaf){return[]}const files=[];const fileSet=new Set;const activeParent=leaf.parent;if(activeParent instanceof import_obsidian7.WorkspaceTabs){this.app.workspace.iterateAllLeaves(l=>{if(l.parent===activeParent&&l.view instanceof import_obsidian7.FileView){const file=l.view.file;if(file&&!fileSet.has(file.path)){files.push(file);fileSet.add(file.path)}}})}else{const activeWindowRoot=leaf.getRoot();this.app.workspace.iterateAllLeaves(l=>{if(l.getRoot()===activeWindowRoot&&l.view instanceof import_obsidian7.FileView){const file=l.view.file;if(file&&!fileSet.has(file.path)){files.push(file);fileSet.add(file.path)}}})}return files}async onload(){await this.loadSettings();this.addSettingTab(new SettingTab(this.app,this));this.addCommand({id:"add-props-to-current-note",name:"将属性添加到当前笔记",callback:async()=>{const file=this.app.workspace.getActiveFile();if(!file){new import_obsidian7.Notice("没有可添加属性的活动文件。",4e3);return}await this.createPropModal([file])}});this.registerEvent(this.app.workspace.on("file-menu",(menu,node)=>{let title="";let obj;if(node instanceof import_obsidian7.TFile){obj=[node];title="向文件添加属性。"}else{obj=node;title="向文件夹添加属性。"}menu.addItem(item=>{item.setIcon("archive").setTitle(title).onClick(()=>this.createPropModal(obj))})}));this.addCommand({id:"remove-props-from-current-note",name:"Remove props from current note",callback:async()=>{const file=this.app.workspace.getActiveFile();if(!file){new import_obsidian7.Notice("No active file to remove properties from.",4e3);return}await this.createRemoveModal([file])}});this.registerEvent(this.app.workspace.on("file-menu",(menu,node)=>{let title="";let obj;if(node instanceof import_obsidian7.TFile){obj=[node];title="Remove props from file."}else{obj=node;title="Remove props from folder."}menu.addItem(item=>{item.setIcon("archive").setTitle(title).onClick(()=>this.createRemoveModal(obj))})}));this.addCommand({id:"add-props-to-tab-group",name:"将属性添加到活动标签组中的标签页",callback:async()=>{const files=this._getFilesFromTabGroup(this.app.workspace.activeLeaf);if(!files||!files.length){new import_obsidian7.Notice("活动标签组中没有可添加属性的打开标签页。",4e3);return}await this.createPropModal(files)}});this.registerEvent(this.app.workspace.on("tab-group-menu",menu=>{const obj=this._getFilesFromTabGroup(this.app.workspace.getLeaf(false));menu.addItem(item=>{item.setIcon("archive").setTitle("从所有选项卡添加 props").onClick(()=>this.createPropModal(obj))})}));this.addCommand({id:"remove-props-from-tab-group",name:"Remove props from tabs in active tab group",callback:async()=>{const files=this._getFilesFromTabGroup(this.app.workspace.getLeaf(false));if(!files||!files.length){new import_obsidian7.Notice("No open tabs in the active tab group to remove properties from.",4e3);return}await this.createRemoveModal(files)}});this.registerEvent(this.app.workspace.on("tab-group-menu",menu=>{const obj=this._getFilesFromTabGroup(this.app.workspace.getLeaf(false));menu.addItem(item=>{item.setIcon("archive").setTitle("Remove props from all tabs").onClick(()=>this.createRemoveModal(obj))})}));this.registerEvent(this.app.workspace.on("files-menu",(menu,nodes)=>{let obj=nodes;menu.addItem(item=>{item.setIcon("archive").setTitle("向所选文件添加props").onClick(()=>this.createPropModal(obj))})}));this.registerEvent(this.app.workspace.on("files-menu",(menu,nodes)=>{let obj=nodes;menu.addItem(item=>{item.setIcon("archive").setTitle("从选定的文件中删除props").onClick(async()=>this.createRemoveModal(obj))})}));this.registerEvent(this.app.workspace.on("search:results-menu",(menu,leaf)=>{menu.addItem(item=>{item.setIcon("archive").setTitle("在搜索结果中添加props").onClick(()=>{let files=this.getFilesFromSearch(leaf);if(!files.length){new import_obsidian7.Notice("没有要添加属性的文件。",4e3);return}this.createPropModal(files)})})}));this.registerEvent(this.app.workspace.on("search:results-menu",(menu,leaf)=>{menu.addItem(item=>{item.setIcon("archive").setTitle("在搜索结果中移除props").onClick(async()=>{let files=this.getFilesFromSearch(leaf);if(!files.length){new import_obsidian7.Notice("没有要从中删除属性的文件。",4e3);return}this.createRemoveModal(files)})})}))}async getPropsFromFolder(iterable,names){let objs=iterable instanceof import_obsidian7.TFolder?iterable.children:iterable;for(let obj of objs){if(obj instanceof import_obsidian7.TFile&&obj.extension==="md"){names=await addPropToSet(this.app.fileManager.processFrontMatter.bind(this.app.fileManager),names,obj)}if(obj instanceof import_obsidian7.TFolder){if(this.settings.recursive){await this.getPropsFromFolder(obj,names)}}}return[...names].sort()}async getPropsFromFiles(files,names){for(let file of files){if(file instanceof import_obsidian7.TFile&&file.extension==="md"){names=await addPropToSet(this.app.fileManager.processFrontMatter.bind(this.app.fileManager),names,file)}}return[...names]}async searchFolders(iterable,callback){let objs=iterable instanceof import_obsidian7.TFolder?iterable.children:iterable;for(let obj of objs){if(obj instanceof import_obsidian7.TFolder){if(this.settings.recursive){await this.searchFolders(obj,callback)}}if(obj instanceof import_obsidian7.TFile&&obj.extension==="md"){await callback(obj)}}}async searchFiles(files,callback){for(let file of files){if(file instanceof import_obsidian7.TFile&&file.extension==="md"){await callback(file)}}}getFilesFromSearch(leaf){let files=[];leaf.dom.vChildren.children.forEach(e=>{files.push(e.file)});return files}async createPropModal(iterable){let iterateFunc;const allFiles=[];this.searchFolders(iterable,async f=>allFiles.push(f));iterateFunc=async props=>this.searchFolders(iterable,await this.addPropsCallback(props,allFiles.length));let defaultProps;defaultProps=this.loadDefaultProps();const allProps=this.getAllUsedProperties();new PropModal(this.app,iterateFunc,this.settings.alterProp,this.settings.delimiter,defaultProps,this.changeAlterProp.bind(this),allProps).open()}getAllUsedProperties(){const allProps=this.app.metadataCache.getAllPropertyInfos();return Object.values(allProps).sort((a,b)=>a.name.toLowerCase().localeCompare(b.name.toLowerCase()))}async createRemoveModal(iterable){let names;let iterateFunc;names=await this.getPropsFromFolder(iterable,new Set);const allFiles=[];this.searchFolders(iterable,async f=>allFiles.push(f));iterateFunc=props=>this.searchFolders(iterable,this.removePropsCallback(props,allFiles.length));if(names.length===0){new import_obsidian7.Notice("无属性可移除",4e3);return}const sortedNames=[...names].sort((a,b)=>a.toLowerCase()>b.toLowerCase()?1:-1);new RemoveModal(this.app,sortedNames,iterateFunc).open()}readYamlProperties(file){const metadata=this.app.metadataCache.getFileCache(file);const frontmatter=metadata?.frontmatter;if(!frontmatter){new import_obsidian7.Notice("无效的属性模板。",4e3);return}const allPropsWithType=this.app.metadataCache.getAllPropertyInfos();let result=[];for(let[key2,value]of Object.entries(frontmatter)){const keyLower=key2.toLowerCase();const obj={name:key2,value,type:allPropsWithType[keyLower].widget};result.push(obj)}return result}loadDefaultProps(){if(this.settings.defaultPropPath){try{const file=this.app.vault.getAbstractFileByPath(`${this.settings.defaultPropPath}.md`);let tmp=this.readYamlProperties(file);if(tmp===void 0)throw Error("Undefined path.");return tmp}catch(e){new import_obsidian7.Notice(`${e}. 请检查默认属性文件设置中输入的路径是否有效。`,1e4)}}return[{name:"",value:"",type:"text"}]}async addPropsCallback(props,totalFiles){const statusBarItem=this.addStatusBarItem();let count=0;return async file=>{await addProperties(this.app.fileManager.processFrontMatter.bind(this.app.fileManager),file,props,this.settings.alterProp,this.app.metadataCache.getAllPropertyInfos());count++;statusBarItem.setText("Added props to "+count+"/"+totalFiles+" files");if(count===totalFiles){setTimeout(()=>{statusBarItem.remove()},5e3)}}}removePropsCallback(props,totalFiles){const statusBarItem=this.addStatusBarItem();let count=0;return async file=>{await removeProperties(this.app.fileManager.processFrontMatter.bind(this.app.fileManager),file,props);count++;statusBarItem.setText("Removed props from "+count+"/"+totalFiles+" files");if(count===totalFiles){setTimeout(()=>{statusBarItem.remove()},5e3)}}}}; \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 1922fdc..02a5e67 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -4,20 +4,22 @@ "type": "split", "children": [ { - "id": "69f4530e14d73640", + "id": "4455a6750650191e", "type": "tabs", "children": [ { - "id": "9c82e7556515fa96", + "id": "3cb10f3776dfbfbf", "type": "leaf", "state": { - "type": "bases", + "type": "markdown", "state": { - "file": "Bases/元数据列表.base", - "viewName": "表格" + "file": "Collection/YAML用法.md", + "mode": "preview", + "source": false, + "backlinks": false }, - "icon": "lucide-table", - "title": "元数据列表" + "icon": "lucide-file", + "title": "YAML用法" } } ] @@ -122,13 +124,13 @@ "state": { "type": "outline", "state": { - "file": "Bases/元数据列表.base", + "file": "Collection/YAML用法.md", "followCursor": true, "showSearch": false, "searchQuery": "" }, "icon": "lucide-list", - "title": "元数据列表 的大纲" + "title": "YAML用法 的大纲" } } ], @@ -249,41 +251,41 @@ "obsidian-livesync:显示自定义同步": false } }, - "active": "9c82e7556515fa96", + "active": "3cb10f3776dfbfbf", "lastOpenFiles": [ - "Template/Diary.md", - "Template/AutoAdd.md", - "Meta/笔记元数据管理规范.md", + "Collection/PID控制算法.md", "Collection/Markdown语法.md", - "Meta", - "Bases/元数据列表.base", - "Collection/未命名.md", "Collection/linux命令.md", "Collection/KMP算法.md", + "Collection/未命名.md", "Collection/连~都忘记了的小知识.md", - "Collection/YAML用法.md", - "Collection/PID控制算法.md", - "Meta/🏡HOME.md", - "README.md", - "Diary/2026/04/2026-04-16 周四.md", - "未命名.canvas", - "School/vivado_ip.md", - "YueQian/相关网站.md", - "Archive/test.md", - "Collection/配置备忘/navidrome.md", - "Collection/配置备忘/openclash配置.md", - "Collection/配置备忘/Typecho插件Aplayer使用教程.md", + "BlogWebsite/Article/通过SSH密钥连接LINUX服务器.md", + "BlogWebsite/Article/飞牛搭配mtphotos使用passnet内网穿透服务优雅快速的分享照片访问.md", "Bases/为什么会消失.md", + "README.md", + "Meta/笔记元数据管理规范.md", + "Meta/🏡HOME.md", + "YueQian/assets/相关网站/相关网站_Excalidraw20260121.md", + "YueQian/相关网站.md", + "Collection/配置备忘/openclash配置.md", + "Collection/配置备忘/navidrome.md", + "Collection/配置备忘/Typecho插件Aplayer使用教程.md", + "BlogWebsite/Article/在ARM架构的Ubuntu中使用Docker Compose部署MTPhotos.md", + "BlogWebsite/Article/Debian从零开始使用pnpm部署项目.md", + "BlogWebsite/Article/docker的容器和镜像的删除操作.md", + "BlogWebsite/Article/MarkdownTest.md", + "BlogWebsite/Article/Obsidian使用飞牛WebDAV实现多端同步.md", + "BlogWebsite/Page/关于与声明.md", + "BlogWebsite/Page/友情链接.md", + "Excalidraw/Drawing 20260122.md", + "Template/AutoAdd.md", + "Bases/元数据列表.base", + "Meta", + "未命名.canvas", "Bases/Diary.base", "Bases", "Bases/未命名.base", "Archive", - "Diary/2026/02/2026-02-07 周六.md", - "Diary/2026/01/2026-01-28 周三.md", - "Diary/2026/01/2026-01-29 周四.md", - "Diary/2026/01/2026-01-30 周五.md", - "Diary/2026/01/2026-01-31 周六.md", - "Diary/2026/01/2026-01-27 周二.md", "Bases/Diay.base", "Diary/2026/04", "Diary/2026/01", diff --git a/Archive/test.md b/Archive/test.md index c9e2b37..c8406fc 100644 --- a/Archive/test.md +++ b/Archive/test.md @@ -1,7 +1,4 @@ --- -tags: - - empty -aliases: empty -日期: 2026/4/15 +{} --- 这是一个测试这是一个测试 \ No newline at end of file diff --git a/Archive/未命名 1.md b/Archive/未命名 1.md new file mode 100644 index 0000000..ebd0aa3 --- /dev/null +++ b/Archive/未命名 1.md @@ -0,0 +1,3 @@ +--- +{} +--- diff --git a/Archive/未命名.md b/Archive/未命名.md new file mode 100644 index 0000000..ebd0aa3 --- /dev/null +++ b/Archive/未命名.md @@ -0,0 +1,3 @@ +--- +{} +--- diff --git a/Bases/为什么会消失.md b/Bases/为什么会消失.md index af6e3a6..ebd0aa3 100644 --- a/Bases/为什么会消失.md +++ b/Bases/为什么会消失.md @@ -1,7 +1,3 @@ --- -tags: - - empty -aliases: empty -笔记类型: -日期: 2026/4/17 +{} --- diff --git a/Bases/元数据列表.base b/Bases/元数据列表.base index 4bf2b7a..9f16f76 100644 --- a/Bases/元数据列表.base +++ b/Bases/元数据列表.base @@ -1,29 +1,26 @@ +properties: + note.日期: + displayName: date + note.date: + displayName: date + note.笔记类型: + displayName: type + note.达到预期: + displayName: star views: - type: table name: 表格 order: - file.name - - aliases - - tags - type - - status - - star - - date - - created - - 笔记类型 - - 达到预期 - - 日期 - sort: - - property: 笔记类型 - direction: DESC - - property: file.name - direction: ASC + sort: [] columnSize: file.name: 210 note.aliases: 136 note.tags: 170 note.type: 107 - note.status: 97 + note.status: 126 note.date: 77 note.created: 88 note.笔记类型: 100 + note.日期: 261 diff --git a/BlogWebsite/Article/Debian从零开始使用pnpm部署项目.md b/BlogWebsite/Article/Debian从零开始使用pnpm部署项目.md index eb058bf..16e16be 100644 --- a/BlogWebsite/Article/Debian从零开始使用pnpm部署项目.md +++ b/BlogWebsite/Article/Debian从零开始使用pnpm部署项目.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- ## 安装nodejs22+环境 ### 使用使用 NodeSource 首先,添加 NodeSource 的 PPA(个人包存档) diff --git a/BlogWebsite/Article/MarkdownTest.md b/BlogWebsite/Article/MarkdownTest.md index 9d2eea2..c38cfa6 100644 --- a/BlogWebsite/Article/MarkdownTest.md +++ b/BlogWebsite/Article/MarkdownTest.md @@ -1,5 +1,11 @@ --- -笔记类型: +aliases: +tags: + - +type: +status: +star: false +date: --- # 这是一级标题 diff --git a/BlogWebsite/Article/Obsidian使用飞牛WebDAV实现多端同步.md b/BlogWebsite/Article/Obsidian使用飞牛WebDAV实现多端同步.md index 9d5d2f3..55d28b3 100644 --- a/BlogWebsite/Article/Obsidian使用飞牛WebDAV实现多端同步.md +++ b/BlogWebsite/Article/Obsidian使用飞牛WebDAV实现多端同步.md @@ -1,12 +1,11 @@ --- +aliases: tags: - - "#飞牛" - - Webdav - - obsidian - - 同步 -aliases: empty -日期: 2026/1/24 -笔记类型: + - +type: +status: +star: false +date: --- # Obsidian使用飞牛WebDAV实现多端同步 ## 前言 diff --git a/BlogWebsite/Article/docker的容器和镜像的删除操作.md b/BlogWebsite/Article/docker的容器和镜像的删除操作.md index 1b4ffd4..148dac0 100644 --- a/BlogWebsite/Article/docker的容器和镜像的删除操作.md +++ b/BlogWebsite/Article/docker的容器和镜像的删除操作.md @@ -1,5 +1,11 @@ --- -笔记类型: +aliases: +tags: + - +type: +status: +star: false +date: --- # Docker容器和镜像的删除操作 ## 容器和镜像的关系 diff --git a/BlogWebsite/Article/在ARM架构的Ubuntu中使用Docker Compose部署MTPhotos.md b/BlogWebsite/Article/在ARM架构的Ubuntu中使用Docker Compose部署MTPhotos.md index d26ee52..3cb46a2 100644 --- a/BlogWebsite/Article/在ARM架构的Ubuntu中使用Docker Compose部署MTPhotos.md +++ b/BlogWebsite/Article/在ARM架构的Ubuntu中使用Docker Compose部署MTPhotos.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # 在ARM架构的Ubuntu中使用Docker Compose部署MTPhotos ## 前言 之前,我总是使用1panel面板的Docker进行图形化的操作,直到有一天,我遇到了一个需要三个镜像配合的项目——MTPhotos diff --git a/BlogWebsite/Article/通过SSH密钥连接LINUX服务器.md b/BlogWebsite/Article/通过SSH密钥连接LINUX服务器.md index b6c1712..5dce86b 100644 --- a/BlogWebsite/Article/通过SSH密钥连接LINUX服务器.md +++ b/BlogWebsite/Article/通过SSH密钥连接LINUX服务器.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # SSH舍弃密码,拥抱密钥 ## 前提条件 使用**ROOT**用户(普通用户请自己加sudo)、客户端使用Windows PowerShell终端、服务端使用Debian12+或是Ubuntu24+ diff --git a/BlogWebsite/Article/飞牛搭配mtphotos使用passnet内网穿透服务优雅快速的分享照片访问.md b/BlogWebsite/Article/飞牛搭配mtphotos使用passnet内网穿透服务优雅快速的分享照片访问.md index c91cdf4..ef68785 100644 --- a/BlogWebsite/Article/飞牛搭配mtphotos使用passnet内网穿透服务优雅快速的分享照片访问.md +++ b/BlogWebsite/Article/飞牛搭配mtphotos使用passnet内网穿透服务优雅快速的分享照片访问.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- ## 依旧前言 ### 瞎比比 博主在八月下旬去川西耍了一耍(小环线自驾游),也是拍了很多照片,用之前的arm搭建的mtphotos实现图片备份跟共享的还是非常舒服的,但是呢,博主用的是ipv6的网络,朋友们使用流量呢还是很顺滑的,就是连上wifi后呢基本就不行了,现在大部分wifi呢依旧只提供ipv4,而且博主用的还是ddns,众所周知呢,国内服务器没有备案呢是用不了80跟443一类的标准端口的,所以博主跟朋友们分享的链接后面跟了个端口看着就非常的不优雅,正好飞牛和零刻联合出了个小NAS,正好就能解决博主之前的一大堆问题,废话不多说下面是正文。 diff --git a/BlogWebsite/Page/关于与声明.md b/BlogWebsite/Page/关于与声明.md index f59d9a0..722103d 100644 --- a/BlogWebsite/Page/关于与声明.md +++ b/BlogWebsite/Page/关于与声明.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- ## 关于这个博客 ### 🌱 为什么会有这个博客? 这个小小的角落,诞生于 2025 年的一个周末。当时我发现自己在学习和生活中积累了很多零散的思考 —— 可能是一段代码调试的心得、一本好书的批注、一次旅行中的观察,或是对某个社会现象的浅见。 diff --git a/BlogWebsite/Page/友情链接.md b/BlogWebsite/Page/友情链接.md index 2e20a9c..f4fda78 100644 --- a/BlogWebsite/Page/友情链接.md +++ b/BlogWebsite/Page/友情链接.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- !!! [icon]https://mono.imakashi.eu.org/overall/headicon2.webp [link]https://imakashi.eu.org/blog diff --git a/Collection/KMP算法.md b/Collection/KMP算法.md index a2e284c..deb678c 100644 --- a/Collection/KMP算法.md +++ b/Collection/KMP算法.md @@ -1,9 +1,10 @@ --- tags: - - KMP - - AI生成 - - C语言 -笔记类型: +aliases: +type: +status: +star: false +date: --- KMP(Knuth-Morris-Pratt)算法是一种用于字符串匹配的算法,它能在O(n+m)的时间复杂度内完成字符串的匹配,其中n是主串的长度,m是模式串的长度。这个算法是由Donald Knuth、Vaughan Pratt和Vaughan Morris在1970年共同发明的。 diff --git a/Collection/Markdown语法.md b/Collection/Markdown语法.md index d6bf2fb..7de6acc 100644 --- a/Collection/Markdown语法.md +++ b/Collection/Markdown语法.md @@ -1,14 +1,10 @@ --- tags: - - Markdown语法 - - 标记语言 - - Obsidian aliases: - - MD语法 - - Obsidian Markdown - - Markdown教程 -笔记类型: -日期: 2026/4/17 +type: +status: +star: false +date: --- # **语法速查表** diff --git a/Collection/PID控制算法.md b/Collection/PID控制算法.md index a226536..a62a0e6 100644 --- a/Collection/PID控制算法.md +++ b/Collection/PID控制算法.md @@ -1,9 +1,10 @@ --- tags: - - PID - - AI生成 - - C语言 -笔记类型: +aliases: +type: +status: +star: false +date: --- 以下是一个简单的C语言实现PID控制算法的程序示例: diff --git a/Collection/YAML用法.md b/Collection/YAML用法.md index 63c9a72..5412e3b 100644 --- a/Collection/YAML用法.md +++ b/Collection/YAML用法.md @@ -1,10 +1,10 @@ --- tags: - - yaml aliases: - - yaml用法 -笔记类型: -日期: 2026/4/17 +type: +status: +star: false +date: --- **YAML (YAML Ain't Markup Language) 是一种以数据为中心、对人类友好的数据序列化语言。它因其简洁和高可读性而备受青睐,尤其是在配置文件和知识管理领域。** diff --git a/Collection/YoudaoyunNotes/01Linux基础/00-简介.md b/Collection/YoudaoyunNotes/01Linux基础/00-简介.md index 06955cc..b53cdd9 100644 --- a/Collection/YoudaoyunNotes/01Linux基础/00-简介.md +++ b/Collection/YoudaoyunNotes/01Linux基础/00-简介.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- 李林峰 课程学习内容概览: diff --git a/Collection/YoudaoyunNotes/01Linux基础/01-开发环境安装.md b/Collection/YoudaoyunNotes/01Linux基础/01-开发环境安装.md index 324f740..7e3a8a8 100644 --- a/Collection/YoudaoyunNotes/01Linux基础/01-开发环境安装.md +++ b/Collection/YoudaoyunNotes/01Linux基础/01-开发环境安装.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- 1. **VMware虚拟机** VMware 是一款虚拟化软件,可在物理计算机(宿主系统)上创建多个独立的虚拟计算机(虚拟机)。每个虚拟机可运行独立的操作系统(如 Windows、Linux、macOS 等),并共享宿主硬件资源(CPU、内存、存储等),但彼此隔离、互不干扰。 diff --git a/Collection/YoudaoyunNotes/01Linux基础/02_Linux概述.md b/Collection/YoudaoyunNotes/01Linux基础/02_Linux概述.md index 6962b55..fe3ba71 100644 --- a/Collection/YoudaoyunNotes/01Linux基础/02_Linux概述.md +++ b/Collection/YoudaoyunNotes/01Linux基础/02_Linux概述.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # **1. Linux简介** Linux最初是1991年由芬兰的Linus Torvalds发起,目的是为了避开当时的类Unix的版权问题,Linux从一开始就是开源的,由网上组织松散的开发者协作完成,并在1994年开始遵循GPL许可协议。 diff --git a/Collection/YoudaoyunNotes/01Linux基础/03_文件互通.md b/Collection/YoudaoyunNotes/01Linux基础/03_文件互通.md index 98c4e9f..86778eb 100644 --- a/Collection/YoudaoyunNotes/01Linux基础/03_文件互通.md +++ b/Collection/YoudaoyunNotes/01Linux基础/03_文件互通.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # **文件互通** 做编程开发,经常需要将文件在不同的机器之间来回倒腾,比如安装了vmware之后,经常需要在宿主机(Widndows)和Ubuntu之间转移文件。 diff --git a/Collection/YoudaoyunNotes/01Linux基础/04_命令行编辑与编译.md b/Collection/YoudaoyunNotes/01Linux基础/04_命令行编辑与编译.md index 2e6f808..2630aaf 100644 --- a/Collection/YoudaoyunNotes/01Linux基础/04_命令行编辑与编译.md +++ b/Collection/YoudaoyunNotes/01Linux基础/04_命令行编辑与编译.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # **1. 编辑器** ## **1.1 图形编辑器** diff --git a/Collection/YoudaoyunNotes/01Linux基础/05_网络配置.md b/Collection/YoudaoyunNotes/01Linux基础/05_网络配置.md index e42086c..ba267da 100644 --- a/Collection/YoudaoyunNotes/01Linux基础/05_网络配置.md +++ b/Collection/YoudaoyunNotes/01Linux基础/05_网络配置.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # **1. 虚拟机VMware的网络配置** 虚拟机的网络适配器的模式有两种: diff --git a/Collection/YoudaoyunNotes/01Linux基础/06_常用Shell命令.md b/Collection/YoudaoyunNotes/01Linux基础/06_常用Shell命令.md index bed0298..9905da6 100644 --- a/Collection/YoudaoyunNotes/01Linux基础/06_常用Shell命令.md +++ b/Collection/YoudaoyunNotes/01Linux基础/06_常用Shell命令.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # shell (壳) 可以调用内核执行响应动作的用户指令或程序 diff --git a/Collection/YoudaoyunNotes/02C语言/01-C语言概述.md b/Collection/YoudaoyunNotes/02C语言/01-C语言概述.md index 720dd3a..10f91c9 100644 --- a/Collection/YoudaoyunNotes/02C语言/01-C语言概述.md +++ b/Collection/YoudaoyunNotes/02C语言/01-C语言概述.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # 一、概述 C 语言是一种通用的、 diff --git a/Collection/YoudaoyunNotes/02C语言/03-数据类型及IO流.md b/Collection/YoudaoyunNotes/02C语言/03-数据类型及IO流.md index 3e49c05..e1047b5 100644 --- a/Collection/YoudaoyunNotes/02C语言/03-数据类型及IO流.md +++ b/Collection/YoudaoyunNotes/02C语言/03-数据类型及IO流.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # 一、基本数据类型 1. **字符型** diff --git a/Collection/YoudaoyunNotes/02C语言/05-控制与分支.md b/Collection/YoudaoyunNotes/02C语言/05-控制与分支.md index 01c508c..3559fad 100644 --- a/Collection/YoudaoyunNotes/02C语言/05-控制与分支.md +++ b/Collection/YoudaoyunNotes/02C语言/05-控制与分支.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # 一、分支控制 1. **二路分支** diff --git a/Collection/YoudaoyunNotes/02C语言/06-函数基础.md b/Collection/YoudaoyunNotes/02C语言/06-函数基础.md index 6847ddb..8a22529 100644 --- a/Collection/YoudaoyunNotes/02C语言/06-函数基础.md +++ b/Collection/YoudaoyunNotes/02C语言/06-函数基础.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # 一、概述 在C语言中,函数指的是功能模块。一个典型的C语言程序,就是由一个个的功能模块拼接起来的整体,因此C语言也称模块化语言。 diff --git a/Collection/YoudaoyunNotes/02C语言/07-数组.md b/Collection/YoudaoyunNotes/02C语言/07-数组.md index ed24813..e3d17e2 100644 --- a/Collection/YoudaoyunNotes/02C语言/07-数组.md +++ b/Collection/YoudaoyunNotes/02C语言/07-数组.md @@ -1,6 +1,8 @@ --- tags: - - empty -aliases: empty -日期: 2026/1/23 +aliases: +type: +status: +star: false +date: --- diff --git a/Collection/YoudaoyunNotes/02C语言/08-指针.md b/Collection/YoudaoyunNotes/02C语言/08-指针.md index af75135..22af20c 100644 --- a/Collection/YoudaoyunNotes/02C语言/08-指针.md +++ b/Collection/YoudaoyunNotes/02C语言/08-指针.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # **1. 准备知识** **1.1 内存地址** diff --git a/Collection/YoudaoyunNotes/02C语言/09-数组与指针进阶.md b/Collection/YoudaoyunNotes/02C语言/09-数组与指针进阶.md index 28bbff5..a21f1f4 100644 --- a/Collection/YoudaoyunNotes/02C语言/09-数组与指针进阶.md +++ b/Collection/YoudaoyunNotes/02C语言/09-数组与指针进阶.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # 一、数组与指针间的转换 1. **数组与指针混合运算时** diff --git a/Collection/YoudaoyunNotes/02C语言/10-函数进阶.md b/Collection/YoudaoyunNotes/02C语言/10-函数进阶.md index 2b68cc2..a49d3ee 100644 --- a/Collection/YoudaoyunNotes/02C语言/10-函数进阶.md +++ b/Collection/YoudaoyunNotes/02C语言/10-函数进阶.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # 一、C语言函数库 - 概念:在C语言发展过程中收录了很多经典的数据操作方法----函数,将这些函数收录归纳汇总为开发人员方便使用的API接口(函数),如下图所示的各种操作接口库。 diff --git a/Collection/YoudaoyunNotes/02C语言/11-内存管理.md b/Collection/YoudaoyunNotes/02C语言/11-内存管理.md index 133ad86..90a546a 100644 --- a/Collection/YoudaoyunNotes/02C语言/11-内存管理.md +++ b/Collection/YoudaoyunNotes/02C语言/11-内存管理.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # **C语言程序内存布局** 任何一个程序,正常运行都需要内存资源,用来存放诸如变量、常量、函数代码等等。这些不同的内容,所存储的内存区域是不同的,且不同的区域有不同的特性。因此我们需要研究C语言进程的内存布局,逐个了解不同内存区域的特性。 diff --git a/Collection/YoudaoyunNotes/02C语言/14-预处理与文件组织.md b/Collection/YoudaoyunNotes/02C语言/14-预处理与文件组织.md index f70bc3e..b813624 100644 --- a/Collection/YoudaoyunNotes/02C语言/14-预处理与文件组织.md +++ b/Collection/YoudaoyunNotes/02C语言/14-预处理与文件组织.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # 前导知识 ## GCC 编译一共分4个阶段:**预处理、编译、汇编、链接** diff --git a/Collection/linux命令.md b/Collection/linux命令.md index ae3bd6b..4d7ad32 100644 --- a/Collection/linux命令.md +++ b/Collection/linux命令.md @@ -1,7 +1,10 @@ --- tags: - - Linux -笔记类型: +aliases: +type: +status: +star: false +date: --- # 一些好用的Linux命令 - source 用来重新加载配置文件 ^2b32fc diff --git a/Collection/未命名.md b/Collection/未命名.md index 9a5dbb7..e3d17e2 100644 --- a/Collection/未命名.md +++ b/Collection/未命名.md @@ -1,9 +1,8 @@ --- -达到预期: false -笔记类型: tags: - - - - empty -aliases: empty -日期: 2026/4/18 +aliases: +type: +status: +star: false +date: --- diff --git a/Collection/连~都忘记了的小知识.md b/Collection/连~都忘记了的小知识.md index f4b22f9..dfe4a6f 100644 --- a/Collection/连~都忘记了的小知识.md +++ b/Collection/连~都忘记了的小知识.md @@ -1,10 +1,10 @@ --- tags: - - C语言 - - Linux aliases: - - 小知识 -日期: 2026/1/23 +type: +status: +star: false +date: --- - 字符类型数字转整形数字要 `-'0'` ```c diff --git a/Collection/配置备忘/Typecho插件Aplayer使用教程.md b/Collection/配置备忘/Typecho插件Aplayer使用教程.md index ed3e02b..b2a2cc3 100644 --- a/Collection/配置备忘/Typecho插件Aplayer使用教程.md +++ b/Collection/配置备忘/Typecho插件Aplayer使用教程.md @@ -1,3 +1,12 @@ +--- +aliases: +tags: + - +type: +status: +star: false +date: +--- # APlayer-Typecho-Plugin Typecho plugin for a beautiful html5 music player https://github.com/DIYgod/APlayer diff --git a/Collection/配置备忘/navidrome.md b/Collection/配置备忘/navidrome.md index d898350..a5e5059 100644 --- a/Collection/配置备忘/navidrome.md +++ b/Collection/配置备忘/navidrome.md @@ -1,5 +1,11 @@ --- -笔记类型: +aliases: +tags: + - +type: +status: +star: false +date: --- # 启用用户界面中的转码配置 ND_ENABLETRANSCODINGCONFIG = true diff --git a/Collection/配置备忘/openclash配置.md b/Collection/配置备忘/openclash配置.md index 6f27249..70c81f5 100644 --- a/Collection/配置备忘/openclash配置.md +++ b/Collection/配置备忘/openclash配置.md @@ -1,8 +1,9 @@ --- tags: - - clash - - 软路由 -aliases: empty -日期: 2026/4/11 +aliases: +type: +status: +star: false +date: --- # 等等再写 \ No newline at end of file diff --git a/Diary/2026/01/2026-01-19 周一.md b/Diary/2026/01/2026-01-19 周一.md index 0ba6c50..ed728f7 100644 --- a/Diary/2026/01/2026-01-19 周一.md +++ b/Diary/2026/01/2026-01-19 周一.md @@ -2,7 +2,7 @@ tags: - 日记 - Diary -日期: 2026/1/19 +date: 2026/1/19 aliases: - 开学第一天 --- diff --git a/Excalidraw/Drawing 20260122.md b/Excalidraw/Drawing 20260122.md index 3eab04e..af7b097 100644 --- a/Excalidraw/Drawing 20260122.md +++ b/Excalidraw/Drawing 20260122.md @@ -2,7 +2,6 @@ excalidraw-plugin: parsed tags: - excalidraw -笔记类型: --- ==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving' diff --git a/Meta/🏡HOME.md b/Meta/🏡HOME.md index a7414ad..4bb0fee 100644 --- a/Meta/🏡HOME.md +++ b/Meta/🏡HOME.md @@ -5,7 +5,7 @@ tags: aliases: - 导航 - home -日期: 2026/4/16 +date: 2026/4/16 --- ## 准备将这个页面作为导航页,还没想好怎么做 ```dataviewjs diff --git a/School/AI实验报告提示词.md b/School/AI实验报告提示词.md index 639abcf..e3ac6bb 100644 --- a/School/AI实验报告提示词.md +++ b/School/AI实验报告提示词.md @@ -1,8 +1,8 @@ --- tags: -- AI -- 实验报告 -- school + - AI + - 实验报告 + - school --- diff --git a/School/vivado_ip.md b/School/vivado_ip.md index aac2c70..d3fafcd 100644 --- a/School/vivado_ip.md +++ b/School/vivado_ip.md @@ -1,7 +1,7 @@ --- tags: -- vivado -- school + - vivado + - school --- # Vivado使用乘法器、除法器IP核实现乘除取余仿真 diff --git a/School/大三下嵌入式软件测试论文文献引用清单.md b/School/大三下嵌入式软件测试论文文献引用清单.md index acff4db..1d74daf 100644 --- a/School/大三下嵌入式软件测试论文文献引用清单.md +++ b/School/大三下嵌入式软件测试论文文献引用清单.md @@ -1,7 +1,7 @@ --- -tags: -- school -- 文献 +tags: + - school + - 文献 --- # 十五篇 diff --git a/YueQian/Homework/1-23-5题存疑.md b/YueQian/Homework/1-23-5题存疑.md index 6845e42..8aadec5 100644 --- a/YueQian/Homework/1-23-5题存疑.md +++ b/YueQian/Homework/1-23-5题存疑.md @@ -3,7 +3,6 @@ tags: - "#作业" - C语言 aliases: empty -日期: 2026/1/23 --- 1.定义`int num = 255`,分别以十进制(有符号)、无符号十进制、八进制(带 / 不带前缀)、十六进制(小写带 / 不带前缀、大写带 / 不带前缀) 格式输出; ```c diff --git a/YueQian/Homework/1-29作业.md b/YueQian/Homework/1-29作业.md index aa20e7b..5f8127e 100644 --- a/YueQian/Homework/1-29作业.md +++ b/YueQian/Homework/1-29作业.md @@ -3,7 +3,6 @@ tags: - 作业 - C语言 aliases: empty -日期: 2026/1/29 --- **1.定义一个长度为10的数组并从键盘输入10个整数对数组进行赋值,并实现下列功能** diff --git a/YueQian/Homework/1.19-已完成.md b/YueQian/Homework/1.19-已完成.md index 080ecd5..9248c8f 100644 --- a/YueQian/Homework/1.19-已完成.md +++ b/YueQian/Homework/1.19-已完成.md @@ -1,3 +1,6 @@ +--- +{} +--- 1. 这里写题目 ```c #include diff --git a/YueQian/Homework/2-4.md b/YueQian/Homework/2-4.md index 879b01d..4917272 100644 --- a/YueQian/Homework/2-4.md +++ b/YueQian/Homework/2-4.md @@ -3,7 +3,6 @@ tags: - 作业 - C语言 aliases: empty -日期: 2026/2/4 --- # 2-4作业 diff --git a/YueQian/assets/相关网站/相关网站_Excalidraw20260121.md b/YueQian/assets/相关网站/相关网站_Excalidraw20260121.md index fae21cb..926f967 100644 --- a/YueQian/assets/相关网站/相关网站_Excalidraw20260121.md +++ b/YueQian/assets/相关网站/相关网站_Excalidraw20260121.md @@ -1,8 +1,7 @@ --- - excalidraw-plugin: parsed -tags: [excalidraw] - +tags: + - excalidraw --- ==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'