From ab9772b70e4561a725fa8a7d2f3d05416a4ee503 Mon Sep 17 00:00:00 2001 From: Wouter Ernsting Date: Sun, 27 Sep 2026 14:19:46 +1000 Subject: [PATCH 1/2] feat: selectable note for task queries with query.file use. add configurable limit --- .gitignore | 1 + main.js | 49 +- package-lock.json | 67 +- package.json | 8 +- pnpm-lock.yaml | 3159 ++++++++++++++++++++++++++++++ pnpm-workspace.yaml | 2 + src/i18n.ts | 22 + src/modals/board-config-modal.ts | 108 +- src/settings.ts | 4 +- src/types.ts | 35 +- src/view.ts | 117 +- styles.css | 70 + 12 files changed, 3578 insertions(+), 64 deletions(-) create mode 100644 .gitignore create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/main.js b/main.js index b4876f6..b92c176 100644 --- a/main.js +++ b/main.js @@ -3,81 +3,82 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ -"use strict";var Ee=Object.defineProperty;var dt=Object.getOwnPropertyDescriptor;var ct=Object.getOwnPropertyNames;var pt=Object.prototype.hasOwnProperty;var ut=(r,a)=>{for(var e in a)Ee(r,e,{get:a[e],enumerable:!0})},ht=(r,a,e,t)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of ct(a))!pt.call(r,s)&&s!==e&&Ee(r,s,{get:()=>a[s],enumerable:!(t=dt(a,s))||t.enumerable});return r};var gt=r=>ht(Ee({},"__esModule",{value:!0}),r);var Xt={};ut(Xt,{default:()=>we});module.exports=gt(Xt);var ye=require("obsidian");var D=require("obsidian");var Ae=require("obsidian"),He={"about.author1":"\u79D1\u6280\u884C\u4E1A\u4EBA\u624D\u4E13\u5BB6\uFF0C15\u5E74\u8001\u730E\u5934\uFF0C\u4E92\u8054\u7F51/AI/\u673A\u5668\u4EBA\uFF0C\u9762\u8BD5\u8D85\u4E07\u4EBA\u3002","about.author2":"\u751F\u4EA7\u529B\u7CFB\u7EDF\u4E13\u5BB6\uFF0C\u4E13\u6CE816\u5E74+\uFF0C\u6253\u9020\u9AD8\u6548\u5DE5\u4F5C\u548C\u6210\u957F\u4F53\u7CFB\u3002","about.author3":"\u81EA\u5A92\u4F53\u5168\u7F51\u540C\u540D\uFF1A\u730E\u4EBA\u79D1\u53D4\u3002","about.authorTitle":"\u4F5C\u8005\uFF1A\u730E\u4EBA\u79D1\u53D4","about.githubBtn":"\u6253\u5F00 GitHub \u4ED3\u5E93","about.githubDesc":"\u67E5\u770B\u63D2\u4EF6\u6E90\u4EE3\u7801\u3001\u8BE6\u7EC6\u7684\u4F7F\u7528\u8BF4\u660E\u3001\u66F4\u65B0\u65E5\u5FD7\u3001\u95EE\u9898\u53CD\u9988\u7B49\u3002","about.githubTitle":"Github Repository","about.intro1":"TaskFlow \u662F\u4E00\u4E2A\u9762\u5411 Obsidian Tasks \u7684\u884C\u52A8\u5DE5\u4F5C\u53F0\u3002","about.intro2":"\u5B83\u4E0D\u6539\u53D8\u4F60\u4EFB\u4F55\u65E2\u6709\u7684\u4EFB\u52A1\u8BB0\u5F55\u8BED\u6CD5\u4E0E\u67E5\u8BE2\u903B\u8F91\uFF0C\u800C\u662F\u5728\u4EFB\u52A1\u5217\u8868\u4E4B\u4E0A\uFF0C\u6784\u5EFA\u4E86\u4E00\u5C42\u52A8\u6001\u7684 \u201C\u884C\u52A8\u7A7A\u95F4\uFF08Action Space\uFF09\u201D\u3002","about.intro3":"\u5B83\u91CD\u65B0\u7EC4\u7EC7\u4F60\u7684\u4EFB\u52A1\uFF0C\u8BA9\u4F60\u4ECE\u201C\u7BA1\u7406\u6709\u54EA\u4E9B\u4E8B\u60C5\u8981\u505A\u201D\uFF0C\u8F6C\u5411\u201C\u5FEB\u901F\u627E\u5230\u73B0\u5728\u8BE5\u505A\u4EC0\u4E48\u201D\u3002\u901A\u8FC7\u65F6\u95F4\u3001GTD \u548C\u573A\u666F\u7EF4\u5EA6\u964D\u4F4E\u9009\u62E9\u6210\u672C\uFF0C\u8BA9\u884C\u52A8\u66F4\u5FEB\u53D1\u751F\u3002","about.introTitle":"TaskFlow \u7B80\u4ECB","about.moreBtn":"\u8BBF\u95EE lifein.vip","about.moreDesc":"\u793A\u4F8B\u5E93\u3001\u63D2\u4EF6\u3001\u811A\u672C\u3001\u7ECF\u9A8C\u7B49","about.moreTitle":"\u66F4\u591A\u5173\u4E8E\u79D1\u53D4\u7684 Obsidian \u751F\u4EA7\u529B\u4E0E\u77E5\u8BC6\u7BA1\u7406\u5B9E\u8DF5","banner.line":"\u4F60\u4E0D\u7F3A\u4EFB\u52A1\uFF0C\u4F60\u7F3A\u7684\u662F\u4E0B\u4E00\u6B65\u3002","common.builtinSuffix":" \xB7 \u5185\u7F6E","common.cancel":"\u53D6\u6D88","common.confirm":"\u786E\u5B9A","common.close":"\u5173\u95ED","common.delete":"\u5220\u9664","common.edit":"\u7F16\u8F91","common.remove":"\u79FB\u9664","common.reset":"\u6062\u590D\u9ED8\u8BA4","common.save":"\u4FDD\u5B58","common.thisGroup":"\u8BE5\u5206\u7EC4","default.slogan":"\u4ECE\u7BA1\u7406\u4EFB\u52A1\uFF0C\u5230\u9009\u62E9\u884C\u52A8\u3002","defaultGroup.dashboard":"Dashboard","defaultTab.drift":"\u6F02\u79FB","defaultTab.inbox":"\u6536\u96C6","defaultTab.life":"\u751F\u6D3B","defaultTab.month":"\u672C\u6708","defaultTab.next":"\u4E0B\u4E00\u6B65","defaultTab.overdue":"\u903E\u671F","defaultTab.someday":"\u5C06\u6765","defaultTab.today":"\u4ECA\u65E5","defaultTab.tomorrow":"\u660E\u65E5","defaultTab.waiting":"\u7B49\u5F85","defaultTab.week":"\u672C\u5468","defaultTab.work":"\u5DE5\u4F5C","empty.newTask":"+ \u65B0\u5EFA\u4EFB\u52A1","empty.noTabsHint":"\u5728\u8BBE\u7F6E\u9762\u677F\u7684\u300CTabs \u7BA1\u7406\u300D\u91CC\u6DFB\u52A0\u4E00\u4E2A Tab\uFF0C\u5B83\u5C31\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002","empty.noTasks":"\u8FD9\u91CC\u6682\u65F6\u6CA1\u6709\u4EFB\u52A1","head.changeBanner":"\u66F4\u6362\u6A2A\u5E45","head.lunarSep":" \xB7 \u519C\u5386 ","head.uploadBanner":"\u4E0A\u4F20\u6A2A\u5E45","modal.addGroup":"\u6DFB\u52A0\u5206\u7EC4","modal.addTab":"+ \u6DFB\u52A0\u65B0 tab","modal.addTabBtn":"\u6DFB\u52A0 Tab","modal.configTitle":"TaskFlow \u914D\u7F6E","modal.editGroup":"\u7F16\u8F91\u5206\u7EC4","modal.editGroupDialog":"\u5206\u7EC4\u7F16\u8F91\u5F39\u7A97","modal.editTabBtn":"\u7F16\u8F91 Tab","modal.editTabDialog":"Tab \u7F16\u8F91\u5F39\u7A97","modal.editTitle":"\u7F16\u8F91\u5F39\u7A97","modal.errIdEmpty":"ID \u4E0D\u80FD\u4E3A\u7A7A","modal.errLabelEmpty":"\u6807\u7B7E\u4E0D\u80FD\u4E3A\u7A7A","modal.errOrder":"\u8BF7\u8F93\u5165\u5927\u4E8E 0 \u7684\u6574\u6570","modal.errPathEmpty":"\u6587\u4EF6\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A","modal.errQueryEmpty":"\u67E5\u8BE2\u4E0D\u80FD\u4E3A\u7A7A","modal.excluded":"\u6392\u9664\u6587\u4EF6\u5939","modal.excludedDesc":"\u9017\u53F7\u5206\u9694\u7684\u6587\u4EF6\u5939\u8DEF\u5F84\uFF0C\u8FD9\u4E9B\u6587\u4EF6\u5939\u4E2D\u7684\u6587\u4EF6\u4E0D\u4F1A\u88AB\u4EFB\u52A1\u626B\u63CF","modal.excludedExample":"\u4F8B\u5982\uFF1ASystem/Templates, \u9644\u4EF6","modal.fixFields":"\u8BF7\u5148\u4FEE\u6B63\u6807\u7EA2\u7684\u5B57\u6BB5","modal.general":"\u5168\u5C40\u8BBE\u7F6E","modal.groupDesc":"\u5C06\u6B64 tab \u5206\u914D\u5230\u54EA\u4E2A\u5206\u7EC4","modal.groupExample":"\u4F8B\u5982\uFF1A\u81EA\u5B9A\u4E49\u3001\u9879\u76EE\u3001\u56E2\u961F","modal.groupIdDesc":"\u5206\u7EC4\u7684\u552F\u4E00\u6807\u8BC6\u7B26\uFF08\u4EC5\u9650\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u8FDE\u5B57\u7B26\uFF09","modal.groupIdExample":"\u4F8B\u5982\uFF1Acustom-group","modal.icon":"\u56FE\u6807","modal.iconDesc":"\u4ECE\u4E0B\u62C9\u5217\u8868\u4E2D\u9009\u62E9\uFF0C\u6216\u641C\u7D22\u4EFB\u610F Obsidian \u56FE\u6807\u540D\uFF08\u4E0D\u5728\u5217\u8868\u91CC\u4E5F\u80FD\u7528\uFF09","modal.iconExample":"\u4F8B\u5982\uFF1Afolder","modal.iconSearch":"\u641C\u7D22\u56FE\u6807\u2026","modal.iconUseCustom":"\u4F7F\u7528\u81EA\u5B9A\u4E49\u56FE\u6807\u300C{name}\u300D","modal.iconNoMatch":"\u6CA1\u6709\u5339\u914D\u7684\u56FE\u6807","modal.idRule":"\u4EC5\u9650\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u8FDE\u5B57\u7B26","modal.inboxDesc":"Quick add \u5199\u5165\u65B0\u4EFB\u52A1\u7684\u6587\u4EF6\u8DEF\u5F84","modal.inboxExample":"\u4F8B\u5982\uFF1AInbox.md","modal.label":"\u6807\u7B7E","modal.labelDesc":"\u5728\u754C\u9762\u4E0A\u663E\u793A\u7684\u540D\u79F0","modal.labelExample":"\u4F8B\u5982\uFF1A\u6536\u96C6\u3001\u4ECA\u65E5\u3001\u5DE5\u4F5C","modal.newGroupDialog":"\u65B0\u5EFA\u5206\u7EC4\u5F39\u7A97","modal.newTab":"\u65B0 tab","modal.newTabDialog":"\u65B0\u5EFA Tab \u5F39\u7A97","modal.noTabs":"\u6682\u65E0 tabs\uFF0C\u8BF7\u6DFB\u52A0\u65B0 tab","modal.openFail":"TaskFlow\uFF1A{label}\u6253\u5F00\u5931\u8D25 \u2014\u2014 {msg}","modal.order":"\u987A\u5E8F","modal.orderDesc":"\u5728\u540C\u5206\u7EC4\u4E2D\u7684\u663E\u793A\u987A\u5E8F\uFF08\u6570\u5B57\u8D8A\u5C0F\u8D8A\u9760\u524D\uFF09","modal.orderExample":"\u4F8B\u5982\uFF1A1, 2, 3...","modal.query":"Tasks \u67E5\u8BE2","modal.queryDesc":"\u4F7F\u7528 Tasks \u63D2\u4EF6\u7684\u67E5\u8BE2\u8BED\u6CD5","modal.queryPlaceholder":`\u4F8B\u5982\uFF1Anot done +"use strict";var De=Object.defineProperty;var ut=Object.getOwnPropertyDescriptor;var ht=Object.getOwnPropertyNames;var gt=Object.prototype.hasOwnProperty;var mt=(n,a)=>{for(var e in a)De(n,e,{get:a[e],enumerable:!0})},ft=(n,a,e,t)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of ht(a))!gt.call(n,s)&&s!==e&&De(n,s,{get:()=>a[s],enumerable:!(t=ut(a,s))||t.enumerable});return n};var bt=n=>ft(De({},"__esModule",{value:!0}),n);var ts={};mt(ts,{default:()=>xe});module.exports=bt(ts);var ke=require("obsidian");var D=require("obsidian");var Oe=require("obsidian"),He={"about.author1":"\u79D1\u6280\u884C\u4E1A\u4EBA\u624D\u4E13\u5BB6\uFF0C15\u5E74\u8001\u730E\u5934\uFF0C\u4E92\u8054\u7F51/AI/\u673A\u5668\u4EBA\uFF0C\u9762\u8BD5\u8D85\u4E07\u4EBA\u3002","about.author2":"\u751F\u4EA7\u529B\u7CFB\u7EDF\u4E13\u5BB6\uFF0C\u4E13\u6CE816\u5E74+\uFF0C\u6253\u9020\u9AD8\u6548\u5DE5\u4F5C\u548C\u6210\u957F\u4F53\u7CFB\u3002","about.author3":"\u81EA\u5A92\u4F53\u5168\u7F51\u540C\u540D\uFF1A\u730E\u4EBA\u79D1\u53D4\u3002","about.authorTitle":"\u4F5C\u8005\uFF1A\u730E\u4EBA\u79D1\u53D4","about.githubBtn":"\u6253\u5F00 GitHub \u4ED3\u5E93","about.githubDesc":"\u67E5\u770B\u63D2\u4EF6\u6E90\u4EE3\u7801\u3001\u8BE6\u7EC6\u7684\u4F7F\u7528\u8BF4\u660E\u3001\u66F4\u65B0\u65E5\u5FD7\u3001\u95EE\u9898\u53CD\u9988\u7B49\u3002","about.githubTitle":"Github Repository","about.intro1":"TaskFlow \u662F\u4E00\u4E2A\u9762\u5411 Obsidian Tasks \u7684\u884C\u52A8\u5DE5\u4F5C\u53F0\u3002","about.intro2":"\u5B83\u4E0D\u6539\u53D8\u4F60\u4EFB\u4F55\u65E2\u6709\u7684\u4EFB\u52A1\u8BB0\u5F55\u8BED\u6CD5\u4E0E\u67E5\u8BE2\u903B\u8F91\uFF0C\u800C\u662F\u5728\u4EFB\u52A1\u5217\u8868\u4E4B\u4E0A\uFF0C\u6784\u5EFA\u4E86\u4E00\u5C42\u52A8\u6001\u7684 \u201C\u884C\u52A8\u7A7A\u95F4\uFF08Action Space\uFF09\u201D\u3002","about.intro3":"\u5B83\u91CD\u65B0\u7EC4\u7EC7\u4F60\u7684\u4EFB\u52A1\uFF0C\u8BA9\u4F60\u4ECE\u201C\u7BA1\u7406\u6709\u54EA\u4E9B\u4E8B\u60C5\u8981\u505A\u201D\uFF0C\u8F6C\u5411\u201C\u5FEB\u901F\u627E\u5230\u73B0\u5728\u8BE5\u505A\u4EC0\u4E48\u201D\u3002\u901A\u8FC7\u65F6\u95F4\u3001GTD \u548C\u573A\u666F\u7EF4\u5EA6\u964D\u4F4E\u9009\u62E9\u6210\u672C\uFF0C\u8BA9\u884C\u52A8\u66F4\u5FEB\u53D1\u751F\u3002","about.introTitle":"TaskFlow \u7B80\u4ECB","about.moreBtn":"\u8BBF\u95EE lifein.vip","about.moreDesc":"\u793A\u4F8B\u5E93\u3001\u63D2\u4EF6\u3001\u811A\u672C\u3001\u7ECF\u9A8C\u7B49","about.moreTitle":"\u66F4\u591A\u5173\u4E8E\u79D1\u53D4\u7684 Obsidian \u751F\u4EA7\u529B\u4E0E\u77E5\u8BC6\u7BA1\u7406\u5B9E\u8DF5","banner.line":"\u4F60\u4E0D\u7F3A\u4EFB\u52A1\uFF0C\u4F60\u7F3A\u7684\u662F\u4E0B\u4E00\u6B65\u3002","common.builtinSuffix":" \xB7 \u5185\u7F6E","common.cancel":"\u53D6\u6D88","common.confirm":"\u786E\u5B9A","common.close":"\u5173\u95ED","common.delete":"\u5220\u9664","common.edit":"\u7F16\u8F91","common.remove":"\u79FB\u9664","common.reset":"\u6062\u590D\u9ED8\u8BA4","common.save":"\u4FDD\u5B58","common.thisGroup":"\u8BE5\u5206\u7EC4","default.slogan":"\u4ECE\u7BA1\u7406\u4EFB\u52A1\uFF0C\u5230\u9009\u62E9\u884C\u52A8\u3002","defaultGroup.dashboard":"Dashboard","defaultTab.drift":"\u6F02\u79FB","defaultTab.inbox":"\u6536\u96C6","defaultTab.life":"\u751F\u6D3B","defaultTab.month":"\u672C\u6708","defaultTab.next":"\u4E0B\u4E00\u6B65","defaultTab.overdue":"\u903E\u671F","defaultTab.someday":"\u5C06\u6765","defaultTab.today":"\u4ECA\u65E5","defaultTab.tomorrow":"\u660E\u65E5","defaultTab.waiting":"\u7B49\u5F85","defaultTab.week":"\u672C\u5468","defaultTab.work":"\u5DE5\u4F5C","empty.newTask":"+ \u65B0\u5EFA\u4EFB\u52A1","empty.noTabsHint":"\u5728\u8BBE\u7F6E\u9762\u677F\u7684\u300CTabs \u7BA1\u7406\u300D\u91CC\u6DFB\u52A0\u4E00\u4E2A Tab\uFF0C\u5B83\u5C31\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002","empty.noTasks":"\u8FD9\u91CC\u6682\u65F6\u6CA1\u6709\u4EFB\u52A1","head.changeBanner":"\u66F4\u6362\u6A2A\u5E45","head.lunarSep":" \xB7 \u519C\u5386 ","head.uploadBanner":"\u4E0A\u4F20\u6A2A\u5E45","modal.addGroup":"\u6DFB\u52A0\u5206\u7EC4","modal.addTab":"+ \u6DFB\u52A0\u65B0 tab","modal.addTabBtn":"\u6DFB\u52A0 Tab","modal.configTitle":"TaskFlow \u914D\u7F6E","modal.editGroup":"\u7F16\u8F91\u5206\u7EC4","modal.editGroupDialog":"\u5206\u7EC4\u7F16\u8F91\u5F39\u7A97","modal.editTabBtn":"\u7F16\u8F91 Tab","modal.editTabDialog":"Tab \u7F16\u8F91\u5F39\u7A97","modal.editTitle":"\u7F16\u8F91\u5F39\u7A97","modal.errIdEmpty":"ID \u4E0D\u80FD\u4E3A\u7A7A","modal.errLabelEmpty":"\u6807\u7B7E\u4E0D\u80FD\u4E3A\u7A7A","modal.errOrder":"\u8BF7\u8F93\u5165\u5927\u4E8E 0 \u7684\u6574\u6570","modal.errPathEmpty":"\u6587\u4EF6\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A","modal.errQueryEmpty":"\u67E5\u8BE2\u4E0D\u80FD\u4E3A\u7A7A","modal.excluded":"\u6392\u9664\u6587\u4EF6\u5939","modal.excludedDesc":"\u9017\u53F7\u5206\u9694\u7684\u6587\u4EF6\u5939\u8DEF\u5F84\uFF0C\u8FD9\u4E9B\u6587\u4EF6\u5939\u4E2D\u7684\u6587\u4EF6\u4E0D\u4F1A\u88AB\u4EFB\u52A1\u626B\u63CF","modal.excludedExample":"\u4F8B\u5982\uFF1ASystem/Templates, \u9644\u4EF6","modal.fixFields":"\u8BF7\u5148\u4FEE\u6B63\u6807\u7EA2\u7684\u5B57\u6BB5","modal.general":"\u5168\u5C40\u8BBE\u7F6E","modal.groupDesc":"\u5C06\u6B64 tab \u5206\u914D\u5230\u54EA\u4E2A\u5206\u7EC4","modal.groupExample":"\u4F8B\u5982\uFF1A\u81EA\u5B9A\u4E49\u3001\u9879\u76EE\u3001\u56E2\u961F","modal.groupIdDesc":"\u5206\u7EC4\u7684\u552F\u4E00\u6807\u8BC6\u7B26\uFF08\u4EC5\u9650\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u8FDE\u5B57\u7B26\uFF09","modal.groupIdExample":"\u4F8B\u5982\uFF1Acustom-group","modal.groupNoteProperty":"\u7B14\u8BB0\u7B5B\u9009\u5C5E\u6027","modal.groupNotePropertyDesc":"\u8BBE\u7F6E\u540E\uFF0C\u6B64\u5206\u7EC4\u4F1A\u663E\u793A\u5339\u914D\u8BE5 frontmatter \u5C5E\u6027\u503C\u7684\u7B14\u8BB0\u4E0B\u62C9\u6846\u3002Tasks \u67E5\u8BE2\u4E2D\u7684 query.file \u5C06\u6307\u5411\u6240\u9009\u7B14\u8BB0\u3002","modal.groupNotePropertyExample":"\u4F8B\u5982\uFF1Aproject","modal.groupNoteValues":"\u5C5E\u6027\u503C\u7B5B\u9009","modal.groupNoteValuesDesc":"\u4EC5\u663E\u793A\u8BE5\u5C5E\u6027\u5305\u542B\u6240\u9009\u503C\u4E4B\u4E00\u7684\u7B14\u8BB0\u3002\u4E0D\u9009\u5219\u5339\u914D\u4EFB\u4F55\u975E\u7A7A\u503C\u3002","modal.groupNoteValuesAny":"\u4EFB\u610F\u975E\u7A7A\u503C","modal.groupNoteValuesNone":"\u6CA1\u6709\u7B14\u8BB0\u4F7F\u7528\u6B64\u5C5E\u6027","modal.icon":"\u56FE\u6807","modal.iconDesc":"\u4ECE\u4E0B\u62C9\u5217\u8868\u4E2D\u9009\u62E9\uFF0C\u6216\u641C\u7D22\u4EFB\u610F Obsidian \u56FE\u6807\u540D\uFF08\u4E0D\u5728\u5217\u8868\u91CC\u4E5F\u80FD\u7528\uFF09","modal.iconExample":"\u4F8B\u5982\uFF1Afolder","modal.iconSearch":"\u641C\u7D22\u56FE\u6807\u2026","modal.iconUseCustom":"\u4F7F\u7528\u81EA\u5B9A\u4E49\u56FE\u6807\u300C{name}\u300D","modal.iconNoMatch":"\u6CA1\u6709\u5339\u914D\u7684\u56FE\u6807","modal.idRule":"\u4EC5\u9650\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u8FDE\u5B57\u7B26","modal.inboxDesc":"Quick add \u5199\u5165\u65B0\u4EFB\u52A1\u7684\u6587\u4EF6\u8DEF\u5F84","modal.inboxExample":"\u4F8B\u5982\uFF1AInbox.md","modal.label":"\u6807\u7B7E","modal.labelDesc":"\u5728\u754C\u9762\u4E0A\u663E\u793A\u7684\u540D\u79F0","modal.labelExample":"\u4F8B\u5982\uFF1A\u6536\u96C6\u3001\u4ECA\u65E5\u3001\u5DE5\u4F5C","modal.newGroupDialog":"\u65B0\u5EFA\u5206\u7EC4\u5F39\u7A97","modal.newTab":"\u65B0 tab","modal.newTabDialog":"\u65B0\u5EFA Tab \u5F39\u7A97","modal.noTabs":"\u6682\u65E0 tabs\uFF0C\u8BF7\u6DFB\u52A0\u65B0 tab","modal.openFail":"TaskFlow\uFF1A{label}\u6253\u5F00\u5931\u8D25 \u2014\u2014 {msg}","modal.order":"\u987A\u5E8F","modal.orderDesc":"\u5728\u540C\u5206\u7EC4\u4E2D\u7684\u663E\u793A\u987A\u5E8F\uFF08\u6570\u5B57\u8D8A\u5C0F\u8D8A\u9760\u524D\uFF09","modal.orderExample":"\u4F8B\u5982\uFF1A1, 2, 3...","modal.query":"Tasks \u67E5\u8BE2","modal.queryDesc":"\u4F7F\u7528 Tasks \u63D2\u4EF6\u7684\u67E5\u8BE2\u8BED\u6CD5","modal.queryPlaceholder":`\u4F8B\u5982\uFF1Anot done has due date group by filename -sort by due`,"modal.renderFail":"\u26A0 \u6B64\u5F39\u7A97\u6E32\u67D3\u5931\u8D25","modal.renderFailDetail":"\u6E32\u67D3\u5931\u8D25\uFF1A{msg}","modal.saveFail":"\u4FDD\u5B58\u5931\u8D25\uFF1A{msg}","modal.saving":"\u4FDD\u5B58\u4E2D\u2026","modal.showHeaderDesc":'\u5728 tab \u5185\u5BB9\u4E0A\u65B9\u663E\u793A\u6807\u9898\uFF08\u5982 "\u4ECA\u65E5"\u3001"\u5F85\u529E" \u7B49\uFF09\u53CA\u5176\u4EFB\u52A1\u6570\u91CF',"modal.tabIdDesc":"Tab \u7684\u552F\u4E00\u6807\u8BC6\u7B26\uFF08\u4E0D\u53EF\u4FEE\u6539\uFF09","modal.tabsManage":"Tabs \u7BA1\u7406","modal.unsaved":"\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539","nav.about":"\u5173\u4E8E","nav.general":"\u5168\u5C40","nav.groups":"\u5206\u7EC4","panel.collapse":"\u6536\u8D77 \u2191","panel.doneToday":"\u4ECA\u65E5\u5B8C\u6210","panel.doneWeek":"\u672C\u5468\u5B8C\u6210","panel.emptyImportant":"\u5F53\u524D\u7B5B\u9009\u6761\u4EF6\u4E0B\u6CA1\u6709\u4EFB\u52A1\u3002\u53EF\u5728\u8BBE\u7F6E\u9762\u677F\u8C03\u6574\u300C\u91CD\u8981\u63D0\u9192\u67E5\u8BE2\u300D\u3002","panel.importantEmpty":"\u6682\u65E0\u9700\u8981\u5173\u6CE8\u7684\u4EFB\u52A1","panel.inProgress":"\u8FDB\u884C\u4E2D","panel.more":"\u66F4\u591A\u2026","panel.moreCount":"\u66F4\u591A ({n})\u2026","panel.todayRate":"\u4ECA\u65E5","panel.todayTodo":"\u4ECA\u65E5\u5F85\u529E","panel.weekRate":"\u672C\u5468","settings.addGroup":"\u6DFB\u52A0\u65B0\u5206\u7EC4","settings.confirm.deleteGroup":'\u5220\u9664\u5206\u7EC4 "{name}"\uFF1F\u6B64\u64CD\u4F5C\u5C06\u540C\u65F6\u5220\u9664\u8BE5\u5206\u7EC4\u4E0B\u7684\u6240\u6709 Tabs\u3002',"settings.confirm.deleteTab":'\u5220\u9664 Tab "{name}"\uFF1F',"settings.cover.aria":"\u9009\u62E9\u6A2A\u5E45\u56FE\u7247","settings.cover.change":"\u66F4\u6362","settings.cover.choose":"\u9009\u62E9\u56FE\u7247\u2026","settings.cover.none":"\u672A\u8BBE\u7F6E\uFF08\u6B63\u5728\u7528\u5185\u7F6E\u9ED8\u8BA4\u6A2A\u5E45\uFF09","settings.cover.pick":"\u6A2A\u5E45\u56FE\u7247","settings.cover.pickDesc":"\u5934\u90E8\u6A2A\u5E45\u56FE\uFF0C\u6587\u4EF6\u540D {file}.\uFF0C\u5B58\u653E\u4F4D\u7F6E\u8DDF\u968F Obsidian\u300C\u9644\u4EF6\u9ED8\u8BA4\u5B58\u653E\u8DEF\u5F84\u300D\uFF1A\u9009\u300C\u6307\u5B9A\u7684\u6587\u4EF6\u5939\u300D\u5C31\u653E\u8FDB\u90A3\u4E2A\u6587\u4EF6\u5939\uFF0C\u5176\u4F59\u4E09\u79CD\uFF08\u5E93\u6839 / \u5F53\u524D\u6587\u4EF6\u6240\u5728\u6587\u4EF6\u5939 / \u5176\u4E0B\u5B50\u6587\u4EF6\u5939\uFF09\u7EDF\u4E00\u653E\u8FDB\u5E93\u6839\u7684 {dir} \u6587\u4EF6\u5939\u3002\u6362\u56FE\u81EA\u52A8\u6E05\u6389\u65E7\u6587\u4EF6\u3002\u4E0D\u8BBE\u7F6E\u5219\u663E\u793A\u63D2\u4EF6\u81EA\u5E26\u7684\u9ED8\u8BA4\u6A2A\u5E45\uFF1B\u60AC\u505C\u6A2A\u5E45\u53F3\u4E0A\u89D2\u4E5F\u80FD\u6362","settings.cover.show":"\u663E\u793A\u6A2A\u5E45","settings.cover.showDesc":"\u662F\u5426\u663E\u793A\u5934\u90E8\u9876\u90E8\u7684\u6A2A\u5E45\u56FE\uFF08\u6CA1\u653E\u81EA\u5DF1\u7684\u56FE\u65F6\u663E\u793A\u5185\u7F6E\u9ED8\u8BA4\u6A2A\u5E45\uFF09\u3002\u5173\u6389\u540E\u53EA\u663E\u793A\u5DE5\u4F5C\u53F0\u540D + \u65E5\u671F\u65F6\u95F4\u6587\u5B57\u6A2A\u5E45\uFF0C\u6A2A\u5E45\u533A\u57DF\u4E0D\u518D\u5360\u7528\uFF08tab \u5217\u8868\u7167\u5E38\u663E\u793A\uFF09\u3002","settings.cover.title":"\u6A2A\u5E45","settings.group.idLine":"ID: {id} \xB7 {count} \u4E2A tab{suffix}","settings.group.tabCount":"{n} \u4E2A Tab","settings.head.sloganDesc":"\u5DE5\u4F5C\u53F0\u540D\u53F3\u4FA7\u90A3\u53E5\u77ED\u8BED\uFF1B\u7559\u7A7A\u5219\u53EA\u663E\u793A\u5DE5\u4F5C\u53F0\u540D\uFF08\u5185\u7F6E\u9ED8\u8BA4\u6587\u6848\u4F1A\u8DDF\u968F\u754C\u9762\u8BED\u8A00\uFF09","settings.head.textDesc":"\u63A7\u5236\u5934\u90E8\u90A3\u6761\u6587\u5B57\u6A2A\u5E45\uFF08\u5DE5\u4F5C\u53F0\u540D + slogan + \u53F3\u4FA7\u65E5\u671F\u65F6\u95F4\uFF09\u662F\u5426\u663E\u793A\u3002\u5173\u6389\u540E\u5934\u90E8\u53EA\u5269\u6A2A\u5E45\u56FE\u533A\u57DF\uFF1B\u6A2A\u5E45\u56FE\u4E5F\u5173\u65F6\u6574\u4E2A\u5934\u90E8\u4E0D\u6E32\u67D3\u3002","settings.head.textTitle":"\u663E\u793A\u5DE5\u4F5C\u53F0\u540D\u4E0E\u65E5\u671F\u65F6\u95F4","settings.head.title":"\u5DE5\u4F5C\u53F0\u540D / Slogan","settings.head.workbench":"\u5DE5\u4F5C\u53F0\u540D","settings.head.workbenchDesc":"\u89C6\u56FE\u5934\u90E8\u663E\u793A\u7684\u5927\u5B57\uFF08\u9ED8\u8BA4 {def}\uFF09\u3002\u56DE\u8F66\u6216\u79FB\u5F00\u7126\u70B9\u540E\u751F\u6548","settings.inbox.desc":"Quick add \u5199\u5165\u65B0\u4EFB\u52A1\u7684\u6587\u4EF6\u3002\u8F93\u5165\u6587\u4EF6\u540D\u5373\u641C\u7D22\uFF0C\u70B9\u9009\u786E\u8BA4\uFF08\u4E0D\u9009\u4E0D\u751F\u6548\uFF0C\u907F\u514D\u624B\u5DE5\u8F93\u9519\u8DEF\u5F84\uFF09","settings.inbox.placeholder":"\u8F93\u5165\u6587\u4EF6\u540D\u641C\u7D22\u2026","settings.inbox.title":"Inbox \u6587\u4EF6\u8DEF\u5F84","settings.lang.desc":"\u9ED8\u8BA4\u8DDF\u968F Obsidian \u7684\u754C\u9762\u8BED\u8A00\uFF1B\u4E5F\u53EF\u4EE5\u5728\u8FD9\u91CC\u56FA\u5B9A\u4E3A\u4E2D\u6587\u6216\u82F1\u6587\u3002\u5207\u6362\u540E\u7ACB\u5373\u751F\u6548\uFF0C\u65E0\u9700\u91CD\u542F\u63D2\u4EF6\u3002","settings.lang.en":"English","settings.lang.follow":"\u8DDF\u968F\u7CFB\u7EDF","settings.lang.title":"\u754C\u9762\u8BED\u8A00","settings.lang.zh":"\u4E2D\u6587","settings.newTab":"\u65B0 Tab","settings.noTabs":"\u6682\u65E0 Tab","settings.notice":"\u4FEE\u6539\u914D\u7F6E\u540E\uFF0C\u8BF7\u5173\u95ED\u63D2\u4EF6\uFF0C\u7136\u540E\u91CD\u65B0\u5F00\u542F\uFF0C\u4F7F\u914D\u7F6E\u751F\u6548\u3002","settings.noticeTitle":"\u63D0\u9192","settings.open.desc":"\u70B9\u5F00 TaskFlow \u65F6\u89C6\u56FE\u9ED8\u8BA4\u843D\u5728\u54EA\u91CC\u3002\u4E24\u4E2A\u4F4D\u7F6E\u90FD\u6309\u5BB9\u5668\u5BBD\u5EA6\u81EA\u9002\u5E94\uFF1A\u53F3\u4FA7\u8FB9\u680F\u53D8\u7A84\u65F6\uFF0C","settings.open.desc2":"\u300C\u4ECA\u65E5\u6982\u89C8 + \u91CD\u8981\u63D0\u9192\u300D\u4F1A\u81EA\u52A8\u4E0A\u4E0B\u5806\u53E0\u800C\u4E0D\u662F\u6324\u6210\u4E00\u56E2\u3002\u6539\u5B8C\u9700\u91CD\u5F00\u63D2\u4EF6\u751F\u6548\u3002","settings.open.main":"\u4E3B\u7A97\u53E3","settings.open.sidebar":"\u53F3\u4FA7\u8FB9\u680F","settings.open.subtitle":"\u4E3B\u7A97\u53E3 \u6216 \u53F3\u4FA7\u8FB9\u680F","settings.open.title":"\u63D2\u4EF6\u9ED8\u8BA4\u6253\u5F00\u4F4D\u7F6E","settings.panel.important":"\u663E\u793A\u91CD\u8981\u63D0\u9192","settings.panel.importantDesc":"\u53F3\u4FA7\u5361\u7247\uFF1A\u7528 Tasks \u63D2\u4EF6\u6E32\u67D3\u300C\u6700\u8BE5\u5173\u6CE8\u7684\u4EFB\u52A1\u300D\u3002\u53EF\u4E0E\u4ECA\u65E5\u6982\u89C8\u5E76\u6392\uFF1B\u5173\u6389\u4ECA\u65E5\u6982\u89C8\u65F6\u5B83\u5360\u6EE1\u6574\u884C\u3002","settings.panel.query":"\u91CD\u8981\u63D0\u9192\u67E5\u8BE2","settings.panel.queryDesc":"\u539F\u6837\u4EA4\u7ED9 Tasks \u63D2\u4EF6\u6267\u884C\u7684\u67E5\u8BE2\uFF08\u4E00\u4E2A\u5B57\u90FD\u4E0D\u6539\uFF0C\u63D2\u4EF6\u4E0D\u6CE8\u5165\u4EFB\u4F55\u6307\u4EE4\uFF09\u3002\u5199\u6CD5\u4E0E\u4E8C\u7EA7 tab \u7684\u67E5\u8BE2\u5B8C\u5168\u76F8\u540C\u3002","settings.panel.title":"\u9762\u677F\u6A21\u5757\uFF08\u663E\u793A\u5728\u5FEB\u6377\u8F93\u5165\u6846\u4E0A\u65B9\uFF09","settings.panel.today":"\u663E\u793A\u4ECA\u65E5\u6982\u89C8","settings.panel.todayDesc":"\u5DE6\u4FA7\u5361\u7247\uFF1A\u4ECA\u65E5\u5F85\u529E / \u4ECA\u65E5\u5B8C\u6210 / \u8FDB\u884C\u4E2D / \u903E\u671F / \u672C\u5468\u5B8C\u6210\uFF0C\u4EE5\u53CA\u300C\u4ECA\u65E5\u300D\u300C\u672C\u5468\u300D\u4E24\u4E2A\u5B8C\u6210\u7387\u73AF\u3002\u5B8C\u6210\u7387\u53E3\u5F84\uFF1A\u8BE5\u5468\u671F\u5185\u5B8C\u6210\u6570 \xF7\uFF08\u8BE5\u5468\u671F\u5185\u5B8C\u6210\u6570 + \u8BE5\u5468\u671F\u5DF2\u5230\u671F\u5374\u672A\u5B8C\u6210\u6570\uFF09\uFF0C\u6240\u4EE5\u672C\u5468\u4E00\u5B9A\u5305\u542B\u4ECA\u65E5\u3002","settings.showHeader":"\u663E\u793A\u6807\u9898","settings.stats.categories":"\u5C55\u5F00\u4EFB\u52A1\u7C7B\u522B","settings.stats.categoriesDesc":"\u5173\u95ED\uFF08\u6298\u53E0\uFF09\u540E\u5E95\u90E8\u53EA\u4FDD\u7559\u8FDB\u5EA6\u6761\u4E0E\u767E\u5206\u6BD4\uFF1B\u5F00\u542F\u5219\u663E\u793A overdue / in progress / todo / cancel / done / total \u5168\u90E8\u80F6\u56CA\u3002\u89C6\u56FE\u91CC\u70B9\u300CStatistics\u300D\u8FD9\u4E00\u884C\u53EF\u968F\u65F6\u5C31\u5730\u5207\u6362\u3002","settings.stats.title":"\u5E95\u90E8\u7EDF\u8BA1\u680F","settings.tab.addToGroup":"\u6DFB\u52A0\u65B0 Tab \u5230 {group}","settings.tab.headerToggle":"\u5728\u300C{label}\u300D\u5185\u5BB9\u4E0A\u65B9\u663E\u793A\u7AE0\u8282\u6807\u9898","settings.tab.metaLine":"\u67E5\u8BE2: {query} \xB7 \u987A\u5E8F: {order}","stats.title":"\u7EDF\u8BA1","stats.toggleAria":"\u6298\u53E0\u6216\u5C55\u5F00\u4EFB\u52A1\u7C7B\u522B\u7EDF\u8BA1","suggest.noMatch":"\u6CA1\u6709\u5339\u914D\u7684\u6587\u4EF6","toast.bannerRemoveFail":"\u79FB\u9664\u6A2A\u5E45\u5931\u8D25\uFF1A","toast.bannerRemoved":"\u6A2A\u5E45\u5DF2\u79FB\u9664","toast.bannerSaveFail":"\u6A2A\u5E45\u4FDD\u5B58\u5931\u8D25\uFF1A","toast.bannerUpdated":"\u6A2A\u5E45\u5DF2\u66F4\u65B0","toast.configSaved":"TaskFlow \u914D\u7F6E\u5DF2\u4FDD\u5B58","toast.groupCreated":"\u5206\u7EC4\u5DF2\u521B\u5EFA","toast.groupDeleted":"\u5206\u7EC4\u5DF2\u5220\u9664","toast.groupUpdated":"\u5206\u7EC4\u5DF2\u66F4\u65B0","toast.headerHidden":"\u5DF2\u9690\u85CF\u7AE0\u8282\u6807\u9898","toast.headerShown":"\u5DF2\u663E\u793A\u7AE0\u8282\u6807\u9898","toast.inboxSet":"Inbox \u6587\u4EF6\u5DF2\u8BBE\u7F6E","toast.queryReset":"\u5DF2\u6062\u590D\u9ED8\u8BA4\u67E5\u8BE2","toast.queryUpdated":"\u91CD\u8981\u63D0\u9192\u67E5\u8BE2\u5DF2\u66F4\u65B0","toast.sloganUpdated":"Slogan \u5DF2\u66F4\u65B0","toast.tabCreated":"Tab \u5DF2\u521B\u5EFA","toast.tabDeleted":"Tab \u5DF2\u5220\u9664","toast.tabUpdated":"Tab \u5DF2\u66F4\u65B0","toast.workbenchUpdated":"\u5DE5\u4F5C\u53F0\u540D\u5DF2\u66F4\u65B0","view.empty.noMatch":"\u5728\u201C{label}\u201D\u4E0B\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u4EFB\u52A1\u3002\u8BD5\u8BD5\u6DFB\u52A0\u4E00\u4E2A\u65B0\u4EFB\u52A1\uFF0C\u6216\u8005\u68C0\u67E5\u8FC7\u6EE4\u6761\u4EF6\u3002","view.empty.noTabsInGroup":"{name} \u4E0B\u8FD8\u6CA1\u6709 Tab"},Pe={"about.author1":"Tech talent expert, 15 years as a headhunter across internet / AI / robotics, 10,000+ interviews conducted.","about.author2":"Productivity systems expert, 16+ years focused on building efficient work and growth systems.","about.author3":"Same handle across all social media platforms: \u730E\u4EBA\u79D1\u53D4.","about.authorTitle":"Author: Uncle Ke","about.githubBtn":"Open GitHub repository","about.githubDesc":"Browse the source code, full documentation, changelog, and report issues.","about.githubTitle":"Github Repository","about.intro1":"TaskFlow is an action workbench for Obsidian Tasks.","about.intro2":'It does not change any of your existing task syntax or query logic. Instead, it builds a dynamic "Action Space" on top of your task list.',"about.intro3":'It reorganizes your tasks, shifting you from "managing what needs to be done" to "quickly finding what to do now." By reducing the cost of choosing across time, GTD, and context dimensions, it helps action happen faster.',"about.introTitle":"About TaskFlow","about.moreBtn":"Visit lifein.vip","about.moreDesc":"Example vaults, plugins, scripts, notes and more","about.moreTitle":"More of Uncle Ke's Obsidian productivity & knowledge management practice","banner.line":"You don't need more tasks. You need the next step.","common.builtinSuffix":" \xB7 built-in","common.cancel":"Cancel","common.confirm":"Confirm","common.close":"Close","common.delete":"Delete","common.edit":"Edit","common.remove":"Remove","common.reset":"Restore default","common.save":"Save","common.thisGroup":"this group","default.slogan":"From managing tasks to choosing action.","defaultGroup.dashboard":"Dashboard","defaultTab.drift":"Drift","defaultTab.inbox":"Inbox","defaultTab.life":"Life","defaultTab.month":"This month","defaultTab.next":"Next","defaultTab.overdue":"Overdue","defaultTab.someday":"Someday","defaultTab.today":"Today","defaultTab.tomorrow":"Tomorrow","defaultTab.waiting":"Waiting","defaultTab.week":"This week","defaultTab.work":"Work","empty.newTask":"+ New task","empty.noTabsHint":'Add a Tab under "Tabs" in the settings panel and it will appear here.',"empty.noTasks":"No tasks here yet","head.changeBanner":"Change banner","head.lunarSep":" \xB7 lunar ","head.uploadBanner":"Upload banner","modal.addGroup":"Add group","modal.addTab":"+ Add new tab","modal.addTabBtn":"Add Tab","modal.configTitle":"TaskFlow settings","modal.editGroup":"Edit group","modal.editGroupDialog":"Edit group dialog","modal.editTabBtn":"Edit Tab","modal.editTabDialog":"Edit Tab dialog","modal.editTitle":"Edit dialog","modal.errIdEmpty":"ID cannot be empty","modal.errLabelEmpty":"Label cannot be empty","modal.errOrder":"Please enter an integer greater than 0","modal.errPathEmpty":"File path cannot be empty","modal.errQueryEmpty":"Query cannot be empty","modal.excluded":"Excluded folders","modal.excludedDesc":"Comma-separated folder paths; files inside them are excluded from task scanning","modal.excludedExample":"e.g. System/Templates, Attachments","modal.fixFields":"Please fix the highlighted fields first","modal.general":"General","modal.groupDesc":"Which group this tab belongs to","modal.groupExample":"e.g. Custom, Project, Team","modal.groupIdDesc":"Unique identifier of the group (lowercase letters, digits and hyphens only)","modal.groupIdExample":"e.g. custom-group","modal.icon":"Icon","modal.iconDesc":"Pick from the dropdown, or search any Obsidian icon name (custom names work too)","modal.iconExample":"e.g. folder","modal.iconSearch":"Search icons\u2026","modal.iconUseCustom":'Use custom icon "{name}"',"modal.iconNoMatch":"No matching icons","modal.idRule":"Lowercase letters, digits and hyphens only","modal.inboxDesc":"File path that Quick add writes new tasks to","modal.inboxExample":"e.g. Inbox.md","modal.label":"Label","modal.labelDesc":"The name shown in the interface","modal.labelExample":"e.g. Inbox, Today, Work","modal.newGroupDialog":"New group dialog","modal.newTab":"New tab","modal.newTabDialog":"New Tab dialog","modal.noTabs":"No tabs yet \u2014 please add one","modal.openFail":"TaskFlow: failed to open {label} \u2014 {msg}","modal.order":"Order","modal.orderDesc":"Display order within the same group (smaller number comes first)","modal.orderExample":"e.g. 1, 2, 3...","modal.query":"Tasks query","modal.queryDesc":"Uses the Tasks plugin query syntax","modal.queryPlaceholder":`e.g. not done +sort by due`,"modal.renderFail":"\u26A0 \u6B64\u5F39\u7A97\u6E32\u67D3\u5931\u8D25","modal.renderFailDetail":"\u6E32\u67D3\u5931\u8D25\uFF1A{msg}","modal.saveFail":"\u4FDD\u5B58\u5931\u8D25\uFF1A{msg}","modal.saving":"\u4FDD\u5B58\u4E2D\u2026","modal.showHeaderDesc":'\u5728 tab \u5185\u5BB9\u4E0A\u65B9\u663E\u793A\u6807\u9898\uFF08\u5982 "\u4ECA\u65E5"\u3001"\u5F85\u529E" \u7B49\uFF09\u53CA\u5176\u4EFB\u52A1\u6570\u91CF',"modal.tabIdDesc":"Tab \u7684\u552F\u4E00\u6807\u8BC6\u7B26\uFF08\u4E0D\u53EF\u4FEE\u6539\uFF09","modal.tabsManage":"Tabs \u7BA1\u7406","modal.unsaved":"\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539","nav.about":"\u5173\u4E8E","nav.general":"\u5168\u5C40","nav.groups":"\u5206\u7EC4","view.group.selectNote":"\u9009\u62E9 {group} \u7B14\u8BB0","view.group.noMatchingNotes":"\u6CA1\u6709\u5305\u542B\u8BE5\u5C5E\u6027\u503C\u7684\u7B14\u8BB0","view.group.limit":"\u4E0A\u9650","view.group.limitDesc":"\u6B64\u5206\u7EC4\u6BCF\u4E2A\u67E5\u8BE2\u6700\u591A\u663E\u793A\u7684\u4EFB\u52A1\u6570\uFF08\u7559\u7A7A\u5219\u4F7F\u7528\u67E5\u8BE2\u81EA\u8EAB\u8BBE\u7F6E\uFF09","panel.collapse":"\u6536\u8D77 \u2191","panel.doneToday":"\u4ECA\u65E5\u5B8C\u6210","panel.doneWeek":"\u672C\u5468\u5B8C\u6210","panel.emptyImportant":"\u5F53\u524D\u7B5B\u9009\u6761\u4EF6\u4E0B\u6CA1\u6709\u4EFB\u52A1\u3002\u53EF\u5728\u8BBE\u7F6E\u9762\u677F\u8C03\u6574\u300C\u91CD\u8981\u63D0\u9192\u67E5\u8BE2\u300D\u3002","panel.importantEmpty":"\u6682\u65E0\u9700\u8981\u5173\u6CE8\u7684\u4EFB\u52A1","panel.inProgress":"\u8FDB\u884C\u4E2D","panel.more":"\u66F4\u591A\u2026","panel.moreCount":"\u66F4\u591A ({n})\u2026","panel.todayRate":"\u4ECA\u65E5","panel.todayTodo":"\u4ECA\u65E5\u5F85\u529E","panel.weekRate":"\u672C\u5468","settings.addGroup":"\u6DFB\u52A0\u65B0\u5206\u7EC4","settings.confirm.deleteGroup":'\u5220\u9664\u5206\u7EC4 "{name}"\uFF1F\u6B64\u64CD\u4F5C\u5C06\u540C\u65F6\u5220\u9664\u8BE5\u5206\u7EC4\u4E0B\u7684\u6240\u6709 Tabs\u3002',"settings.confirm.deleteTab":'\u5220\u9664 Tab "{name}"\uFF1F',"settings.cover.aria":"\u9009\u62E9\u6A2A\u5E45\u56FE\u7247","settings.cover.change":"\u66F4\u6362","settings.cover.choose":"\u9009\u62E9\u56FE\u7247\u2026","settings.cover.none":"\u672A\u8BBE\u7F6E\uFF08\u6B63\u5728\u7528\u5185\u7F6E\u9ED8\u8BA4\u6A2A\u5E45\uFF09","settings.cover.pick":"\u6A2A\u5E45\u56FE\u7247","settings.cover.pickDesc":"\u5934\u90E8\u6A2A\u5E45\u56FE\uFF0C\u6587\u4EF6\u540D {file}.\uFF0C\u5B58\u653E\u4F4D\u7F6E\u8DDF\u968F Obsidian\u300C\u9644\u4EF6\u9ED8\u8BA4\u5B58\u653E\u8DEF\u5F84\u300D\uFF1A\u9009\u300C\u6307\u5B9A\u7684\u6587\u4EF6\u5939\u300D\u5C31\u653E\u8FDB\u90A3\u4E2A\u6587\u4EF6\u5939\uFF0C\u5176\u4F59\u4E09\u79CD\uFF08\u5E93\u6839 / \u5F53\u524D\u6587\u4EF6\u6240\u5728\u6587\u4EF6\u5939 / \u5176\u4E0B\u5B50\u6587\u4EF6\u5939\uFF09\u7EDF\u4E00\u653E\u8FDB\u5E93\u6839\u7684 {dir} \u6587\u4EF6\u5939\u3002\u6362\u56FE\u81EA\u52A8\u6E05\u6389\u65E7\u6587\u4EF6\u3002\u4E0D\u8BBE\u7F6E\u5219\u663E\u793A\u63D2\u4EF6\u81EA\u5E26\u7684\u9ED8\u8BA4\u6A2A\u5E45\uFF1B\u60AC\u505C\u6A2A\u5E45\u53F3\u4E0A\u89D2\u4E5F\u80FD\u6362","settings.cover.show":"\u663E\u793A\u6A2A\u5E45","settings.cover.showDesc":"\u662F\u5426\u663E\u793A\u5934\u90E8\u9876\u90E8\u7684\u6A2A\u5E45\u56FE\uFF08\u6CA1\u653E\u81EA\u5DF1\u7684\u56FE\u65F6\u663E\u793A\u5185\u7F6E\u9ED8\u8BA4\u6A2A\u5E45\uFF09\u3002\u5173\u6389\u540E\u53EA\u663E\u793A\u5DE5\u4F5C\u53F0\u540D + \u65E5\u671F\u65F6\u95F4\u6587\u5B57\u6A2A\u5E45\uFF0C\u6A2A\u5E45\u533A\u57DF\u4E0D\u518D\u5360\u7528\uFF08tab \u5217\u8868\u7167\u5E38\u663E\u793A\uFF09\u3002","settings.cover.title":"\u6A2A\u5E45","settings.group.idLine":"ID: {id} \xB7 {count} \u4E2A tab{suffix}","settings.group.tabCount":"{n} \u4E2A Tab","settings.head.sloganDesc":"\u5DE5\u4F5C\u53F0\u540D\u53F3\u4FA7\u90A3\u53E5\u77ED\u8BED\uFF1B\u7559\u7A7A\u5219\u53EA\u663E\u793A\u5DE5\u4F5C\u53F0\u540D\uFF08\u5185\u7F6E\u9ED8\u8BA4\u6587\u6848\u4F1A\u8DDF\u968F\u754C\u9762\u8BED\u8A00\uFF09","settings.head.textDesc":"\u63A7\u5236\u5934\u90E8\u90A3\u6761\u6587\u5B57\u6A2A\u5E45\uFF08\u5DE5\u4F5C\u53F0\u540D + slogan + \u53F3\u4FA7\u65E5\u671F\u65F6\u95F4\uFF09\u662F\u5426\u663E\u793A\u3002\u5173\u6389\u540E\u5934\u90E8\u53EA\u5269\u6A2A\u5E45\u56FE\u533A\u57DF\uFF1B\u6A2A\u5E45\u56FE\u4E5F\u5173\u65F6\u6574\u4E2A\u5934\u90E8\u4E0D\u6E32\u67D3\u3002","settings.head.textTitle":"\u663E\u793A\u5DE5\u4F5C\u53F0\u540D\u4E0E\u65E5\u671F\u65F6\u95F4","settings.head.title":"\u5DE5\u4F5C\u53F0\u540D / Slogan","settings.head.workbench":"\u5DE5\u4F5C\u53F0\u540D","settings.head.workbenchDesc":"\u89C6\u56FE\u5934\u90E8\u663E\u793A\u7684\u5927\u5B57\uFF08\u9ED8\u8BA4 {def}\uFF09\u3002\u56DE\u8F66\u6216\u79FB\u5F00\u7126\u70B9\u540E\u751F\u6548","settings.inbox.desc":"Quick add \u5199\u5165\u65B0\u4EFB\u52A1\u7684\u6587\u4EF6\u3002\u8F93\u5165\u6587\u4EF6\u540D\u5373\u641C\u7D22\uFF0C\u70B9\u9009\u786E\u8BA4\uFF08\u4E0D\u9009\u4E0D\u751F\u6548\uFF0C\u907F\u514D\u624B\u5DE5\u8F93\u9519\u8DEF\u5F84\uFF09","settings.inbox.placeholder":"\u8F93\u5165\u6587\u4EF6\u540D\u641C\u7D22\u2026","settings.inbox.title":"Inbox \u6587\u4EF6\u8DEF\u5F84","settings.lang.desc":"\u9ED8\u8BA4\u8DDF\u968F Obsidian \u7684\u754C\u9762\u8BED\u8A00\uFF1B\u4E5F\u53EF\u4EE5\u5728\u8FD9\u91CC\u56FA\u5B9A\u4E3A\u4E2D\u6587\u6216\u82F1\u6587\u3002\u5207\u6362\u540E\u7ACB\u5373\u751F\u6548\uFF0C\u65E0\u9700\u91CD\u542F\u63D2\u4EF6\u3002","settings.lang.en":"English","settings.lang.follow":"\u8DDF\u968F\u7CFB\u7EDF","settings.lang.title":"\u754C\u9762\u8BED\u8A00","settings.lang.zh":"\u4E2D\u6587","settings.newTab":"\u65B0 Tab","settings.noTabs":"\u6682\u65E0 Tab","settings.notice":"\u4FEE\u6539\u914D\u7F6E\u540E\uFF0C\u8BF7\u5173\u95ED\u63D2\u4EF6\uFF0C\u7136\u540E\u91CD\u65B0\u5F00\u542F\uFF0C\u4F7F\u914D\u7F6E\u751F\u6548\u3002","settings.noticeTitle":"\u63D0\u9192","settings.open.desc":"\u70B9\u5F00 TaskFlow \u65F6\u89C6\u56FE\u9ED8\u8BA4\u843D\u5728\u54EA\u91CC\u3002\u4E24\u4E2A\u4F4D\u7F6E\u90FD\u6309\u5BB9\u5668\u5BBD\u5EA6\u81EA\u9002\u5E94\uFF1A\u53F3\u4FA7\u8FB9\u680F\u53D8\u7A84\u65F6\uFF0C","settings.open.desc2":"\u300C\u4ECA\u65E5\u6982\u89C8 + \u91CD\u8981\u63D0\u9192\u300D\u4F1A\u81EA\u52A8\u4E0A\u4E0B\u5806\u53E0\u800C\u4E0D\u662F\u6324\u6210\u4E00\u56E2\u3002\u6539\u5B8C\u9700\u91CD\u5F00\u63D2\u4EF6\u751F\u6548\u3002","settings.open.main":"\u4E3B\u7A97\u53E3","settings.open.sidebar":"\u53F3\u4FA7\u8FB9\u680F","settings.open.subtitle":"\u4E3B\u7A97\u53E3 \u6216 \u53F3\u4FA7\u8FB9\u680F","settings.open.title":"\u63D2\u4EF6\u9ED8\u8BA4\u6253\u5F00\u4F4D\u7F6E","settings.panel.important":"\u663E\u793A\u91CD\u8981\u63D0\u9192","settings.panel.importantDesc":"\u53F3\u4FA7\u5361\u7247\uFF1A\u7528 Tasks \u63D2\u4EF6\u6E32\u67D3\u300C\u6700\u8BE5\u5173\u6CE8\u7684\u4EFB\u52A1\u300D\u3002\u53EF\u4E0E\u4ECA\u65E5\u6982\u89C8\u5E76\u6392\uFF1B\u5173\u6389\u4ECA\u65E5\u6982\u89C8\u65F6\u5B83\u5360\u6EE1\u6574\u884C\u3002","settings.panel.query":"\u91CD\u8981\u63D0\u9192\u67E5\u8BE2","settings.panel.queryDesc":"\u539F\u6837\u4EA4\u7ED9 Tasks \u63D2\u4EF6\u6267\u884C\u7684\u67E5\u8BE2\uFF08\u4E00\u4E2A\u5B57\u90FD\u4E0D\u6539\uFF0C\u63D2\u4EF6\u4E0D\u6CE8\u5165\u4EFB\u4F55\u6307\u4EE4\uFF09\u3002\u5199\u6CD5\u4E0E\u4E8C\u7EA7 tab \u7684\u67E5\u8BE2\u5B8C\u5168\u76F8\u540C\u3002","settings.panel.title":"\u9762\u677F\u6A21\u5757\uFF08\u663E\u793A\u5728\u5FEB\u6377\u8F93\u5165\u6846\u4E0A\u65B9\uFF09","settings.panel.today":"\u663E\u793A\u4ECA\u65E5\u6982\u89C8","settings.panel.todayDesc":"\u5DE6\u4FA7\u5361\u7247\uFF1A\u4ECA\u65E5\u5F85\u529E / \u4ECA\u65E5\u5B8C\u6210 / \u8FDB\u884C\u4E2D / \u903E\u671F / \u672C\u5468\u5B8C\u6210\uFF0C\u4EE5\u53CA\u300C\u4ECA\u65E5\u300D\u300C\u672C\u5468\u300D\u4E24\u4E2A\u5B8C\u6210\u7387\u73AF\u3002\u5B8C\u6210\u7387\u53E3\u5F84\uFF1A\u8BE5\u5468\u671F\u5185\u5B8C\u6210\u6570 \xF7\uFF08\u8BE5\u5468\u671F\u5185\u5B8C\u6210\u6570 + \u8BE5\u5468\u671F\u5DF2\u5230\u671F\u5374\u672A\u5B8C\u6210\u6570\uFF09\uFF0C\u6240\u4EE5\u672C\u5468\u4E00\u5B9A\u5305\u542B\u4ECA\u65E5\u3002","settings.showHeader":"\u663E\u793A\u6807\u9898","settings.stats.categories":"\u5C55\u5F00\u4EFB\u52A1\u7C7B\u522B","settings.stats.categoriesDesc":"\u5173\u95ED\uFF08\u6298\u53E0\uFF09\u540E\u5E95\u90E8\u53EA\u4FDD\u7559\u8FDB\u5EA6\u6761\u4E0E\u767E\u5206\u6BD4\uFF1B\u5F00\u542F\u5219\u663E\u793A overdue / in progress / todo / cancel / done / total \u5168\u90E8\u80F6\u56CA\u3002\u89C6\u56FE\u91CC\u70B9\u300CStatistics\u300D\u8FD9\u4E00\u884C\u53EF\u968F\u65F6\u5C31\u5730\u5207\u6362\u3002","settings.stats.title":"\u5E95\u90E8\u7EDF\u8BA1\u680F","settings.tab.addToGroup":"\u6DFB\u52A0\u65B0 Tab \u5230 {group}","settings.tab.headerToggle":"\u5728\u300C{label}\u300D\u5185\u5BB9\u4E0A\u65B9\u663E\u793A\u7AE0\u8282\u6807\u9898","settings.tab.metaLine":"\u67E5\u8BE2: {query} \xB7 \u987A\u5E8F: {order}","stats.title":"\u7EDF\u8BA1","stats.toggleAria":"\u6298\u53E0\u6216\u5C55\u5F00\u4EFB\u52A1\u7C7B\u522B\u7EDF\u8BA1","suggest.noMatch":"\u6CA1\u6709\u5339\u914D\u7684\u6587\u4EF6","toast.bannerRemoveFail":"\u79FB\u9664\u6A2A\u5E45\u5931\u8D25\uFF1A","toast.bannerRemoved":"\u6A2A\u5E45\u5DF2\u79FB\u9664","toast.bannerSaveFail":"\u6A2A\u5E45\u4FDD\u5B58\u5931\u8D25\uFF1A","toast.bannerUpdated":"\u6A2A\u5E45\u5DF2\u66F4\u65B0","toast.configSaved":"TaskFlow \u914D\u7F6E\u5DF2\u4FDD\u5B58","toast.groupCreated":"\u5206\u7EC4\u5DF2\u521B\u5EFA","toast.groupDeleted":"\u5206\u7EC4\u5DF2\u5220\u9664","toast.groupUpdated":"\u5206\u7EC4\u5DF2\u66F4\u65B0","toast.headerHidden":"\u5DF2\u9690\u85CF\u7AE0\u8282\u6807\u9898","toast.headerShown":"\u5DF2\u663E\u793A\u7AE0\u8282\u6807\u9898","toast.inboxSet":"Inbox \u6587\u4EF6\u5DF2\u8BBE\u7F6E","toast.queryReset":"\u5DF2\u6062\u590D\u9ED8\u8BA4\u67E5\u8BE2","toast.queryUpdated":"\u91CD\u8981\u63D0\u9192\u67E5\u8BE2\u5DF2\u66F4\u65B0","toast.sloganUpdated":"Slogan \u5DF2\u66F4\u65B0","toast.tabCreated":"Tab \u5DF2\u521B\u5EFA","toast.tabDeleted":"Tab \u5DF2\u5220\u9664","toast.tabUpdated":"Tab \u5DF2\u66F4\u65B0","toast.workbenchUpdated":"\u5DE5\u4F5C\u53F0\u540D\u5DF2\u66F4\u65B0","view.empty.noMatch":"\u5728\u201C{label}\u201D\u4E0B\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u4EFB\u52A1\u3002\u8BD5\u8BD5\u6DFB\u52A0\u4E00\u4E2A\u65B0\u4EFB\u52A1\uFF0C\u6216\u8005\u68C0\u67E5\u8FC7\u6EE4\u6761\u4EF6\u3002","view.empty.noTabsInGroup":"{name} \u4E0B\u8FD8\u6CA1\u6709 Tab"},Ae={"about.author1":"Tech talent expert, 15 years as a headhunter across internet / AI / robotics, 10,000+ interviews conducted.","about.author2":"Productivity systems expert, 16+ years focused on building efficient work and growth systems.","about.author3":"Same handle across all social media platforms: \u730E\u4EBA\u79D1\u53D4.","about.authorTitle":"Author: Uncle Ke","about.githubBtn":"Open GitHub repository","about.githubDesc":"Browse the source code, full documentation, changelog, and report issues.","about.githubTitle":"Github Repository","about.intro1":"TaskFlow is an action workbench for Obsidian Tasks.","about.intro2":'It does not change any of your existing task syntax or query logic. Instead, it builds a dynamic "Action Space" on top of your task list.',"about.intro3":'It reorganizes your tasks, shifting you from "managing what needs to be done" to "quickly finding what to do now." By reducing the cost of choosing across time, GTD, and context dimensions, it helps action happen faster.',"about.introTitle":"About TaskFlow","about.moreBtn":"Visit lifein.vip","about.moreDesc":"Example vaults, plugins, scripts, notes and more","about.moreTitle":"More of Uncle Ke's Obsidian productivity & knowledge management practice","banner.line":"You don't need more tasks. You need the next step.","common.builtinSuffix":" \xB7 built-in","common.cancel":"Cancel","common.confirm":"Confirm","common.close":"Close","common.delete":"Delete","common.edit":"Edit","common.remove":"Remove","common.reset":"Restore default","common.save":"Save","common.thisGroup":"this group","default.slogan":"From managing tasks to choosing action.","defaultGroup.dashboard":"Dashboard","defaultTab.drift":"Drift","defaultTab.inbox":"Inbox","defaultTab.life":"Life","defaultTab.month":"This month","defaultTab.next":"Next","defaultTab.overdue":"Overdue","defaultTab.someday":"Someday","defaultTab.today":"Today","defaultTab.tomorrow":"Tomorrow","defaultTab.waiting":"Waiting","defaultTab.week":"This week","defaultTab.work":"Work","empty.newTask":"+ New task","empty.noTabsHint":'Add a Tab under "Tabs" in the settings panel and it will appear here.',"empty.noTasks":"No tasks here yet","head.changeBanner":"Change banner","head.lunarSep":" \xB7 lunar ","head.uploadBanner":"Upload banner","modal.addGroup":"Add group","modal.addTab":"+ Add new tab","modal.addTabBtn":"Add Tab","modal.configTitle":"TaskFlow settings","modal.editGroup":"Edit group","modal.editGroupDialog":"Edit group dialog","modal.editTabBtn":"Edit Tab","modal.editTabDialog":"Edit Tab dialog","modal.editTitle":"Edit dialog","modal.errIdEmpty":"ID cannot be empty","modal.errLabelEmpty":"Label cannot be empty","modal.errOrder":"Please enter an integer greater than 0","modal.errPathEmpty":"File path cannot be empty","modal.errQueryEmpty":"Query cannot be empty","modal.excluded":"Excluded folders","modal.excludedDesc":"Comma-separated folder paths; files inside them are excluded from task scanning","modal.excludedExample":"e.g. System/Templates, Attachments","modal.fixFields":"Please fix the highlighted fields first","modal.general":"General","modal.groupDesc":"Which group this tab belongs to","modal.groupExample":"e.g. Custom, Project, Team","modal.groupIdDesc":"Unique identifier of the group (lowercase letters, digits and hyphens only)","modal.groupIdExample":"e.g. custom-group","modal.groupNoteProperty":"Note selector property","modal.groupNotePropertyDesc":"When set, this group shows a dropdown of notes matching this frontmatter property. Tasks queries will use the selected note as query.file.","modal.groupNotePropertyExample":"e.g. project","modal.groupNoteValues":"Property values","modal.groupNoteValuesDesc":"Only show notes whose property contains one of the selected values. Leave empty to match any non-empty value.","modal.groupNoteValuesAny":"Any non-empty value","modal.groupNoteValuesNone":"No notes use this property","modal.icon":"Icon","modal.iconDesc":"Pick from the dropdown, or search any Obsidian icon name (custom names work too)","modal.iconExample":"e.g. folder","modal.iconSearch":"Search icons\u2026","modal.iconUseCustom":'Use custom icon "{name}"',"modal.iconNoMatch":"No matching icons","modal.idRule":"Lowercase letters, digits and hyphens only","modal.inboxDesc":"File path that Quick add writes new tasks to","modal.inboxExample":"e.g. Inbox.md","modal.label":"Label","modal.labelDesc":"The name shown in the interface","modal.labelExample":"e.g. Inbox, Today, Work","modal.newGroupDialog":"New group dialog","modal.newTab":"New tab","modal.newTabDialog":"New Tab dialog","modal.noTabs":"No tabs yet \u2014 please add one","modal.openFail":"TaskFlow: failed to open {label} \u2014 {msg}","modal.order":"Order","modal.orderDesc":"Display order within the same group (smaller number comes first)","modal.orderExample":"e.g. 1, 2, 3...","modal.query":"Tasks query","modal.queryDesc":"Uses the Tasks plugin query syntax","modal.queryPlaceholder":`e.g. not done has due date group by filename -sort by due`,"modal.renderFail":"\u26A0 This dialog failed to render","modal.renderFailDetail":"Render failed: {msg}","modal.saveFail":"Failed to save: {msg}","modal.saving":"Saving\u2026","modal.showHeaderDesc":'Show a heading above the tab content (e.g. "Today", "Todo") together with its task count',"modal.tabIdDesc":"Unique identifier of the tab (cannot be changed)","modal.tabsManage":"Tabs","modal.unsaved":"You have unsaved changes","nav.about":"About","nav.general":"General","nav.groups":"Groups","panel.collapse":"Collapse \u2191","panel.doneToday":"Done today","panel.doneWeek":"Done this week","panel.emptyImportant":'No tasks match the current filter. Adjust "Important reminder query" in the settings panel.',"panel.importantEmpty":"Nothing needs attention right now","panel.inProgress":"In progress","panel.more":"More...","panel.moreCount":"More ({n})...","panel.todayRate":"Today","panel.todayTodo":"Today's todos","panel.weekRate":"This Week","settings.addGroup":"Add new group","settings.confirm.deleteGroup":'Delete group "{name}"? All tabs in this group will be deleted as well.',"settings.confirm.deleteTab":'Delete tab "{name}"?',"settings.cover.aria":"Choose banner image","settings.cover.change":"Change","settings.cover.choose":"Choose image\u2026","settings.cover.none":"Not set (using the built-in default banner)","settings.cover.pick":"Banner image","settings.cover.pickDesc":`Header banner image, stored as {file}.. Its location follows Obsidian's "Default location for new attachments": pick "In the folder specified below" and it goes into that folder; for the other three options (vault root / same folder as current file / subfolder under it) it is placed in the {dir} folder at the vault root. Swapping images cleans up the old file automatically. If you never set one, the built-in default banner is shown; you can also hover the top-right corner of the banner to change it.`,"settings.cover.show":"Show banner","settings.cover.showDesc":"Whether to show the banner image at the top of the header (the built-in default banner is shown until you add your own). When off, only the workbench name + date & time line shows and the banner area takes no space (the tab list is unaffected).","settings.cover.title":"Banner","settings.group.idLine":"ID: {id} \xB7 {count} tabs{suffix}","settings.group.tabCount":"{n} tabs","settings.head.sloganDesc":"The short phrase next to the workbench name; leave empty to show only the workbench name (the built-in default follows the interface language)","settings.head.textDesc":"Controls whether the text line (workbench name + slogan + date & time on the right) is shown. When off, only the banner area remains; if the banner is off too, the whole header is not rendered.","settings.head.textTitle":"Show workbench name and date & time","settings.head.title":"Workbench name / Slogan","settings.head.workbench":"Workbench name","settings.head.workbenchDesc":"The large text at the top of the view (default: {def}). Applies on Enter or when focus leaves the field","settings.inbox.desc":"The file Quick add writes new tasks to. Type a file name to search, then click to confirm (nothing is applied until you pick, so typos can't slip in)","settings.inbox.placeholder":"Search for a file name\u2026","settings.inbox.title":"Inbox file path","settings.lang.desc":"Follows the Obsidian interface language by default; you can also pin Chinese or English here. Takes effect immediately, no plugin restart needed.","settings.lang.en":"English","settings.lang.follow":"Follow system","settings.lang.title":"Interface language","settings.lang.zh":"Chinese","settings.newTab":"New Tab","settings.noTabs":"No tabs yet","settings.notice":"After changing settings, disable the plugin and re-enable it for the changes to take effect.","settings.noticeTitle":"Notice","settings.open.desc":"Where the view lands when TaskFlow is opened. Both placements adapt to container width: when the right sidebar narrows,","settings.open.desc2":"Today's Overview + Important Reminders stack vertically instead of being squeezed together. Restart the plugin for this to take effect.","settings.open.main":"Main window","settings.open.sidebar":"Right sidebar","settings.open.subtitle":"Main window or right sidebar","settings.open.title":"Default opening location","settings.panel.important":"Show Important Reminders","settings.panel.importantDesc":`Right card: renders "the tasks that deserve your attention most" via the Tasks plugin. Sits side by side with Today's Overview, or takes the full row when that is off.`,"settings.panel.query":"Important reminder query","settings.panel.queryDesc":"The query handed to the Tasks plugin verbatim (not one character is changed, TaskFlow injects nothing). Written exactly like a secondary tab's query.","settings.panel.title":"Panels (shown above the quick-add field)","settings.panel.today":"Show Today's Overview","settings.panel.todayDesc":`Left card: Today's todos / Done today / In progress / Overdue / Done this week, plus two completion rings for "Today" and "This Week". How the rate is computed: done in the period \xF7 (done in the period + due in the period but still open), so this week always includes today.`,"settings.showHeader":"Show heading","settings.stats.categories":"Expand task categories","settings.stats.categoriesDesc":'When collapsed, only the progress bar and percentage remain; when expanded, all pills show (overdue / in progress / todo / cancel / done / total). Click the "Statistics" row in the view to toggle it anytime.',"settings.stats.title":"Footer statistics","settings.tab.addToGroup":"Add a new Tab to {group}","settings.tab.headerToggle":'Show a section heading above "{label}"',"settings.tab.metaLine":"Query: {query} \xB7 Order: {order}","stats.title":"Statistics","stats.toggleAria":"Collapse or expand the task category statistics","suggest.noMatch":"No matching files","toast.configSaved":"TaskFlow settings saved","toast.bannerRemoveFail":"Failed to remove banner: ","toast.bannerRemoved":"Banner removed","toast.bannerSaveFail":"Failed to save banner: ","toast.bannerUpdated":"Banner updated","toast.groupCreated":"Group created","toast.groupDeleted":"Group deleted","toast.groupUpdated":"Group updated","toast.headerHidden":"Heading hidden","toast.headerShown":"Heading shown","toast.inboxSet":"Inbox file set","toast.queryReset":"Restored the default query","toast.queryUpdated":"Important reminder query updated","toast.sloganUpdated":"Slogan updated","toast.tabCreated":"Tab created","toast.tabDeleted":"Tab deleted","toast.tabUpdated":"Tab updated","toast.workbenchUpdated":"Workbench name updated","view.empty.noMatch":'No tasks match "{label}". Try adding a new task, or check the filter.',"view.empty.noTabsInGroup":"{name} has no tabs yet"},Se=Ge();function De(r){Se=r==="en"?"en":"zh"}function Oe(){return Se}function Ge(r){try{let a=(0,Ae.getLanguage)();if(typeof a=="string")return a.toLowerCase().startsWith("zh")?"zh":"en"}catch{}try{let a=typeof window<"u"?window.navigator?.language:void 0;if(a)return a.toLowerCase().startsWith("zh")?"zh":"en"}catch{}return"zh"}function Ce(r,a){return r==="en"?"en":r==="zh"?"zh":Ge(a)}function n(r,a){let e=(Se==="en"?Pe[r]:He[r])??He[r]??Pe[r]??r;if(a)for(let t of Object.keys(a))e=e.split("{"+t+"}").join(String(a[t]));return e}var mt=["\u8BA9\u4EFB\u52A1\u50CF\u6C34\u4E00\u6837\u6D41\u52A8","Let tasks flow like water","\u4ECE\u7BA1\u7406\u4EFB\u52A1\uFF0C\u5230\u9009\u62E9\u884C\u52A8\u3002","From managing tasks to choosing action."];function re(r){return mt.includes(String(r??"").trim())}var ft={"gtd-inbox":"defaultTab.inbox","gtd-next":"defaultTab.next","gtd-waiting":"defaultTab.waiting","gtd-someday":"defaultTab.someday","time-overdue":"defaultTab.overdue","time-today":"defaultTab.today","time-tomorrow":"defaultTab.tomorrow","time-week":"defaultTab.week","time-month":"defaultTab.month","tag-work":"defaultTab.work","tag-life":"defaultTab.life"};function I(r){let a=ft[r.id];return a?n(a):r.label}function R(r,a){let e=r.group??"gtd";return a.length?a.some(t=>t.id===e)?e:a[0].id:e}var H="TaskFlow";function B(){return n("default.slogan")}function Be(r){if(r==null)return B();let a=r.trim();return a?re(a)?B():a:""}var le="_taskflow",W=50;function k(r){return typeof r!="string"||!r?"":r.split(` +sort by due`,"modal.renderFail":"\u26A0 This dialog failed to render","modal.renderFailDetail":"Render failed: {msg}","modal.saveFail":"Failed to save: {msg}","modal.saving":"Saving\u2026","modal.showHeaderDesc":'Show a heading above the tab content (e.g. "Today", "Todo") together with its task count',"modal.tabIdDesc":"Unique identifier of the tab (cannot be changed)","modal.tabsManage":"Tabs","modal.unsaved":"You have unsaved changes","nav.about":"About","nav.general":"General","nav.groups":"Groups","view.group.selectNote":"Select {group} note","view.group.noMatchingNotes":"No notes with this property value","view.group.limit":"Limit","view.group.limitDesc":"Maximum tasks per query in this group (empty uses the query's own limit)","panel.collapse":"Collapse \u2191","panel.doneToday":"Done today","panel.doneWeek":"Done this week","panel.emptyImportant":'No tasks match the current filter. Adjust "Important reminder query" in the settings panel.',"panel.importantEmpty":"Nothing needs attention right now","panel.inProgress":"In progress","panel.more":"More...","panel.moreCount":"More ({n})...","panel.todayRate":"Today","panel.todayTodo":"Today's todos","panel.weekRate":"This Week","settings.addGroup":"Add new group","settings.confirm.deleteGroup":'Delete group "{name}"? All tabs in this group will be deleted as well.',"settings.confirm.deleteTab":'Delete tab "{name}"?',"settings.cover.aria":"Choose banner image","settings.cover.change":"Change","settings.cover.choose":"Choose image\u2026","settings.cover.none":"Not set (using the built-in default banner)","settings.cover.pick":"Banner image","settings.cover.pickDesc":`Header banner image, stored as {file}.. Its location follows Obsidian's "Default location for new attachments": pick "In the folder specified below" and it goes into that folder; for the other three options (vault root / same folder as current file / subfolder under it) it is placed in the {dir} folder at the vault root. Swapping images cleans up the old file automatically. If you never set one, the built-in default banner is shown; you can also hover the top-right corner of the banner to change it.`,"settings.cover.show":"Show banner","settings.cover.showDesc":"Whether to show the banner image at the top of the header (the built-in default banner is shown until you add your own). When off, only the workbench name + date & time line shows and the banner area takes no space (the tab list is unaffected).","settings.cover.title":"Banner","settings.group.idLine":"ID: {id} \xB7 {count} tabs{suffix}","settings.group.tabCount":"{n} tabs","settings.head.sloganDesc":"The short phrase next to the workbench name; leave empty to show only the workbench name (the built-in default follows the interface language)","settings.head.textDesc":"Controls whether the text line (workbench name + slogan + date & time on the right) is shown. When off, only the banner area remains; if the banner is off too, the whole header is not rendered.","settings.head.textTitle":"Show workbench name and date & time","settings.head.title":"Workbench name / Slogan","settings.head.workbench":"Workbench name","settings.head.workbenchDesc":"The large text at the top of the view (default: {def}). Applies on Enter or when focus leaves the field","settings.inbox.desc":"The file Quick add writes new tasks to. Type a file name to search, then click to confirm (nothing is applied until you pick, so typos can't slip in)","settings.inbox.placeholder":"Search for a file name\u2026","settings.inbox.title":"Inbox file path","settings.lang.desc":"Follows the Obsidian interface language by default; you can also pin Chinese or English here. Takes effect immediately, no plugin restart needed.","settings.lang.en":"English","settings.lang.follow":"Follow system","settings.lang.title":"Interface language","settings.lang.zh":"Chinese","settings.newTab":"New Tab","settings.noTabs":"No tabs yet","settings.notice":"After changing settings, disable the plugin and re-enable it for the changes to take effect.","settings.noticeTitle":"Notice","settings.open.desc":"Where the view lands when TaskFlow is opened. Both placements adapt to container width: when the right sidebar narrows,","settings.open.desc2":"Today's Overview + Important Reminders stack vertically instead of being squeezed together. Restart the plugin for this to take effect.","settings.open.main":"Main window","settings.open.sidebar":"Right sidebar","settings.open.subtitle":"Main window or right sidebar","settings.open.title":"Default opening location","settings.panel.important":"Show Important Reminders","settings.panel.importantDesc":`Right card: renders "the tasks that deserve your attention most" via the Tasks plugin. Sits side by side with Today's Overview, or takes the full row when that is off.`,"settings.panel.query":"Important reminder query","settings.panel.queryDesc":"The query handed to the Tasks plugin verbatim (not one character is changed, TaskFlow injects nothing). Written exactly like a secondary tab's query.","settings.panel.title":"Panels (shown above the quick-add field)","settings.panel.today":"Show Today's Overview","settings.panel.todayDesc":`Left card: Today's todos / Done today / In progress / Overdue / Done this week, plus two completion rings for "Today" and "This Week". How the rate is computed: done in the period \xF7 (done in the period + due in the period but still open), so this week always includes today.`,"settings.showHeader":"Show heading","settings.stats.categories":"Expand task categories","settings.stats.categoriesDesc":'When collapsed, only the progress bar and percentage remain; when expanded, all pills show (overdue / in progress / todo / cancel / done / total). Click the "Statistics" row in the view to toggle it anytime.',"settings.stats.title":"Footer statistics","settings.tab.addToGroup":"Add a new Tab to {group}","settings.tab.headerToggle":'Show a section heading above "{label}"',"settings.tab.metaLine":"Query: {query} \xB7 Order: {order}","stats.title":"Statistics","stats.toggleAria":"Collapse or expand the task category statistics","suggest.noMatch":"No matching files","toast.configSaved":"TaskFlow settings saved","toast.bannerRemoveFail":"Failed to remove banner: ","toast.bannerRemoved":"Banner removed","toast.bannerSaveFail":"Failed to save banner: ","toast.bannerUpdated":"Banner updated","toast.groupCreated":"Group created","toast.groupDeleted":"Group deleted","toast.groupUpdated":"Group updated","toast.headerHidden":"Heading hidden","toast.headerShown":"Heading shown","toast.inboxSet":"Inbox file set","toast.queryReset":"Restored the default query","toast.queryUpdated":"Important reminder query updated","toast.sloganUpdated":"Slogan updated","toast.tabCreated":"Tab created","toast.tabDeleted":"Tab deleted","toast.tabUpdated":"Tab updated","toast.workbenchUpdated":"Workbench name updated","view.empty.noMatch":'No tasks match "{label}". Try adding a new task, or check the filter.',"view.empty.noTabsInGroup":"{name} has no tabs yet"},Ce=Be();function Le(n){Ce=n==="en"?"en":"zh"}function Ne(){return Ce}function Be(n){try{let a=(0,Oe.getLanguage)();if(typeof a=="string")return a.toLowerCase().startsWith("zh")?"zh":"en"}catch{}try{let a=typeof window<"u"?window.navigator?.language:void 0;if(a)return a.toLowerCase().startsWith("zh")?"zh":"en"}catch{}return"zh"}function Fe(n,a){return n==="en"?"en":n==="zh"?"zh":Be(a)}function o(n,a){let e=(Ce==="en"?Ae[n]:He[n])??He[n]??Ae[n]??n;if(a)for(let t of Object.keys(a))e=e.split("{"+t+"}").join(String(a[t]));return e}var vt=["\u8BA9\u4EFB\u52A1\u50CF\u6C34\u4E00\u6837\u6D41\u52A8","Let tasks flow like water","\u4ECE\u7BA1\u7406\u4EFB\u52A1\uFF0C\u5230\u9009\u62E9\u884C\u52A8\u3002","From managing tasks to choosing action."];function re(n){return vt.includes(String(n??"").trim())}var Tt={"gtd-inbox":"defaultTab.inbox","gtd-next":"defaultTab.next","gtd-waiting":"defaultTab.waiting","gtd-someday":"defaultTab.someday","time-overdue":"defaultTab.overdue","time-today":"defaultTab.today","time-tomorrow":"defaultTab.tomorrow","time-week":"defaultTab.week","time-month":"defaultTab.month","tag-work":"defaultTab.work","tag-life":"defaultTab.life"};function R(n){let a=Tt[n.id];return a?o(a):n.label}function le(n,a){if(!n)return;if(a in n)return n[a];let e=a.toLowerCase(),t=Object.keys(n).find(s=>s.toLowerCase()===e);return t===void 0?void 0:n[t]}function ce(n){return n==null?[]:Array.isArray(n)?n.flatMap(e=>ce(e)):typeof n!="string"&&typeof n!="number"&&typeof n!="boolean"?[]:(typeof n=="string"?n.split(/,(?![^[]*\]\])/):[String(n)]).map(e=>e.trim().replace(/^\[\[([^\]|#]+)(?:[#|][^\]]*)?\]\]$/,"$1").trim()).filter(e=>e!=="")}function _e(n,a){let e=ce(n);if(e.length===0)return!1;if(!a||a.length===0)return!0;let t=new Set(a.map(s=>s.toLowerCase()));return e.some(s=>t.has(s.toLowerCase()))}function I(n,a){let e=n.group??"gtd";return a.length?a.some(t=>t.id===e)?e:a[0].id:e}var P="TaskFlow";function N(){return o("default.slogan")}function Ve(n){if(n==null)return N();let a=n.trim();return a?re(a)?N():a:""}var de="_taskflow",q=50;function k(n){return typeof n!="string"||!n?"":n.split(` `).map(a=>a.trim()).join(` `).trim()}var C=["not done","has due date","due before today","short mode","sort by due","limit 10"].join(` -`),X=!0,J=!0,ee=!0,te=!0,de="main",_e="auto";function V(r){let a=typeof r=="number"?r:Number(r);return Number.isFinite(a)?Math.min(100,Math.max(0,a)):W}var Le=require("obsidian");var Ne=["png","jpg","jpeg","webp","gif","avif","bmp","svg"],ce="taskflow_banner";function bt(r){let a=r.vault.getConfig("attachmentFolderPath")??"";return a.length>0&&a!=="."&&!a.startsWith("./")&&!a.startsWith("/")?a:le}function vt(r){let a=s=>{let i=s.toLowerCase().replace(/^\./,"");return Ne.includes(i)?i==="jpeg"?"jpg":i:null},e=a(r.name.split(".").pop()??"");return e||(a(r.type.split("/").pop()??"")??"png")}function pe(r,a){if(!a)return null;let e=r.vault.getAbstractFileByPath(a);if(e instanceof Le.TFile)return e;let t=r.vault.getFiles().find(s=>s.path===a);return t instanceof Le.TFile?t:null}async function ue(r,a){let e=r.app.vault,t=r.settings.data,s=bt(r.app),i=vt(a),l=`${s}/${ce}.${i}`,o=t.coverImagePath,d=await a.arrayBuffer();try{await e.createFolder(s)}catch(c){if(!(c instanceof Error&&c.message.includes("Folder already exists")))throw c}if(await e.adapter.writeBinary(l,d),o&&o!==l)try{await e.adapter.remove(o)}catch{}await Tt(e,s,l),t.coverImagePath=l,t.coverPosition=W,await r.saveSettings()}async function Tt(r,a,e){for(let t of Ne){let s=`${a}/${ce}.${t}`;if(s!==e&&r.getAbstractFileByPath(s))try{await r.adapter.remove(s)}catch{}}}async function he(r){let a=r.settings.data,e=a.coverImagePath;if(a.coverImagePath="",a.coverPosition=W,await r.saveSettings(),!!e)try{await r.app.vault.adapter.remove(e)}catch{}}var yt=require("obsidian");var P=require("obsidian");var Ue=["folder","folder-open","folder-plus","folder-minus","folder-lock","folder-git-2","folder-tree","folder-up","file","file-text","file-plus","file-minus","file-check","file-x","file-pen","files","copy","clipboard","clipboard-check","clipboard-list","clipboard-copy","archive","box","package","briefcase","inbox","tag","tags","hash","at-sign","award","badge","bookmark","bookmarks","user","users","user-plus","user-minus","user-check","user-x","user-cog","contact","contacts","id-card","address-book","phone","phone-call","message-circle","message-square","messages-square","send","share","share-2","users-round","calendar","calendar-days","calendar-check","calendar-clock","calendar-plus","calendar-minus","calendar-off","clock","clock-4","alarm-clock","timer","timer-reset","hourglass","history","rotate-cw","rotate-ccw","repeat","refresh-cw","undo","redo","check","check-circle","check-square","circle-check","circle-check-big","list","list-checks","list-todo","square-check","check-check","circle","circle-dashed","minus","plus","x","x-circle","building","building-2","computer","laptop","monitor","monitor-smartphone","cpu","code","code-2","terminal","terminal-square","git-branch","git-commit","git-merge","git-pull-request","bug","wrench","hammer","screwdriver","tool","tools","settings","settings-2","sliders","sliders-horizontal","gauge","database","server","cloud","cloud-cog","hard-drive","network","shield","shield-check","lock","key","key-round","fingerprint","accessibility","home","house","heart","heart-handshake","star","smile","smile-plus","coffee","music","music-2","camera","image","images","image-plus","map","map-pin","map-pinned","compass","navigation","globe","globe-2","earth","plane","car","bicycle","bike","train","bus","shopping-cart","shopping-bag","shopping-basket","gift","book","book-open","book-open-check","graduation-cap","backpack","dumbbell","utensils","pizza","apple","leaf","flower","flower-2","tree-pine","sun","moon","moon-star","cloud-rain","umbrella","droplet","wind","flame","zap","sparkles","palette","brush","gamepad-2","ticket","wallet","credit-card","banknote","piggy-bank","coins","trophy","medal","target","flag","flag-triangle-right","rocket","lightbulb","bell","bell-ring","megaphone","speaker","volume","headphones","mic","video","webcam","tv","eye","eye-off","search","filter","crosshair","anchor","pin","info","help-circle","alert-triangle","alert-circle","alert-octagon","chevron-down","chevron-right","chevron-left","chevron-up","arrow-right","arrow-left","arrow-up","arrow-down","arrow-up-right","move","more-horizontal","more-vertical","ellipsis","ellipsis-vertical","menu","grid","grid-2x2","layout","layout-grid","layout-list","layout-dashboard","panel-left","panel-right","sidebar","columns","rows","layers","component","command","option","maximize","minimize","fullscreen","external-link","link","link-2","unlink","download","upload","save","trash","trash-2","edit","edit-2","edit-3","pencil","pen","eraser","scissors","bold","italic","underline","type","align-left","align-center","align-right","wrap-text","list-ordered","quote","percent","dollar-sign","euro","yen","bitcoin","receipt","calculator","scale","gavel","library","newspaper","file-edit","presentation","pie-chart","bar-chart","bar-chart-2","line-chart","trending-up","trending-down","activity","wifi","bluetooth","battery","plug","power","zap-off"],Fe=[...Ue].sort();function qe(r){return Ue.includes(r)}function E(r,a){for(let[e,t]of Object.entries(a))r.style.setProperty(e,t)}function We(r,a){for(let e of a.split(/\s+/))e&&r.classList.add(e)}function _(r,a){let e=r.querySelector(".tf-field-input, .tf-field-textarea, .tf-field-select"),t=r.querySelector(".tf-field-message");e?.classList.toggle("tf-error",!!a),e?.classList.toggle("tf-success",!a),t&&(t.textContent=a??"",t.className=a?"tf-field-message tf-error":"tf-field-message")}function wt(r,a){let e=r.createDiv({cls:"tf-field"}),t=e.createEl("label",{cls:"tf-field-label"}).createDiv({cls:"tf-field-label-text"});t.createSpan({cls:"tf-field-name",text:a.label}),a.description&&t.createSpan({cls:"tf-field-desc",text:a.description});let s=e.createDiv({cls:"tf-field-input-wrapper"}),i=()=>a.value,l;switch(a.type){case"text":{let o=s.createEl("input",{cls:"tf-field-input",attr:{type:"text",placeholder:a.placeholder??""}});o.value=a.value??"",i=()=>o.value,o.addEventListener("input",()=>{_(e,null),a.onChange(o.value)}),o.addEventListener("blur",()=>{a.validation&&_(e,a.validation(o.value))});break}case"textarea":{let o=s.createEl("textarea",{cls:"tf-field-textarea",attr:{placeholder:a.placeholder??"",rows:String(a.rows??4)}});o.value=a.value??"",i=()=>o.value,o.addEventListener("input",()=>{_(e,null),a.onChange(o.value)}),o.addEventListener("blur",()=>{a.validation&&_(e,a.validation(o.value))});break}case"dropdown":{let o=s.createEl("select",{cls:"tf-field-select"});for(let[d,c]of Object.entries(a.options??{}))o.createEl("option",{attr:{value:d},text:c});o.value=a.value??"",i=()=>o.value,o.addEventListener("change",()=>{_(e,null),a.onChange(o.value)});break}case"toggle":{let o=s.createEl("label",{cls:"tf-switch"}),d=o.createEl("input",{cls:"tf-switch-input",attr:{type:"checkbox","aria-label":a.label}});d.checked=!!a.value,o.createSpan({cls:"tf-switch-track"}).createSpan({cls:"tf-switch-thumb"}),i=()=>d.checked,d.addEventListener("change",()=>{a.onChange(d.checked)});break}case"readonly":{let o=s.createEl("input",{cls:"tf-field-input",attr:{type:"text",readonly:"true"}});o.value=a.value??"",i=()=>o.value;break}case"icon-picker":{E(s,{position:"relative"});let o=s.createEl("button",{cls:"tf-icon-trigger tf-field-input",attr:{type:"button","aria-haspopup":"listbox"}}),d=o.createSpan({cls:"tf-icon-trigger-icon"});(0,P.setIcon)(d,a.value??"folder");let c=o.createSpan({cls:"tf-icon-trigger-name",text:a.value??"folder"});o.createSpan({cls:"tf-icon-trigger-caret"});let u=typeof e.closest=="function"?e.closest(".tf-modal")??s:s,h=u.createDiv({cls:"tf-icon-panel is-hidden"});h.addEventListener("mousedown",b=>b.stopPropagation());let p=h.createEl("input",{cls:"tf-icon-search",attr:{type:"text",placeholder:n("modal.iconSearch")}}),g=h.createDiv({cls:"tf-icon-grid"}),T=a.value??"folder",m=null,x=!1,L=typeof e.closest=="function"?e.closest(".tf-modal-form"):null,F=()=>{if(typeof o.getBoundingClientRect!="function"||typeof window>"u"||typeof window.innerWidth!="number")return;let b=o.getBoundingClientRect(),M=h.offsetHeight||320,oe=window.innerWidth,S=window.innerHeight,G=Math.max(280,b.width||0),ke=Math.min(b.left,Math.max(8,oe-G-8)),Z=b.bottom+6;Z+M>S-8&&(Z=Math.max(8,b.top-M-6)),E(h,{position:"fixed",top:`${Z}px`,left:`${Math.max(8,ke)}px`,width:`${G}px`,right:"auto"})},K=()=>{x&&F()},O=()=>{x=!1,h.classList.add("is-hidden"),m&&(m.remove(),m=null),L?.removeEventListener("scroll",K,!0)},j=()=>{p.value="",q(""),h.classList.remove("is-hidden"),x=!0,F(),m||(m=u.createDiv({cls:"tf-icon-backdrop"}),m.addEventListener("click",()=>O())),L?.addEventListener("scroll",K,!0);try{p.focus()}catch{}},f=b=>{T=b,d.empty(),(0,P.setIcon)(d,b),c.textContent=b,O(),_(e,null),a.onChange(b)},q=b=>{g.empty();let M=b.trim().toLowerCase(),oe=M?Fe.filter(S=>S.includes(M)):Fe;if(!oe.length){if(M&&!qe(M)){let S=g.createEl("button",{cls:"tf-icon-tile tf-icon-tile-custom",attr:{type:"button","data-icon":M}});S.createSpan({cls:"tf-icon-tile-name",text:n("modal.iconUseCustom",{name:M})}),S.addEventListener("click",G=>{G.stopPropagation(),f(M)})}else g.createDiv({cls:"tf-icon-empty",text:n("modal.iconNoMatch")});return}for(let S of oe.slice(0,400)){let G=g.createEl("button",{cls:"tf-icon-tile",attr:{type:"button","data-icon":S,title:S}}),ke=G.createSpan({cls:"tf-icon-tile-icon"});(0,P.setIcon)(ke,S),G.createSpan({cls:"tf-icon-tile-name",text:S}),G.addEventListener("click",Z=>{Z.stopPropagation(),f(S)})}};o.addEventListener("click",b=>{b.preventDefault(),h.classList.contains("is-hidden")?j():O()}),p.addEventListener("input",()=>{q(p.value),x&&F()}),p.addEventListener("keydown",b=>{b.key==="Escape"&&(b.stopPropagation(),O())}),typeof window<"u"&&typeof window.addEventListener=="function"&&window.addEventListener("resize",F),i=()=>T,l=()=>{O(),h.remove(),typeof window<"u"&&typeof window.removeEventListener=="function"&&window.removeEventListener("resize",F)};break}}return e.createDiv({cls:"tf-field-message"}),{spec:a,el:e,read:i,teardown:l}}var A=class extends P.Modal{constructor(){super(...arguments);this.dirty=!1;this.forceSave=!1;this.fields=[];this.statusEl=null;this.saving=!1;this.formEl=null}static launch(e,t=n("modal.editTitle")){try{e.open()}catch(s){let i=s?.message??String(s);console.error("[TaskFlow] \u6253\u5F00\u5F39\u7A97\u5931\u8D25:",s);try{new P.Notice(n("modal.openFail",{label:t,msg:i}))}catch{}}return e}onOpen(){try{this.renderContent()}catch(e){console.error("[TaskFlow] \u5F39\u7A97\u6E32\u67D3\u5931\u8D25:",e),this.renderError(e)}}renderError(e){try{this.contentEl.empty(),this.contentEl.removeClass("tf-modal"),this.contentEl.addClass("tf-modal-error-shell"),E(this.contentEl,{display:"block","max-height":"none",overflow:"visible",padding:"0"});let t=this.contentEl.createDiv({cls:"tf-modal-error"});E(t,{padding:"16px","border-radius":"8px",border:"1px solid var(--tf-error, #dc2626)","background-color":"var(--tf-surface-card, #f5f5f5)",color:"var(--tf-ink, #111111)","font-size":"13px","line-height":"1.6"}),t.createDiv({text:n("modal.renderFail")}),t.createDiv({text:e?.message??String(e),cls:"tf-modal-error-message"});let s=t.createEl("pre",{cls:"tf-modal-error-stack"});s.textContent=e?.stack??"",E(s,{margin:"8px 0 0","font-size":"11px","white-space":"pre-wrap","word-break":"break-all",color:"var(--tf-muted, #6b7280)"});let i=this.contentEl.createDiv();E(i,{"margin-top":"12px"}),new P.ButtonComponent(i).setButtonText(n("common.close")).setCta().onClick(()=>this.close())}catch{this.contentEl.textContent=n("modal.renderFailDetail",{msg:String(e)})}}buildShell(e){let{contentEl:t}=this;t.empty(),t.addClass("tf-modal"),E(t,{display:"flex","flex-direction":"column","min-height":"0","max-height":"min(60vh, 520px)",overflow:"hidden",padding:"0","box-sizing":"border-box"});let s=t.createEl("h2",{text:e,cls:"tf-modal-title"});E(s,{flex:"0 0 auto",margin:"0",padding:"20px 20px 12px","font-size":"18px","font-weight":"600","line-height":"1.3"});let i=t.createDiv({cls:"tf-modal-form"});E(i,{flex:"1 1 auto","min-height":"0","overflow-y":"auto",display:"flex","flex-direction":"column",padding:"0 20px 12px","box-sizing":"border-box"}),this.formEl=i;let l=t.createDiv({cls:"tf-modal-buttons"});E(l,{flex:"0 0 auto",display:"flex","align-items":"center","justify-content":"space-between",gap:"12px",padding:"12px 20px","border-top":"1px solid var(--tf-hairline, #e5e7eb)","background-color":"var(--tf-canvas, transparent)"}),this.statusEl=l.createSpan({cls:"tf-modal-status"});let o=l.createDiv({cls:"tf-modal-buttons-actions"});E(o,{display:"flex","align-items":"center",gap:"8px"});let d={padding:"6px 16px","border-radius":"8px","font-size":"13px","font-family":"inherit","line-height":"1.4",cursor:"pointer"},c=o.createEl("button",{text:n("common.cancel")});We(c,"tf-btn tf-btn-secondary"),E(c,{...d,border:"1px solid var(--tf-hairline, #e5e7eb)","background-color":"transparent",color:"var(--tf-ink, inherit)"}),c.addEventListener("click",()=>this.close());let u=o.createEl("button",{text:n("common.save")});We(u,"tf-btn tf-btn-primary"),E(u,{...d,border:"1px solid var(--tf-primary, #111111)","background-color":"var(--tf-primary, #111111)",color:"var(--tf-on-primary, #ffffff)","font-weight":"500"}),u.addEventListener("click",()=>void this.submit());try{this.scope?.register?.(["Mod"],"Enter",h=>(h.preventDefault(),this.submit(),!1))}catch{}return i}addField(e){let t=wt(this.formEl??this.contentEl,e);return this.fields.push(t),t}markDirty(){this.dirty=!0,this.setStatus(n("modal.unsaved"))}setStatus(e,t="info"){this.statusEl&&(this.statusEl.textContent=e,this.statusEl.className=t==="info"?"tf-modal-status":`tf-modal-status is-${t}`)}validateAll(){let e=null;for(let t of this.fields){if(!t.spec.validation)continue;let s=t.spec.validation(t.read());_(t.el,s),s&&!e&&(e=t.el)}if(e){try{e.scrollIntoView({block:"center"})}catch{}return this.setStatus(n("modal.fixFields"),"error"),!1}return!0}async submit(){if(!this.saving){if(!this.dirty&&!this.forceSave){this.close();return}if(this.validateAll()){this.saving=!0,this.setStatus(n("modal.saving"));try{await this.doSave(),this.dirty=!1,this.close()}catch(e){this.setStatus(n("modal.saveFail",{msg:e?.message??String(e)}),"error")}finally{this.saving=!1}}}}onClose(){for(let e of this.fields)e.teardown?.();this.contentEl.empty(),this.fields=[],this.formEl=null,this.statusEl=null,super.onClose()}};var Ve=require("obsidian");var z=class extends Ve.Modal{constructor(a,e,t){super(a),this.message=e,this.onConfirm=t}onOpen(){let{contentEl:a}=this;a.empty(),a.addClass("tf-confirm"),a.createDiv({cls:"tf-confirm-message",text:this.message});let e=a.createDiv({cls:"tf-confirm-actions"});e.createEl("button",{text:n("common.cancel"),attr:{type:"button"}}).addEventListener("click",()=>this.close()),e.createEl("button",{text:n("common.confirm"),attr:{type:"button"}}).addEventListener("click",()=>{this.onConfirm(),this.close()})}onClose(){this.contentEl.empty()}};var se=class extends A{constructor(a,e,t,s,i=!1){super(a),this.plugin=e,this.tab={...t,showSectionHeader:t.showSectionHeader??!1},this.onSave=s,this.forceSave=i}renderContent(){this.buildShell(this.forceSave?n("modal.addTabBtn"):n("modal.editTabBtn")),this.addField({key:"id",label:"ID",description:n("modal.tabIdDesc"),type:"readonly",value:this.tab.id,onChange:()=>{}}),this.addField({key:"label",label:n("modal.label"),description:n("modal.labelDesc"),type:"text",placeholder:n("modal.labelExample"),value:this.tab.label,validation:e=>e.trim()?null:n("modal.errLabelEmpty"),onChange:e=>{this.tab.label=e,this.markDirty()}}),this.addField({key:"query",label:n("modal.query"),description:n("modal.queryDesc"),type:"textarea",placeholder:n("modal.queryPlaceholder"),value:this.tab.query,rows:5,validation:e=>e.trim()?null:n("modal.errQueryEmpty"),onChange:e=>{this.tab.query=e,this.markDirty()}});let a=this.plugin.settings.data.groups?.length?this.plugin.settings.data.groups:ie;this.addField({key:"group",label:n("nav.groups"),description:n("modal.groupDesc"),type:"dropdown",value:R(this.tab,a),options:Object.fromEntries(a.map(e=>[e.id,e.label])),onChange:e=>{this.tab.group=e,this.markDirty()}}),this.addField({key:"showSectionHeader",label:n("settings.showHeader"),description:n("modal.showHeaderDesc"),type:"toggle",value:this.tab.showSectionHeader,onChange:e=>{this.tab.showSectionHeader=e,this.markDirty()}}),this.addField({key:"order",label:n("modal.order"),description:n("modal.orderDesc"),type:"text",placeholder:n("modal.orderExample"),value:String(this.tab.order),validation:e=>{let t=parseInt(e,10);return!isNaN(t)&&t>0?null:n("modal.errOrder")},onChange:e=>{let t=parseInt(e,10);!isNaN(t)&&t>0&&(this.tab.order=t,this.markDirty())}})}doSave(){this.onSave(this.tab),this.plugin.refreshAllViews()}},ae=class extends A{constructor(a,e,t){super(a),this.group={...e},this.onSave=t,this.forceSave=!e.id}renderContent(){this.buildShell(this.forceSave?n("modal.addGroup"):n("modal.editGroup")),this.addField({key:"id",label:"ID",description:n("modal.groupIdDesc"),type:this.group.id?"readonly":"text",placeholder:n("modal.groupIdExample"),value:this.group.id,validation:a=>a.trim()?/^[a-z0-9-]+$/.test(a)?null:n("modal.idRule"):n("modal.errIdEmpty"),onChange:a=>{this.group.id=String(a).toLowerCase().replace(/[^a-z0-9-]/g,"-"),this.markDirty()}}),this.addField({key:"label",label:n("modal.label"),description:n("modal.labelDesc"),type:"text",placeholder:n("modal.groupExample"),value:this.group.label,validation:a=>a.trim()?null:n("modal.errLabelEmpty"),onChange:a=>{this.group.label=a,this.markDirty()}}),this.addField({key:"icon",label:n("modal.icon"),description:n("modal.iconDesc"),type:"icon-picker",value:this.group.icon,onChange:a=>{this.group.icon=a||"folder",this.markDirty()}})}doSave(){this.onSave(this.group)}};var ge='';function xt(r){return r.replace(/&/g,"&").replace(//g,">").replace(/"/g,""")}function kt(r){let a=0;for(let e of r)a+=/[\u2e80-\u9fff\uff00-\uffef]/.test(e)?1:.55;return a<=0?46:Math.max(22,Math.min(46,1e3/a))}function ze(r){let a=kt(r),e=xt(r);return``}function $(r,a){let t=new DOMParser().parseFromString(a,"image/svg+xml").querySelector("svg");return t?(r.appendChild(r.ownerDocument.importNode(t,!0)),!0):!1}var ie=[{id:"gtd",label:"GTD",icon:"inbox"},{id:"time",label:"Time",icon:"calendar"},{id:"tag",label:"Tag",icon:"tag"}];function Et(){return[{id:"general",label:n("nav.general"),icon:"settings"},{id:"groups",label:n("nav.groups"),icon:"layers"},{id:"tabs",label:"Tabs",icon:"sliders-horizontal"},{id:"about",label:n("nav.about"),icon:"info"}]}var St="https://github.com/ichris007/taskflow",Dt="https://lifein.vip";function w(r,a){let e=r.createDiv({cls:"tf-settings-row"}),t=e.createDiv({cls:"tf-settings-row-main"});return t.createDiv({cls:"tf-settings-row-title",text:a.title}),a.description&&t.createDiv({cls:"tf-settings-row-desc",text:a.description}),a.fill(e.createDiv({cls:"tf-settings-row-control"})),e}function N(r,a,e,t){let s=r.createEl("button",{cls:`tf-btn tf-btn-${e}`,text:a,attr:{type:"button"}});return s.addEventListener("click",t),s}function Q(r,a){let e=r.createEl("label",{cls:"tf-switch",attr:{title:a.label}});a.caption&&e.createSpan({cls:"tf-switch-caption",text:a.caption});let t=e.createEl("input",{cls:"tf-switch-input",attr:{type:"checkbox","aria-label":a.label}});return t.checked=a.checked,e.createSpan({cls:"tf-switch-track"}).createSpan({cls:"tf-switch-thumb"}),t.addEventListener("change",()=>a.onChange(t.checked)),e}var Ct=8;function Lt(r,a){let e=r.createDiv({cls:"tf-suggest"}),t=e.createEl("input",{cls:"tf-field-input",attr:{type:"text",placeholder:a.placeholder??""}});t.value=a.value;let s=e.createDiv({cls:"tf-suggest-list"}),i=[],l=[],o=-1,d=()=>{s.setCssProps({display:"none"}),i=[],l=[],o=-1},c=p=>{o=p,l.forEach((g,T)=>g.toggleClass("is-active",T===p))},u=p=>{let g=i[p];g&&(t.value=g.path,d(),a.onPick(g.path))},h=p=>{let g=p.trim().toLowerCase(),T=a.app.vault.getFiles().filter(m=>m.extension==="md");if(i=(g?T.filter(m=>m.path.toLowerCase().includes(g)):T).slice(0,Ct),l=[],s.empty(),s.setCssProps({display:"block"}),i.length===0){s.createDiv({cls:"tf-suggest-empty",text:n("suggest.noMatch")});return}for(let m=0;m{F.preventDefault(),u(m)}),l.push(L)}c(0)};t.addEventListener("focus",()=>h(t.value)),t.addEventListener("input",()=>h(t.value)),t.addEventListener("keydown",p=>{if(s.style.display==="none"){p.key==="ArrowDown"&&(h(t.value),p.preventDefault());return}p.key==="ArrowDown"?(c(Math.min(o+1,i.length-1)),p.preventDefault()):p.key==="ArrowUp"?(c(Math.max(o-1,0)),p.preventDefault()):p.key==="Enter"?(u(o),p.preventDefault()):p.key==="Escape"&&(d(),p.preventDefault())}),t.addEventListener("blur",()=>d())}function $e(r,a,e){let s=r.createDiv({cls:"tf-settings-row is-add"}).createEl("button",{cls:"tf-settings-add-btn",attr:{type:"button"}});(0,D.setIcon)(s.createSpan({cls:"tf-settings-add-icon"}),"plus"),s.createSpan({cls:"tf-settings-add-label",text:a}),s.addEventListener("click",e)}function Ft(r,a){r.createDiv({cls:"tf-settings-empty",text:a})}function y(r,a="info"){document.querySelector(".tf-toast")?.remove();let t=createDiv();t.className=`tf-toast tf-toast-${a}`;let s=t.createSpan({cls:"tf-toast-icon"});s.textContent=a==="success"?"\u2713":a==="error"?"\u2715":"\u2139",t.createSpan({cls:"tf-toast-content",text:r});let i=t.createEl("button",{cls:"tf-toast-close",attr:{type:"button","aria-label":n("common.close")}});i.textContent="\u2715",i.addEventListener("click",()=>t.remove()),document.body.appendChild(t),window.setTimeout(()=>{t.setCssProps({opacity:"0",transform:"translateY(8px) scale(0.95)",transition:"all 200ms ease"}),window.setTimeout(()=>t.remove(),200)},3e3)}function Me(){return[{id:"gtd-inbox",label:n("defaultTab.inbox"),group:"gtd",query:k(`not done +`),X=!0,J=!0,ee=!0,te=!0,pe="main",Ue="auto";function W(n){let a=typeof n=="number"?n:Number(n);return Number.isFinite(a)?Math.min(100,Math.max(0,a)):q}var Me=require("obsidian");var qe=["png","jpg","jpeg","webp","gif","avif","bmp","svg"],ue="taskflow_banner";function wt(n){let a=n.vault.getConfig("attachmentFolderPath")??"";return a.length>0&&a!=="."&&!a.startsWith("./")&&!a.startsWith("/")?a:de}function yt(n){let a=s=>{let i=s.toLowerCase().replace(/^\./,"");return qe.includes(i)?i==="jpeg"?"jpg":i:null},e=a(n.name.split(".").pop()??"");return e||(a(n.type.split("/").pop()??"")??"png")}function he(n,a){if(!a)return null;let e=n.vault.getAbstractFileByPath(a);if(e instanceof Me.TFile)return e;let t=n.vault.getFiles().find(s=>s.path===a);return t instanceof Me.TFile?t:null}async function ge(n,a){let e=n.app.vault,t=n.settings.data,s=wt(n.app),i=yt(a),r=`${s}/${ue}.${i}`,l=t.coverImagePath,c=await a.arrayBuffer();try{await e.createFolder(s)}catch(d){if(!(d instanceof Error&&d.message.includes("Folder already exists")))throw d}if(await e.adapter.writeBinary(r,c),l&&l!==r)try{await e.adapter.remove(l)}catch{}await xt(e,s,r),t.coverImagePath=r,t.coverPosition=q,await n.saveSettings()}async function xt(n,a,e){for(let t of qe){let s=`${a}/${ue}.${t}`;if(s!==e&&n.getAbstractFileByPath(s))try{await n.adapter.remove(s)}catch{}}}async function me(n){let a=n.settings.data,e=a.coverImagePath;if(a.coverImagePath="",a.coverPosition=q,await n.saveSettings(),!!e)try{await n.app.vault.adapter.remove(e)}catch{}}var Et=require("obsidian");var G=require("obsidian");var We=["folder","folder-open","folder-plus","folder-minus","folder-lock","folder-git-2","folder-tree","folder-up","file","file-text","file-plus","file-minus","file-check","file-x","file-pen","files","copy","clipboard","clipboard-check","clipboard-list","clipboard-copy","archive","box","package","briefcase","inbox","tag","tags","hash","at-sign","award","badge","bookmark","bookmarks","user","users","user-plus","user-minus","user-check","user-x","user-cog","contact","contacts","id-card","address-book","phone","phone-call","message-circle","message-square","messages-square","send","share","share-2","users-round","calendar","calendar-days","calendar-check","calendar-clock","calendar-plus","calendar-minus","calendar-off","clock","clock-4","alarm-clock","timer","timer-reset","hourglass","history","rotate-cw","rotate-ccw","repeat","refresh-cw","undo","redo","check","check-circle","check-square","circle-check","circle-check-big","list","list-checks","list-todo","square-check","check-check","circle","circle-dashed","minus","plus","x","x-circle","building","building-2","computer","laptop","monitor","monitor-smartphone","cpu","code","code-2","terminal","terminal-square","git-branch","git-commit","git-merge","git-pull-request","bug","wrench","hammer","screwdriver","tool","tools","settings","settings-2","sliders","sliders-horizontal","gauge","database","server","cloud","cloud-cog","hard-drive","network","shield","shield-check","lock","key","key-round","fingerprint","accessibility","home","house","heart","heart-handshake","star","smile","smile-plus","coffee","music","music-2","camera","image","images","image-plus","map","map-pin","map-pinned","compass","navigation","globe","globe-2","earth","plane","car","bicycle","bike","train","bus","shopping-cart","shopping-bag","shopping-basket","gift","book","book-open","book-open-check","graduation-cap","backpack","dumbbell","utensils","pizza","apple","leaf","flower","flower-2","tree-pine","sun","moon","moon-star","cloud-rain","umbrella","droplet","wind","flame","zap","sparkles","palette","brush","gamepad-2","ticket","wallet","credit-card","banknote","piggy-bank","coins","trophy","medal","target","flag","flag-triangle-right","rocket","lightbulb","bell","bell-ring","megaphone","speaker","volume","headphones","mic","video","webcam","tv","eye","eye-off","search","filter","crosshair","anchor","pin","info","help-circle","alert-triangle","alert-circle","alert-octagon","chevron-down","chevron-right","chevron-left","chevron-up","arrow-right","arrow-left","arrow-up","arrow-down","arrow-up-right","move","more-horizontal","more-vertical","ellipsis","ellipsis-vertical","menu","grid","grid-2x2","layout","layout-grid","layout-list","layout-dashboard","panel-left","panel-right","sidebar","columns","rows","layers","component","command","option","maximize","minimize","fullscreen","external-link","link","link-2","unlink","download","upload","save","trash","trash-2","edit","edit-2","edit-3","pencil","pen","eraser","scissors","bold","italic","underline","type","align-left","align-center","align-right","wrap-text","list-ordered","quote","percent","dollar-sign","euro","yen","bitcoin","receipt","calculator","scale","gavel","library","newspaper","file-edit","presentation","pie-chart","bar-chart","bar-chart-2","line-chart","trending-up","trending-down","activity","wifi","bluetooth","battery","plug","power","zap-off"],Re=[...We].sort();function ze(n){return We.includes(n)}function E(n,a){for(let[e,t]of Object.entries(a))n.style.setProperty(e,t)}function $e(n,a){for(let e of a.split(/\s+/))e&&n.classList.add(e)}function B(n,a){let e=n.querySelector(".tf-field-input, .tf-field-textarea, .tf-field-select"),t=n.querySelector(".tf-field-message");e?.classList.toggle("tf-error",!!a),e?.classList.toggle("tf-success",!a),t&&(t.textContent=a??"",t.className=a?"tf-field-message tf-error":"tf-field-message")}function kt(n,a){let e=n.createDiv({cls:"tf-field"}),t=e.createEl("label",{cls:"tf-field-label"}).createDiv({cls:"tf-field-label-text"});t.createSpan({cls:"tf-field-name",text:a.label}),a.description&&t.createSpan({cls:"tf-field-desc",text:a.description});let s=e.createDiv({cls:"tf-field-input-wrapper"}),i=()=>a.value,r;switch(a.type){case"text":{let l=s.createEl("input",{cls:"tf-field-input",attr:{type:"text",placeholder:a.placeholder??""}});l.value=a.value??"",i=()=>l.value,l.addEventListener("input",()=>{B(e,null),a.onChange(l.value)}),l.addEventListener("blur",()=>{a.validation&&B(e,a.validation(l.value))});break}case"textarea":{let l=s.createEl("textarea",{cls:"tf-field-textarea",attr:{placeholder:a.placeholder??"",rows:String(a.rows??4)}});l.value=a.value??"",i=()=>l.value,l.addEventListener("input",()=>{B(e,null),a.onChange(l.value)}),l.addEventListener("blur",()=>{a.validation&&B(e,a.validation(l.value))});break}case"dropdown":{let l=s.createEl("select",{cls:"tf-field-select"});for(let[c,d]of Object.entries(a.options??{}))l.createEl("option",{attr:{value:c},text:d});l.value=a.value??"",i=()=>l.value,l.addEventListener("change",()=>{B(e,null),a.onChange(l.value)});break}case"toggle":{let l=s.createEl("label",{cls:"tf-switch"}),c=l.createEl("input",{cls:"tf-switch-input",attr:{type:"checkbox","aria-label":a.label}});c.checked=!!a.value,l.createSpan({cls:"tf-switch-track"}).createSpan({cls:"tf-switch-thumb"}),i=()=>c.checked,c.addEventListener("change",()=>{a.onChange(c.checked)});break}case"readonly":{let l=s.createEl("input",{cls:"tf-field-input",attr:{type:"text",readonly:"true"}});l.value=a.value??"",i=()=>l.value;break}case"icon-picker":{E(s,{position:"relative"});let l=s.createEl("button",{cls:"tf-icon-trigger tf-field-input",attr:{type:"button","aria-haspopup":"listbox"}}),c=l.createSpan({cls:"tf-icon-trigger-icon"});(0,G.setIcon)(c,a.value??"folder");let d=l.createSpan({cls:"tf-icon-trigger-name",text:a.value??"folder"});l.createSpan({cls:"tf-icon-trigger-caret"});let h=typeof e.closest=="function"?e.closest(".tf-modal")??s:s,u=h.createDiv({cls:"tf-icon-panel is-hidden"});u.addEventListener("mousedown",b=>b.stopPropagation());let p=u.createEl("input",{cls:"tf-icon-search",attr:{type:"text",placeholder:o("modal.iconSearch")}}),g=u.createDiv({cls:"tf-icon-grid"}),T=a.value??"folder",m=null,x=!1,L=typeof e.closest=="function"?e.closest(".tf-modal-form"):null,F=()=>{if(typeof l.getBoundingClientRect!="function"||typeof window>"u"||typeof window.innerWidth!="number")return;let b=l.getBoundingClientRect(),M=u.offsetHeight||320,ne=window.innerWidth,S=window.innerHeight,O=Math.max(280,b.width||0),Se=Math.min(b.left,Math.max(8,ne-O-8)),Z=b.bottom+6;Z+M>S-8&&(Z=Math.max(8,b.top-M-6)),E(u,{position:"fixed",top:`${Z}px`,left:`${Math.max(8,Se)}px`,width:`${O}px`,right:"auto"})},K=()=>{x&&F()},A=()=>{x=!1,u.classList.add("is-hidden"),m&&(m.remove(),m=null),L?.removeEventListener("scroll",K,!0)},j=()=>{p.value="",U(""),u.classList.remove("is-hidden"),x=!0,F(),m||(m=h.createDiv({cls:"tf-icon-backdrop"}),m.addEventListener("click",()=>A())),L?.addEventListener("scroll",K,!0);try{p.focus()}catch{}},f=b=>{T=b,c.empty(),(0,G.setIcon)(c,b),d.textContent=b,A(),B(e,null),a.onChange(b)},U=b=>{g.empty();let M=b.trim().toLowerCase(),ne=M?Re.filter(S=>S.includes(M)):Re;if(!ne.length){if(M&&!ze(M)){let S=g.createEl("button",{cls:"tf-icon-tile tf-icon-tile-custom",attr:{type:"button","data-icon":M}});S.createSpan({cls:"tf-icon-tile-name",text:o("modal.iconUseCustom",{name:M})}),S.addEventListener("click",O=>{O.stopPropagation(),f(M)})}else g.createDiv({cls:"tf-icon-empty",text:o("modal.iconNoMatch")});return}for(let S of ne.slice(0,400)){let O=g.createEl("button",{cls:"tf-icon-tile",attr:{type:"button","data-icon":S,title:S}}),Se=O.createSpan({cls:"tf-icon-tile-icon"});(0,G.setIcon)(Se,S),O.createSpan({cls:"tf-icon-tile-name",text:S}),O.addEventListener("click",Z=>{Z.stopPropagation(),f(S)})}};l.addEventListener("click",b=>{b.preventDefault(),u.classList.contains("is-hidden")?j():A()}),p.addEventListener("input",()=>{U(p.value),x&&F()}),p.addEventListener("keydown",b=>{b.key==="Escape"&&(b.stopPropagation(),A())}),typeof window<"u"&&typeof window.addEventListener=="function"&&window.addEventListener("resize",F),i=()=>T,r=()=>{A(),u.remove(),typeof window<"u"&&typeof window.removeEventListener=="function"&&window.removeEventListener("resize",F)};break}}return e.createDiv({cls:"tf-field-message"}),{spec:a,el:e,read:i,teardown:r}}var H=class extends G.Modal{constructor(){super(...arguments);this.dirty=!1;this.forceSave=!1;this.fields=[];this.statusEl=null;this.saving=!1;this.formEl=null}static launch(e,t=o("modal.editTitle")){try{e.open()}catch(s){let i=s?.message??String(s);console.error("[TaskFlow] \u6253\u5F00\u5F39\u7A97\u5931\u8D25:",s);try{new G.Notice(o("modal.openFail",{label:t,msg:i}))}catch{}}return e}onOpen(){try{this.renderContent()}catch(e){console.error("[TaskFlow] \u5F39\u7A97\u6E32\u67D3\u5931\u8D25:",e),this.renderError(e)}}renderError(e){try{this.contentEl.empty(),this.contentEl.removeClass("tf-modal"),this.contentEl.addClass("tf-modal-error-shell"),E(this.contentEl,{display:"block","max-height":"none",overflow:"visible",padding:"0"});let t=this.contentEl.createDiv({cls:"tf-modal-error"});E(t,{padding:"16px","border-radius":"8px",border:"1px solid var(--tf-error, #dc2626)","background-color":"var(--tf-surface-card, #f5f5f5)",color:"var(--tf-ink, #111111)","font-size":"13px","line-height":"1.6"}),t.createDiv({text:o("modal.renderFail")}),t.createDiv({text:e?.message??String(e),cls:"tf-modal-error-message"});let s=t.createEl("pre",{cls:"tf-modal-error-stack"});s.textContent=e?.stack??"",E(s,{margin:"8px 0 0","font-size":"11px","white-space":"pre-wrap","word-break":"break-all",color:"var(--tf-muted, #6b7280)"});let i=this.contentEl.createDiv();E(i,{"margin-top":"12px"}),new G.ButtonComponent(i).setButtonText(o("common.close")).setCta().onClick(()=>this.close())}catch{this.contentEl.textContent=o("modal.renderFailDetail",{msg:String(e)})}}buildShell(e){let{contentEl:t}=this;t.empty(),t.addClass("tf-modal"),E(t,{display:"flex","flex-direction":"column","min-height":"0","max-height":"min(60vh, 520px)",overflow:"hidden",padding:"0","box-sizing":"border-box"});let s=t.createEl("h2",{text:e,cls:"tf-modal-title"});E(s,{flex:"0 0 auto",margin:"0",padding:"20px 20px 12px","font-size":"18px","font-weight":"600","line-height":"1.3"});let i=t.createDiv({cls:"tf-modal-form"});E(i,{flex:"1 1 auto","min-height":"0","overflow-y":"auto",display:"flex","flex-direction":"column",padding:"0 20px 12px","box-sizing":"border-box"}),this.formEl=i;let r=t.createDiv({cls:"tf-modal-buttons"});E(r,{flex:"0 0 auto",display:"flex","align-items":"center","justify-content":"space-between",gap:"12px",padding:"12px 20px","border-top":"1px solid var(--tf-hairline, #e5e7eb)","background-color":"var(--tf-canvas, transparent)"}),this.statusEl=r.createSpan({cls:"tf-modal-status"});let l=r.createDiv({cls:"tf-modal-buttons-actions"});E(l,{display:"flex","align-items":"center",gap:"8px"});let c={padding:"6px 16px","border-radius":"8px","font-size":"13px","font-family":"inherit","line-height":"1.4",cursor:"pointer"},d=l.createEl("button",{text:o("common.cancel")});$e(d,"tf-btn tf-btn-secondary"),E(d,{...c,border:"1px solid var(--tf-hairline, #e5e7eb)","background-color":"transparent",color:"var(--tf-ink, inherit)"}),d.addEventListener("click",()=>this.close());let h=l.createEl("button",{text:o("common.save")});$e(h,"tf-btn tf-btn-primary"),E(h,{...c,border:"1px solid var(--tf-primary, #111111)","background-color":"var(--tf-primary, #111111)",color:"var(--tf-on-primary, #ffffff)","font-weight":"500"}),h.addEventListener("click",()=>void this.submit());try{this.scope?.register?.(["Mod"],"Enter",u=>(u.preventDefault(),this.submit(),!1))}catch{}return i}addField(e){let t=kt(this.formEl??this.contentEl,e);return this.fields.push(t),t}markDirty(){this.dirty=!0,this.setStatus(o("modal.unsaved"))}setStatus(e,t="info"){this.statusEl&&(this.statusEl.textContent=e,this.statusEl.className=t==="info"?"tf-modal-status":`tf-modal-status is-${t}`)}validateAll(){let e=null;for(let t of this.fields){if(!t.spec.validation)continue;let s=t.spec.validation(t.read());B(t.el,s),s&&!e&&(e=t.el)}if(e){try{e.scrollIntoView({block:"center"})}catch{}return this.setStatus(o("modal.fixFields"),"error"),!1}return!0}async submit(){if(!this.saving){if(!this.dirty&&!this.forceSave){this.close();return}if(this.validateAll()){this.saving=!0,this.setStatus(o("modal.saving"));try{await this.doSave(),this.dirty=!1,this.close()}catch(e){this.setStatus(o("modal.saveFail",{msg:e?.message??String(e)}),"error")}finally{this.saving=!1}}}}onClose(){for(let e of this.fields)e.teardown?.();this.contentEl.empty(),this.fields=[],this.formEl=null,this.statusEl=null,super.onClose()}};var Qe=require("obsidian");var z=class extends Qe.Modal{constructor(a,e,t){super(a),this.message=e,this.onConfirm=t}onOpen(){let{contentEl:a}=this;a.empty(),a.addClass("tf-confirm"),a.createDiv({cls:"tf-confirm-message",text:this.message});let e=a.createDiv({cls:"tf-confirm-actions"});e.createEl("button",{text:o("common.cancel"),attr:{type:"button"}}).addEventListener("click",()=>this.close()),e.createEl("button",{text:o("common.confirm"),attr:{type:"button"}}).addEventListener("click",()=>{this.onConfirm(),this.close()})}onClose(){this.contentEl.empty()}};var se=class extends H{constructor(a,e,t,s,i=!1){super(a),this.plugin=e,this.tab={...t,showSectionHeader:t.showSectionHeader??!1},this.onSave=s,this.forceSave=i}renderContent(){this.buildShell(this.forceSave?o("modal.addTabBtn"):o("modal.editTabBtn")),this.addField({key:"id",label:"ID",description:o("modal.tabIdDesc"),type:"readonly",value:this.tab.id,onChange:()=>{}}),this.addField({key:"label",label:o("modal.label"),description:o("modal.labelDesc"),type:"text",placeholder:o("modal.labelExample"),value:this.tab.label,validation:e=>e.trim()?null:o("modal.errLabelEmpty"),onChange:e=>{this.tab.label=e,this.markDirty()}}),this.addField({key:"query",label:o("modal.query"),description:o("modal.queryDesc"),type:"textarea",placeholder:o("modal.queryPlaceholder"),value:this.tab.query,rows:5,validation:e=>e.trim()?null:o("modal.errQueryEmpty"),onChange:e=>{this.tab.query=e,this.markDirty()}});let a=this.plugin.settings.data.groups?.length?this.plugin.settings.data.groups:ie;this.addField({key:"group",label:o("nav.groups"),description:o("modal.groupDesc"),type:"dropdown",value:I(this.tab,a),options:Object.fromEntries(a.map(e=>[e.id,e.label])),onChange:e=>{this.tab.group=e,this.markDirty()}}),this.addField({key:"showSectionHeader",label:o("settings.showHeader"),description:o("modal.showHeaderDesc"),type:"toggle",value:this.tab.showSectionHeader,onChange:e=>{this.tab.showSectionHeader=e,this.markDirty()}}),this.addField({key:"order",label:o("modal.order"),description:o("modal.orderDesc"),type:"text",placeholder:o("modal.orderExample"),value:String(this.tab.order),validation:e=>{let t=parseInt(e,10);return!isNaN(t)&&t>0?null:o("modal.errOrder")},onChange:e=>{let t=parseInt(e,10);!isNaN(t)&&t>0&&(this.tab.order=t,this.markDirty())}})}doSave(){this.onSave(this.tab),this.plugin.refreshAllViews()}},ae=class extends H{constructor(e,t,s){super(e);this.valuesHost=null;this.valuesRefreshTimer=null;this.group={...t,frontmatterValues:t.frontmatterValues?[...t.frontmatterValues]:void 0},this.onSave=s,this.forceSave=!t.id}renderContent(){this.buildShell(this.forceSave?o("modal.addGroup"):o("modal.editGroup")),this.addField({key:"id",label:"ID",description:o("modal.groupIdDesc"),type:this.group.id?"readonly":"text",placeholder:o("modal.groupIdExample"),value:this.group.id,validation:e=>e.trim()?/^[a-z0-9-]+$/.test(e)?null:o("modal.idRule"):o("modal.errIdEmpty"),onChange:e=>{this.group.id=String(e).toLowerCase().replace(/[^a-z0-9-]/g,"-"),this.markDirty()}}),this.addField({key:"label",label:o("modal.label"),description:o("modal.labelDesc"),type:"text",placeholder:o("modal.groupExample"),value:this.group.label,validation:e=>e.trim()?null:o("modal.errLabelEmpty"),onChange:e=>{this.group.label=e,this.markDirty()}}),this.addField({key:"icon",label:o("modal.icon"),description:o("modal.iconDesc"),type:"icon-picker",value:this.group.icon,onChange:e=>{this.group.icon=e||"folder",this.markDirty()}}),this.addField({key:"frontmatterProperty",label:o("modal.groupNoteProperty"),description:o("modal.groupNotePropertyDesc"),type:"text",placeholder:o("modal.groupNotePropertyExample"),value:this.group.frontmatterProperty??"",onChange:e=>{let t=e.trim();t!==(this.group.frontmatterProperty??"")&&(this.group.frontmatterValues=void 0),this.group.frontmatterProperty=t||void 0,this.markDirty(),this.scheduleValuesRefresh()}}),this.valuesHost=this.formEl?.createDiv({cls:"tf-field"})??null,this.renderValuesPicker()}onClose(){this.valuesRefreshTimer!==null&&window.clearTimeout(this.valuesRefreshTimer),super.onClose()}scheduleValuesRefresh(){this.valuesRefreshTimer!==null&&window.clearTimeout(this.valuesRefreshTimer),this.valuesRefreshTimer=window.setTimeout(()=>{this.valuesRefreshTimer=null,this.renderValuesPicker()},300)}collectPropertyValues(e){let t=new Set;for(let s of this.app.vault.getMarkdownFiles()){let i=le(this.app.metadataCache.getFileCache(s)?.frontmatter,e);for(let r of ce(i))t.add(r)}return[...t].sort((s,i)=>s.localeCompare(i))}renderValuesPicker(){let e=this.valuesHost;if(!e)return;e.empty();let t=this.group.frontmatterProperty?.trim();if(!t){e.hide();return}e.show();let s=e.createEl("label",{cls:"tf-field-label"}).createDiv({cls:"tf-field-label-text"});s.createSpan({cls:"tf-field-name",text:o("modal.groupNoteValues")}),s.createSpan({cls:"tf-field-desc",text:o("modal.groupNoteValuesDesc")});let i=new Set(this.group.frontmatterValues??[]),r=[...new Set([...this.collectPropertyValues(t),...i])].sort((u,p)=>u.localeCompare(p)),l=e.createDiv({cls:"tf-field-input-wrapper"}).createEl("details",{cls:"tf-multiselect"}),c=l.createEl("summary",{cls:"tf-field-select tf-multiselect-summary"}),d=()=>{c.textContent=i.size?[...i].join(", "):o("modal.groupNoteValuesAny")};d();let h=l.createDiv({cls:"tf-multiselect-list"});if(r.length===0){h.createDiv({cls:"tf-multiselect-empty",text:o("modal.groupNoteValuesNone")});return}for(let u of r){let p=h.createEl("label",{cls:"tf-multiselect-option"}),g=p.createEl("input",{attr:{type:"checkbox"}});g.checked=i.has(u),p.createSpan({text:u}),g.addEventListener("change",()=>{g.checked?i.add(u):i.delete(u),this.group.frontmatterValues=i.size?[...i]:void 0,d(),this.markDirty()})}}doSave(){this.onSave(this.group)}};var fe='';function St(n){return n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""")}function Dt(n){let a=0;for(let e of n)a+=/[\u2e80-\u9fff\uff00-\uffef]/.test(e)?1:.55;return a<=0?46:Math.max(22,Math.min(46,1e3/a))}function Ye(n){let a=Dt(n),e=St(n);return``}function $(n,a){let t=new DOMParser().parseFromString(a,"image/svg+xml").querySelector("svg");return t?(n.appendChild(n.ownerDocument.importNode(t,!0)),!0):!1}var ie=[{id:"gtd",label:"GTD",icon:"inbox"},{id:"time",label:"Time",icon:"calendar"},{id:"tag",label:"Tag",icon:"tag"}];function Ct(){return[{id:"general",label:o("nav.general"),icon:"settings"},{id:"groups",label:o("nav.groups"),icon:"layers"},{id:"tabs",label:"Tabs",icon:"sliders-horizontal"},{id:"about",label:o("nav.about"),icon:"info"}]}var Lt="https://github.com/ichris007/taskflow",Ft="https://lifein.vip";function w(n,a){let e=n.createDiv({cls:"tf-settings-row"}),t=e.createDiv({cls:"tf-settings-row-main"});return t.createDiv({cls:"tf-settings-row-title",text:a.title}),a.description&&t.createDiv({cls:"tf-settings-row-desc",text:a.description}),a.fill(e.createDiv({cls:"tf-settings-row-control"})),e}function _(n,a,e,t){let s=n.createEl("button",{cls:`tf-btn tf-btn-${e}`,text:a,attr:{type:"button"}});return s.addEventListener("click",t),s}function Q(n,a){let e=n.createEl("label",{cls:"tf-switch",attr:{title:a.label}});a.caption&&e.createSpan({cls:"tf-switch-caption",text:a.caption});let t=e.createEl("input",{cls:"tf-switch-input",attr:{type:"checkbox","aria-label":a.label}});return t.checked=a.checked,e.createSpan({cls:"tf-switch-track"}).createSpan({cls:"tf-switch-thumb"}),t.addEventListener("change",()=>a.onChange(t.checked)),e}var Mt=8;function Rt(n,a){let e=n.createDiv({cls:"tf-suggest"}),t=e.createEl("input",{cls:"tf-field-input",attr:{type:"text",placeholder:a.placeholder??""}});t.value=a.value;let s=e.createDiv({cls:"tf-suggest-list"}),i=[],r=[],l=-1,c=()=>{s.setCssProps({display:"none"}),i=[],r=[],l=-1},d=p=>{l=p,r.forEach((g,T)=>g.toggleClass("is-active",T===p))},h=p=>{let g=i[p];g&&(t.value=g.path,c(),a.onPick(g.path))},u=p=>{let g=p.trim().toLowerCase(),T=a.app.vault.getFiles().filter(m=>m.extension==="md");if(i=(g?T.filter(m=>m.path.toLowerCase().includes(g)):T).slice(0,Mt),r=[],s.empty(),s.setCssProps({display:"block"}),i.length===0){s.createDiv({cls:"tf-suggest-empty",text:o("suggest.noMatch")});return}for(let m=0;m{F.preventDefault(),h(m)}),r.push(L)}d(0)};t.addEventListener("focus",()=>u(t.value)),t.addEventListener("input",()=>u(t.value)),t.addEventListener("keydown",p=>{if(s.style.display==="none"){p.key==="ArrowDown"&&(u(t.value),p.preventDefault());return}p.key==="ArrowDown"?(d(Math.min(l+1,i.length-1)),p.preventDefault()):p.key==="ArrowUp"?(d(Math.max(l-1,0)),p.preventDefault()):p.key==="Enter"?(h(l),p.preventDefault()):p.key==="Escape"&&(c(),p.preventDefault())}),t.addEventListener("blur",()=>c())}function Ke(n,a,e){let s=n.createDiv({cls:"tf-settings-row is-add"}).createEl("button",{cls:"tf-settings-add-btn",attr:{type:"button"}});(0,D.setIcon)(s.createSpan({cls:"tf-settings-add-icon"}),"plus"),s.createSpan({cls:"tf-settings-add-label",text:a}),s.addEventListener("click",e)}function It(n,a){n.createDiv({cls:"tf-settings-empty",text:a})}function y(n,a="info"){document.querySelector(".tf-toast")?.remove();let t=createDiv();t.className=`tf-toast tf-toast-${a}`;let s=t.createSpan({cls:"tf-toast-icon"});s.textContent=a==="success"?"\u2713":a==="error"?"\u2715":"\u2139",t.createSpan({cls:"tf-toast-content",text:n});let i=t.createEl("button",{cls:"tf-toast-close",attr:{type:"button","aria-label":o("common.close")}});i.textContent="\u2715",i.addEventListener("click",()=>t.remove()),document.body.appendChild(t),window.setTimeout(()=>{t.setCssProps({opacity:"0",transform:"translateY(8px) scale(0.95)",transition:"all 200ms ease"}),window.setTimeout(()=>t.remove(),200)},3e3)}function Ie(){return[{id:"gtd-inbox",label:o("defaultTab.inbox"),group:"gtd",query:k(`not done no due date no scheduled date status.type is not IN_PROGRESS no tags #group by filename short mode - sort by created`),showSectionHeader:!0,order:1},{id:"gtd-next",label:n("defaultTab.next"),group:"gtd",query:k(`not done + sort by created`),showSectionHeader:!0,order:1},{id:"gtd-next",label:o("defaultTab.next"),group:"gtd",query:k(`not done status.type is not IN_PROGRESS tags includes #todo group by filename short mode hide toolbar sort by due - limit 10`),showSectionHeader:!0,order:2},{id:"gtd-waiting",label:n("defaultTab.waiting"),group:"gtd",query:k(`not done + limit 10`),showSectionHeader:!0,order:2},{id:"gtd-waiting",label:o("defaultTab.waiting"),group:"gtd",query:k(`not done tag includes #waiting group by filename short mode hide toolbar - limit 10`),showSectionHeader:!1,order:3},{id:"gtd-someday",label:n("defaultTab.someday"),group:"gtd",query:k(`not done + limit 10`),showSectionHeader:!1,order:3},{id:"gtd-someday",label:o("defaultTab.someday"),group:"gtd",query:k(`not done tag includes #someday group by filename short mode hide toolbar - limit 10`),showSectionHeader:!1,order:4},{id:"time-overdue",label:n("defaultTab.overdue"),group:"time",query:k(`not done + limit 10`),showSectionHeader:!1,order:4},{id:"time-overdue",label:o("defaultTab.overdue"),group:"time",query:k(`not done (scheduled before today) OR (due before today) group by filename short mode - sort by due`),showSectionHeader:!0,order:5},{id:"time-today",label:n("defaultTab.today"),group:"time",query:k(`not done + sort by due`),showSectionHeader:!0,order:5},{id:"time-today",label:o("defaultTab.today"),group:"time",query:k(`not done (scheduled on today) OR (due on today) group by filename short mode - sort by due`),showSectionHeader:!0,order:6},{id:"time-tomorrow",label:n("defaultTab.tomorrow"),group:"time",query:k(`not done + sort by due`),showSectionHeader:!0,order:6},{id:"time-tomorrow",label:o("defaultTab.tomorrow"),group:"time",query:k(`not done (scheduled on tomorrow) OR (due on tomorrow) group by filename short mode - sort by due`),showSectionHeader:!0,order:7},{id:"time-week",label:n("defaultTab.week"),group:"time",query:k(`not done + sort by due`),showSectionHeader:!0,order:7},{id:"time-week",label:o("defaultTab.week"),group:"time",query:k(`not done (due after tomorrow) OR (scheduled after tomorrow) (due before in 8 days) OR (scheduled before in 8 days) group by filename short mode sort by due - limit 10`),showSectionHeader:!1,order:8},{id:"time-month",label:n("defaultTab.month"),group:"time",query:k(`not done + limit 10`),showSectionHeader:!1,order:8},{id:"time-month",label:o("defaultTab.month"),group:"time",query:k(`not done (due after in 7 days) OR (scheduled after in 7 days) (due before in 1 month) OR (scheduled before in 1 month) group by filename short mode sort by due - limit 10`),showSectionHeader:!1,order:9},{id:"tag-work",label:n("defaultTab.work"),group:"tag",query:k(`not done + limit 10`),showSectionHeader:!1,order:9},{id:"tag-work",label:o("defaultTab.work"),group:"tag",query:k(`not done tag includes #work group by filename short mode - limit 10`),showSectionHeader:!0,order:10},{id:"tag-life",label:n("defaultTab.life"),group:"tag",query:k(`not done + limit 10`),showSectionHeader:!0,order:10},{id:"tag-life",label:o("defaultTab.life"),group:"tag",query:k(`not done tag includes #life group by filename short mode - limit 10`),showSectionHeader:!0,order:11}]}var ne={id:"dashboard",name:n("defaultGroup.dashboard"),icon:"dashboard",order:1},Mt={workbenchTitle:H,workbenchSlogan:B(),coverImagePath:"",coverPosition:W,showCover:!0,showTodayOverview:X,showImportantReminders:J,importantReminderQuery:C,showStatsCategories:ee,showHeadText:te,openLocation:de},Y={version:"",data:{inboxFilePath:"Inbox.md",excludedFolders:"System/Templates",globalTabs:Me(),boards:[ne],groups:ie,workbenchTitle:H,workbenchSlogan:B(),coverImagePath:"",coverPosition:50,showCover:!0,showTodayOverview:X,showImportantReminders:J,importantReminderQuery:C,showStatsCategories:ee,showHeadText:te,openLocation:de},language:_e};function It(r){return r.startsWith("gtd-")||r==="overdue"||r==="today"||r==="tomorrow"||r==="todo"||r==="inprogress"?"gtd":r.startsWith("time-")||r==="week"||r==="month"?"time":r.startsWith("tag-")?"tag":"gtd"}function Qe(r){let a=new Map;return Me().forEach((e,t)=>{a.set(e.id,e.order)}),r.map((e,t)=>{let s=e;if(s.order===void 0)if(a.has(s.id))s={...s,order:a.get(s.id)};else{let i=Math.max(...Me().map(l=>l.order));s={...s,order:i+t+1}}return s.group===void 0&&(s={...s,group:It(s.id)}),typeof s.query=="string"&&s.query!==k(s.query)&&(s={...s,query:k(s.query)}),s})}function Ye(r){if(r.data){let o=r.data;return o.globalTabs&&(o.globalTabs=Qe(o.globalTabs)),!o.boards||o.boards.length===0?o.boards=[ne]:o.boards.some(c=>c.id==="dashboard")||(o.boards=[ne,...o.boards]),o.boards.sort((d,c)=>d.order-c.order),o.globalTabs&&o.globalTabs.sort((d,c)=>d.order-c.order),{version:r.version??"",data:{inboxFilePath:o.inboxFilePath??Y.data.inboxFilePath,excludedFolders:o.excludedFolders??Y.data.excludedFolders,globalTabs:o.globalTabs??Y.data.globalTabs,boards:o.boards,groups:o.groups??ie,workbenchTitle:o.workbenchTitle??H,workbenchSlogan:o.workbenchSlogan??B(),coverImagePath:o.coverImagePath??"",coverPosition:V(o.coverPosition),showCover:o.showCover??!0,showTodayOverview:o.showTodayOverview??X,showImportantReminders:o.showImportantReminders??J,importantReminderQuery:o.importantReminderQuery??C,showStatsCategories:o.showStatsCategories??ee,showHeadText:o.showHeadText??te,openLocation:o.openLocation==="sidebar"?"sidebar":"main"}}}let a=r,e=a.tabs,t=a.boards,s=a.globalTabs,i=a.inboxFilePath,l=a.excludedFolders;return e&&!s&&(s=Qe(e)),!t||t.length===0?t=[ne]:t.some(d=>d.id==="dashboard")||(t=[ne,...t]),{version:"",data:{inboxFilePath:i??Y.data.inboxFilePath,excludedFolders:l??Y.data.excludedFolders,globalTabs:s??Y.data.globalTabs,boards:t.sort((o,d)=>o.order-d.order),groups:ie,...Mt,showTodayOverview:X,showImportantReminders:J,importantReminderQuery:C,showStatsCategories:ee,showHeadText:te,openLocation:de},language:"auto"}}var Ie=class{constructor(a){this.contentEl=null;this.activeSection="general";this.groupCollapsed={};this.heading="TaskFlow Settings";this.plugin=a}isGroupCollapsed(a){return this.groupCollapsed[a]??!0}async constructUI(a,e,t){this.contentEl=a,this.heading=e,t&&(this.activeSection=t),a.empty(),a.addClass("taskflow-setting-tab"),this.renderSectionNav(a);let s=a.createDiv({cls:"tf-settings-body"});switch(this.activeSection){case"groups":this.renderGroupsSection(s);break;case"tabs":this.renderTabsSection(s);break;case"about":this.renderAboutSection(s);break;case"general":default:this.renderGeneralSection(s);break}}renderSectionNav(a){let e=a.createDiv({cls:"tf-settings-nav",attr:{role:"tablist","aria-label":this.heading}});for(let t of Et()){let s=t.id===this.activeSection,i=e.createEl("button",{cls:s?"tf-settings-nav-item is-active":"tf-settings-nav-item",attr:{type:"button",role:"tab",title:t.label,"aria-selected":s?"true":"false"}});(0,D.setIcon)(i.createSpan({cls:"tf-settings-nav-icon"}),t.icon),i.createSpan({cls:"tf-settings-nav-label",text:t.label}),i.addEventListener("click",()=>{this.activeSection!==t.id&&(this.activeSection=t.id,this.contentEl&&this.constructUI(this.contentEl,this.heading))})}}renderGeneralSection(a){let e=this.plugin.settings.data;{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:n("settings.lang.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:n("settings.lang.title"),description:n("settings.lang.desc"),fill:i=>this.renderLanguageSegment(i)})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:n("settings.open.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:n("settings.open.subtitle"),description:n("settings.open.desc")+n("settings.open.desc2"),fill:i=>this.renderOpenLocationSegment(i)})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:n("settings.inbox.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:n("settings.inbox.title"),description:n("settings.inbox.desc"),fill:i=>{Lt(i,{app:this.plugin.app,value:e.inboxFilePath,placeholder:n("settings.inbox.placeholder"),onPick:l=>{e.inboxFilePath=l,this.saveSettings().then(()=>{this.rebuildUI(),y(n("toast.inboxSet"),"success")})}})}})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:n("settings.cover.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:n("settings.cover.show"),description:n("settings.cover.showDesc"),fill:i=>{Q(i,{checked:e.showCover,label:n("settings.cover.show"),onChange:l=>{e.showCover=l,this.saveSettings()}})}}),w(s,{title:n("settings.cover.pick"),description:n("settings.cover.pickDesc",{file:ce,dir:le}),fill:i=>{let l=pe(this.plugin.app,e.coverImagePath);i.createSpan({cls:"tf-settings-row-desc",text:l?l.name:n("settings.cover.none")});let o=i.createEl("input",{cls:"tf-file-input-hidden",attr:{type:"file",accept:"image/*","aria-label":n("settings.cover.aria")}});o.addEventListener("change",()=>void this.pickCover(o)),N(i,l?n("settings.cover.change"):n("settings.cover.choose"),"secondary",()=>o.click()),l&&N(i,n("common.remove"),"danger",()=>void this.clearCover())}})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:n("settings.head.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:n("settings.head.textTitle"),description:n("settings.head.textDesc"),fill:i=>{Q(i,{checked:e.showHeadText,label:n("settings.head.textTitle"),onChange:l=>{e.showHeadText=l,this.saveSettings()}})}}),w(s,{title:n("settings.head.workbench"),description:n("settings.head.workbenchDesc",{def:H}),fill:i=>{let l=i.createEl("input",{cls:"tf-field-input",attr:{type:"text",placeholder:H,"aria-label":n("settings.head.workbench")}});l.value=e.workbenchTitle||H,l.addEventListener("change",()=>{let o=l.value.trim()||H;l.value=o,o!==e.workbenchTitle&&(e.workbenchTitle=o,this.saveSettings().then(()=>y(n("toast.workbenchUpdated"),"success")))})}}),w(s,{title:"Slogan",description:n("settings.head.sloganDesc"),fill:i=>{let l=i.createEl("input",{cls:"tf-field-input",attr:{type:"text",placeholder:B(),"aria-label":"Slogan"}});l.value=re(e.workbenchSlogan)?"":e.workbenchSlogan??"",l.addEventListener("change",()=>{let o=l.value.trim();o!==e.workbenchSlogan&&(e.workbenchSlogan=o,this.saveSettings().then(()=>y(n("toast.sloganUpdated"),"success")))})}})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:n("settings.panel.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:n("settings.panel.today"),description:n("settings.panel.todayDesc"),fill:i=>{Q(i,{checked:e.showTodayOverview,label:n("settings.panel.today"),onChange:l=>{e.showTodayOverview=l,this.saveSettings()}})}}),w(s,{title:n("settings.panel.important"),description:n("settings.panel.importantDesc"),fill:i=>{Q(i,{checked:e.showImportantReminders,label:n("settings.panel.important"),onChange:l=>{e.showImportantReminders=l,this.saveSettings()}})}}),w(s,{title:n("settings.panel.query"),description:n("settings.panel.queryDesc"),fill:i=>{let l=i.createEl("textarea",{cls:"tf-field-textarea tf-important-query",attr:{rows:"4","aria-label":n("settings.panel.query"),placeholder:C}});l.value=e.importantReminderQuery??C,l.addEventListener("change",()=>{e.importantReminderQuery=l.value,this.saveSettings().then(()=>y(n("toast.queryUpdated"),"success"))}),N(i,n("common.reset"),"ghost",()=>{l.value=C,e.importantReminderQuery=C,this.saveSettings().then(()=>y(n("toast.queryReset"),"success"))})}})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:n("settings.stats.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:n("settings.stats.categories"),description:n("settings.stats.categoriesDesc"),fill:i=>{Q(i,{checked:e.showStatsCategories,label:n("settings.stats.categories"),onChange:l=>{e.showStatsCategories=l,this.saveSettings(),this.plugin.applyStatsCategories(l)}})}})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:n("settings.noticeTitle")});let s=t.createDiv({cls:"tf-settings-note"});(0,D.setIcon)(s.createSpan({cls:"tf-settings-note-icon"}),"info"),s.createSpan({cls:"tf-settings-note-text",text:n("settings.notice")})}}renderLanguageSegment(a){let e=this.plugin.settings.language??"auto",t=a.createDiv({cls:"tf-segmented tf-segmented-wide",attr:{role:"group","aria-label":n("settings.lang.title")}}),s=[{value:"auto",label:n("settings.lang.follow"),icon:"globe"},{value:"zh",label:n("settings.lang.zh"),icon:"languages"},{value:"en",label:n("settings.lang.en"),icon:"languages"}];for(let i of s){let l=e===i.value,o=t.createEl("button",{cls:l?"tf-segmented-btn is-active":"tf-segmented-btn",attr:{type:"button","aria-pressed":l?"true":"false"}});(0,D.setIcon)(o.createSpan({cls:"tf-segmented-btn-icon"}),i.icon),o.createSpan({cls:"tf-segmented-btn-label",text:i.label}),o.addEventListener("click",()=>{e!==i.value&&(this.plugin.applyLanguage(i.value),this.rebuildUI())})}}renderOpenLocationSegment(a){let e=this.plugin.settings.data,t=a.createDiv({cls:"tf-segmented",attr:{role:"group","aria-label":n("settings.open.title")}}),s=[{value:"main",label:n("settings.open.main"),icon:"layout-dashboard"},{value:"sidebar",label:n("settings.open.sidebar"),icon:"panel-right"}];for(let i of s){let l=e.openLocation===i.value,o=t.createEl("button",{cls:l?"tf-segmented-btn is-active":"tf-segmented-btn",attr:{type:"button","aria-pressed":l?"true":"false"}});(0,D.setIcon)(o.createSpan({cls:"tf-segmented-btn-icon"}),i.icon),o.createSpan({cls:"tf-segmented-btn-label",text:i.label}),o.addEventListener("click",()=>{e.openLocation!==i.value&&(e.openLocation=i.value,this.saveSettings().then(()=>this.rebuildUI()))})}}renderAboutSection(a){{let e=a.createDiv({cls:"tf-settings-card"});e.createDiv({cls:"tf-settings-card-caption",text:n("about.introTitle")});let t=e.createDiv({cls:"tf-about-hero"}),s=t.createDiv({cls:"tf-about-mark"});$(s,ge)||(0,D.setIcon)(s,"layout-dashboard");let i=t.createDiv({cls:"tf-about-hero-text"});i.createDiv({cls:"tf-about-title",text:"TaskFlow"}),i.createDiv({cls:"tf-about-subtitle",text:n("default.slogan")}),e.createDiv({cls:"tf-about-text",text:n("about.intro1")}),e.createDiv({cls:"tf-about-text",text:n("about.intro2")}),e.createDiv({cls:"tf-about-text",text:n("about.intro3")})}{let e=a.createDiv({cls:"tf-settings-card"});e.createDiv({cls:"tf-settings-card-caption",text:"Github Repository"});let t=e.createDiv({cls:"tf-settings-rows"});w(t,{title:n("about.githubTitle"),description:n("about.githubDesc"),fill:s=>this.renderLinkButton(s,St,"github",n("about.githubBtn"))})}{let e=a.createDiv({cls:"tf-settings-card"});e.createDiv({cls:"tf-settings-card-caption",text:n("about.authorTitle")});let t=e.createDiv({cls:"tf-settings-rows"});for(let s of[n("about.author1"),n("about.author2"),n("about.author3")]){let i=t.createDiv({cls:"tf-about-bullet"});i.createSpan({cls:"tf-about-bullet-dot",text:"\u2022"}),i.createSpan({cls:"tf-about-bullet-text",text:s})}w(t,{title:n("about.moreTitle"),description:n("about.moreDesc"),fill:s=>this.renderLinkButton(s,Dt,"link",n("about.moreBtn"))})}}renderLinkButton(a,e,t,s){let i=a.createEl("a",{cls:"tf-link-btn",attr:{href:e,target:"_blank",rel:"noopener noreferrer"}});(0,D.setIcon)(i.createSpan({cls:"tf-link-btn-icon"}),t),i.createSpan({cls:"tf-link-btn-label",text:s}),i.addEventListener("click",l=>{l.preventDefault(),window.open(e,"_blank")})}async pickCover(a){let e=a.files?.[0];if(a.value="",!!e)try{await ue(this.plugin,e),this.rebuildUI(),y(n("toast.bannerUpdated"),"success")}catch(t){console.error("[TaskFlow] \u4FDD\u5B58\u6A2A\u5E45\u5931\u8D25:",t),y(n("toast.bannerSaveFail")+(t instanceof Error?t.message:String(t)),"error")}}async clearCover(){try{await he(this.plugin),this.rebuildUI(),y(n("toast.bannerRemoved"),"success")}catch(a){console.error("[TaskFlow] \u79FB\u9664\u6A2A\u5E45\u5931\u8D25:",a),y(n("toast.bannerRemoveFail")+(a instanceof Error?a.message:String(a)),"error")}}renderGroupsSection(a){let e=this.plugin.settings.data,t=a.createDiv({cls:"tf-settings-card"}),s=t.createDiv({cls:"tf-settings-rows"});for(let i of e.groups){let l=["gtd","time","tag"].includes(i.id),o=e.globalTabs.filter(d=>R(d,e.groups)===i.id).length;w(s,{title:i.label,description:n("settings.group.idLine",{id:i.id,count:o,suffix:l?n("common.builtinSuffix"):""}),fill:d=>{N(d,n("common.edit"),"secondary",()=>this.openGroupEditModal(i)),l||N(d,n("common.delete"),"danger",()=>this.confirmDeleteGroup(i))}})}$e(t,n("settings.addGroup"),()=>this.openAddGroupModal())}renderTabsSection(a){let e=this.plugin.settings.data;for(let t of e.groups){let s=a.createDiv({cls:"tf-settings-card"}),i=this.isGroupCollapsed(t.id),l=s.createEl("button",{cls:"tf-settings-group-header",attr:{type:"button","aria-expanded":i?"false":"true"}}),o=l.createSpan({cls:"tf-settings-group-chevron"});(0,D.setIcon)(o,i?"chevron-right":"chevron-down"),l.createSpan({cls:"tf-settings-group-title",text:t.label});let d=e.globalTabs.filter(p=>R(p,e.groups)===t.id).length;l.createSpan({cls:"tf-settings-group-count",text:n("settings.group.tabCount",{n:d})});let c=s.createDiv({cls:"tf-settings-group-content"});c.toggleClass("is-collapsed",i),l.addEventListener("click",()=>{let p=!this.isGroupCollapsed(t.id);this.groupCollapsed[t.id]=p,c.toggleClass("is-collapsed",p),(0,D.setIcon)(o,p?"chevron-right":"chevron-down"),l.setAttribute("aria-expanded",p?"false":"true")});let u=c.createDiv({cls:"tf-settings-rows"}),h=e.globalTabs.filter(p=>R(p,e.groups)===t.id).sort((p,g)=>p.order-g.order);h.length===0&&Ft(u,n("settings.noTabs"));for(let p of h)w(u,{title:I(p),description:this.describeTab(p),fill:g=>{Q(g,{checked:!!p.showSectionHeader,caption:n("settings.showHeader"),label:n("settings.tab.headerToggle",{label:I(p)}),onChange:T=>{p.showSectionHeader=T,this.saveSettings().then(()=>{this.plugin.refreshAllViews(),y(T?n("toast.headerShown"):n("toast.headerHidden"),"success")})}}),N(g,n("common.edit"),"secondary",()=>this.openTabEditModal(p)),N(g,n("common.delete"),"danger",()=>this.confirmDeleteTab(p))}});$e(c,n("settings.tab.addToGroup",{group:t.label}),()=>this.openAddTabModal(t.id))}}describeTab(a){let e=a.query.split(` -`)[0]?.trim()??"";return n("settings.tab.metaLine",{query:e,order:a.order})}confirmDeleteGroup(a){new z(this.plugin.app,n("settings.confirm.deleteGroup",{name:a.label}),()=>{let e=this.plugin.settings.data;e.globalTabs=e.globalTabs.filter(s=>R(s,e.groups)!==a.id);let t=e.groups.findIndex(s=>s.id===a.id);t!==-1&&e.groups.splice(t,1),this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(n("toast.groupDeleted"),"success")})}).open()}confirmDeleteTab(a){new z(this.plugin.app,n("settings.confirm.deleteTab",{name:I(a)}),()=>{let e=this.plugin.settings.data.globalTabs.indexOf(a);e!==-1&&(this.plugin.settings.data.globalTabs.splice(e,1),this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(n("toast.tabDeleted"),"success")}))}).open()}rebuildUI(){this.contentEl&&this.constructUI(this.contentEl,this.heading)}async saveSettings(){await this.plugin.saveSettings()}openTabEditModal(a){A.launch(new se(this.plugin.app,this.plugin,a,e=>{let t=this.plugin.settings.data.globalTabs.findIndex(s=>s.id===a.id);t!==-1&&(this.plugin.settings.data.globalTabs[t]=e,this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(n("toast.tabUpdated"),"success")}))}),n("modal.editTabDialog"))}openAddTabModal(a){let e={id:`tab_${Date.now()}`,label:n("settings.newTab"),query:`not done + limit 10`),showSectionHeader:!0,order:11}]}var oe={id:"dashboard",name:o("defaultGroup.dashboard"),icon:"dashboard",order:1},Pt={workbenchTitle:P,workbenchSlogan:N(),coverImagePath:"",coverPosition:q,showCover:!0,showTodayOverview:X,showImportantReminders:J,importantReminderQuery:C,showStatsCategories:ee,showHeadText:te,openLocation:pe},Y={version:"",data:{inboxFilePath:"Inbox.md",excludedFolders:"System/Templates",globalTabs:Ie(),boards:[oe],groups:ie,workbenchTitle:P,workbenchSlogan:N(),coverImagePath:"",coverPosition:50,showCover:!0,showTodayOverview:X,showImportantReminders:J,importantReminderQuery:C,showStatsCategories:ee,showHeadText:te,openLocation:pe},language:Ue};function Gt(n){return n.startsWith("gtd-")||n==="overdue"||n==="today"||n==="tomorrow"||n==="todo"||n==="inprogress"?"gtd":n.startsWith("time-")||n==="week"||n==="month"?"time":n.startsWith("tag-")?"tag":"gtd"}function je(n){let a=new Map;return Ie().forEach((e,t)=>{a.set(e.id,e.order)}),n.map((e,t)=>{let s=e;if(s.order===void 0)if(a.has(s.id))s={...s,order:a.get(s.id)};else{let i=Math.max(...Ie().map(r=>r.order));s={...s,order:i+t+1}}return s.group===void 0&&(s={...s,group:Gt(s.id)}),typeof s.query=="string"&&s.query!==k(s.query)&&(s={...s,query:k(s.query)}),s})}function Ze(n){if(n.data){let l=n.data;return l.globalTabs&&(l.globalTabs=je(l.globalTabs)),!l.boards||l.boards.length===0?l.boards=[oe]:l.boards.some(d=>d.id==="dashboard")||(l.boards=[oe,...l.boards]),l.boards.sort((c,d)=>c.order-d.order),l.globalTabs&&l.globalTabs.sort((c,d)=>c.order-d.order),{version:n.version??"",data:{inboxFilePath:l.inboxFilePath??Y.data.inboxFilePath,excludedFolders:l.excludedFolders??Y.data.excludedFolders,globalTabs:l.globalTabs??Y.data.globalTabs,boards:l.boards,groups:l.groups??ie,workbenchTitle:l.workbenchTitle??P,workbenchSlogan:l.workbenchSlogan??N(),coverImagePath:l.coverImagePath??"",coverPosition:W(l.coverPosition),showCover:l.showCover??!0,showTodayOverview:l.showTodayOverview??X,showImportantReminders:l.showImportantReminders??J,importantReminderQuery:l.importantReminderQuery??C,showStatsCategories:l.showStatsCategories??ee,showHeadText:l.showHeadText??te,openLocation:l.openLocation==="sidebar"?"sidebar":"main"}}}let a=n,e=a.tabs,t=a.boards,s=a.globalTabs,i=a.inboxFilePath,r=a.excludedFolders;return e&&!s&&(s=je(e)),!t||t.length===0?t=[oe]:t.some(c=>c.id==="dashboard")||(t=[oe,...t]),{version:"",data:{inboxFilePath:i??Y.data.inboxFilePath,excludedFolders:r??Y.data.excludedFolders,globalTabs:s??Y.data.globalTabs,boards:t.sort((l,c)=>l.order-c.order),groups:ie,...Pt,showTodayOverview:X,showImportantReminders:J,importantReminderQuery:C,showStatsCategories:ee,showHeadText:te,openLocation:pe},language:"auto"}}var Pe=class{constructor(a){this.contentEl=null;this.activeSection="general";this.groupCollapsed={};this.heading="TaskFlow Settings";this.plugin=a}isGroupCollapsed(a){return this.groupCollapsed[a]??!0}async constructUI(a,e,t){this.contentEl=a,this.heading=e,t&&(this.activeSection=t),a.empty(),a.addClass("taskflow-setting-tab"),this.renderSectionNav(a);let s=a.createDiv({cls:"tf-settings-body"});switch(this.activeSection){case"groups":this.renderGroupsSection(s);break;case"tabs":this.renderTabsSection(s);break;case"about":this.renderAboutSection(s);break;case"general":default:this.renderGeneralSection(s);break}}renderSectionNav(a){let e=a.createDiv({cls:"tf-settings-nav",attr:{role:"tablist","aria-label":this.heading}});for(let t of Ct()){let s=t.id===this.activeSection,i=e.createEl("button",{cls:s?"tf-settings-nav-item is-active":"tf-settings-nav-item",attr:{type:"button",role:"tab",title:t.label,"aria-selected":s?"true":"false"}});(0,D.setIcon)(i.createSpan({cls:"tf-settings-nav-icon"}),t.icon),i.createSpan({cls:"tf-settings-nav-label",text:t.label}),i.addEventListener("click",()=>{this.activeSection!==t.id&&(this.activeSection=t.id,this.contentEl&&this.constructUI(this.contentEl,this.heading))})}}renderGeneralSection(a){let e=this.plugin.settings.data;{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:o("settings.lang.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:o("settings.lang.title"),description:o("settings.lang.desc"),fill:i=>this.renderLanguageSegment(i)})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:o("settings.open.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:o("settings.open.subtitle"),description:o("settings.open.desc")+o("settings.open.desc2"),fill:i=>this.renderOpenLocationSegment(i)})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:o("settings.inbox.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:o("settings.inbox.title"),description:o("settings.inbox.desc"),fill:i=>{Rt(i,{app:this.plugin.app,value:e.inboxFilePath,placeholder:o("settings.inbox.placeholder"),onPick:r=>{e.inboxFilePath=r,this.saveSettings().then(()=>{this.rebuildUI(),y(o("toast.inboxSet"),"success")})}})}})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:o("settings.cover.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:o("settings.cover.show"),description:o("settings.cover.showDesc"),fill:i=>{Q(i,{checked:e.showCover,label:o("settings.cover.show"),onChange:r=>{e.showCover=r,this.saveSettings()}})}}),w(s,{title:o("settings.cover.pick"),description:o("settings.cover.pickDesc",{file:ue,dir:de}),fill:i=>{let r=he(this.plugin.app,e.coverImagePath);i.createSpan({cls:"tf-settings-row-desc",text:r?r.name:o("settings.cover.none")});let l=i.createEl("input",{cls:"tf-file-input-hidden",attr:{type:"file",accept:"image/*","aria-label":o("settings.cover.aria")}});l.addEventListener("change",()=>void this.pickCover(l)),_(i,r?o("settings.cover.change"):o("settings.cover.choose"),"secondary",()=>l.click()),r&&_(i,o("common.remove"),"danger",()=>void this.clearCover())}})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:o("settings.head.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:o("settings.head.textTitle"),description:o("settings.head.textDesc"),fill:i=>{Q(i,{checked:e.showHeadText,label:o("settings.head.textTitle"),onChange:r=>{e.showHeadText=r,this.saveSettings()}})}}),w(s,{title:o("settings.head.workbench"),description:o("settings.head.workbenchDesc",{def:P}),fill:i=>{let r=i.createEl("input",{cls:"tf-field-input",attr:{type:"text",placeholder:P,"aria-label":o("settings.head.workbench")}});r.value=e.workbenchTitle||P,r.addEventListener("change",()=>{let l=r.value.trim()||P;r.value=l,l!==e.workbenchTitle&&(e.workbenchTitle=l,this.saveSettings().then(()=>y(o("toast.workbenchUpdated"),"success")))})}}),w(s,{title:"Slogan",description:o("settings.head.sloganDesc"),fill:i=>{let r=i.createEl("input",{cls:"tf-field-input",attr:{type:"text",placeholder:N(),"aria-label":"Slogan"}});r.value=re(e.workbenchSlogan)?"":e.workbenchSlogan??"",r.addEventListener("change",()=>{let l=r.value.trim();l!==e.workbenchSlogan&&(e.workbenchSlogan=l,this.saveSettings().then(()=>y(o("toast.sloganUpdated"),"success")))})}})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:o("settings.panel.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:o("settings.panel.today"),description:o("settings.panel.todayDesc"),fill:i=>{Q(i,{checked:e.showTodayOverview,label:o("settings.panel.today"),onChange:r=>{e.showTodayOverview=r,this.saveSettings()}})}}),w(s,{title:o("settings.panel.important"),description:o("settings.panel.importantDesc"),fill:i=>{Q(i,{checked:e.showImportantReminders,label:o("settings.panel.important"),onChange:r=>{e.showImportantReminders=r,this.saveSettings()}})}}),w(s,{title:o("settings.panel.query"),description:o("settings.panel.queryDesc"),fill:i=>{let r=i.createEl("textarea",{cls:"tf-field-textarea tf-important-query",attr:{rows:"4","aria-label":o("settings.panel.query"),placeholder:C}});r.value=e.importantReminderQuery??C,r.addEventListener("change",()=>{e.importantReminderQuery=r.value,this.saveSettings().then(()=>y(o("toast.queryUpdated"),"success"))}),_(i,o("common.reset"),"ghost",()=>{r.value=C,e.importantReminderQuery=C,this.saveSettings().then(()=>y(o("toast.queryReset"),"success"))})}})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:o("settings.stats.title")});let s=t.createDiv({cls:"tf-settings-rows"});w(s,{title:o("settings.stats.categories"),description:o("settings.stats.categoriesDesc"),fill:i=>{Q(i,{checked:e.showStatsCategories,label:o("settings.stats.categories"),onChange:r=>{e.showStatsCategories=r,this.saveSettings(),this.plugin.applyStatsCategories(r)}})}})}{let t=a.createDiv({cls:"tf-settings-card"});t.createDiv({cls:"tf-settings-card-caption",text:o("settings.noticeTitle")});let s=t.createDiv({cls:"tf-settings-note"});(0,D.setIcon)(s.createSpan({cls:"tf-settings-note-icon"}),"info"),s.createSpan({cls:"tf-settings-note-text",text:o("settings.notice")})}}renderLanguageSegment(a){let e=this.plugin.settings.language??"auto",t=a.createDiv({cls:"tf-segmented tf-segmented-wide",attr:{role:"group","aria-label":o("settings.lang.title")}}),s=[{value:"auto",label:o("settings.lang.follow"),icon:"globe"},{value:"zh",label:o("settings.lang.zh"),icon:"languages"},{value:"en",label:o("settings.lang.en"),icon:"languages"}];for(let i of s){let r=e===i.value,l=t.createEl("button",{cls:r?"tf-segmented-btn is-active":"tf-segmented-btn",attr:{type:"button","aria-pressed":r?"true":"false"}});(0,D.setIcon)(l.createSpan({cls:"tf-segmented-btn-icon"}),i.icon),l.createSpan({cls:"tf-segmented-btn-label",text:i.label}),l.addEventListener("click",()=>{e!==i.value&&(this.plugin.applyLanguage(i.value),this.rebuildUI())})}}renderOpenLocationSegment(a){let e=this.plugin.settings.data,t=a.createDiv({cls:"tf-segmented",attr:{role:"group","aria-label":o("settings.open.title")}}),s=[{value:"main",label:o("settings.open.main"),icon:"layout-dashboard"},{value:"sidebar",label:o("settings.open.sidebar"),icon:"panel-right"}];for(let i of s){let r=e.openLocation===i.value,l=t.createEl("button",{cls:r?"tf-segmented-btn is-active":"tf-segmented-btn",attr:{type:"button","aria-pressed":r?"true":"false"}});(0,D.setIcon)(l.createSpan({cls:"tf-segmented-btn-icon"}),i.icon),l.createSpan({cls:"tf-segmented-btn-label",text:i.label}),l.addEventListener("click",()=>{e.openLocation!==i.value&&(e.openLocation=i.value,this.saveSettings().then(()=>this.rebuildUI()))})}}renderAboutSection(a){{let e=a.createDiv({cls:"tf-settings-card"});e.createDiv({cls:"tf-settings-card-caption",text:o("about.introTitle")});let t=e.createDiv({cls:"tf-about-hero"}),s=t.createDiv({cls:"tf-about-mark"});$(s,fe)||(0,D.setIcon)(s,"layout-dashboard");let i=t.createDiv({cls:"tf-about-hero-text"});i.createDiv({cls:"tf-about-title",text:"TaskFlow"}),i.createDiv({cls:"tf-about-subtitle",text:o("default.slogan")}),e.createDiv({cls:"tf-about-text",text:o("about.intro1")}),e.createDiv({cls:"tf-about-text",text:o("about.intro2")}),e.createDiv({cls:"tf-about-text",text:o("about.intro3")})}{let e=a.createDiv({cls:"tf-settings-card"});e.createDiv({cls:"tf-settings-card-caption",text:"Github Repository"});let t=e.createDiv({cls:"tf-settings-rows"});w(t,{title:o("about.githubTitle"),description:o("about.githubDesc"),fill:s=>this.renderLinkButton(s,Lt,"github",o("about.githubBtn"))})}{let e=a.createDiv({cls:"tf-settings-card"});e.createDiv({cls:"tf-settings-card-caption",text:o("about.authorTitle")});let t=e.createDiv({cls:"tf-settings-rows"});for(let s of[o("about.author1"),o("about.author2"),o("about.author3")]){let i=t.createDiv({cls:"tf-about-bullet"});i.createSpan({cls:"tf-about-bullet-dot",text:"\u2022"}),i.createSpan({cls:"tf-about-bullet-text",text:s})}w(t,{title:o("about.moreTitle"),description:o("about.moreDesc"),fill:s=>this.renderLinkButton(s,Ft,"link",o("about.moreBtn"))})}}renderLinkButton(a,e,t,s){let i=a.createEl("a",{cls:"tf-link-btn",attr:{href:e,target:"_blank",rel:"noopener noreferrer"}});(0,D.setIcon)(i.createSpan({cls:"tf-link-btn-icon"}),t),i.createSpan({cls:"tf-link-btn-label",text:s}),i.addEventListener("click",r=>{r.preventDefault(),window.open(e,"_blank")})}async pickCover(a){let e=a.files?.[0];if(a.value="",!!e)try{await ge(this.plugin,e),this.rebuildUI(),y(o("toast.bannerUpdated"),"success")}catch(t){console.error("[TaskFlow] \u4FDD\u5B58\u6A2A\u5E45\u5931\u8D25:",t),y(o("toast.bannerSaveFail")+(t instanceof Error?t.message:String(t)),"error")}}async clearCover(){try{await me(this.plugin),this.rebuildUI(),y(o("toast.bannerRemoved"),"success")}catch(a){console.error("[TaskFlow] \u79FB\u9664\u6A2A\u5E45\u5931\u8D25:",a),y(o("toast.bannerRemoveFail")+(a instanceof Error?a.message:String(a)),"error")}}renderGroupsSection(a){let e=this.plugin.settings.data,t=a.createDiv({cls:"tf-settings-card"}),s=t.createDiv({cls:"tf-settings-rows"});for(let i of e.groups){let r=["gtd","time","tag"].includes(i.id),l=e.globalTabs.filter(c=>I(c,e.groups)===i.id).length;w(s,{title:i.label,description:o("settings.group.idLine",{id:i.id,count:l,suffix:r?o("common.builtinSuffix"):""}),fill:c=>{_(c,o("common.edit"),"secondary",()=>this.openGroupEditModal(i)),r||_(c,o("common.delete"),"danger",()=>this.confirmDeleteGroup(i))}})}Ke(t,o("settings.addGroup"),()=>this.openAddGroupModal())}renderTabsSection(a){let e=this.plugin.settings.data;for(let t of e.groups){let s=a.createDiv({cls:"tf-settings-card"}),i=this.isGroupCollapsed(t.id),r=s.createEl("button",{cls:"tf-settings-group-header",attr:{type:"button","aria-expanded":i?"false":"true"}}),l=r.createSpan({cls:"tf-settings-group-chevron"});(0,D.setIcon)(l,i?"chevron-right":"chevron-down"),r.createSpan({cls:"tf-settings-group-title",text:t.label});let c=e.globalTabs.filter(p=>I(p,e.groups)===t.id).length;r.createSpan({cls:"tf-settings-group-count",text:o("settings.group.tabCount",{n:c})});let d=s.createDiv({cls:"tf-settings-group-content"});d.toggleClass("is-collapsed",i),r.addEventListener("click",()=>{let p=!this.isGroupCollapsed(t.id);this.groupCollapsed[t.id]=p,d.toggleClass("is-collapsed",p),(0,D.setIcon)(l,p?"chevron-right":"chevron-down"),r.setAttribute("aria-expanded",p?"false":"true")});let h=d.createDiv({cls:"tf-settings-rows"}),u=e.globalTabs.filter(p=>I(p,e.groups)===t.id).sort((p,g)=>p.order-g.order);u.length===0&&It(h,o("settings.noTabs"));for(let p of u)w(h,{title:R(p),description:this.describeTab(p),fill:g=>{Q(g,{checked:!!p.showSectionHeader,caption:o("settings.showHeader"),label:o("settings.tab.headerToggle",{label:R(p)}),onChange:T=>{p.showSectionHeader=T,this.saveSettings().then(()=>{this.plugin.refreshAllViews(),y(T?o("toast.headerShown"):o("toast.headerHidden"),"success")})}}),_(g,o("common.edit"),"secondary",()=>this.openTabEditModal(p)),_(g,o("common.delete"),"danger",()=>this.confirmDeleteTab(p))}});Ke(d,o("settings.tab.addToGroup",{group:t.label}),()=>this.openAddTabModal(t.id))}}describeTab(a){let e=a.query.split(` +`)[0]?.trim()??"";return o("settings.tab.metaLine",{query:e,order:a.order})}confirmDeleteGroup(a){new z(this.plugin.app,o("settings.confirm.deleteGroup",{name:a.label}),()=>{let e=this.plugin.settings.data;e.globalTabs=e.globalTabs.filter(s=>I(s,e.groups)!==a.id);let t=e.groups.findIndex(s=>s.id===a.id);t!==-1&&e.groups.splice(t,1),this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(o("toast.groupDeleted"),"success")})}).open()}confirmDeleteTab(a){new z(this.plugin.app,o("settings.confirm.deleteTab",{name:R(a)}),()=>{let e=this.plugin.settings.data.globalTabs.indexOf(a);e!==-1&&(this.plugin.settings.data.globalTabs.splice(e,1),this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(o("toast.tabDeleted"),"success")}))}).open()}rebuildUI(){this.contentEl&&this.constructUI(this.contentEl,this.heading)}async saveSettings(){await this.plugin.saveSettings()}openTabEditModal(a){H.launch(new se(this.plugin.app,this.plugin,a,e=>{let t=this.plugin.settings.data.globalTabs.findIndex(s=>s.id===a.id);t!==-1&&(this.plugin.settings.data.globalTabs[t]=e,this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(o("toast.tabUpdated"),"success")}))}),o("modal.editTabDialog"))}openAddTabModal(a){let e={id:`tab_${Date.now()}`,label:o("settings.newTab"),query:`not done group by filename -limit 10`,showSectionHeader:!1,order:this.plugin.settings.data.globalTabs.length+1,group:a};A.launch(new se(this.plugin.app,this.plugin,e,t=>{this.plugin.settings.data.globalTabs.push(t),this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(n("toast.tabCreated"),"success")})},!0),n("modal.newTabDialog"))}openGroupEditModal(a){let e=new ae(this.plugin.app,a,t=>{let s=this.plugin.settings.data.groups.findIndex(i=>i.id===a.id);s!==-1&&(this.plugin.settings.data.groups[s]=t,this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(n("toast.groupUpdated"),"success")}))});A.launch(e,n("modal.editGroupDialog"))}openAddGroupModal(){let a=new ae(this.plugin.app,{id:"",label:"",icon:"folder"},e=>{let t=e.id.toLowerCase().replace(/[^a-z0-9]/g,"-"),s=t,i=1;for(;this.plugin.settings.data.groups.some(l=>l.id===s);)s=`${t}-${i}`,i++;e.id=s,this.plugin.settings.data.groups.push(e),this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(n("toast.groupCreated"),"success")})});A.launch(a,n("modal.newGroupDialog"))}},me=class extends D.PluginSettingTab{constructor(a,e){super(a,e),this.plugin=e,this.settingsManager=new Ie(e)}display(){let{containerEl:a}=this;a.empty(),a.addClass("taskflow-setting-tab"),this.settingsManager.constructUI(a,"TaskFlow Settings")}hide(){}};var v=require("obsidian");var be=[19416,19168,42352,21717,53856,55632,91476,22176,39632,21970,19168,42422,42192,53840,119381,46400,54944,44450,38320,84343,18800,42160,46261,27216,27968,109396,11104,38256,21234,18800,25958,54432,59984,28309,23248,11104,100067,37600,116951,51536,54432,120998,46416,22176,107956,9680,37584,53938,43344,46423,27808,46416,86869,19872,42416,83315,21168,43432,59728,27296,44710,43856,19296,43748,42352,21088,62051,55632,23383,22176,38608,19925,19152,42192,54484,53840,54616,46400,46496,103846,38320,18864,43380,42160,45690,27216,27968,44870,43872,38256,19189,18800,25776,29859,59984,27480,21952,43872,38613,37600,51552,55636,54432,55888,30034,22176,43959,9680,37584,51893,43344,46240,47780,44368,21977,19360,42416,86390,21168,43312,31060,27296,44368,23378,19296,42726,42208,53856,60005,54576,23200,30371,38608,19195,19152,42192,118966,53840,54560,56645,46496,22224,21938,18864,42359,42160,43600,111189,27936,44448,84835,37744,18936,18800,25776,92326,59984,27424,108228,43744,41696,53987,51552,54615,54432,55888,23893,22176,42704,21972,21200,43448,43344,46240,46758,44368,21920,43940,42416,21168,45683,26928,29495,27296,44368,84821,19296,42352,21732,53600,59752,54560,55968,92838,22224,19168,43476,41680,53584,62034,54560],Rt=["\u6B63","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D","\u4E03","\u516B","\u4E5D","\u5341","\u51AC","\u814A"],Ht=["\u521D\u4E00","\u521D\u4E8C","\u521D\u4E09","\u521D\u56DB","\u521D\u4E94","\u521D\u516D","\u521D\u4E03","\u521D\u516B","\u521D\u4E5D","\u521D\u5341","\u5341\u4E00","\u5341\u4E8C","\u5341\u4E09","\u5341\u56DB","\u5341\u4E94","\u5341\u516D","\u5341\u4E03","\u5341\u516B","\u5341\u4E5D","\u4E8C\u5341","\u5EFF\u4E00","\u5EFF\u4E8C","\u5EFF\u4E09","\u5EFF\u56DB","\u5EFF\u4E94","\u5EFF\u516D","\u5EFF\u4E03","\u5EFF\u516B","\u5EFF\u4E5D","\u4E09\u5341"],Pt=["\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"],At=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Ot=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function fe(r){return String(r).padStart(2,"0")}function Gt(r){let a=be[r-1900],e=348;for(let t=32768;t>8;t>>=1)a&t&&(e+=1);return e+Ke(r)}function Ke(r){return je(r)?be[r-1900]&65536?30:29:0}function je(r){return be[r-1900]&15}function Bt(r,a){return be[r-1900]&65536>>a?30:29}function _t(r){let a=je(r),e=[];for(let t=1;t<=12;t++)e.push({month:t,leap:!1,days:Bt(r,t)}),t===a&&e.push({month:t,leap:!0,days:Ke(r)});return e}function Ze(r){let a=r.getFullYear(),e=r.getMonth()+1,t=r.getDate();if(a<1900||a>2100)return"";let s=Math.round((Date.UTC(a,e-1,t)-Date.UTC(1900,0,31))/864e5),i=1900;for(;i<2101;){let l=Gt(i);if(s30?"":(l.leap?"\u95F0":"")+Rt[l.month-1]+"\u6708"+Ht[o-1]}s-=l.days}return""}function Xe(r,a){return(a==="en"?At:Pt)[r.getDay()]??""}function Je(r,a){let e=fe(r.getHours())+":"+fe(r.getMinutes());return a==="en"?`${Ot[r.getMonth()]??""} ${r.getDate()}, ${r.getFullYear()} ${e}`:r.getFullYear()+"/"+fe(r.getMonth()+1)+"/"+fe(r.getDate())+" "+e}var Nt={" ":"todo","/":"in-progress",x:"done",X:"done",">":"migrated","-":"cancel",p:"pending",w:"waiting"},Ut=/^(\s*)- \[(.)\] (.*)$/,qt=/(\d{4}-\d{2}-\d{2})/,Wt=[{emoji:"\u23F3",key:"scheduled"},{emoji:"\u{1F4C5}",key:"due"},{emoji:"\u{1F6EB}",key:"startDate"},{emoji:"\u2705",key:"completionDate"},{emoji:"\u2795",key:"createdDate"}];function Vt(r,a,e){let t=Ut.exec(r);if(!t)return null;let s=t[1]??"",i=t[2]??" ",l=t[3]??"",o=Nt[i]??"todo",d={file:a,line:e,indent:s.length,status:o,description:l,scheduled:null,due:null,recurrence:null,priority:"normal",startDate:null,completionDate:null,createdDate:null,taskId:null,dependsOn:null,heading:null,children:[]};for(let{emoji:p,key:g}of Wt){let T=l.indexOf(p);if(T!==-1){let m=l.slice(T+p.length).trimStart(),x=qt.exec(m);x&&x[1]&&(d[g]=x[1])}}let c=l.indexOf("\u{1F501}");if(c!==-1){let p=l.slice(c+2).trim(),g=p.search(/[⏳📅🛫✅➕⏫🔼🔽⬇🆔⛔]/gu);d.recurrence=g===-1?p:p.slice(0,g).trim()}l.includes("\u23EB")?d.priority="highest":l.includes("\u{1F53C}")?d.priority="high":l.includes("\u{1F53D}")?d.priority="low":l.includes("\u2B07\uFE0F")&&(d.priority="lowest");let u=/🆔\s*(\S+)/.exec(l);u?.[1]&&(d.taskId=u[1]);let h=/⛔\s*(\S+)/.exec(l);return h?.[1]&&(d.dependsOn=h[1]),d.description=l.replace(/[⏳📅🛫✅➕]\s*\d{4}-\d{2}-\d{2}/gu,"").replace(/🔁[^⏳📅🛫✅➕⏫🔼🔽⬇🆔⛔]*/gu,"").replace(/[⏫🔼🔽⬇🆔⛔]\s*\S*/gu,"").replace(/\s{2,}/g," ").trim(),d}async function et(r,a){let e;try{e=await a.vault.read(r)}catch{return[]}let t=e.split(` -`),s=[],i=null;for(let l=0;lu.trim()).filter(u=>u.length>0),s=this.app.vault.getMarkdownFiles(),i=[],l=0,o=0;for(let u of s){if(this.isExcluded(u.path,t))continue;let h=u.path,p=this.cache.get(h),g=u.stat;if(p&&p.mtime===g.mtime)l++,i.push(...this.cloneTasks(p.tasks));else{o++;let m=await this.getFileTasks(u);m.length>0&&i.push(...m)}}this.cleanupCache(s.map(u=>u.path));let d=performance.now()-e,c=this.getStats();return this.debug&&this.log(`[ScanCache] Loaded ${i.length} tasks (cache: ${l} hits, ${o} misses, ${c.cachedFiles} stored) in ${d.toFixed(1)}ms`),i}cloneTasks(a){return a.map(e=>({...e,children:this.cloneTasks(e.children)}))}async getFileTasks(a){try{let t=a.stat.mtime,s=a.path,i=this.cache.get(s);if(i&&i.mtime===t)return this.debug&&this.log(`[Cache] HIT: ${a.path}`),this.cloneTasks(i.tasks);this.debug&&this.log(`[Cache] MISS: ${a.path}`);let l=await et(a,this.app),o=this.buildTaskHierarchy(l);if(this.cache.size>=this.maxSize){let d=this.cache.keys().next().value;d&&(this.cache.delete(d),this.debug&&this.log(`[Cache] Evicted: ${d}`))}return this.cache.set(s,{file:a,mtime:t,tasks:o}),o}catch(e){return console.warn("[ScanCache] Failed to process file, skipping:",a.path,e),[]}}buildTaskHierarchy(a){let e=[],t=[];for(let s of a){for(;t.length>0&&(t[t.length-1]?.indent??0)>=s.indent;)t.pop();let i=t[t.length-1];i?i.children.push(s):e.push(s),t.push(s)}return e}migrateCacheKey(a,e){if(this.cache.has(a)){let t=this.cache.get(a);this.cache.delete(a),this.cache.set(e,t),this.debug&&this.log(`[Cache] Renamed: ${a} -> ${e}`)}}cleanupCache(a){let e=new Set(a),t=0;for(let s of this.cache.keys())e.has(s)||(this.cache.delete(s),t++);this.debug&&t>0&&this.log(`[Cache] Cleaned up ${t} stale entries`)}log(a){console.warn(a)}isExcluded(a,e){return e.some(t=>{let s=t.trim();return s.length>0&&a.startsWith(s+"/")})}getStats(){return{cachedFiles:this.cache.size,parsedFiles:0}}clear(){this.cache.clear()}get size(){return this.cache.size}};var U="taskflow-view",tt=250,st="obsidian-tasks-plugin";function zt(r){let a=r.plugins;return[a.plugins[st],a[st]].filter(t=>typeof t?.getTasks=="function")}var $t={todo:"TODO","in-progress":"IN_PROGRESS",done:"DONE",cancel:"CANCELLED",migrated:"TODO",pending:"TODO",waiting:"TODO"};function Re(r){if(!r)return null;if(typeof r=="string")return r;let a=r;return typeof a.format=="function"?a.format("YYYY-MM-DD"):null}function rt(r){return r.flatMap(a=>[a,...rt(a.children)])}function Qt(){let r=new Date,a=r.getFullYear(),e=String(r.getMonth()+1).padStart(2,"0"),t=String(r.getDate()).padStart(2,"0");return`${a}-${e}-${t}`}function at(r){return String(r).padStart(2,"0")}function lt(r,a){let e=r.split("-").map(Number),t=e[0]??0,s=e[1]??1,i=e[2]??1,l=new Date(t,s-1,i+a);return`${l.getFullYear()}-${at(l.getMonth()+1)}-${at(l.getDate())}`}function Yt(r){let a=r.split("-").map(Number),e=a[0]??0,t=a[1]??1,s=a[2]??1,i=(new Date(e,t-1,s).getDay()+6)%7;return lt(r,-i)}var Kt=3e4,jt=400,it=1200,Zt=40,nt=[800,2e3,5e3],ot=1500,Te=class extends v.ItemView{constructor(e,t){super(e);this.statTasks=[];this.activeGroup="gtd";this.activeTab="gtd-inbox";this.activeTabByGroup={};this.groupBtns={};this.tabBtns={};this.tabPanels={};this.tabBodies={};this.tabCounts={};this.tabCollapsed={};this.tabGroups={};this.emptyGroupEl=null;this.emptyGroupTitleEl=null;this.renderEpoch=0;this.emptyTimers=new WeakMap;this.renderComponents=new Map;this.statsEl=null;this.statsChevron=null;this.progressFill=null;this.statsPct=null;this.pillOverdue=null;this.pillInProgress=null;this.pillTodo=null;this.pillCancel=null;this.pillDone=null;this.pillTotal=null;this.toTodoEl=null;this.toDoneEl=null;this.toInProgressEl=null;this.toOverdueEl=null;this.toWeekEl=null;this.toRingTodayDial=null;this.toRingTodayText=null;this.toRingWeekDial=null;this.toRingWeekText=null;this.importantBodyEl=null;this.importantMoreEl=null;this.importantExpanded=!1;this.importantEmptyTimer=null;this.headTimeEl=null;this.headMetaEl=null;this.headClockTimer=null;this.refreshBusy=!1;this.refreshQueued=!1;this.statsTimer=null;this.contentTimer=null;this.zeroRetryTimer=null;this.zeroRetries=0;this.countTimers=new WeakMap;this.observedBodies=new WeakSet;this.observedImportantBodies=new WeakSet;this.plugin=t,this.cacheManager=new ve(t.app),this.syncActiveTab()}getGroups(){return this.plugin.settings.data.groups||[]}getTabsForGroup(e){let t=this.getGroups();return[...this.getTabs()].filter(s=>R(s,t)===e).sort((s,i)=>s.order-i.order)}syncActiveTab(){let e=this.getGroups();for(let s of e){let i=this.getTabsForGroup(s.id);if(i.length===0){delete this.activeTabByGroup[s.id];continue}let l=this.activeTabByGroup[s.id];(!l||!i.some(o=>o.id===l))&&(this.activeTabByGroup[s.id]=i[0].id)}e.length>0&&!e.some(s=>s.id===this.activeGroup)&&(this.activeGroup=e[0].id);let t=this.getTabsForGroup(this.activeGroup);this.activeTab=t.length>0?this.activeTabByGroup[this.activeGroup]??t[0].id:""}getViewType(){return U}getDisplayText(){return"TaskFlow"}getIcon(){return"checkmark"}async onOpen(){this.addAction("settings","TaskFlow settings",()=>{this.app.setting.open(),this.app.setting.openTabById("taskflow")}),this.buildShell(),await this.refresh(),this.registerVaultWatcher()}async onClose(){this.stopHeadClock(),this.statsTimer&&window.clearTimeout(this.statsTimer),this.contentTimer&&window.clearTimeout(this.contentTimer),this.clearZeroRetry(),this.unloadAllRenderComponents(),this.cacheManager.clear()}buildShell(){this.unloadAllRenderComponents();let e=this.containerEl.children[1];e.empty(),e.addClass("tasks-view-container"),this.groupBtns={},this.tabBtns={},this.tabPanels={},this.tabBodies={},this.tabCounts={},this.tabCollapsed={},this.tabGroups={},this.emptyGroupEl=null,this.emptyGroupTitleEl=null,this.stopHeadClock(),this.headTimeEl=null,this.headMetaEl=null,this.statsEl=null,this.statsChevron=null,this.toTodoEl=null,this.toDoneEl=null,this.toInProgressEl=null,this.toOverdueEl=null,this.toWeekEl=null,this.toRingTodayDial=null,this.toRingTodayText=null,this.toRingWeekDial=null,this.toRingWeekText=null,this.importantBodyEl=null,this.importantMoreEl=null,this.importantExpanded=!1,this.importantEmptyTimer&&(window.clearTimeout(this.importantEmptyTimer),this.importantEmptyTimer=null),this.syncActiveTab(),this.renderWorkbenchHead(e),this.headTimeEl&&this.startHeadClock();let t=e.createDiv({cls:"tasks-view-main"}),s=this.plugin.settings.data;if(s.showTodayOverview||s.showImportantReminders){let i=t.createDiv({cls:"tf-panels"});s.showTodayOverview&&this.renderTodayOverview(i),s.showImportantReminders&&this.renderImportantModule(i)}this.renderQuickAdd(t),this.renderGroupTabs(t),this.renderTabs(t),this.buildStatsShell(t)}renderWorkbenchHead(e){let t=this.plugin.settings.data,s=t.showCover??!0,i=t.showHeadText??!0;if(!s&&!i)return;let l=e.createDiv({cls:"tf-head"});l.toggleClass("is-cover-only",s&&!i),l.toggleClass("is-text-only",i&&!s),s&&this.renderCover(l),i&&this.renderHeadText(l)}renderHeadText(e){let t=this.plugin.settings.data,s=e.createDiv({cls:"tf-head-row"}),i=s.createDiv({cls:"tf-head-left"}),l=(t.workbenchTitle??"").trim()||H;i.createDiv({cls:"tf-head-title",text:l});let o=Be(t.workbenchSlogan);o&&i.createDiv({cls:"tf-head-slogan",text:o});let d=s.createDiv({cls:"tf-head-right"});this.headTimeEl=d.createDiv({cls:"tf-head-time"}),this.headMetaEl=d.createDiv({cls:"tf-head-meta"}),this.renderHeadClock()}renderHeadClock(){if(!this.headTimeEl||!this.headMetaEl)return;let e=new Date,t=Oe();this.headTimeEl.setText(Je(e,t));let s=t==="zh"?Ze(e):"";this.headMetaEl.setText(Xe(e,t)+(s?n("head.lunarSep")+s:""))}startHeadClock(){this.stopHeadClock(),this.headClockTimer=window.setInterval(()=>this.renderHeadClock(),Kt)}stopHeadClock(){this.headClockTimer!==null&&(window.clearInterval(this.headClockTimer),this.headClockTimer=null)}renderCover(e){let t=this.plugin.settings.data,s=e.createDiv({cls:"tf-head-cover"}),i=pe(this.app,t.coverImagePath);if(i||this.mountDefaultBanner(s),i){s.addClass("has-cover");let c=s.createEl("img",{cls:"tf-head-cover-img",attr:{alt:"",draggable:"false"}});c.src=this.app.vault.getResourcePath(i),this.applyCoverPosition(c,t.coverPosition),c.addEventListener("error",()=>{c.remove(),s.removeClass("has-cover"),this.mountDefaultBanner(s)}),this.bindCoverDrag(c,s)}let l=s.createDiv({cls:"tf-head-cover-bar"}),o=s.createEl("input",{cls:"tf-head-cover-file",attr:{type:"file",accept:"image/*"}});o.addEventListener("change",()=>void this.onCoverPicked(o)),l.createEl("button",{cls:"tf-head-cover-btn",text:i?n("head.changeBanner"):n("head.uploadBanner"),attr:{type:"button"}}).addEventListener("click",()=>o.click()),i&&l.createEl("button",{cls:"tf-head-cover-btn",text:n("common.remove"),attr:{type:"button"}}).addEventListener("click",()=>void this.onCoverRemoved())}mountDefaultBanner(e){if(e.querySelector(".tf-head-cover-default"))return;e.addClass("is-default-banner");let t=e.createDiv({cls:"tf-head-cover-default"});$(t,ze(n("banner.line")))||(console.error("[TaskFlow] \u9ED8\u8BA4\u6A2A\u5E45\u6E32\u67D3\u5931\u8D25"),e.removeClass("is-default-banner"),t.remove())}applyCoverPosition(e,t){e.style.setProperty("--tf-cover-pos",`${V(t)}%`)}bindCoverDrag(e,t){e.addEventListener("mousedown",s=>{if(s.button!==0)return;s.preventDefault();let i=this.plugin.settings.data,l=s.clientY,o=Math.max(1,t.getBoundingClientRect().height),d=V(i.coverPosition),c=!1,u=p=>{let g=p.clientY-l;!c&&Math.abs(g)<4||(c=!0,i.coverPosition=V(d-g/o*100),this.applyCoverPosition(e,i.coverPosition))},h=()=>{document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",h),c&&this.plugin.saveHeadSettings()};document.addEventListener("mousemove",u),document.addEventListener("mouseup",h)})}async onCoverPicked(e){let t=e.files?.[0];if(e.value="",!!t)try{await ue(this.plugin,t),new v.Notice(n("toast.bannerUpdated"))}catch(s){console.error("[TaskFlow] \u4FDD\u5B58\u6A2A\u5E45\u5931\u8D25:",s),new v.Notice(n("toast.bannerSaveFail")+(s instanceof Error?s.message:String(s)))}}async onCoverRemoved(){try{await he(this.plugin),new v.Notice(n("toast.bannerRemoved"))}catch(e){console.error("[TaskFlow] \u79FB\u9664\u6A2A\u5E45\u5931\u8D25:",e),new v.Notice(n("toast.bannerRemoveFail")+(e instanceof Error?e.message:String(e)))}}renderGroupTabs(e){let s=e.createDiv({cls:"tasks-view-group-bar"}).createDiv({cls:"tasks-view-group-segment"});for(let i of this.getGroups()){let l=s.createEl("button",{cls:"tasks-view-group-btn"+(this.activeGroup===i.id?" is-active":""),attr:{title:i.label}});(0,v.setIcon)(l.createSpan("tasks-view-group-icon"),i.icon),l.createSpan({cls:"tasks-view-group-label",text:i.label}),l.addEventListener("click",()=>this.switchGroup(i.id)),this.groupBtns[i.id]=l}}switchGroup(e){if(e!==this.activeGroup){this.activeGroup=e,this.syncActiveTab();for(let t of this.getGroups()){let s=this.groupBtns[t.id];s&&s.toggleClass("is-active",t.id===e)}this.applyTabVisibility(),this.renderActiveTabGuarded()}}applyTabVisibility(){let e=!1;for(let t of Object.keys(this.tabBtns)){let s=this.tabGroups[t]===this.activeGroup,i=s&&t===this.activeTab;s&&(e=!0);let l=this.tabBtns[t];l&&(l.toggleClass("is-hidden",!s),l.toggleClass("is-active",i));let o=this.tabPanels[t];o&&o.toggleClass("is-hidden",!i)}this.emptyGroupEl&&this.emptyGroupEl.toggleClass("is-hidden",e),this.updateEmptyGroupLabel()}renderTabs(e){let t=this.getGroups(),s=[...this.getTabs()].sort((d,c)=>d.order-c.order),l=e.createDiv({cls:"tasks-view-tab-bar"}).createDiv({cls:"tasks-view-tab-segment"}),o=e.createDiv({cls:"tasks-view-tab-panels"});for(let d of s){let c=R(d,t);this.tabGroups[d.id]=c;let u=l.createEl("button",{cls:"tasks-view-tab-btn",text:I(d)});u.addEventListener("click",()=>this.switchTab(d.id)),this.tabBtns[d.id]=u,this.tabCollapsed[d.id]=!1;let h=o.createDiv({cls:"tasks-view-tab-panel tasks-view-scroll"});this.tabPanels[d.id]=h;let p={...d,showSectionHeader:d.showSectionHeader??!0};this.buildTabSection(h,p)}this.emptyGroupEl=o.createDiv({cls:"tasks-view-empty-group"}),this.emptyGroupEl.createDiv({cls:"tasks-view-empty-group-icon",text:"\u{1F5C2}"}),this.emptyGroupTitleEl=this.emptyGroupEl.createDiv({cls:"tasks-view-empty-group-title"}),this.emptyGroupEl.createDiv({cls:"tasks-view-empty-group-desc",text:n("empty.noTabsHint")}),this.applyTabVisibility()}updateEmptyGroupLabel(){if(!this.emptyGroupTitleEl)return;let e=this.getGroups().find(t=>t.id===this.activeGroup)?.label??n("common.thisGroup");this.emptyGroupTitleEl.setText(n("view.empty.noTabsInGroup",{name:e}))}buildTabSection(e,t){let s=e.createDiv({cls:"tasks-view-section"}),i=s.createDiv({cls:"tasks-view-section-header"}),l=i.createDiv({cls:"tasks-view-section-chevron"});(0,v.setIcon)(l,"chevron-down"),i.createSpan({cls:"tasks-view-section-title",text:I(t)});let o=i.createSpan({cls:"tasks-view-section-count",text:"0"});this.tabCounts[t.id]=o;let d=s.createDiv({cls:"tasks-view-section-body"});this.tabBodies[t.id]=d,this.observeBody(d,t),t.showSectionHeader?i.addEventListener("click",()=>{let c=this.tabCollapsed[t.id]??!1;this.tabCollapsed[t.id]=!c,d.toggleClass("is-collapsed",!c),(0,v.setIcon)(l,c?"chevron-down":"chevron-right")}):i.addClass("is-hidden")}switchTab(e){e!==this.activeTab&&(this.activeTab=e,this.activeTabByGroup[this.activeGroup]=e,this.applyTabVisibility(),this.renderActiveTabGuarded())}async refresh(){if(this.refreshBusy){this.refreshQueued=!0;return}this.refreshBusy=!0;try{await this.runRefresh()}finally{this.refreshBusy=!1}this.refreshQueued&&(this.refreshQueued=!1,this.refresh())}async runRefresh(){let e="own";try{let t=await this.getVaultTasks();this.statTasks=t.tasks,e=t.source}catch(t){console.error("[TaskFlow] \u83B7\u53D6\u4EFB\u52A1\u5931\u8D25\uFF0C\u6CBF\u7528\u4E0A\u4E00\u6B21\u7ED3\u679C:",t),this.statTasks=this.statTasks??[]}this.statTasks.length>0?this.clearZeroRetry():(console.warn(`[TaskFlow] \u7EDF\u8BA1\u5230 0 \u4E2A\u4EFB\u52A1\uFF08\u6570\u636E\u6765\u81EA${e==="tasks"?"Tasks \u63D2\u4EF6":"\u81EA\u5E26\u626B\u63CF"}\uFF09 \u2014\u2014 \u82E5 vault \u91CC\u786E\u5B9E\u6709\u4EFB\u52A1\uFF0C\u8BF7\u786E\u8BA4 Tasks \u63D2\u4EF6\u5DF2\u542F\u7528\uFF0C\u4E14\u5B83\u7684 Global Filter / Global Query \u6CA1\u6709\u628A\u4EFB\u52A1\u8FC7\u6EE4\u6389\u3002`),this.scheduleZeroRetry());try{await this.renderQueries()}catch(t){console.error("[TaskFlow] \u6E32\u67D3\u67E5\u8BE2\u5931\u8D25:",t)}try{await this.renderImportantReminders()}catch(t){console.error("[TaskFlow] \u6E32\u67D3\u91CD\u8981\u63D0\u9192\u5931\u8D25:",t)}this.updateStats()}scheduleRefresh(){this.statsTimer&&window.clearTimeout(this.statsTimer),this.statsTimer=window.setTimeout(()=>void this.refreshStats(),jt),this.contentTimer&&window.clearTimeout(this.contentTimer),this.contentTimer=window.setTimeout(()=>void this.refreshContent(),it)}scheduleZeroRetry(){if(this.zeroRetries>=nt.length)return;let e=nt[this.zeroRetries];this.zeroRetries++,this.zeroRetryTimer&&window.clearTimeout(this.zeroRetryTimer),this.zeroRetryTimer=window.setTimeout(()=>{this.zeroRetryTimer=null,this.refresh()},e)}clearZeroRetry(){this.zeroRetryTimer&&(window.clearTimeout(this.zeroRetryTimer),this.zeroRetryTimer=null),this.zeroRetries=0}async refreshStats(){if(!this.refreshBusy){this.refreshBusy=!0;try{try{let e=await this.getVaultTasks();this.statTasks=e.tasks,e.tasks.length>0&&this.clearZeroRetry()}catch(e){console.error("[TaskFlow] \u83B7\u53D6\u4EFB\u52A1\u5931\u8D25\uFF0C\u6CBF\u7528\u4E0A\u4E00\u6B21\u7ED3\u679C:",e),this.statTasks=this.statTasks??[]}this.updateStats()}finally{this.refreshBusy=!1}}}async refreshContent(){if(this.refreshBusy){this.contentTimer&&window.clearTimeout(this.contentTimer),this.contentTimer=window.setTimeout(()=>void this.refreshContent(),it);return}this.refreshBusy=!0;try{await this.renderQueries()}catch(e){console.error("[TaskFlow] \u6E32\u67D3\u67E5\u8BE2\u5931\u8D25:",e)}try{await this.renderImportantReminders()}catch(e){console.error("[TaskFlow] \u6E32\u67D3\u91CD\u8981\u63D0\u9192\u5931\u8D25:",e)}finally{this.refreshBusy=!1}}freshRenderComponent(e){let t=this.renderComponents.get(e);if(t){try{t.unload()}catch(i){console.error(`[TaskFlow] \u5378\u8F7D\u65E7\u6E32\u67D3\u7EC4\u4EF6\u5931\u8D25\uFF08${e}\uFF09:`,i)}this.renderComponents.delete(e)}let s=new v.Component;return s.load(),this.renderComponents.set(e,s),s}pruneRenderComponents(e){for(let[t,s]of[...this.renderComponents])if(!e.has(t)){try{s.unload()}catch(i){console.error(`[TaskFlow] \u5378\u8F7D\u6E32\u67D3\u7EC4\u4EF6\u5931\u8D25\uFF08${t}\uFF09:`,i)}this.renderComponents.delete(t)}}unloadAllRenderComponents(){for(let[e,t]of[...this.renderComponents])try{t.unload()}catch(s){console.error(`[TaskFlow] \u5378\u8F7D\u6E32\u67D3\u7EC4\u4EF6\u5931\u8D25\uFF08${e}\uFF09:`,s)}this.renderComponents.clear()}async renderQueries(){let e=++this.renderEpoch,t=this.getTabs().find(i=>i.id===this.activeTab);if(!t)return;let s=this.tabBodies[t.id];if(s){this.observeBody(s,t);try{s.empty();let i=s.parentElement;i&&i.removeClass("tasks-view-empty-state");let l="tab:"+t.id,o=this.freshRenderComponent(l);this.pruneRenderComponents(new Set([l,"important"]));let d=performance.now();await v.MarkdownRenderer.render(this.app,"```tasks\n"+t.query+"\n```",s,"",o);let c=performance.now()-d;if(c>ot&&console.warn(`[TaskFlow] Tab\u300C${I(t)}\u300D\u6E32\u67D3\u8017\u65F6 ${c.toFixed(0)}ms\uFF08\u8D85\u8FC7 ${ot}ms\uFF0C\u591A\u534A\u662F\u8FD9\u6761 query \u592A\u91CD\uFF09: -${t.query}`),e!==this.renderEpoch)return}catch(i){if(console.error(`[TaskFlow] Tab\u300C${t.label}\u300D\u6E32\u67D3\u5931\u8D25:`,i),e!==this.renderEpoch)return;this.renderEmptyState(s,t)}}}async renderActiveTabGuarded(){if(this.refreshBusy){this.refreshQueued=!0;return}this.refreshBusy=!0;try{await this.renderQueries()}catch(e){console.error("[TaskFlow] \u6E32\u67D3\u6FC0\u6D3B tab \u5931\u8D25:",e)}finally{this.refreshBusy=!1}this.refreshQueued&&(this.refreshQueued=!1,this.refresh())}observeBody(e,t){if(this.observedBodies.has(e))return;this.observedBodies.add(e);let s=()=>{if(this.scheduleCount(t.id,e),e.querySelector(".task-list-item")){let d=this.emptyTimers.get(e);d&&(window.clearTimeout(d),this.emptyTimers.delete(e)),this.removeEmptyState(e),this.scheduleCount(t.id,e);return}if(e.parentElement?.querySelector(".tasks-view-empty"))return;let l=this.emptyTimers.get(e);l&&window.clearTimeout(l);let o=window.setTimeout(()=>{this.emptyTimers.delete(e),!e.querySelector(".task-list-item")&&this.renderEmptyState(e,t)},tt);this.emptyTimers.set(e,o)};new MutationObserver(s).observe(e,{childList:!0,subtree:!0})}async getVaultTasks(){let e=zt(this.app)[0],t=e?.getTasks,s=null;if(typeof t=="function")try{let o=t.call(e);Array.isArray(o)&&(s=o.map(d=>{let c=d;return{statusType:c.status?.type??"TODO",due:Re(c.dueDate),doneDate:Re(c.doneDate)}}))}catch(o){console.error("[TaskFlow] \u8C03\u7528 Tasks.getTasks() \u5931\u8D25\uFF0C\u56DE\u9000\u5230\u81EA\u5E26\u626B\u63CF:",o)}if(s&&s.length>0)return{tasks:s,source:"tasks"};let i=await this.cacheManager.getAllTasks(this.plugin.settings.data),l=rt(i).map(o=>({statusType:$t[o.status]??"TODO",due:Re(o.due),doneDate:o.completionDate??null}));return s&&console.warn(`[TaskFlow] Tasks.getTasks() \u8FD4\u56DE 0 \u4E2A\u4EFB\u52A1\uFF0C\u5DF2\u56DE\u9000\u5230\u81EA\u5E26\u626B\u63CF\uFF08\u626B\u5230 ${l.length} \u4E2A\uFF09\u3002\u82E5 vault \u91CC\u786E\u5B9E\u6709\u4EFB\u52A1\uFF0C\u8BF7\u68C0\u67E5 Tasks \u7684 Global Filter / Global Query \u662F\u5426\u628A\u5B83\u4EEC\u8FC7\u6EE4\u6389\u4E86\u3002`),{tasks:l,source:"own"}}updateStats(){let e=0,t=0,s=0,i=0,l=0,o=0,d=0,c=0,u=0,h=Qt(),p=Yt(h),g=lt(p,6);for(let f of this.statTasks){let q=f.statusType==="DONE",xe=f.statusType==="CANCELLED",b=f.statusType!=="NON_TASK"&&f.statusType!=="EMPTY";switch(f.statusType){case"IN_PROGRESS":t++;break;case"DONE":l++;break;case"CANCELLED":i++;break;case"TODO":case"ON_HOLD":s++;break}b&&!q&&!xe&&f.due!==null&&f.due=p&&f.due<=g&&c++),q&&f.doneDate!==null&&(f.doneDate===h&&d++,f.doneDate>=p&&f.doneDate<=g&&u++)}let T=this.statTasks.filter(f=>f.statusType!=="NON_TASK"&&f.statusType!=="EMPTY").length,m=T-i,x=l+t*.5,L=m>0?Math.round(x/m*100):0;this.progressFill&&(this.progressFill.style.width=`${L}%`),this.statsPct&&this.statsPct.setText(`${L}%`),this.pillOverdue&&this.pillOverdue.setText(String(e)),this.pillInProgress&&this.pillInProgress.setText(String(t)),this.pillTodo&&this.pillTodo.setText(String(s)),this.pillCancel&&this.pillCancel.setText(String(i)),this.pillDone&&this.pillDone.setText(String(l)),this.pillTotal&&this.pillTotal.setText(String(T));let F=d+o,K=u+c,O=F>0?Math.round(d/F*100):null,j=K>0?Math.round(u/K*100):null;this.toTodoEl&&this.toTodoEl.setText(String(o)),this.toDoneEl&&this.toDoneEl.setText(String(d)),this.toInProgressEl&&this.toInProgressEl.setText(String(t)),this.toOverdueEl&&(this.toOverdueEl.setText(String(e)),this.toOverdueEl.parentElement?.toggleClass("is-alert",e>0)),this.toWeekEl&&this.toWeekEl.setText(String(u)),this.toRingTodayDial&&this.toRingTodayText&&(this.toRingTodayDial.style.setProperty("--p",String(O??0)),this.toRingTodayText.setText(O===null?"\u2014":`${O}%`)),this.toRingWeekDial&&this.toRingWeekText&&(this.toRingWeekDial.style.setProperty("--p",String(j??0)),this.toRingWeekText.setText(j===null?"\u2014":`${j}%`))}updateTabCount(e,t){let s=this.tabCounts[e];s&&s.setText(String(t.querySelectorAll(".task-list-item").length))}scheduleCount(e,t){let s=this.countTimers.get(t);s&&window.clearTimeout(s),this.countTimers.set(t,window.setTimeout(()=>this.updateTabCount(e,t),Zt))}removeEmptyState(e){let t=e.parentElement??e,s=t.querySelector(".tasks-view-empty");s&&s.remove(),t.removeClass("tasks-view-empty-state")}renderEmptyState(e,t){let s=e.parentElement??e;if(s.querySelector(".tasks-view-empty"))return;s.classList.add("tasks-view-empty-state");let i=s.createDiv({cls:"tasks-view-empty"});i.createDiv({cls:"tasks-view-empty-icon"}).textContent="\u{1F4ED}",i.createEl("h3",{cls:"tasks-view-empty-title",text:n("empty.noTasks")}),i.createEl("p",{cls:"tasks-view-empty-desc",text:n("view.empty.noMatch",{label:I(t)})}),i.createEl("button",{cls:"tasks-view-empty-btn tf-btn tf-btn-primary",text:n("empty.newTask")}).addEventListener("click",()=>{let o=this.containerEl.querySelector(".tasks-view-quick-add-input");o&&o.focus()}),this.updateTabCount(t.id,e)}registerVaultWatcher(){this.registerEvent(this.app.vault.on("modify",async e=>{!(e instanceof v.TFile)||e.extension!=="md"||this.scheduleRefresh()})),this.registerEvent(this.app.vault.on("rename",(e,t)=>{e instanceof v.TFile&&e.extension==="md"&&this.cacheManager.migrateCacheKey(t,e.path)}))}renderQuickAdd(e){let s=e.createDiv({cls:"tasks-view-quick-add"}).createDiv({cls:"tasks-view-quick-add-top"}),i=s.createEl("input",{cls:"tasks-view-quick-add-input",attr:{placeholder:"Add to inbox\u2026",type:"text"}}),l=s.createEl("button",{cls:"tasks-view-settings-btn",attr:{"aria-label":"TaskFlow settings"}});(0,v.setIcon)(l,"settings"),l.addEventListener("click",()=>{this.app.setting.open(),this.app.setting.openTabById("taskflow")}),i.addEventListener("keydown",o=>{if(o.key==="Enter"){let d=i.value.trim();d&&(this.addToInbox(d),i.value="")}else o.key==="Escape"&&(i.value="",i.blur())})}getShortFileName(e){let t=e.split("/");return t[t.length-1]||e}async addToInbox(e){let{inboxFilePath:t}=this.plugin.settings.data,s=this.app.vault;try{let i=s.getFileByPath(t);i||(i=await s.create(t,""));let l=await s.read(i),o=`- [ ] ${e}`,d=l.endsWith(` -`)||l===""?l+o+` -`:l+` -`+o+` -`;await s.modify(i,d),this.showQuickAddFeedback(!0,"Task added successfully")}catch(i){console.error("[TaskFlow] Failed to add task to inbox:",i),this.showQuickAddFeedback(!1,`Failed: ${i instanceof Error?i.message:"Unknown error"}`)}}showQuickAddFeedback(e,t){let s=this.containerEl.querySelector(".tasks-view-quick-add-input");if(!s)return;let i=s.parentElement?.parentElement;if(!i)return;let l=i.style;l.position!=="relative"&&l.position!=="absolute"&&i.setCssProps({position:"relative"});let o=createDiv();o.className=`tasks-view-quick-add-feedback ${e?"success":"error"}`,o.textContent=t,o.style.cssText=` +limit 10`,showSectionHeader:!1,order:this.plugin.settings.data.globalTabs.length+1,group:a};H.launch(new se(this.plugin.app,this.plugin,e,t=>{this.plugin.settings.data.globalTabs.push(t),this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(o("toast.tabCreated"),"success")})},!0),o("modal.newTabDialog"))}openGroupEditModal(a){let e=new ae(this.plugin.app,a,t=>{let s=this.plugin.settings.data.groups.findIndex(i=>i.id===a.id);s!==-1&&(this.plugin.settings.data.groups[s]=t,this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(o("toast.groupUpdated"),"success")}))});H.launch(e,o("modal.editGroupDialog"))}openAddGroupModal(){let a=new ae(this.plugin.app,{id:"",label:"",icon:"folder"},e=>{let t=e.id.toLowerCase().replace(/[^a-z0-9]/g,"-"),s=t,i=1;for(;this.plugin.settings.data.groups.some(r=>r.id===s);)s=`${t}-${i}`,i++;e.id=s,this.plugin.settings.data.groups.push(e),this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(o("toast.groupCreated"),"success")})});H.launch(a,o("modal.newGroupDialog"))}},be=class extends D.PluginSettingTab{constructor(a,e){super(a,e),this.plugin=e,this.settingsManager=new Pe(e)}display(){let{containerEl:a}=this;a.empty(),a.addClass("taskflow-setting-tab"),this.settingsManager.constructUI(a,"TaskFlow Settings")}hide(){}};var v=require("obsidian");var Te=[19416,19168,42352,21717,53856,55632,91476,22176,39632,21970,19168,42422,42192,53840,119381,46400,54944,44450,38320,84343,18800,42160,46261,27216,27968,109396,11104,38256,21234,18800,25958,54432,59984,28309,23248,11104,100067,37600,116951,51536,54432,120998,46416,22176,107956,9680,37584,53938,43344,46423,27808,46416,86869,19872,42416,83315,21168,43432,59728,27296,44710,43856,19296,43748,42352,21088,62051,55632,23383,22176,38608,19925,19152,42192,54484,53840,54616,46400,46496,103846,38320,18864,43380,42160,45690,27216,27968,44870,43872,38256,19189,18800,25776,29859,59984,27480,21952,43872,38613,37600,51552,55636,54432,55888,30034,22176,43959,9680,37584,51893,43344,46240,47780,44368,21977,19360,42416,86390,21168,43312,31060,27296,44368,23378,19296,42726,42208,53856,60005,54576,23200,30371,38608,19195,19152,42192,118966,53840,54560,56645,46496,22224,21938,18864,42359,42160,43600,111189,27936,44448,84835,37744,18936,18800,25776,92326,59984,27424,108228,43744,41696,53987,51552,54615,54432,55888,23893,22176,42704,21972,21200,43448,43344,46240,46758,44368,21920,43940,42416,21168,45683,26928,29495,27296,44368,84821,19296,42352,21732,53600,59752,54560,55968,92838,22224,19168,43476,41680,53584,62034,54560],Ht=["\u6B63","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D","\u4E03","\u516B","\u4E5D","\u5341","\u51AC","\u814A"],At=["\u521D\u4E00","\u521D\u4E8C","\u521D\u4E09","\u521D\u56DB","\u521D\u4E94","\u521D\u516D","\u521D\u4E03","\u521D\u516B","\u521D\u4E5D","\u521D\u5341","\u5341\u4E00","\u5341\u4E8C","\u5341\u4E09","\u5341\u56DB","\u5341\u4E94","\u5341\u516D","\u5341\u4E03","\u5341\u516B","\u5341\u4E5D","\u4E8C\u5341","\u5EFF\u4E00","\u5EFF\u4E8C","\u5EFF\u4E09","\u5EFF\u56DB","\u5EFF\u4E94","\u5EFF\u516D","\u5EFF\u4E03","\u5EFF\u516B","\u5EFF\u4E5D","\u4E09\u5341"],Ot=["\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"],Nt=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Bt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function ve(n){return String(n).padStart(2,"0")}function _t(n){let a=Te[n-1900],e=348;for(let t=32768;t>8;t>>=1)a&t&&(e+=1);return e+Xe(n)}function Xe(n){return Je(n)?Te[n-1900]&65536?30:29:0}function Je(n){return Te[n-1900]&15}function Vt(n,a){return Te[n-1900]&65536>>a?30:29}function Ut(n){let a=Je(n),e=[];for(let t=1;t<=12;t++)e.push({month:t,leap:!1,days:Vt(n,t)}),t===a&&e.push({month:t,leap:!0,days:Xe(n)});return e}function et(n){let a=n.getFullYear(),e=n.getMonth()+1,t=n.getDate();if(a<1900||a>2100)return"";let s=Math.round((Date.UTC(a,e-1,t)-Date.UTC(1900,0,31))/864e5),i=1900;for(;i<2101;){let r=_t(i);if(s30?"":(r.leap?"\u95F0":"")+Ht[r.month-1]+"\u6708"+At[l-1]}s-=r.days}return""}function tt(n,a){return(a==="en"?Nt:Ot)[n.getDay()]??""}function st(n,a){let e=ve(n.getHours())+":"+ve(n.getMinutes());return a==="en"?`${Bt[n.getMonth()]??""} ${n.getDate()}, ${n.getFullYear()} ${e}`:n.getFullYear()+"/"+ve(n.getMonth()+1)+"/"+ve(n.getDate())+" "+e}var qt={" ":"todo","/":"in-progress",x:"done",X:"done",">":"migrated","-":"cancel",p:"pending",w:"waiting"},Wt=/^(\s*)- \[(.)\] (.*)$/,zt=/(\d{4}-\d{2}-\d{2})/,$t=[{emoji:"\u23F3",key:"scheduled"},{emoji:"\u{1F4C5}",key:"due"},{emoji:"\u{1F6EB}",key:"startDate"},{emoji:"\u2705",key:"completionDate"},{emoji:"\u2795",key:"createdDate"}];function Qt(n,a,e){let t=Wt.exec(n);if(!t)return null;let s=t[1]??"",i=t[2]??" ",r=t[3]??"",l=qt[i]??"todo",c={file:a,line:e,indent:s.length,status:l,description:r,scheduled:null,due:null,recurrence:null,priority:"normal",startDate:null,completionDate:null,createdDate:null,taskId:null,dependsOn:null,heading:null,children:[]};for(let{emoji:p,key:g}of $t){let T=r.indexOf(p);if(T!==-1){let m=r.slice(T+p.length).trimStart(),x=zt.exec(m);x&&x[1]&&(c[g]=x[1])}}let d=r.indexOf("\u{1F501}");if(d!==-1){let p=r.slice(d+2).trim(),g=p.search(/[⏳📅🛫✅➕⏫🔼🔽⬇🆔⛔]/gu);c.recurrence=g===-1?p:p.slice(0,g).trim()}r.includes("\u23EB")?c.priority="highest":r.includes("\u{1F53C}")?c.priority="high":r.includes("\u{1F53D}")?c.priority="low":r.includes("\u2B07\uFE0F")&&(c.priority="lowest");let h=/🆔\s*(\S+)/.exec(r);h?.[1]&&(c.taskId=h[1]);let u=/⛔\s*(\S+)/.exec(r);return u?.[1]&&(c.dependsOn=u[1]),c.description=r.replace(/[⏳📅🛫✅➕]\s*\d{4}-\d{2}-\d{2}/gu,"").replace(/🔁[^⏳📅🛫✅➕⏫🔼🔽⬇🆔⛔]*/gu,"").replace(/[⏫🔼🔽⬇🆔⛔]\s*\S*/gu,"").replace(/\s{2,}/g," ").trim(),c}async function at(n,a){let e;try{e=await a.vault.read(n)}catch{return[]}let t=e.split(` +`),s=[],i=null;for(let r=0;rh.trim()).filter(h=>h.length>0),s=this.app.vault.getMarkdownFiles(),i=[],r=0,l=0;for(let h of s){if(this.isExcluded(h.path,t))continue;let u=h.path,p=this.cache.get(u),g=h.stat;if(p&&p.mtime===g.mtime)r++,i.push(...this.cloneTasks(p.tasks));else{l++;let m=await this.getFileTasks(h);m.length>0&&i.push(...m)}}this.cleanupCache(s.map(h=>h.path));let c=performance.now()-e,d=this.getStats();return this.debug&&this.log(`[ScanCache] Loaded ${i.length} tasks (cache: ${r} hits, ${l} misses, ${d.cachedFiles} stored) in ${c.toFixed(1)}ms`),i}cloneTasks(a){return a.map(e=>({...e,children:this.cloneTasks(e.children)}))}async getFileTasks(a){try{let t=a.stat.mtime,s=a.path,i=this.cache.get(s);if(i&&i.mtime===t)return this.debug&&this.log(`[Cache] HIT: ${a.path}`),this.cloneTasks(i.tasks);this.debug&&this.log(`[Cache] MISS: ${a.path}`);let r=await at(a,this.app),l=this.buildTaskHierarchy(r);if(this.cache.size>=this.maxSize){let c=this.cache.keys().next().value;c&&(this.cache.delete(c),this.debug&&this.log(`[Cache] Evicted: ${c}`))}return this.cache.set(s,{file:a,mtime:t,tasks:l}),l}catch(e){return console.warn("[ScanCache] Failed to process file, skipping:",a.path,e),[]}}buildTaskHierarchy(a){let e=[],t=[];for(let s of a){for(;t.length>0&&(t[t.length-1]?.indent??0)>=s.indent;)t.pop();let i=t[t.length-1];i?i.children.push(s):e.push(s),t.push(s)}return e}migrateCacheKey(a,e){if(this.cache.has(a)){let t=this.cache.get(a);this.cache.delete(a),this.cache.set(e,t),this.debug&&this.log(`[Cache] Renamed: ${a} -> ${e}`)}}cleanupCache(a){let e=new Set(a),t=0;for(let s of this.cache.keys())e.has(s)||(this.cache.delete(s),t++);this.debug&&t>0&&this.log(`[Cache] Cleaned up ${t} stale entries`)}log(a){console.warn(a)}isExcluded(a,e){return e.some(t=>{let s=t.trim();return s.length>0&&a.startsWith(s+"/")})}getStats(){return{cachedFiles:this.cache.size,parsedFiles:0}}clear(){this.cache.clear()}get size(){return this.cache.size}};var V="taskflow-view",it=250,ot="obsidian-tasks-plugin";function Yt(n){let a=n.plugins;return[a.plugins[ot],a[ot]].filter(t=>typeof t?.getTasks=="function")}var Kt={todo:"TODO","in-progress":"IN_PROGRESS",done:"DONE",cancel:"CANCELLED",migrated:"TODO",pending:"TODO",waiting:"TODO"};function Ge(n){if(!n)return null;if(typeof n=="string")return n;let a=n;return typeof a.format=="function"?a.format("YYYY-MM-DD"):null}function dt(n){return n.flatMap(a=>[a,...dt(a.children)])}function jt(){let n=new Date,a=n.getFullYear(),e=String(n.getMonth()+1).padStart(2,"0"),t=String(n.getDate()).padStart(2,"0");return`${a}-${e}-${t}`}function nt(n){return String(n).padStart(2,"0")}function pt(n,a){let e=n.split("-").map(Number),t=e[0]??0,s=e[1]??1,i=e[2]??1,r=new Date(t,s-1,i+a);return`${r.getFullYear()}-${nt(r.getMonth()+1)}-${nt(r.getDate())}`}function Zt(n){let a=n.split("-").map(Number),e=a[0]??0,t=a[1]??1,s=a[2]??1,i=(new Date(e,t-1,s).getDay()+6)%7;return pt(n,-i)}var Xt=3e4,Jt=400,rt=1200,es=40,lt=[800,2e3,5e3],ct=1500,ye=class extends v.ItemView{constructor(e,t){super(e);this.statTasks=[];this.activeGroup="gtd";this.activeTab="gtd-inbox";this.activeTabByGroup={};this.selectedGroupNotePaths={};this.groupNoteSelectorEl=null;this.groupBtns={};this.tabBtns={};this.tabPanels={};this.tabBodies={};this.tabCounts={};this.tabCollapsed={};this.tabGroups={};this.emptyGroupEl=null;this.emptyGroupTitleEl=null;this.renderEpoch=0;this.emptyTimers=new WeakMap;this.renderComponents=new Map;this.statsEl=null;this.statsChevron=null;this.progressFill=null;this.statsPct=null;this.pillOverdue=null;this.pillInProgress=null;this.pillTodo=null;this.pillCancel=null;this.pillDone=null;this.pillTotal=null;this.toTodoEl=null;this.toDoneEl=null;this.toInProgressEl=null;this.toOverdueEl=null;this.toWeekEl=null;this.toRingTodayDial=null;this.toRingTodayText=null;this.toRingWeekDial=null;this.toRingWeekText=null;this.importantBodyEl=null;this.importantMoreEl=null;this.importantExpanded=!1;this.importantEmptyTimer=null;this.headTimeEl=null;this.headMetaEl=null;this.headClockTimer=null;this.refreshBusy=!1;this.refreshQueued=!1;this.statsTimer=null;this.contentTimer=null;this.zeroRetryTimer=null;this.zeroRetries=0;this.countTimers=new WeakMap;this.observedBodies=new WeakSet;this.observedImportantBodies=new WeakSet;this.plugin=t,this.cacheManager=new we(t.app),this.syncActiveTab()}getGroups(){return this.plugin.settings.data.groups||[]}getTabsForGroup(e){let t=this.getGroups();return[...this.getTabs()].filter(s=>I(s,t)===e).sort((s,i)=>s.order-i.order)}getGroupNoteFiles(e){let t=this.getGroups().find(i=>i.id===e),s=t?.frontmatterProperty?.trim();return s?this.app.vault.getMarkdownFiles().filter(i=>_e(le(this.app.metadataCache.getFileCache(i)?.frontmatter,s),t?.frontmatterValues)).sort((i,r)=>i.path.localeCompare(r.path)):[]}getSelectedGroupNote(e){let t=this.selectedGroupNotePaths[e];return this.getGroupNoteFiles(e).find(s=>s.path===t)}renderGroupNoteSelector(){let e=this.groupNoteSelectorEl;if(!e)return;e.empty();let t=this.getGroups().find(s=>s.id===this.activeGroup);t&&(t.frontmatterProperty?.trim()&&this.renderGroupNoteSelect(e,t),this.renderGroupLimitInput(e,t))}renderGroupLimitInput(e,t){let s=e.createEl("input",{cls:"tasks-view-group-limit-input",attr:{type:"number",min:"1",step:"1",placeholder:o("view.group.limit"),title:o("view.group.limitDesc"),"aria-label":o("view.group.limitDesc")}});s.value=t.taskLimit?String(t.taskLimit):"",s.addEventListener("change",()=>{let i=parseInt(s.value,10),r=Number.isFinite(i)&&i>0?i:void 0;s.value=r?String(r):"",r!==t.taskLimit&&(t.taskLimit=r,this.plugin.saveHeadSettings(),this.renderActiveTabGuarded())})}renderGroupNoteSelect(e,t){let s=this.getGroupNoteFiles(this.activeGroup),i=this.selectedGroupNotePaths[this.activeGroup];s.some(l=>l.path===i)||(i=s[0]?.path??"",this.selectedGroupNotePaths[this.activeGroup]=i);let r=e.createEl("select",{cls:"tasks-view-group-note-select",attr:{"aria-label":o("view.group.selectNote",{group:t.label})}});if(s.length===0){r.createEl("option",{text:o("view.group.noMatchingNotes")}),r.disabled=!0;return}for(let l of s)r.createEl("option",{text:l.path.replace(/\.md$/i,""),value:l.path});r.value=i,r.addEventListener("change",()=>{this.selectedGroupNotePaths[this.activeGroup]=r.value,this.renderActiveTabGuarded()})}syncActiveTab(){let e=this.getGroups();for(let s of e){let i=this.getTabsForGroup(s.id);if(i.length===0){delete this.activeTabByGroup[s.id];continue}let r=this.activeTabByGroup[s.id];(!r||!i.some(l=>l.id===r))&&(this.activeTabByGroup[s.id]=i[0].id)}e.length>0&&!e.some(s=>s.id===this.activeGroup)&&(this.activeGroup=e[0].id);let t=this.getTabsForGroup(this.activeGroup);this.activeTab=t.length>0?this.activeTabByGroup[this.activeGroup]??t[0].id:""}getViewType(){return V}getDisplayText(){return"TaskFlow"}getIcon(){return"checkmark"}async onOpen(){this.addAction("settings","TaskFlow settings",()=>{this.app.setting.open(),this.app.setting.openTabById("taskflow")}),this.buildShell(),await this.refresh(),this.registerVaultWatcher()}async onClose(){this.stopHeadClock(),this.statsTimer&&window.clearTimeout(this.statsTimer),this.contentTimer&&window.clearTimeout(this.contentTimer),this.clearZeroRetry(),this.unloadAllRenderComponents(),this.cacheManager.clear()}buildShell(){this.unloadAllRenderComponents();let e=this.containerEl.children[1];e.empty(),e.addClass("tasks-view-container"),this.groupBtns={},this.tabBtns={},this.tabPanels={},this.tabBodies={},this.tabCounts={},this.tabCollapsed={},this.tabGroups={},this.emptyGroupEl=null,this.emptyGroupTitleEl=null,this.stopHeadClock(),this.headTimeEl=null,this.headMetaEl=null,this.statsEl=null,this.statsChevron=null,this.toTodoEl=null,this.toDoneEl=null,this.toInProgressEl=null,this.toOverdueEl=null,this.toWeekEl=null,this.toRingTodayDial=null,this.toRingTodayText=null,this.toRingWeekDial=null,this.toRingWeekText=null,this.importantBodyEl=null,this.importantMoreEl=null,this.importantExpanded=!1,this.importantEmptyTimer&&(window.clearTimeout(this.importantEmptyTimer),this.importantEmptyTimer=null),this.syncActiveTab(),this.renderWorkbenchHead(e),this.headTimeEl&&this.startHeadClock();let t=e.createDiv({cls:"tasks-view-main"}),s=this.plugin.settings.data;if(s.showTodayOverview||s.showImportantReminders){let i=t.createDiv({cls:"tf-panels"});s.showTodayOverview&&this.renderTodayOverview(i),s.showImportantReminders&&this.renderImportantModule(i)}this.renderQuickAdd(t),this.renderGroupTabs(t),this.renderTabs(t),this.buildStatsShell(t)}renderWorkbenchHead(e){let t=this.plugin.settings.data,s=t.showCover??!0,i=t.showHeadText??!0;if(!s&&!i)return;let r=e.createDiv({cls:"tf-head"});r.toggleClass("is-cover-only",s&&!i),r.toggleClass("is-text-only",i&&!s),s&&this.renderCover(r),i&&this.renderHeadText(r)}renderHeadText(e){let t=this.plugin.settings.data,s=e.createDiv({cls:"tf-head-row"}),i=s.createDiv({cls:"tf-head-left"}),r=(t.workbenchTitle??"").trim()||P;i.createDiv({cls:"tf-head-title",text:r});let l=Ve(t.workbenchSlogan);l&&i.createDiv({cls:"tf-head-slogan",text:l});let c=s.createDiv({cls:"tf-head-right"});this.headTimeEl=c.createDiv({cls:"tf-head-time"}),this.headMetaEl=c.createDiv({cls:"tf-head-meta"}),this.renderHeadClock()}renderHeadClock(){if(!this.headTimeEl||!this.headMetaEl)return;let e=new Date,t=Ne();this.headTimeEl.setText(st(e,t));let s=t==="zh"?et(e):"";this.headMetaEl.setText(tt(e,t)+(s?o("head.lunarSep")+s:""))}startHeadClock(){this.stopHeadClock(),this.headClockTimer=window.setInterval(()=>this.renderHeadClock(),Xt)}stopHeadClock(){this.headClockTimer!==null&&(window.clearInterval(this.headClockTimer),this.headClockTimer=null)}renderCover(e){let t=this.plugin.settings.data,s=e.createDiv({cls:"tf-head-cover"}),i=he(this.app,t.coverImagePath);if(i||this.mountDefaultBanner(s),i){s.addClass("has-cover");let d=s.createEl("img",{cls:"tf-head-cover-img",attr:{alt:"",draggable:"false"}});d.src=this.app.vault.getResourcePath(i),this.applyCoverPosition(d,t.coverPosition),d.addEventListener("error",()=>{d.remove(),s.removeClass("has-cover"),this.mountDefaultBanner(s)}),this.bindCoverDrag(d,s)}let r=s.createDiv({cls:"tf-head-cover-bar"}),l=s.createEl("input",{cls:"tf-head-cover-file",attr:{type:"file",accept:"image/*"}});l.addEventListener("change",()=>void this.onCoverPicked(l)),r.createEl("button",{cls:"tf-head-cover-btn",text:i?o("head.changeBanner"):o("head.uploadBanner"),attr:{type:"button"}}).addEventListener("click",()=>l.click()),i&&r.createEl("button",{cls:"tf-head-cover-btn",text:o("common.remove"),attr:{type:"button"}}).addEventListener("click",()=>void this.onCoverRemoved())}mountDefaultBanner(e){if(e.querySelector(".tf-head-cover-default"))return;e.addClass("is-default-banner");let t=e.createDiv({cls:"tf-head-cover-default"});$(t,Ye(o("banner.line")))||(console.error("[TaskFlow] \u9ED8\u8BA4\u6A2A\u5E45\u6E32\u67D3\u5931\u8D25"),e.removeClass("is-default-banner"),t.remove())}applyCoverPosition(e,t){e.style.setProperty("--tf-cover-pos",`${W(t)}%`)}bindCoverDrag(e,t){e.addEventListener("mousedown",s=>{if(s.button!==0)return;s.preventDefault();let i=this.plugin.settings.data,r=s.clientY,l=Math.max(1,t.getBoundingClientRect().height),c=W(i.coverPosition),d=!1,h=p=>{let g=p.clientY-r;!d&&Math.abs(g)<4||(d=!0,i.coverPosition=W(c-g/l*100),this.applyCoverPosition(e,i.coverPosition))},u=()=>{document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",u),d&&this.plugin.saveHeadSettings()};document.addEventListener("mousemove",h),document.addEventListener("mouseup",u)})}async onCoverPicked(e){let t=e.files?.[0];if(e.value="",!!t)try{await ge(this.plugin,t),new v.Notice(o("toast.bannerUpdated"))}catch(s){console.error("[TaskFlow] \u4FDD\u5B58\u6A2A\u5E45\u5931\u8D25:",s),new v.Notice(o("toast.bannerSaveFail")+(s instanceof Error?s.message:String(s)))}}async onCoverRemoved(){try{await me(this.plugin),new v.Notice(o("toast.bannerRemoved"))}catch(e){console.error("[TaskFlow] \u79FB\u9664\u6A2A\u5E45\u5931\u8D25:",e),new v.Notice(o("toast.bannerRemoveFail")+(e instanceof Error?e.message:String(e)))}}renderGroupTabs(e){let t=e.createDiv({cls:"tasks-view-group-bar"}),s=t.createDiv({cls:"tasks-view-group-segment"});for(let i of this.getGroups()){let r=s.createEl("button",{cls:"tasks-view-group-btn"+(this.activeGroup===i.id?" is-active":""),attr:{title:i.label}});(0,v.setIcon)(r.createSpan("tasks-view-group-icon"),i.icon),r.createSpan({cls:"tasks-view-group-label",text:i.label}),r.addEventListener("click",()=>this.switchGroup(i.id)),this.groupBtns[i.id]=r}this.groupNoteSelectorEl=t.createDiv({cls:"tasks-view-group-note-selector"}),this.renderGroupNoteSelector()}switchGroup(e){if(e!==this.activeGroup){this.activeGroup=e,this.syncActiveTab();for(let t of this.getGroups()){let s=this.groupBtns[t.id];s&&s.toggleClass("is-active",t.id===e)}this.applyTabVisibility(),this.renderGroupNoteSelector(),this.renderActiveTabGuarded()}}applyTabVisibility(){let e=!1;for(let t of Object.keys(this.tabBtns)){let s=this.tabGroups[t]===this.activeGroup,i=s&&t===this.activeTab;s&&(e=!0);let r=this.tabBtns[t];r&&(r.toggleClass("is-hidden",!s),r.toggleClass("is-active",i));let l=this.tabPanels[t];l&&l.toggleClass("is-hidden",!i)}this.emptyGroupEl&&this.emptyGroupEl.toggleClass("is-hidden",e),this.updateEmptyGroupLabel()}renderTabs(e){let t=this.getGroups(),s=[...this.getTabs()].sort((c,d)=>c.order-d.order),r=e.createDiv({cls:"tasks-view-tab-bar"}).createDiv({cls:"tasks-view-tab-segment"}),l=e.createDiv({cls:"tasks-view-tab-panels"});for(let c of s){let d=I(c,t);this.tabGroups[c.id]=d;let h=r.createEl("button",{cls:"tasks-view-tab-btn",text:R(c)});h.addEventListener("click",()=>this.switchTab(c.id)),this.tabBtns[c.id]=h,this.tabCollapsed[c.id]=!1;let u=l.createDiv({cls:"tasks-view-tab-panel tasks-view-scroll"});this.tabPanels[c.id]=u;let p={...c,showSectionHeader:c.showSectionHeader??!0};this.buildTabSection(u,p)}this.emptyGroupEl=l.createDiv({cls:"tasks-view-empty-group"}),this.emptyGroupEl.createDiv({cls:"tasks-view-empty-group-icon",text:"\u{1F5C2}"}),this.emptyGroupTitleEl=this.emptyGroupEl.createDiv({cls:"tasks-view-empty-group-title"}),this.emptyGroupEl.createDiv({cls:"tasks-view-empty-group-desc",text:o("empty.noTabsHint")}),this.applyTabVisibility()}updateEmptyGroupLabel(){if(!this.emptyGroupTitleEl)return;let e=this.getGroups().find(t=>t.id===this.activeGroup)?.label??o("common.thisGroup");this.emptyGroupTitleEl.setText(o("view.empty.noTabsInGroup",{name:e}))}buildTabSection(e,t){let s=e.createDiv({cls:"tasks-view-section"}),i=s.createDiv({cls:"tasks-view-section-header"}),r=i.createDiv({cls:"tasks-view-section-chevron"});(0,v.setIcon)(r,"chevron-down"),i.createSpan({cls:"tasks-view-section-title",text:R(t)});let l=i.createSpan({cls:"tasks-view-section-count",text:"0"});this.tabCounts[t.id]=l;let c=s.createDiv({cls:"tasks-view-section-body"});this.tabBodies[t.id]=c,this.observeBody(c,t),t.showSectionHeader?i.addEventListener("click",()=>{let d=this.tabCollapsed[t.id]??!1;this.tabCollapsed[t.id]=!d,c.toggleClass("is-collapsed",!d),(0,v.setIcon)(r,d?"chevron-down":"chevron-right")}):i.addClass("is-hidden")}switchTab(e){e!==this.activeTab&&(this.activeTab=e,this.activeTabByGroup[this.activeGroup]=e,this.applyTabVisibility(),this.renderActiveTabGuarded())}async refresh(){if(this.refreshBusy){this.refreshQueued=!0;return}this.refreshBusy=!0;try{await this.runRefresh()}finally{this.refreshBusy=!1}this.refreshQueued&&(this.refreshQueued=!1,this.refresh())}async runRefresh(){let e="own";try{let t=await this.getVaultTasks();this.statTasks=t.tasks,e=t.source}catch(t){console.error("[TaskFlow] \u83B7\u53D6\u4EFB\u52A1\u5931\u8D25\uFF0C\u6CBF\u7528\u4E0A\u4E00\u6B21\u7ED3\u679C:",t),this.statTasks=this.statTasks??[]}this.statTasks.length>0?this.clearZeroRetry():(console.warn(`[TaskFlow] \u7EDF\u8BA1\u5230 0 \u4E2A\u4EFB\u52A1\uFF08\u6570\u636E\u6765\u81EA${e==="tasks"?"Tasks \u63D2\u4EF6":"\u81EA\u5E26\u626B\u63CF"}\uFF09 \u2014\u2014 \u82E5 vault \u91CC\u786E\u5B9E\u6709\u4EFB\u52A1\uFF0C\u8BF7\u786E\u8BA4 Tasks \u63D2\u4EF6\u5DF2\u542F\u7528\uFF0C\u4E14\u5B83\u7684 Global Filter / Global Query \u6CA1\u6709\u628A\u4EFB\u52A1\u8FC7\u6EE4\u6389\u3002`),this.scheduleZeroRetry());try{await this.renderQueries()}catch(t){console.error("[TaskFlow] \u6E32\u67D3\u67E5\u8BE2\u5931\u8D25:",t)}try{await this.renderImportantReminders()}catch(t){console.error("[TaskFlow] \u6E32\u67D3\u91CD\u8981\u63D0\u9192\u5931\u8D25:",t)}this.updateStats()}scheduleRefresh(){this.statsTimer&&window.clearTimeout(this.statsTimer),this.statsTimer=window.setTimeout(()=>void this.refreshStats(),Jt),this.contentTimer&&window.clearTimeout(this.contentTimer),this.contentTimer=window.setTimeout(()=>void this.refreshContent(),rt)}scheduleZeroRetry(){if(this.zeroRetries>=lt.length)return;let e=lt[this.zeroRetries];this.zeroRetries++,this.zeroRetryTimer&&window.clearTimeout(this.zeroRetryTimer),this.zeroRetryTimer=window.setTimeout(()=>{this.zeroRetryTimer=null,this.refresh()},e)}clearZeroRetry(){this.zeroRetryTimer&&(window.clearTimeout(this.zeroRetryTimer),this.zeroRetryTimer=null),this.zeroRetries=0}async refreshStats(){if(!this.refreshBusy){this.refreshBusy=!0;try{try{let e=await this.getVaultTasks();this.statTasks=e.tasks,e.tasks.length>0&&this.clearZeroRetry()}catch(e){console.error("[TaskFlow] \u83B7\u53D6\u4EFB\u52A1\u5931\u8D25\uFF0C\u6CBF\u7528\u4E0A\u4E00\u6B21\u7ED3\u679C:",e),this.statTasks=this.statTasks??[]}this.updateStats()}finally{this.refreshBusy=!1}}}async refreshContent(){if(this.refreshBusy){this.contentTimer&&window.clearTimeout(this.contentTimer),this.contentTimer=window.setTimeout(()=>void this.refreshContent(),rt);return}this.refreshBusy=!0;try{await this.renderQueries()}catch(e){console.error("[TaskFlow] \u6E32\u67D3\u67E5\u8BE2\u5931\u8D25:",e)}try{await this.renderImportantReminders()}catch(e){console.error("[TaskFlow] \u6E32\u67D3\u91CD\u8981\u63D0\u9192\u5931\u8D25:",e)}finally{this.refreshBusy=!1}}freshRenderComponent(e){let t=this.renderComponents.get(e);if(t){try{t.unload()}catch(i){console.error(`[TaskFlow] \u5378\u8F7D\u65E7\u6E32\u67D3\u7EC4\u4EF6\u5931\u8D25\uFF08${e}\uFF09:`,i)}this.renderComponents.delete(e)}let s=new v.Component;return s.load(),this.renderComponents.set(e,s),s}pruneRenderComponents(e){for(let[t,s]of[...this.renderComponents])if(!e.has(t)){try{s.unload()}catch(i){console.error(`[TaskFlow] \u5378\u8F7D\u6E32\u67D3\u7EC4\u4EF6\u5931\u8D25\uFF08${t}\uFF09:`,i)}this.renderComponents.delete(t)}}unloadAllRenderComponents(){for(let[e,t]of[...this.renderComponents])try{t.unload()}catch(s){console.error(`[TaskFlow] \u5378\u8F7D\u6E32\u67D3\u7EC4\u4EF6\u5931\u8D25\uFF08${e}\uFF09:`,s)}this.renderComponents.clear()}async renderQueries(){let e=++this.renderEpoch;this.renderGroupNoteSelector();let t=this.getTabs().find(c=>c.id===this.activeTab);if(!t)return;let s=this.tabBodies[t.id];if(!s)return;let i=this.getGroups().find(c=>c.id===this.activeGroup),r=!!i?.frontmatterProperty?.trim(),l=r?this.getSelectedGroupNote(this.activeGroup):void 0;this.observeBody(s,t);try{s.empty();let c=s.parentElement;c&&c.removeClass("tasks-view-empty-state");let d="tab:"+t.id,h=this.freshRenderComponent(d);if(this.pruneRenderComponents(new Set([d,"important"])),r&&!l){this.renderEmptyState(s,t);return}let u=i?.taskLimit,p=u?`${t.query} +limit ${u}`:t.query,g=performance.now();await v.MarkdownRenderer.render(this.app,"```tasks\n"+p+"\n```",s,l?.path??"",h);let T=performance.now()-g;if(T>ct&&console.warn(`[TaskFlow] Tab\u300C${R(t)}\u300D\u6E32\u67D3\u8017\u65F6 ${T.toFixed(0)}ms\uFF08\u8D85\u8FC7 ${ct}ms\uFF0C\u591A\u534A\u662F\u8FD9\u6761 query \u592A\u91CD\uFF09: +${t.query}`),e!==this.renderEpoch)return}catch(c){if(console.error(`[TaskFlow] Tab\u300C${t.label}\u300D\u6E32\u67D3\u5931\u8D25:`,c),e!==this.renderEpoch)return;this.renderEmptyState(s,t)}}async renderActiveTabGuarded(){if(this.refreshBusy){this.refreshQueued=!0;return}this.refreshBusy=!0;try{await this.renderQueries()}catch(e){console.error("[TaskFlow] \u6E32\u67D3\u6FC0\u6D3B tab \u5931\u8D25:",e)}finally{this.refreshBusy=!1}this.refreshQueued&&(this.refreshQueued=!1,this.refresh())}observeBody(e,t){if(this.observedBodies.has(e))return;this.observedBodies.add(e);let s=()=>{if(this.scheduleCount(t.id,e),e.querySelector(".task-list-item")){let c=this.emptyTimers.get(e);c&&(window.clearTimeout(c),this.emptyTimers.delete(e)),this.removeEmptyState(e),this.scheduleCount(t.id,e);return}if(e.parentElement?.querySelector(".tasks-view-empty"))return;let r=this.emptyTimers.get(e);r&&window.clearTimeout(r);let l=window.setTimeout(()=>{this.emptyTimers.delete(e),!e.querySelector(".task-list-item")&&this.renderEmptyState(e,t)},it);this.emptyTimers.set(e,l)};new MutationObserver(s).observe(e,{childList:!0,subtree:!0})}async getVaultTasks(){let e=Yt(this.app)[0],t=e?.getTasks,s=null;if(typeof t=="function")try{let l=t.call(e);Array.isArray(l)&&(s=l.map(c=>{let d=c;return{statusType:d.status?.type??"TODO",due:Ge(d.dueDate),doneDate:Ge(d.doneDate)}}))}catch(l){console.error("[TaskFlow] \u8C03\u7528 Tasks.getTasks() \u5931\u8D25\uFF0C\u56DE\u9000\u5230\u81EA\u5E26\u626B\u63CF:",l)}if(s&&s.length>0)return{tasks:s,source:"tasks"};let i=await this.cacheManager.getAllTasks(this.plugin.settings.data),r=dt(i).map(l=>({statusType:Kt[l.status]??"TODO",due:Ge(l.due),doneDate:l.completionDate??null}));return s&&console.warn(`[TaskFlow] Tasks.getTasks() \u8FD4\u56DE 0 \u4E2A\u4EFB\u52A1\uFF0C\u5DF2\u56DE\u9000\u5230\u81EA\u5E26\u626B\u63CF\uFF08\u626B\u5230 ${r.length} \u4E2A\uFF09\u3002\u82E5 vault \u91CC\u786E\u5B9E\u6709\u4EFB\u52A1\uFF0C\u8BF7\u68C0\u67E5 Tasks \u7684 Global Filter / Global Query \u662F\u5426\u628A\u5B83\u4EEC\u8FC7\u6EE4\u6389\u4E86\u3002`),{tasks:r,source:"own"}}updateStats(){let e=0,t=0,s=0,i=0,r=0,l=0,c=0,d=0,h=0,u=jt(),p=Zt(u),g=pt(p,6);for(let f of this.statTasks){let U=f.statusType==="DONE",Ee=f.statusType==="CANCELLED",b=f.statusType!=="NON_TASK"&&f.statusType!=="EMPTY";switch(f.statusType){case"IN_PROGRESS":t++;break;case"DONE":r++;break;case"CANCELLED":i++;break;case"TODO":case"ON_HOLD":s++;break}b&&!U&&!Ee&&f.due!==null&&f.due=p&&f.due<=g&&d++),U&&f.doneDate!==null&&(f.doneDate===u&&c++,f.doneDate>=p&&f.doneDate<=g&&h++)}let T=this.statTasks.filter(f=>f.statusType!=="NON_TASK"&&f.statusType!=="EMPTY").length,m=T-i,x=r+t*.5,L=m>0?Math.round(x/m*100):0;this.progressFill&&(this.progressFill.style.width=`${L}%`),this.statsPct&&this.statsPct.setText(`${L}%`),this.pillOverdue&&this.pillOverdue.setText(String(e)),this.pillInProgress&&this.pillInProgress.setText(String(t)),this.pillTodo&&this.pillTodo.setText(String(s)),this.pillCancel&&this.pillCancel.setText(String(i)),this.pillDone&&this.pillDone.setText(String(r)),this.pillTotal&&this.pillTotal.setText(String(T));let F=c+l,K=h+d,A=F>0?Math.round(c/F*100):null,j=K>0?Math.round(h/K*100):null;this.toTodoEl&&this.toTodoEl.setText(String(l)),this.toDoneEl&&this.toDoneEl.setText(String(c)),this.toInProgressEl&&this.toInProgressEl.setText(String(t)),this.toOverdueEl&&(this.toOverdueEl.setText(String(e)),this.toOverdueEl.parentElement?.toggleClass("is-alert",e>0)),this.toWeekEl&&this.toWeekEl.setText(String(h)),this.toRingTodayDial&&this.toRingTodayText&&(this.toRingTodayDial.style.setProperty("--p",String(A??0)),this.toRingTodayText.setText(A===null?"\u2014":`${A}%`)),this.toRingWeekDial&&this.toRingWeekText&&(this.toRingWeekDial.style.setProperty("--p",String(j??0)),this.toRingWeekText.setText(j===null?"\u2014":`${j}%`))}updateTabCount(e,t){let s=this.tabCounts[e];s&&s.setText(String(t.querySelectorAll(".task-list-item").length))}scheduleCount(e,t){let s=this.countTimers.get(t);s&&window.clearTimeout(s),this.countTimers.set(t,window.setTimeout(()=>this.updateTabCount(e,t),es))}removeEmptyState(e){let t=e.parentElement??e,s=t.querySelector(".tasks-view-empty");s&&s.remove(),t.removeClass("tasks-view-empty-state")}renderEmptyState(e,t){let s=e.parentElement??e;if(s.querySelector(".tasks-view-empty"))return;s.classList.add("tasks-view-empty-state");let i=s.createDiv({cls:"tasks-view-empty"});i.createDiv({cls:"tasks-view-empty-icon"}).textContent="\u{1F4ED}",i.createEl("h3",{cls:"tasks-view-empty-title",text:o("empty.noTasks")}),i.createEl("p",{cls:"tasks-view-empty-desc",text:o("view.empty.noMatch",{label:R(t)})}),i.createEl("button",{cls:"tasks-view-empty-btn tf-btn tf-btn-primary",text:o("empty.newTask")}).addEventListener("click",()=>{let l=this.containerEl.querySelector(".tasks-view-quick-add-input");l&&l.focus()}),this.updateTabCount(t.id,e)}registerVaultWatcher(){this.registerEvent(this.app.vault.on("modify",async e=>{!(e instanceof v.TFile)||e.extension!=="md"||this.scheduleRefresh()})),this.registerEvent(this.app.vault.on("rename",(e,t)=>{e instanceof v.TFile&&e.extension==="md"&&this.cacheManager.migrateCacheKey(t,e.path)})),this.registerEvent(this.app.metadataCache.on("changed",()=>{if(!this.getGroups().find(s=>s.id===this.activeGroup)?.frontmatterProperty?.trim())return;let t=this.selectedGroupNotePaths[this.activeGroup];this.renderGroupNoteSelector(),this.selectedGroupNotePaths[this.activeGroup]!==t&&this.renderActiveTabGuarded()}))}renderQuickAdd(e){let s=e.createDiv({cls:"tasks-view-quick-add"}).createDiv({cls:"tasks-view-quick-add-top"}),i=s.createEl("input",{cls:"tasks-view-quick-add-input",attr:{placeholder:"Add to inbox\u2026",type:"text"}}),r=s.createEl("button",{cls:"tasks-view-settings-btn",attr:{"aria-label":"TaskFlow settings"}});(0,v.setIcon)(r,"settings"),r.addEventListener("click",()=>{this.app.setting.open(),this.app.setting.openTabById("taskflow")}),i.addEventListener("keydown",l=>{if(l.key==="Enter"){let c=i.value.trim();c&&(this.addToInbox(c),i.value="")}else l.key==="Escape"&&(i.value="",i.blur())})}getShortFileName(e){let t=e.split("/");return t[t.length-1]||e}async addToInbox(e){let{inboxFilePath:t}=this.plugin.settings.data,s=this.app.vault;try{let i=s.getFileByPath(t);i||(i=await s.create(t,""));let r=await s.read(i),l=`- [ ] ${e}`,c=r.endsWith(` +`)||r===""?r+l+` +`:r+` +`+l+` +`;await s.modify(i,c),this.showQuickAddFeedback(!0,"Task added successfully")}catch(i){console.error("[TaskFlow] Failed to add task to inbox:",i),this.showQuickAddFeedback(!1,`Failed: ${i instanceof Error?i.message:"Unknown error"}`)}}showQuickAddFeedback(e,t){let s=this.containerEl.querySelector(".tasks-view-quick-add-input");if(!s)return;let i=s.parentElement?.parentElement;if(!i)return;let r=i.style;r.position!=="relative"&&r.position!=="absolute"&&i.setCssProps({position:"relative"});let l=createDiv();l.className=`tasks-view-quick-add-feedback ${e?"success":"error"}`,l.textContent=t,l.style.cssText=` position: absolute; top: 100%; left: 0; @@ -89,4 +90,4 @@ ${t.query}`),e!==this.renderEpoch)return}catch(i){if(console.error(`[TaskFlow] T animation: tasks-view-feedback-fade-in 0.2s ease; background: ${e?"var(--color-green)":"var(--color-red)"}; color: ${e?"var(--text-on-accent)":"var(--text-normal)"}; - `,i.appendChild(o),window.setTimeout(()=>{o.setCssProps({opacity:"0",transition:"opacity 0.3s ease"}),window.setTimeout(()=>o.remove(),300)},2e3)}buildStatsShell(e){let t=e.createDiv({cls:"tasks-view-stats"});this.statsEl=t;let s=t.createEl("button",{cls:"tasks-view-stats-header",attr:{type:"button","aria-label":n("stats.toggleAria")}});s.createSpan({cls:"tasks-view-stats-label",text:n("stats.title")}),this.statsPct=s.createSpan({cls:"tasks-view-stats-pct",text:"0%"}),this.statsChevron=s.createSpan({cls:"tasks-view-stats-chevron"}),s.addEventListener("click",()=>{this.toggleStatsCategories()});let i=t.createDiv({cls:"tasks-view-progress-bar"});this.progressFill=i.createDiv({cls:"tasks-view-progress-fill"}),this.progressFill.setCssProps({width:"0%"});let l=t.createDiv({cls:"tasks-view-stat-pills"}),o=(d,c)=>{let u=l.createSpan({cls:`tasks-view-stat-pill tasks-view-stat-pill--${d}`}),h=u.createSpan({cls:"tasks-view-stat-count",text:"0"});return u.createSpan({cls:"tasks-view-stat-name",text:c}),h};this.pillOverdue=o("overdue","overdue"),this.pillInProgress=o("in-progress","in progress"),this.pillTodo=o("todo","todo"),this.pillCancel=o("cancel","cancel"),this.pillDone=o("done","done"),this.pillTotal=o("total","total"),this.applyStatsCategories(this.plugin.settings.data.showStatsCategories??!0)}applyStatsCategories(e){let t=this.statsEl;if(!t)return;t.toggleClass("is-collapsed",!e),this.statsChevron&&(0,v.setIcon)(this.statsChevron,e?"chevron-down":"chevron-right"),t.querySelector(".tasks-view-stats-header")?.setAttribute("aria-expanded",e?"true":"false")}async toggleStatsCategories(){let e=this.plugin.settings.data,t=!e.showStatsCategories;e.showStatsCategories=t,this.applyStatsCategories(t),await this.plugin.saveHeadSettings()}renderTodayOverview(e){let t=e.createDiv({cls:"tf-today"}),s=t.createDiv({cls:"tf-today-rings"}),i=this.renderRing(s,n("panel.todayRate"));this.toRingTodayDial=i.dial,this.toRingTodayText=i.text;let l=this.renderRing(s,n("panel.weekRate"));this.toRingWeekDial=l.dial,this.toRingWeekText=l.text;let o=t.createDiv({cls:"tf-today-stats"});this.toTodoEl=this.makeTodayStat(o,"tf-today-todo",n("panel.todayTodo")),this.toDoneEl=this.makeTodayStat(o,"tf-today-done",n("panel.doneToday")),this.toInProgressEl=this.makeTodayStat(o,"tf-today-progress",n("panel.inProgress")),this.toOverdueEl=this.makeTodayStat(o,"tf-today-overdue",n("defaultTab.overdue")),this.toWeekEl=this.makeTodayStat(o,"tf-today-week",n("panel.doneWeek"))}renderRing(e,t){let s=e.createDiv({cls:"tf-ring"}),i=s.createDiv({cls:"tf-ring-dial"});i.createDiv({cls:"tf-ring-hole"});let l=i.createDiv({cls:"tf-ring-text",text:"0%"});return s.createDiv({cls:"tf-ring-label",text:t}),{dial:i,text:l}}makeTodayStat(e,t,s){let i=e.createDiv({cls:`tf-today-stat ${t}`}),l=i.createDiv({cls:"tf-today-stat-count",text:"0"});return i.createDiv({cls:"tf-today-stat-name",text:s}),l}renderImportantModule(e){let t=e.createDiv({cls:"tf-important"}),s=t.createDiv({cls:"tf-important-body"});this.importantBodyEl=s;let i=t.createDiv({cls:"tf-important-more is-hidden"});i.textContent=n("panel.more"),i.addEventListener("click",()=>{this.importantExpanded=!this.importantExpanded,this.applyImportantTruncation(s)}),this.importantMoreEl=i,this.observeImportantBody(s)}async renderImportantReminders(){let e=this.importantBodyEl;if(!e)return;this.importantExpanded=!1;let t=(this.plugin.settings.data.importantReminderQuery||"").trim()||C;try{e.empty();let s=this.freshRenderComponent("important");this.pruneRenderComponents(new Set(["important","tab:"+this.activeTab])),await v.MarkdownRenderer.render(this.app,"```tasks\n"+t+"\n```",e,"",s),this.applyImportantTruncation(e)}catch(s){console.error("[TaskFlow] \u91CD\u8981\u63D0\u9192\u6E32\u67D3\u5931\u8D25:",s),this.renderImportantEmpty(e)}}observeImportantBody(e){if(this.observedImportantBodies.has(e))return;this.observedImportantBodies.add(e);let t=()=>{if(e.querySelector(".task-list-item")){this.removeImportantEmpty(e),this.applyImportantTruncation(e);return}this.importantEmptyTimer&&window.clearTimeout(this.importantEmptyTimer),this.importantEmptyTimer=window.setTimeout(()=>{this.importantEmptyTimer=null,e.querySelector(".task-list-item")||this.renderImportantEmpty(e)},tt)};new MutationObserver(t).observe(e,{childList:!0,subtree:!0})}applyImportantTruncation(e){let t=this.importantMoreEl,s=Array.from(e.querySelectorAll(".task-list-item"));if(s.length===0){t&&t.addClass("is-hidden");return}let i=3;if(s.length<=i){s.forEach(l=>l.setCssProps({display:""})),t&&(t.addClass("is-hidden"),t.textContent=n("panel.more"));return}this.importantExpanded?(s.forEach(l=>l.setCssProps({display:""})),t&&(t.removeClass("is-hidden"),t.textContent=n("panel.collapse"))):(s.forEach((l,o)=>l.setCssProps({display:onew Te(e,this)),this.addCommand({id:"open-view",name:"Open workbench",callback:()=>this.activateView()});let a=this.addRibbonIcon("layout-dashboard","TaskFlow",()=>{this.activateView()});$(a,ge),this.addSettingTab(new me(this.app,this)),this.app.workspace.onLayoutReady(()=>{this.activateView()})}onunload(){}hasTasksPlugin(){return!!this.app.plugins.plugins["obsidian-tasks-plugin"]}async activateView(){if(!this.hasTasksPlugin()){new ye.Notice("Tasks Companion Pane: The Tasks plugin (obsidian-tasks-group) must be installed and enabled.",1e4);return}let e=this.app.workspace.getLeavesOfType(U)[0];if(e){this.app.workspace.revealLeaf(e);return}let s=this.settings?.data?.openLocation==="sidebar"?this.app.workspace.getRightLeaf(!1)??this.app.workspace.getLeaf("tab"):this.app.workspace.getLeaf("tab");s&&(await s.setViewState({type:U,active:!0}),this.app.workspace.revealLeaf(s))}async loadSettings(){let a=await this.loadData();this.settings=Ye(a??{})}async saveSettings(){this.settings.data.boards&&this.settings.data.boards.sort((a,e)=>a.order-e.order),this.settings.data.globalTabs&&this.settings.data.globalTabs.sort((a,e)=>a.order-e.order),await this.saveData(this.settings),this.refreshAllViews()}async saveHeadSettings(){await this.saveData(this.settings)}refreshAllViews(){let a=this.app.workspace.getLeavesOfType(U);for(let e of a){let t=e.view;t.buildShell(),t.refresh()}}applyLanguage(a){this.settings.language=a,De(Ce(a,this.app)),this.saveData(this.settings),this.refreshAllViews()}applyStatsCategories(a){let e=this.app.workspace.getLeavesOfType(U);for(let t of e)t.view.applyStatsCategories(a)}}; + `,i.appendChild(l),window.setTimeout(()=>{l.setCssProps({opacity:"0",transition:"opacity 0.3s ease"}),window.setTimeout(()=>l.remove(),300)},2e3)}buildStatsShell(e){let t=e.createDiv({cls:"tasks-view-stats"});this.statsEl=t;let s=t.createEl("button",{cls:"tasks-view-stats-header",attr:{type:"button","aria-label":o("stats.toggleAria")}});s.createSpan({cls:"tasks-view-stats-label",text:o("stats.title")}),this.statsPct=s.createSpan({cls:"tasks-view-stats-pct",text:"0%"}),this.statsChevron=s.createSpan({cls:"tasks-view-stats-chevron"}),s.addEventListener("click",()=>{this.toggleStatsCategories()});let i=t.createDiv({cls:"tasks-view-progress-bar"});this.progressFill=i.createDiv({cls:"tasks-view-progress-fill"}),this.progressFill.setCssProps({width:"0%"});let r=t.createDiv({cls:"tasks-view-stat-pills"}),l=(c,d)=>{let h=r.createSpan({cls:`tasks-view-stat-pill tasks-view-stat-pill--${c}`}),u=h.createSpan({cls:"tasks-view-stat-count",text:"0"});return h.createSpan({cls:"tasks-view-stat-name",text:d}),u};this.pillOverdue=l("overdue","overdue"),this.pillInProgress=l("in-progress","in progress"),this.pillTodo=l("todo","todo"),this.pillCancel=l("cancel","cancel"),this.pillDone=l("done","done"),this.pillTotal=l("total","total"),this.applyStatsCategories(this.plugin.settings.data.showStatsCategories??!0)}applyStatsCategories(e){let t=this.statsEl;if(!t)return;t.toggleClass("is-collapsed",!e),this.statsChevron&&(0,v.setIcon)(this.statsChevron,e?"chevron-down":"chevron-right"),t.querySelector(".tasks-view-stats-header")?.setAttribute("aria-expanded",e?"true":"false")}async toggleStatsCategories(){let e=this.plugin.settings.data,t=!e.showStatsCategories;e.showStatsCategories=t,this.applyStatsCategories(t),await this.plugin.saveHeadSettings()}renderTodayOverview(e){let t=e.createDiv({cls:"tf-today"}),s=t.createDiv({cls:"tf-today-rings"}),i=this.renderRing(s,o("panel.todayRate"));this.toRingTodayDial=i.dial,this.toRingTodayText=i.text;let r=this.renderRing(s,o("panel.weekRate"));this.toRingWeekDial=r.dial,this.toRingWeekText=r.text;let l=t.createDiv({cls:"tf-today-stats"});this.toTodoEl=this.makeTodayStat(l,"tf-today-todo",o("panel.todayTodo")),this.toDoneEl=this.makeTodayStat(l,"tf-today-done",o("panel.doneToday")),this.toInProgressEl=this.makeTodayStat(l,"tf-today-progress",o("panel.inProgress")),this.toOverdueEl=this.makeTodayStat(l,"tf-today-overdue",o("defaultTab.overdue")),this.toWeekEl=this.makeTodayStat(l,"tf-today-week",o("panel.doneWeek"))}renderRing(e,t){let s=e.createDiv({cls:"tf-ring"}),i=s.createDiv({cls:"tf-ring-dial"});i.createDiv({cls:"tf-ring-hole"});let r=i.createDiv({cls:"tf-ring-text",text:"0%"});return s.createDiv({cls:"tf-ring-label",text:t}),{dial:i,text:r}}makeTodayStat(e,t,s){let i=e.createDiv({cls:`tf-today-stat ${t}`}),r=i.createDiv({cls:"tf-today-stat-count",text:"0"});return i.createDiv({cls:"tf-today-stat-name",text:s}),r}renderImportantModule(e){let t=e.createDiv({cls:"tf-important"}),s=t.createDiv({cls:"tf-important-body"});this.importantBodyEl=s;let i=t.createDiv({cls:"tf-important-more is-hidden"});i.textContent=o("panel.more"),i.addEventListener("click",()=>{this.importantExpanded=!this.importantExpanded,this.applyImportantTruncation(s)}),this.importantMoreEl=i,this.observeImportantBody(s)}async renderImportantReminders(){let e=this.importantBodyEl;if(!e)return;this.importantExpanded=!1;let t=(this.plugin.settings.data.importantReminderQuery||"").trim()||C;try{e.empty();let s=this.freshRenderComponent("important");this.pruneRenderComponents(new Set(["important","tab:"+this.activeTab])),await v.MarkdownRenderer.render(this.app,"```tasks\n"+t+"\n```",e,"",s),this.applyImportantTruncation(e)}catch(s){console.error("[TaskFlow] \u91CD\u8981\u63D0\u9192\u6E32\u67D3\u5931\u8D25:",s),this.renderImportantEmpty(e)}}observeImportantBody(e){if(this.observedImportantBodies.has(e))return;this.observedImportantBodies.add(e);let t=()=>{if(e.querySelector(".task-list-item")){this.removeImportantEmpty(e),this.applyImportantTruncation(e);return}this.importantEmptyTimer&&window.clearTimeout(this.importantEmptyTimer),this.importantEmptyTimer=window.setTimeout(()=>{this.importantEmptyTimer=null,e.querySelector(".task-list-item")||this.renderImportantEmpty(e)},it)};new MutationObserver(t).observe(e,{childList:!0,subtree:!0})}applyImportantTruncation(e){let t=this.importantMoreEl,s=Array.from(e.querySelectorAll(".task-list-item"));if(s.length===0){t&&t.addClass("is-hidden");return}let i=3;if(s.length<=i){s.forEach(r=>r.setCssProps({display:""})),t&&(t.addClass("is-hidden"),t.textContent=o("panel.more"));return}this.importantExpanded?(s.forEach(r=>r.setCssProps({display:""})),t&&(t.removeClass("is-hidden"),t.textContent=o("panel.collapse"))):(s.forEach((r,l)=>r.setCssProps({display:lnew ye(e,this)),this.addCommand({id:"open-view",name:"Open workbench",callback:()=>this.activateView()});let a=this.addRibbonIcon("layout-dashboard","TaskFlow",()=>{this.activateView()});$(a,fe),this.addSettingTab(new be(this.app,this)),this.app.workspace.onLayoutReady(()=>{this.activateView()})}onunload(){}hasTasksPlugin(){return!!this.app.plugins.plugins["obsidian-tasks-plugin"]}async activateView(){if(!this.hasTasksPlugin()){new ke.Notice("Tasks Companion Pane: The Tasks plugin (obsidian-tasks-group) must be installed and enabled.",1e4);return}let e=this.app.workspace.getLeavesOfType(V)[0];if(e){this.app.workspace.revealLeaf(e);return}let s=this.settings?.data?.openLocation==="sidebar"?this.app.workspace.getRightLeaf(!1)??this.app.workspace.getLeaf("tab"):this.app.workspace.getLeaf("tab");s&&(await s.setViewState({type:V,active:!0}),this.app.workspace.revealLeaf(s))}async loadSettings(){let a=await this.loadData();this.settings=Ze(a??{})}async saveSettings(){this.settings.data.boards&&this.settings.data.boards.sort((a,e)=>a.order-e.order),this.settings.data.globalTabs&&this.settings.data.globalTabs.sort((a,e)=>a.order-e.order),await this.saveData(this.settings),this.refreshAllViews()}async saveHeadSettings(){await this.saveData(this.settings)}refreshAllViews(){let a=this.app.workspace.getLeavesOfType(V);for(let e of a){let t=e.view;t.buildShell(),t.refresh()}}applyLanguage(a){this.settings.language=a,Le(Fe(a,this.app)),this.saveData(this.settings),this.refreshAllViews()}applyStatsCategories(a){let e=this.app.workspace.getLeavesOfType(V);for(let t of e)t.view.applyStatsCategories(a)}}; diff --git a/package-lock.json b/package-lock.json index 8571193..58ede7b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,16 @@ { "name": "taskflow", - "version": "1.0.2", + "version": "1.0.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "taskflow", - "version": "1.0.2", + "version": "1.0.4", "license": "0-BSD", "dependencies": { - "sortablejs": "^1.15.7" + "sortablejs": "^1.15.7", + "tsc": "^2.0.4" }, "devDependencies": { "@eslint/js": "^9.39.4", @@ -20,7 +21,7 @@ "globals": "^17.6.0", "jiti": "^2.6.1", "obsidian": "latest", - "typescript": "^5.8.3", + "typescript": "^5.9.3", "typescript-eslint": "^8.59.1" } }, @@ -1050,16 +1051,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "18 || 20 || >=22" + "node": "20 || >=22" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { @@ -1390,9 +1391,9 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", + "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", "dev": true, "license": "MIT", "dependencies": { @@ -2186,9 +2187,9 @@ } }, "node_modules/eslint-plugin-json-schema-validator/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz", + "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==", "dev": true, "license": "MIT", "dependencies": { @@ -2245,9 +2246,9 @@ } }, "node_modules/eslint-plugin-n/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz", + "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==", "dev": true, "license": "MIT", "dependencies": { @@ -2547,9 +2548,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", - "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", + "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", "dev": true, "funding": [ { @@ -3410,10 +3411,20 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -4647,6 +4658,16 @@ "typescript": ">=4.8.4" } }, + "node_modules/tsc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/tsc/-/tsc-2.0.4.tgz", + "integrity": "sha512-fzoSieZI5KKJVBYGvwbVZs/J5za84f2lSTLPYf6AGiIf43tZ3GNrI1QzTLcjtyDDP4aLxd46RTZq1nQxe7+k5Q==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "bin": { + "tsc": "bin/tsc" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", diff --git a/package.json b/package.json index a8b6cb8..c6709ac 100644 --- a/package.json +++ b/package.json @@ -22,10 +22,14 @@ "globals": "^17.6.0", "jiti": "^2.6.1", "obsidian": "latest", - "typescript": "^5.8.3", + "typescript": "^5.9.3", "typescript-eslint": "^8.59.1" }, "dependencies": { - "sortablejs": "^1.15.7" + "sortablejs": "^1.15.7", + "tsc": "^2.0.4" + }, + "allowScripts": { + "esbuild@0.25.5": true } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..227eb8c --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,3159 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + sortablejs: + specifier: ^1.15.7 + version: 1.15.7 + tsc: + specifier: ^2.0.4 + version: 2.0.4 + devDependencies: + '@eslint/js': + specifier: ^9.39.4 + version: 9.39.5 + '@types/node': + specifier: ^22.15.17 + version: 22.20.4 + esbuild: + specifier: 0.25.5 + version: 0.25.5 + eslint: + specifier: ^9.39.4 + version: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + eslint-plugin-obsidianmd: + specifier: ^0.3.0 + version: 0.3.0(@eslint/js@9.39.5)(@eslint/json@0.14.0)(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(obsidian@1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6))(supports-color@7.2.0)(typescript-eslint@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)) + globals: + specifier: ^17.6.0 + version: 17.12.0 + jiti: + specifier: ^2.6.1 + version: 2.7.0 + obsidian: + specifier: latest + version: 1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + typescript-eslint: + specifier: ^8.59.1 + version: 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + +packages: + + '@codemirror/state@6.5.0': + resolution: {integrity: sha512-MwBHVK60IiIHDcoMet78lxt6iw5gJOGSbNbOIVBHWVXIH4/Nq1+GQgLLGgI1KlnN86WDXsPudVaqYHKBIx7Eyw==} + + '@codemirror/view@6.38.6': + resolution: {integrity: sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==} + + '@esbuild/aix-ppc64@0.25.5': + resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.5': + resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.5': + resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.5': + resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.5': + resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.5': + resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.5': + resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.5': + resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.5': + resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.5': + resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.5': + resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.5': + resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.5': + resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.5': + resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.5': + resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.5': + resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.5': + resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.5': + resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.5': + resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.5': + resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.5': + resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.25.5': + resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.5': + resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.5': + resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.5': + resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.10.1': + resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.7': + resolution: {integrity: sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.5': + resolution: {integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/json@0.14.0': + resolution: {integrity: sha512-rvR/EZtvUG3p9uqrSmcDJPYSH7atmWr0RnFWN6m917MAPx82+zQgPUmDu0whPFG6XTyM0vB/hR6c1Q63OaYtCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/momoa@3.3.13': + resolution: {integrity: sha512-AbKq3EW41+HY6pNMJgAOrz68iyiTTf0Nr1JRHHfuG5zwniJ9Dw8J3U7oa1I2ptpqYwmEf1sXKOGK6lbdZ9eqmg==} + engines: {node: '>=18'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@marijn/find-cluster-break@1.0.4': + resolution: {integrity: sha512-Wy0V7+SGUjnF9/TkiM1hKVDPj7jKXduPNboMVtHTA8dySMURWqfg/JZ9E2Sq8JgSJmkl7k7Qe9FLeMSrSraWmQ==} + + '@microsoft/eslint-plugin-sdl@1.1.0': + resolution: {integrity: sha512-dxdNHOemLnBhfY3eByrujX9KyLigcNtW8sU+axzWv5nLGcsSBeKW2YYyTpfPo1hV8YPOmIGnfA4fZHyKVtWqBQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: ^9 + + '@pkgr/core@0.1.2': + resolution: {integrity: sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@types/codemirror@5.60.8': + resolution: {integrity: sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/node@22.20.4': + resolution: {integrity: sha512-zJRE40jpHtKqE/C4fgHrAKQLJuSpzEnP9ff9Y7YtoR3Wd2pwqzlekDeEuUQXjRd+QCYnVnNwuJYmhdk9XV8gvA==} + + '@types/tern@0.23.9': + resolution: {integrity: sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==} + + '@typescript-eslint/eslint-plugin@8.70.1': + resolution: {integrity: sha512-nDNrUQ/4ruSNYbu749TRY7cfrzPtoLHEXSNBI8aaNY32LlZCajixqRf3FqcKC4p5Cam4VOHYx/t+i5+nKXvrqA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.70.1 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/parser@8.70.1': + resolution: {integrity: sha512-nO974WLllwhSFWQXnMLj6nDGa8f0khKEz1JzpPJ1u7Vm/4X1X6ZHajpoknU4bb41vJyMB0HHVyS2GqdhWfIXZw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/project-service@8.70.1': + resolution: {integrity: sha512-62xOgboPfwc3/IgPSX/W6oQR3ZbF04194FPGUGH8HL8iLFHbt/456/8Ph1wLNUgVF+s94FlHoipBsz+v7+LMnA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/scope-manager@8.70.1': + resolution: {integrity: sha512-Pa0EeSeAusQc1WbjQMac+YfenewYTBu0KjgYvkUKwhXaHUKbFog23Dm/rp0DX/6tyYOQ3Xl1a+3EcFNZynGHCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.70.1': + resolution: {integrity: sha512-jumze1fPI+sDOaM2TWGQdn39PDxTr7TZGeuyLkAbNyx2vtMT3uRnVKChN0hfht5V2TugphJzF6bYXvBcE09qqg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.70.1': + resolution: {integrity: sha512-7zKTnyvaVWqzLZHPFQtX1hVHqgkMC+WebPWakNCSyrQVbIP1AM0L0TlBZtACldIRb6PptI8Odk+jyZ5kP3B1VA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.70.1': + resolution: {integrity: sha512-Dm1ypdhhrGCTyyehxElhgJ6kgk8MVCv5qXdoOVqPr1uqk42jX8KjrZqhROvdShczA8qrDoYiOWn1ykWlx2k81Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.70.1': + resolution: {integrity: sha512-TU8PwyGN0PQJUcE96mw8eCQ44SmxGdQlJmlWakHaHQ15eIuuvye5yNtmh/i6oS88jzXVQB71xdNkbkB/fMwL0g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.70.1': + resolution: {integrity: sha512-Esgul8MsnKnRLdYU2Eb2cRV9bS5HJYtKj1ByJnOzzG2M58DGdSUQ1jUuILxipqcpB2h9WLrbD5GijIWUjX/Tqw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.70.1': + resolution: {integrity: sha512-Vwj9lUIW5Xq3wQ9w6gv3R86g1hMK8f2zNOdGTAgeXUMMXFK78G9ruCjjqutHMNJc0+CH7LYRnHeUB9IT8wFmcw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.18.0: + resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-includes@3.2.0: + resolution: {integrity: sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + brace-expansion@1.1.21: + resolution: {integrity: sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==} + + brace-expansion@2.1.7: + resolution: {integrity: sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==} + + brace-expansion@5.0.12: + resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==} + engines: {node: 20 || >=22} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + crelt@1.0.7: + resolution: {integrity: sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + empathic@2.1.0: + resolution: {integrity: sha512-AnfC1ATldl49/cvZdLPDjBfrRNwbDO05aibiOtzQu3qtlbJtomNLhF30HEtn/7iBz50dlMECqATo3fG0LrdEgw==} + engines: {node: '>=14'} + + enhanced-resolve@5.25.1: + resolution: {integrity: sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w==} + engines: {node: '>=10.13.0'} + + es-abstract-get@1.0.0: + resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==} + engines: {node: '>= 0.4'} + + es-abstract@1.24.2: + resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.4.0: + resolution: {integrity: sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.4: + resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} + engines: {node: '>= 0.4'} + + esbuild@0.25.5: + resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} + engines: {node: '>=18'} + hasBin: true + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + + eslint-import-resolver-node@0.3.10: + resolution: {integrity: sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==} + + eslint-module-utils@2.14.0: + resolution: {integrity: sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-depend@1.3.1: + resolution: {integrity: sha512-1uo2rFAr9vzNrCYdp7IBZRB54LiyVxfaIso0R6/QV3t6Dax6DTbW/EV2Hktf0f4UtmGHK8UyzJWI382pwW04jw==} + + eslint-plugin-es-x@7.8.0: + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8' + + eslint-plugin-import@2.32.0: + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-json-schema-validator@5.1.0: + resolution: {integrity: sha512-ZmVyxRIjm58oqe2kTuy90PpmZPrrKvOjRPXKzq8WCgRgAkidCgm5X8domL2KSfadZ3QFAmifMgGTcVNhZ5ez2g==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + eslint-plugin-n@17.10.3: + resolution: {integrity: sha512-ySZBfKe49nQZWR1yFaA0v/GsH6Fgp8ah6XV0WDz6CN8WO0ek4McMzb7A2xnf4DCYV43frjCygvb9f/wx7UUxRw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.23.0' + + eslint-plugin-no-unsanitized@4.1.5: + resolution: {integrity: sha512-MSB4hXPVFQrI8weqzs6gzl7reP2k/qSjtCoL2vUMSDejIIq9YL1ZKvq5/ORBXab/PvfBBrWO2jWviYpL+4Ghfg==} + peerDependencies: + eslint: ^9 || ^10 + + eslint-plugin-obsidianmd@0.3.0: + resolution: {integrity: sha512-QvGDI6B2nxJBrsZKGTg31da2A/fEJNlnwN+fRZkaoPIu1QL3fYXUdpP7ThyMdr/0iTYQxifb9lt2X9cpydQx1w==} + engines: {node: '>= 18'} + hasBin: true + peerDependencies: + '@eslint/js': ^9.30.1 + '@eslint/json': 0.14.0 + eslint: '>=9.0.0' + obsidian: 1.8.7 + typescript-eslint: ^8.35.1 + + eslint-plugin-react@7.37.3: + resolution: {integrity: sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-plugin-security@1.4.0: + resolution: {integrity: sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==} + + eslint-plugin-security@2.1.1: + resolution: {integrity: sha512-7cspIGj7WTfR3EhaILzAPcfCo5R9FbeWvbgsPYWivSurTBKW88VQxtP3c4aWMG9Hz/GfJlJVdXEJ3c8LqS+u2w==} + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@9.39.5: + resolution: {integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.1.8: + resolution: {integrity: sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.4.4: + resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.2.0: + resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.14.3: + resolution: {integrity: sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + globals@17.12.0: + resolution: {integrity: sha512-cezEd/DTyyht9cvSSURyygXPfy04GtWO/5e6ZPvH7fCtjKz9PYOmuawphw1Ctd1f6C+5JypXfGD7ahNMXvevBA==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.10: + resolution: {integrity: sha512-HpbUakT7xp5miBUywCHf36ZEuAJNklBJDDsGpUIjMzOSmM8ELSfA9Sa/QDPeNeqeoN31u+UTCkL4klCOVvRm4Q==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.17.0: + resolution: {integrity: sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-document.all@1.0.0: + resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.3.2: + resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-migrate@2.0.0: + resolution: {integrity: sha512-r38SVTtojDRp4eD6WsCqiE0eNDt4v1WalBXb9cyZYw9ai5cGtBwzRNWjHzJl38w6TxFkXAIA7h+fyX3tnrAFhQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonc-eslint-parser@2.4.2: + resolution: {integrity: sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} + engines: {node: 18 || 20 || >=22} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimatch@8.0.7: + resolution: {integrity: sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + module-replacements@2.11.0: + resolution: {integrity: sha512-j5sNQm3VCpQQ7nTqGeOZtoJtV3uKERgCBm9QRhmGRiXiqkf7iRFOkfxdJRZWLkqYY8PNf4cDQF/WfXUYLENrRA==} + + moment@2.29.4: + resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-exports-info@1.6.2: + resolution: {integrity: sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==} + engines: {node: '>= 0.4'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + obsidian@1.13.1: + resolution: {integrity: sha512-qtTEA2pmhJzhuhJqzbBFRYhpIOqvW+krDYjtFynv66KbxBbumHBlsJfWw3I4jtnK/6fZwbQhCrmmDdRwXmX56w==} + peerDependencies: + '@codemirror/state': 6.5.0 + '@codemirror/view': 6.38.6 + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + own-keys@1.0.2: + resolution: {integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==} + engines: {node: '>= 0.4'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@2.0.0-next.7: + resolution: {integrity: sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==} + engines: {node: '>= 0.4'} + hasBin: true + + ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + + safe-array-concat@1.1.4: + resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safe-regex@1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + + safe-regex@2.1.1: + resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + + sortablejs@1.15.7: + resolution: {integrity: sha512-Kk8wLQPlS+yi1ZEf48a4+fzHa4yxjC30M/Sr2AnQu+f/MPwvvX9XjZ6OWejiz8crBsLwSq8GHqaxaET7u6ux0A==} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + string.prototype.matchall@4.1.0: + resolution: {integrity: sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.11: + resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.10: + resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + style-mod@4.1.4: + resolution: {integrity: sha512-XXWIQt633/EpAFx8aZDOTjBzrCaGmhvEQlQo6MVPfa2OzO2cWo+4hV9h+6UkHYlXGfy+ODXKUdP7Pthmcu5ATw==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + synckit@0.9.3: + resolution: {integrity: sha512-JJoOEKTfL1urb1mDoEblhD9NhEbWmq9jHEMEnxoC4ujUaZ4itA8vKgwkFAyNClgxplLi9tsUKX+EduK0p/l7sg==} + engines: {node: ^14.18.0 || >=16.0.0} + + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + toml-eslint-parser@0.9.3: + resolution: {integrity: sha512-moYoCvkNUAPCxSW9jmHmRElhm4tVJpHL8ItC/+uYD0EpPSFXbck7yREz9tNdJVTSpHVod8+HoipcpbQ0oE6gsw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tsc@2.0.4: + resolution: {integrity: sha512-fzoSieZI5KKJVBYGvwbVZs/J5za84f2lSTLPYf6AGiIf43tZ3GNrI1QzTLcjtyDDP4aLxd46RTZq1nQxe7+k5Q==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.5: + resolution: {integrity: sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.8: + resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} + engines: {node: '>= 0.4'} + + typescript-eslint@8.70.1: + resolution: {integrity: sha512-AcWG7KDjZ2THNXsgwttMaGmzVi0VFRlFYfqFHYQRbDpF3owuYbuiL8c7UUrd2k8s3PoSfIQrWfrGXfcElrWLYA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.24: + resolution: {integrity: sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yaml-eslint-parser@1.3.2: + resolution: {integrity: sha512-odxVsHAkZYYglR30aPYRY4nUGJnoJ2y1ww2HDvZALo0BDETv9kWbi16J52eHs+PWRNmF4ub6nZqfVOeesOvntg==} + engines: {node: ^14.17.0 || >=16.0.0} + + yaml@2.9.1: + resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==} + engines: {node: '>= 14.6'} + hasBin: true + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@codemirror/state@6.5.0': + dependencies: + '@marijn/find-cluster-break': 1.0.4 + + '@codemirror/view@6.38.6': + dependencies: + '@codemirror/state': 6.5.0 + crelt: 1.0.7 + style-mod: 4.1.4 + w3c-keyname: 2.2.8 + + '@esbuild/aix-ppc64@0.25.5': + optional: true + + '@esbuild/android-arm64@0.25.5': + optional: true + + '@esbuild/android-arm@0.25.5': + optional: true + + '@esbuild/android-x64@0.25.5': + optional: true + + '@esbuild/darwin-arm64@0.25.5': + optional: true + + '@esbuild/darwin-x64@0.25.5': + optional: true + + '@esbuild/freebsd-arm64@0.25.5': + optional: true + + '@esbuild/freebsd-x64@0.25.5': + optional: true + + '@esbuild/linux-arm64@0.25.5': + optional: true + + '@esbuild/linux-arm@0.25.5': + optional: true + + '@esbuild/linux-ia32@0.25.5': + optional: true + + '@esbuild/linux-loong64@0.25.5': + optional: true + + '@esbuild/linux-mips64el@0.25.5': + optional: true + + '@esbuild/linux-ppc64@0.25.5': + optional: true + + '@esbuild/linux-riscv64@0.25.5': + optional: true + + '@esbuild/linux-s390x@0.25.5': + optional: true + + '@esbuild/linux-x64@0.25.5': + optional: true + + '@esbuild/netbsd-arm64@0.25.5': + optional: true + + '@esbuild/netbsd-x64@0.25.5': + optional: true + + '@esbuild/openbsd-arm64@0.25.5': + optional: true + + '@esbuild/openbsd-x64@0.25.5': + optional: true + + '@esbuild/sunos-x64@0.25.5': + optional: true + + '@esbuild/win32-arm64@0.25.5': + optional: true + + '@esbuild/win32-ia32@0.25.5': + optional: true + + '@esbuild/win32-x64@0.25.5': + optional: true + + '@eslint-community/eslint-utils@4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))': + dependencies: + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.2(supports-color@7.2.0)': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3(supports-color@7.2.0) + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.7(supports-color@7.2.0)': + dependencies: + ajv: 6.15.0 + debug: 4.4.3(supports-color@7.2.0) + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.3.2 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.39.5': {} + + '@eslint/json@0.14.0': + dependencies: + '@eslint/core': 0.17.0 + '@eslint/plugin-kit': 0.4.1 + '@humanwhocodes/momoa': 3.3.13 + natural-compare: 1.4.0 + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/momoa@3.3.13': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@marijn/find-cluster-break@1.0.4': {} + + '@microsoft/eslint-plugin-sdl@1.1.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))': + dependencies: + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + eslint-plugin-n: 17.10.3(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + eslint-plugin-react: 7.37.3(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + eslint-plugin-security: 1.4.0 + + '@pkgr/core@0.1.2': {} + + '@rtsao/scc@1.1.0': {} + + '@types/codemirror@5.60.8': + dependencies: + '@types/tern': 0.23.9 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.9 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.9': {} + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/node@22.20.4': + dependencies: + undici-types: 6.21.0 + + '@types/tern@0.23.9': + dependencies: + '@types/estree': 1.0.9 + + '@typescript-eslint/eslint-plugin@8.70.1(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.70.1 + '@typescript-eslint/type-utils': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.70.1 + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + ignore: 7.0.10 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.70.1 + '@typescript-eslint/types': 8.70.1 + '@typescript-eslint/typescript-estree': 8.70.1(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.70.1 + debug: 4.4.3(supports-color@7.2.0) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.70.1(supports-color@7.2.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.70.1(typescript@5.4.5) + '@typescript-eslint/types': 8.70.1 + debug: 4.4.3(supports-color@7.2.0) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.70.1(supports-color@7.2.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.70.1(typescript@5.9.3) + '@typescript-eslint/types': 8.70.1 + debug: 4.4.3(supports-color@7.2.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.70.1': + dependencies: + '@typescript-eslint/types': 8.70.1 + '@typescript-eslint/visitor-keys': 8.70.1 + + '@typescript-eslint/tsconfig-utils@8.70.1(typescript@5.4.5)': + dependencies: + typescript: 5.4.5 + + '@typescript-eslint/tsconfig-utils@8.70.1(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.70.1 + '@typescript-eslint/typescript-estree': 8.70.1(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + debug: 4.4.3(supports-color@7.2.0) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.70.1': {} + + '@typescript-eslint/typescript-estree@8.70.1(supports-color@7.2.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/project-service': 8.70.1(supports-color@7.2.0)(typescript@5.4.5) + '@typescript-eslint/tsconfig-utils': 8.70.1(typescript@5.4.5) + '@typescript-eslint/types': 8.70.1 + '@typescript-eslint/visitor-keys': 8.70.1 + debug: 4.4.3(supports-color@7.2.0) + minimatch: 10.2.6 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.70.1(supports-color@7.2.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.70.1(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.70.1(typescript@5.9.3) + '@typescript-eslint/types': 8.70.1 + '@typescript-eslint/visitor-keys': 8.70.1 + debug: 4.4.3(supports-color@7.2.0) + minimatch: 10.2.6 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + '@typescript-eslint/scope-manager': 8.70.1 + '@typescript-eslint/types': 8.70.1 + '@typescript-eslint/typescript-estree': 8.70.1(supports-color@7.2.0)(typescript@5.4.5) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + '@typescript-eslint/scope-manager': 8.70.1 + '@typescript-eslint/types': 8.70.1 + '@typescript-eslint/typescript-estree': 8.70.1(supports-color@7.2.0)(typescript@5.9.3) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.70.1': + dependencies: + '@typescript-eslint/types': 8.70.1 + eslint-visitor-keys: 5.0.1 + + acorn-jsx@5.3.2(acorn@8.18.0): + dependencies: + acorn: 8.18.0 + + acorn@8.18.0: {} + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.8 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-includes@3.2.0: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + es-shim-unscopables: 1.1.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-shim-unscopables: 1.1.0 + + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + async-function@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + balanced-match@1.0.2: {} + + balanced-match@4.0.4: {} + + brace-expansion@1.1.21: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.1.7: + dependencies: + balanced-match: 1.0.2 + + brace-expansion@5.0.12: + dependencies: + balanced-match: 4.0.4 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + concat-map@0.0.1: {} + + crelt@1.0.7: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + debug@3.2.7(supports-color@7.2.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 7.2.0 + + debug@4.4.3(supports-color@7.2.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 7.2.0 + + deep-is@0.1.4: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + empathic@2.1.0: {} + + enhanced-resolve@5.25.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + + es-abstract-get@1.0.0: + dependencies: + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + is-callable: 1.2.7 + object-inspect: 1.13.4 + + es-abstract@1.24.2: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.4 + function.prototype.name: 1.2.0 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.2 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.4 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.11 + string.prototype.trimend: 1.0.10 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.5 + typed-array-length: 1.0.8 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.24 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.4.0: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + math-intrinsics: 1.1.0 + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.4 + + es-to-primitive@1.3.4: + dependencies: + es-abstract-get: 1.0.0 + es-define-property: 1.0.1 + es-errors: 1.3.0 + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + esbuild@0.25.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.5 + '@esbuild/android-arm': 0.25.5 + '@esbuild/android-arm64': 0.25.5 + '@esbuild/android-x64': 0.25.5 + '@esbuild/darwin-arm64': 0.25.5 + '@esbuild/darwin-x64': 0.25.5 + '@esbuild/freebsd-arm64': 0.25.5 + '@esbuild/freebsd-x64': 0.25.5 + '@esbuild/linux-arm': 0.25.5 + '@esbuild/linux-arm64': 0.25.5 + '@esbuild/linux-ia32': 0.25.5 + '@esbuild/linux-loong64': 0.25.5 + '@esbuild/linux-mips64el': 0.25.5 + '@esbuild/linux-ppc64': 0.25.5 + '@esbuild/linux-riscv64': 0.25.5 + '@esbuild/linux-s390x': 0.25.5 + '@esbuild/linux-x64': 0.25.5 + '@esbuild/netbsd-arm64': 0.25.5 + '@esbuild/netbsd-x64': 0.25.5 + '@esbuild/openbsd-arm64': 0.25.5 + '@esbuild/openbsd-x64': 0.25.5 + '@esbuild/sunos-x64': 0.25.5 + '@esbuild/win32-arm64': 0.25.5 + '@esbuild/win32-ia32': 0.25.5 + '@esbuild/win32-x64': 0.25.5 + + escape-string-regexp@4.0.0: {} + + eslint-compat-utils@0.5.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)): + dependencies: + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + semver: 7.8.5 + + eslint-import-resolver-node@0.3.10(supports-color@7.2.0): + dependencies: + debug: 3.2.7(supports-color@7.2.0) + is-core-module: 2.17.0 + resolve: 2.0.0-next.7 + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.14.0(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10(supports-color@7.2.0))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0): + dependencies: + debug: 3.2.7(supports-color@7.2.0) + optionalDependencies: + '@typescript-eslint/parser': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + eslint-import-resolver-node: 0.3.10(supports-color@7.2.0) + transitivePeerDependencies: + - supports-color + + eslint-plugin-depend@1.3.1: + dependencies: + empathic: 2.1.0 + module-replacements: 2.11.0 + semver: 7.8.5 + + eslint-plugin-es-x@7.8.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + '@eslint-community/regexpp': 4.12.2 + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + eslint-compat-utils: 0.5.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.2.0 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7(supports-color@7.2.0) + doctrine: 2.1.0 + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + eslint-import-resolver-node: 0.3.10(supports-color@7.2.0) + eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10(supports-color@7.2.0))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) + hasown: 2.0.4 + is-core-module: 2.17.0 + is-glob: 4.0.3 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.10 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-json-schema-validator@5.1.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + ajv: 8.20.0 + debug: 4.4.3(supports-color@7.2.0) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + eslint-compat-utils: 0.5.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + json-schema-migrate: 2.0.0 + jsonc-eslint-parser: 2.4.2 + minimatch: 8.0.7 + synckit: 0.9.3 + toml-eslint-parser: 0.9.3 + tunnel-agent: 0.6.0 + yaml-eslint-parser: 1.3.2 + transitivePeerDependencies: + - supports-color + + eslint-plugin-n@17.10.3(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + enhanced-resolve: 5.25.1 + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + eslint-plugin-es-x: 7.8.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + get-tsconfig: 4.14.3 + globals: 15.15.0 + ignore: 5.3.2 + minimatch: 9.0.9 + semver: 7.8.5 + + eslint-plugin-no-unsanitized@4.1.5(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)): + dependencies: + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + + eslint-plugin-obsidianmd@0.3.0(@eslint/js@9.39.5)(@eslint/json@0.14.0)(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(obsidian@1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6))(supports-color@7.2.0)(typescript-eslint@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)): + dependencies: + '@eslint/config-helpers': 0.4.2 + '@eslint/js': 9.39.5 + '@eslint/json': 0.14.0 + '@microsoft/eslint-plugin-sdl': 1.1.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + '@types/eslint': 9.6.1 + '@types/node': 20.12.12 + '@typescript-eslint/types': 8.70.1 + '@typescript-eslint/utils': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.4.5) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + eslint-plugin-depend: 1.3.1 + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) + eslint-plugin-json-schema-validator: 5.1.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) + eslint-plugin-no-unsanitized: 4.1.5(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + eslint-plugin-security: 2.1.1 + globals: 14.0.0 + obsidian: 1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6) + semver: 7.8.5 + typescript: 5.4.5 + typescript-eslint: 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-react@7.37.3(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)): + dependencies: + array-includes: 3.2.0 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.4.0 + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + estraverse: 5.3.0 + hasown: 2.0.4 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.5 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.7 + semver: 6.3.1 + string.prototype.matchall: 4.1.0 + string.prototype.repeat: 1.0.0 + + eslint-plugin-security@1.4.0: + dependencies: + safe-regex: 1.1.0 + + eslint-plugin-security@2.1.1: + dependencies: + safe-regex: 2.1.1 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2(supports-color@7.2.0) + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.7(supports-color@7.2.0) + '@eslint/js': 9.39.5 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@7.2.0) + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + eslint-visitor-keys: 4.2.1 + + espree@9.6.1: + dependencies: + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + eslint-visitor-keys: 3.4.3 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.1.8: {} + + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.4 + keyv: 4.5.4 + + flatted@3.4.4: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + function-bind@1.1.2: {} + + function.prototype.name@1.2.0: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + es-define-property: 1.0.1 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + hasown: 2.0.4 + is-callable: 1.2.7 + is-document.all: 1.0.0 + + functions-have-names@1.2.3: {} + + generator-function@2.0.1: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-tsconfig@4.14.3: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globals@15.15.0: {} + + globals@17.12.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + has-bigints@1.1.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + ignore@5.3.2: {} + + ignore@7.0.10: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.4 + side-channel: 1.1.1 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-core-module@2.17.0: + dependencies: + hasown: 2.0.4 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-document.all@1.0.0: + dependencies: + call-bound: 1.0.4 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.24 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + jiti@2.7.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.3.2: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-migrate@2.0.0: + dependencies: + ajv: 8.20.0 + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + jsonc-eslint-parser@2.4.2: + dependencies: + acorn: 8.18.0 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + semver: 7.8.5 + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.2.0 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + math-intrinsics@1.1.0: {} + + minimatch@10.2.6: + dependencies: + brace-expansion: 5.0.12 + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.21 + + minimatch@8.0.7: + dependencies: + brace-expansion: 2.1.7 + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.7 + + minimist@1.2.8: {} + + module-replacements@2.11.0: {} + + moment@2.29.4: {} + + ms@2.1.3: {} + + natural-compare@1.4.0: {} + + node-exports-info@1.6.2: + dependencies: + array.prototype.flatmap: 1.3.3 + es-errors: 1.3.0 + object.entries: 1.1.9 + semver: 6.3.1 + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.9: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + obsidian@1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6): + dependencies: + '@codemirror/state': 6.5.0 + '@codemirror/view': 6.38.6 + '@types/codemirror': 5.60.8 + moment: 2.29.4 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + own-keys@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + picomatch@4.0.7: {} + + possible-typed-array-names@1.1.0: {} + + prelude-ls@1.2.1: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + punycode@2.3.1: {} + + react-is@16.13.1: {} + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regexp-tree@0.1.27: {} + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + require-from-string@2.0.2: {} + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@2.0.0-next.7: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.17.0 + node-exports-info: 1.6.2 + object-keys: 1.1.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + ret@0.1.15: {} + + safe-array-concat@1.1.4: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safe-regex@1.1.0: + dependencies: + ret: 0.1.15 + + safe-regex@2.1.1: + dependencies: + regexp-tree: 0.1.27 + + semver@6.3.1: {} + + semver@7.8.5: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + sortablejs@1.15.7: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + string.prototype.matchall@4.1.0: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.1 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.24.2 + + string.prototype.trim@1.2.11: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + has-property-descriptors: 1.0.2 + safe-regex-test: 1.1.0 + + string.prototype.trimend@1.0.10: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + strip-bom@3.0.0: {} + + strip-json-comments@3.1.1: {} + + style-mod@4.1.4: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + synckit@0.9.3: + dependencies: + '@pkgr/core': 0.1.2 + tslib: 2.8.1 + + tapable@2.3.3: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + + toml-eslint-parser@0.9.3: + dependencies: + eslint-visitor-keys: 3.4.3 + + ts-api-utils@2.5.0(typescript@5.4.5): + dependencies: + typescript: 5.4.5 + + ts-api-utils@2.5.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + tsc@2.0.4: {} + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.8.1: {} + + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.5: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.8: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typescript-eslint@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.70.1(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.70.1(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + typescript@5.4.5: {} + + typescript@5.9.3: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@5.26.5: {} + + undici-types@6.21.0: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + w3c-keyname@2.2.8: {} + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.2.0 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.24 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.24: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yaml-eslint-parser@1.3.2: + dependencies: + eslint-visitor-keys: 3.4.3 + yaml: 2.9.1 + + yaml@2.9.1: {} + + yocto-queue@0.1.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..49c0ad7 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +allowBuilds: + esbuild: false diff --git a/src/i18n.ts b/src/i18n.ts index 83a9f6d..3e0066c 100644 --- a/src/i18n.ts +++ b/src/i18n.ts @@ -84,6 +84,13 @@ const ZH: Record = { 'modal.groupExample': '例如:自定义、项目、团队', 'modal.groupIdDesc': '分组的唯一标识符(仅限小写字母、数字、连字符)', 'modal.groupIdExample': '例如:custom-group', + 'modal.groupNoteProperty': '笔记筛选属性', + 'modal.groupNotePropertyDesc': '设置后,此分组会显示匹配该 frontmatter 属性值的笔记下拉框。Tasks 查询中的 query.file 将指向所选笔记。', + 'modal.groupNotePropertyExample': '例如:project', + 'modal.groupNoteValues': '属性值筛选', + 'modal.groupNoteValuesDesc': '仅显示该属性包含所选值之一的笔记。不选则匹配任何非空值。', + 'modal.groupNoteValuesAny': '任意非空值', + 'modal.groupNoteValuesNone': '没有笔记使用此属性', 'modal.icon': '图标', 'modal.iconDesc': '从下拉列表中选择,或搜索任意 Obsidian 图标名(不在列表里也能用)', 'modal.iconExample': '例如:folder', @@ -118,6 +125,10 @@ const ZH: Record = { 'nav.about': '关于', 'nav.general': '全局', 'nav.groups': '分组', + 'view.group.selectNote': '选择 {group} 笔记', + 'view.group.noMatchingNotes': '没有包含该属性值的笔记', + 'view.group.limit': '上限', + 'view.group.limitDesc': '此分组每个查询最多显示的任务数(留空则使用查询自身设置)', 'panel.collapse': '收起 ↑', 'panel.doneToday': '今日完成', 'panel.doneWeek': '本周完成', @@ -275,6 +286,13 @@ const EN: Record = { 'modal.groupExample': 'e.g. Custom, Project, Team', 'modal.groupIdDesc': 'Unique identifier of the group (lowercase letters, digits and hyphens only)', 'modal.groupIdExample': 'e.g. custom-group', + 'modal.groupNoteProperty': 'Note selector property', + 'modal.groupNotePropertyDesc': 'When set, this group shows a dropdown of notes matching this frontmatter property. Tasks queries will use the selected note as query.file.', + 'modal.groupNotePropertyExample': 'e.g. project', + 'modal.groupNoteValues': 'Property values', + 'modal.groupNoteValuesDesc': 'Only show notes whose property contains one of the selected values. Leave empty to match any non-empty value.', + 'modal.groupNoteValuesAny': 'Any non-empty value', + 'modal.groupNoteValuesNone': 'No notes use this property', 'modal.icon': 'Icon', 'modal.iconDesc': 'Pick from the dropdown, or search any Obsidian icon name (custom names work too)', 'modal.iconExample': 'e.g. folder', @@ -309,6 +327,10 @@ const EN: Record = { 'nav.about': 'About', 'nav.general': 'General', 'nav.groups': 'Groups', + 'view.group.selectNote': 'Select {group} note', + 'view.group.noMatchingNotes': 'No notes with this property value', + 'view.group.limit': 'Limit', + 'view.group.limitDesc': 'Maximum tasks per query in this group (empty uses the query\'s own limit)', 'panel.collapse': 'Collapse ↑', 'panel.doneToday': 'Done today', 'panel.doneWeek': 'Done this week', diff --git a/src/modals/board-config-modal.ts b/src/modals/board-config-modal.ts index 751a708..2c88dfd 100644 --- a/src/modals/board-config-modal.ts +++ b/src/modals/board-config-modal.ts @@ -1,7 +1,7 @@ import { App, Notice } from 'obsidian'; import type TaskViewsPlugin from '../main'; -import type { TabConfig, TabGroup } from '../types'; -import { getTabGroup } from '../types'; +import type { TabConfig, TabGroup, TabGroupConfig } from '../types'; +import { getFrontmatterValue, getTabGroup, normalizeFrontmatterValues } from '../types'; import { TAB_GROUPS } from '../settings'; import { TFEditModal } from './tf-edit-modal'; import { ConfirmModal } from './confirm-modal'; @@ -297,16 +297,18 @@ export class TabEditModal extends TFEditModal { * 分组编辑弹窗 */ export class GroupEditModal extends TFEditModal { - private group: { id: string; label: string; icon: string }; - private onSave: (group: { id: string; label: string; icon: string }) => void; + private group: TabGroupConfig; + private onSave: (group: TabGroupConfig) => void; + private valuesHost: HTMLElement | null = null; + private valuesRefreshTimer: number | null = null; constructor( app: App, - group: { id: string; label: string; icon: string }, - onSave: (group: { id: string; label: string; icon: string }) => void, + group: TabGroupConfig, + onSave: (group: TabGroupConfig) => void, ) { super(app); - this.group = { ...group }; + this.group = { ...group, frontmatterValues: group.frontmatterValues ? [...group.frontmatterValues] : undefined }; this.onSave = onSave; this.forceSave = !group.id; } @@ -357,6 +359,98 @@ export class GroupEditModal extends TFEditModal { this.markDirty(); }, }); + + this.addField({ + key: 'frontmatterProperty', + label: t('modal.groupNoteProperty'), + description: t('modal.groupNotePropertyDesc'), + type: 'text', + placeholder: t('modal.groupNotePropertyExample'), + value: this.group.frontmatterProperty ?? '', + onChange: (v) => { + const property = (v as string).trim(); + if (property !== (this.group.frontmatterProperty ?? '')) { + this.group.frontmatterValues = undefined; + } + this.group.frontmatterProperty = property || undefined; + this.markDirty(); + this.scheduleValuesRefresh(); + }, + }); + + this.valuesHost = this.formEl?.createDiv({ cls: 'tf-field' }) ?? null; + this.renderValuesPicker(); + } + + onClose(): void { + if (this.valuesRefreshTimer !== null) window.clearTimeout(this.valuesRefreshTimer); + super.onClose(); + } + + private scheduleValuesRefresh(): void { + if (this.valuesRefreshTimer !== null) window.clearTimeout(this.valuesRefreshTimer); + this.valuesRefreshTimer = window.setTimeout(() => { + this.valuesRefreshTimer = null; + this.renderValuesPicker(); + }, 300); + } + + private collectPropertyValues(property: string): string[] { + const values = new Set(); + for (const file of this.app.vault.getMarkdownFiles()) { + const raw = getFrontmatterValue(this.app.metadataCache.getFileCache(file)?.frontmatter, property); + for (const value of normalizeFrontmatterValues(raw)) values.add(value); + } + return [...values].sort((a, b) => a.localeCompare(b)); + } + + private renderValuesPicker(): void { + const host = this.valuesHost; + if (!host) return; + host.empty(); + const property = this.group.frontmatterProperty?.trim(); + if (!property) { + host.hide(); + return; + } + host.show(); + + const labelText = host.createEl('label', { cls: 'tf-field-label' }).createDiv({ cls: 'tf-field-label-text' }); + labelText.createSpan({ cls: 'tf-field-name', text: t('modal.groupNoteValues') }); + labelText.createSpan({ cls: 'tf-field-desc', text: t('modal.groupNoteValuesDesc') }); + + const selected = new Set(this.group.frontmatterValues ?? []); + // Keep previously saved values visible even if no note currently uses them + const options = [...new Set([...this.collectPropertyValues(property), ...selected])] + .sort((a, b) => a.localeCompare(b)); + + const dropdown = host.createDiv({ cls: 'tf-field-input-wrapper' }).createEl('details', { cls: 'tf-multiselect' }); + const summary = dropdown.createEl('summary', { cls: 'tf-field-select tf-multiselect-summary' }); + const updateSummary = () => { + summary.textContent = selected.size + ? [...selected].join(', ') + : t('modal.groupNoteValuesAny'); + }; + updateSummary(); + + const list = dropdown.createDiv({ cls: 'tf-multiselect-list' }); + if (options.length === 0) { + list.createDiv({ cls: 'tf-multiselect-empty', text: t('modal.groupNoteValuesNone') }); + return; + } + for (const value of options) { + const row = list.createEl('label', { cls: 'tf-multiselect-option' }); + const checkbox = row.createEl('input', { attr: { type: 'checkbox' } }); + checkbox.checked = selected.has(value); + row.createSpan({ text: value }); + checkbox.addEventListener('change', () => { + if (checkbox.checked) selected.add(value); + else selected.delete(value); + this.group.frontmatterValues = selected.size ? [...selected] : undefined; + updateSummary(); + this.markDirty(); + }); + } } protected doSave(): void { diff --git a/src/settings.ts b/src/settings.ts index bf0b92f..7e4d557 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -1,6 +1,6 @@ import { App, PluginSettingTab, TFile, setIcon } from 'obsidian'; import type TaskViewsPlugin from './main'; -import type { Board, OpenLocation, TabConfig, TabGroup, TaskViewsSettings } from './types'; +import type { Board, OpenLocation, TabConfig, TabGroup, TabGroupConfig, TaskViewsSettings } from './types'; import { clampCoverPosition, COVER_DIR, @@ -1380,7 +1380,7 @@ export class SettingsManager { } /** 打开编辑分组的模态框 */ - private openGroupEditModal(group: { id: string; label: string; icon: string }): void { + private openGroupEditModal(group: TabGroupConfig): void { const modal = new GroupEditModal(this.plugin.app, group, (updatedGroup) => { const index = this.plugin.settings.data.groups.findIndex((g) => g.id === group.id); if (index === -1) return; diff --git a/src/types.ts b/src/types.ts index a171d31..9b93874 100644 --- a/src/types.ts +++ b/src/types.ts @@ -19,6 +19,39 @@ export interface TabGroupConfig { id: string; label: string; icon: string; + frontmatterProperty?: string; + /** Empty/undefined means any non-empty value matches */ + frontmatterValues?: string[]; + /** Appended as `limit N` to every query in this group */ + taskLimit?: number; +} + +/** Read a frontmatter property, falling back to a case-insensitive key match. */ +export function getFrontmatterValue(frontmatter: Record | undefined, property: string): unknown { + if (!frontmatter) return undefined; + if (property in frontmatter) return frontmatter[property]; + const lower = property.toLowerCase(); + const key = Object.keys(frontmatter).find((k) => k.toLowerCase() === lower); + return key === undefined ? undefined : frontmatter[key]; +} + +/** Flatten a frontmatter value (list, comma-separated string, or wikilink) into non-empty strings. */ +export function normalizeFrontmatterValues(value: unknown): string[] { + if (value === undefined || value === null) return []; + if (Array.isArray(value)) return value.flatMap((item) => normalizeFrontmatterValues(item)); + if (typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'boolean') return []; + const parts = typeof value === 'string' ? value.split(/,(?![^[]*\]\])/) : [String(value)]; + return parts + .map((part) => part.trim().replace(/^\[\[([^\]|#]+)(?:[#|][^\]]*)?\]\]$/, '$1').trim()) + .filter((part) => part !== ''); +} + +export function matchesFrontmatterFilter(value: unknown, wanted: string[] | undefined): boolean { + const values = normalizeFrontmatterValues(value); + if (values.length === 0) return false; + if (!wanted || wanted.length === 0) return true; + const wantedSet = new Set(wanted.map((item) => item.toLowerCase())); + return values.some((item) => wantedSet.has(item.toLowerCase())); } /** @@ -72,7 +105,7 @@ export interface TaskViewsData { excludedFolders: string; globalTabs: TabConfig[]; // Global default tabs boards: Board[]; // All boards (including default dashboard) - groups: { id: string, label: string, icon: string }[]; // Available tab groups + groups: TabGroupConfig[]; // Available tab groups /* ── 头部(工作台头部横幅)─────────────────────────── 对应 Lyra 的 wbTitle + banner:名字可自定义,封面图可换可移除。 */ workbenchTitle: string; // 头部大字,也是「工作台名」 diff --git a/src/view.ts b/src/view.ts index 14c8325..3e7f765 100644 --- a/src/view.ts +++ b/src/view.ts @@ -5,6 +5,8 @@ import { clampCoverPosition, DEFAULT_IMPORTANT_QUERY, getTabGroup, + getFrontmatterValue, + matchesFrontmatterFilter, resolveSlogan, DEFAULT_WORKBENCH_TITLE, } from './types'; @@ -188,6 +190,8 @@ export class TaskFlowView extends ItemView { private activeGroup: TabGroup = 'gtd'; private activeTab: TabId = 'gtd-inbox'; private activeTabByGroup: Record = {}; + private selectedGroupNotePaths: Record = {}; + private groupNoteSelectorEl: HTMLElement | null = null; private cacheManager: ScanCache; // Group tab elements @@ -295,6 +299,84 @@ export class TaskFlowView extends ItemView { .sort((a, b) => a.order - b.order); } + private getGroupNoteFiles(group: TabGroup): TFile[] { + const config = this.getGroups().find((item) => item.id === group); + const property = config?.frontmatterProperty?.trim(); + if (!property) return []; + return this.app.vault.getMarkdownFiles() + .filter((file) => matchesFrontmatterFilter( + getFrontmatterValue(this.app.metadataCache.getFileCache(file)?.frontmatter, property), + config?.frontmatterValues, + )) + .sort((left, right) => left.path.localeCompare(right.path)); + } + + private getSelectedGroupNote(group: TabGroup): TFile | undefined { + const selectedPath = this.selectedGroupNotePaths[group]; + return this.getGroupNoteFiles(group).find((file) => file.path === selectedPath); + } + + private renderGroupNoteSelector(): void { + const host = this.groupNoteSelectorEl; + if (!host) return; + host.empty(); + const group = this.getGroups().find((item) => item.id === this.activeGroup); + if (!group) return; + if (group.frontmatterProperty?.trim()) this.renderGroupNoteSelect(host, group); + this.renderGroupLimitInput(host, group); + } + + private renderGroupLimitInput(host: HTMLElement, group: TabGroupConfig): void { + const input = host.createEl('input', { + cls: 'tasks-view-group-limit-input', + attr: { + type: 'number', + min: '1', + step: '1', + placeholder: t('view.group.limit'), + title: t('view.group.limitDesc'), + 'aria-label': t('view.group.limitDesc'), + }, + }); + input.value = group.taskLimit ? String(group.taskLimit) : ''; + input.addEventListener('change', () => { + const parsed = parseInt(input.value, 10); + const limit = Number.isFinite(parsed) && parsed > 0 ? parsed : undefined; + input.value = limit ? String(limit) : ''; + if (limit === group.taskLimit) return; + group.taskLimit = limit; + void this.plugin.saveHeadSettings(); + void this.renderActiveTabGuarded(); + }); + } + + private renderGroupNoteSelect(host: HTMLElement, group: TabGroupConfig): void { + const files = this.getGroupNoteFiles(this.activeGroup); + let selectedPath = this.selectedGroupNotePaths[this.activeGroup]; + if (!files.some((file) => file.path === selectedPath)) { + selectedPath = files[0]?.path ?? ''; + this.selectedGroupNotePaths[this.activeGroup] = selectedPath; + } + + const select = host.createEl('select', { + cls: 'tasks-view-group-note-select', + attr: { 'aria-label': t('view.group.selectNote', { group: group.label }) }, + }); + if (files.length === 0) { + select.createEl('option', { text: t('view.group.noMatchingNotes') }); + select.disabled = true; + return; + } + for (const file of files) { + select.createEl('option', { text: file.path.replace(/\.md$/i, ''), value: file.path }); + } + select.value = selectedPath; + select.addEventListener('change', () => { + this.selectedGroupNotePaths[this.activeGroup] = select.value; + void this.renderActiveTabGuarded(); + }); + } + /** * 让 activeGroup / activeTab / activeTabByGroup 始终指向真实存在的分组与 tab。 * 设置面板里删除或改组 tab 之后,旧的记忆值会失效,必须在重建界面时校正, @@ -666,6 +748,8 @@ export class TaskFlowView extends ItemView { btn.addEventListener('click', () => this.switchGroup(g.id)); this.groupBtns[g.id] = btn; } + this.groupNoteSelectorEl = bar.createDiv({ cls: 'tasks-view-group-note-selector' }); + this.renderGroupNoteSelector(); } /** @@ -682,6 +766,7 @@ export class TaskFlowView extends ItemView { } this.applyTabVisibility(); + this.renderGroupNoteSelector(); // 新分组的激活 tab 内容尚未渲染过,必须渲染一次,否则面板是空的 // (renderQueries 现在只渲染激活 tab,所以是懒渲染的关键入口) @@ -1029,6 +1114,7 @@ export class TaskFlowView extends ItemView { private async renderQueries() { const epoch = ++this.renderEpoch; + this.renderGroupNoteSelector(); // 只渲染「当前激活的 tab」:非激活 tab 的面板被 display:none 隐藏, // 用户切到时才按需渲染(见 switchTab / switchGroup)。大 vault 上每个 tab 的 @@ -1037,6 +1123,9 @@ export class TaskFlowView extends ItemView { if (!tab) return; const body = this.tabBodies[tab.id]; if (!body) return; + const groupConfig = this.getGroups().find((item) => item.id === this.activeGroup); + const hasNoteSelector = Boolean(groupConfig?.frontmatterProperty?.trim()); + const selectedNote = hasNoteSelector ? this.getSelectedGroupNote(this.activeGroup) : undefined; // 确保 observer 在位(buildTabSection 已挂,这里幂等兜底) this.observeBody(body, tab); @@ -1054,16 +1143,21 @@ export class TaskFlowView extends ItemView { const key = 'tab:' + tab.id; const comp = this.freshRenderComponent(key); this.pruneRenderComponents(new Set([key, 'important'])); + if (hasNoteSelector && !selectedNote) { + this.renderEmptyState(body, tab); + return; + } - // 查询文本**原样**交给 Tasks,一个字都不改:树状与否完全由 query 自己 - // 决定(写了 `show tree` 才树状,没写就是 Tasks 的默认——扁平)。 - // 这是 Tasks 原生语义,也避免我们注入的指令和它的行为打架。 + // 查询文本原样交给 Tasks(树状与否完全由 query 自己决定)。 + // Only exception: the group limit is appended last so it overrides any limit in the query. + const groupLimit = groupConfig?.taskLimit; + const query = groupLimit ? `${tab.query}\nlimit ${groupLimit}` : tab.query; const t0 = performance.now(); await MarkdownRenderer.render( this.app, - '```tasks\n' + tab.query + '\n```', + '```tasks\n' + query + '\n```', body, - '', + selectedNote?.path ?? '', comp, ); const ms = performance.now() - t0; @@ -1436,6 +1530,19 @@ export class TaskFlowView extends ItemView { } }) ); + + // Frontmatter edits change which notes the group note selector offers + this.registerEvent( + this.app.metadataCache.on('changed', () => { + const group = this.getGroups().find((item) => item.id === this.activeGroup); + if (!group?.frontmatterProperty?.trim()) return; + const before = this.selectedGroupNotePaths[this.activeGroup]; + this.renderGroupNoteSelector(); + if (this.selectedGroupNotePaths[this.activeGroup] !== before) { + void this.renderActiveTabGuarded(); + } + }), + ); } // ── Quick add ─────────────────────────────────────── diff --git a/styles.css b/styles.css index 085c798..fc8e295 100644 --- a/styles.css +++ b/styles.css @@ -483,6 +483,76 @@ border-radius: var(--tf-r-pill); } +.tasks-view-group-note-selector { + display: flex; + gap: var(--tf-s-2); + padding-top: var(--tf-s-2); +} + +.tasks-view-group-note-select { + flex: 1 1 auto; + width: 100%; + min-width: 0; + padding: 7px 10px; + color: var(--tf-text); + background: var(--tf-surface); + border: 1px solid var(--tf-hairline-soft); + border-radius: 6px; +} + +.tasks-view-group-limit-input { + flex: 0 0 80px; + width: 80px; + padding: 7px 10px; + color: var(--tf-text); + background: var(--tf-surface); + border: 1px solid var(--tf-hairline-soft); + border-radius: 6px; +} + +.tf-multiselect { + position: relative; + width: 100%; +} + +.tf-multiselect-summary { + display: block; + width: 100%; + box-sizing: border-box; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + cursor: pointer; + list-style: none; +} + +.tf-multiselect-summary::-webkit-details-marker { + display: none; +} + +.tf-multiselect-list { + max-height: 200px; + overflow-y: auto; + margin-top: 4px; + padding: 4px; + border: 1px solid var(--tf-hairline-soft); + border-radius: 6px; + background: var(--tf-surface); +} + +.tf-multiselect-option { + display: flex; + align-items: center; + gap: 8px; + padding: 4px 6px; + cursor: pointer; +} + +.tf-multiselect-empty { + padding: 4px 6px; + color: var(--tf-muted); +} + /* category-tab */.tasks-view-group-btn.tasks-view-group-btn{ flex: 1 1 0; min-width: 0; From 6cec93589f114dfcec7fc063de1fd271a5b39fa4 Mon Sep 17 00:00:00 2001 From: Wouter Ernsting Date: Mon, 28 Sep 2026 21:02:30 +1000 Subject: [PATCH 2/2] addressing commments from plugin owner --- .gitignore | 1 + main.js | 2 +- package.json | 8 +- pnpm-lock.yaml | 3159 ------------------------------------------- pnpm-workspace.yaml | 2 - src/view.ts | 2 +- 6 files changed, 5 insertions(+), 3169 deletions(-) delete mode 100644 pnpm-lock.yaml delete mode 100644 pnpm-workspace.yaml diff --git a/.gitignore b/.gitignore index 3c3629e..af07e85 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules +data.json diff --git a/main.js b/main.js index b92c176..0f61e17 100644 --- a/main.js +++ b/main.js @@ -72,7 +72,7 @@ sort by due`,"modal.renderFail":"\u26A0 This dialog failed to render","modal.ren `)[0]?.trim()??"";return o("settings.tab.metaLine",{query:e,order:a.order})}confirmDeleteGroup(a){new z(this.plugin.app,o("settings.confirm.deleteGroup",{name:a.label}),()=>{let e=this.plugin.settings.data;e.globalTabs=e.globalTabs.filter(s=>I(s,e.groups)!==a.id);let t=e.groups.findIndex(s=>s.id===a.id);t!==-1&&e.groups.splice(t,1),this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(o("toast.groupDeleted"),"success")})}).open()}confirmDeleteTab(a){new z(this.plugin.app,o("settings.confirm.deleteTab",{name:R(a)}),()=>{let e=this.plugin.settings.data.globalTabs.indexOf(a);e!==-1&&(this.plugin.settings.data.globalTabs.splice(e,1),this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(o("toast.tabDeleted"),"success")}))}).open()}rebuildUI(){this.contentEl&&this.constructUI(this.contentEl,this.heading)}async saveSettings(){await this.plugin.saveSettings()}openTabEditModal(a){H.launch(new se(this.plugin.app,this.plugin,a,e=>{let t=this.plugin.settings.data.globalTabs.findIndex(s=>s.id===a.id);t!==-1&&(this.plugin.settings.data.globalTabs[t]=e,this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(o("toast.tabUpdated"),"success")}))}),o("modal.editTabDialog"))}openAddTabModal(a){let e={id:`tab_${Date.now()}`,label:o("settings.newTab"),query:`not done group by filename limit 10`,showSectionHeader:!1,order:this.plugin.settings.data.globalTabs.length+1,group:a};H.launch(new se(this.plugin.app,this.plugin,e,t=>{this.plugin.settings.data.globalTabs.push(t),this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(o("toast.tabCreated"),"success")})},!0),o("modal.newTabDialog"))}openGroupEditModal(a){let e=new ae(this.plugin.app,a,t=>{let s=this.plugin.settings.data.groups.findIndex(i=>i.id===a.id);s!==-1&&(this.plugin.settings.data.groups[s]=t,this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(o("toast.groupUpdated"),"success")}))});H.launch(e,o("modal.editGroupDialog"))}openAddGroupModal(){let a=new ae(this.plugin.app,{id:"",label:"",icon:"folder"},e=>{let t=e.id.toLowerCase().replace(/[^a-z0-9]/g,"-"),s=t,i=1;for(;this.plugin.settings.data.groups.some(r=>r.id===s);)s=`${t}-${i}`,i++;e.id=s,this.plugin.settings.data.groups.push(e),this.saveSettings().then(()=>{this.plugin.refreshAllViews(),this.rebuildUI(),y(o("toast.groupCreated"),"success")})});H.launch(a,o("modal.newGroupDialog"))}},be=class extends D.PluginSettingTab{constructor(a,e){super(a,e),this.plugin=e,this.settingsManager=new Pe(e)}display(){let{containerEl:a}=this;a.empty(),a.addClass("taskflow-setting-tab"),this.settingsManager.constructUI(a,"TaskFlow Settings")}hide(){}};var v=require("obsidian");var Te=[19416,19168,42352,21717,53856,55632,91476,22176,39632,21970,19168,42422,42192,53840,119381,46400,54944,44450,38320,84343,18800,42160,46261,27216,27968,109396,11104,38256,21234,18800,25958,54432,59984,28309,23248,11104,100067,37600,116951,51536,54432,120998,46416,22176,107956,9680,37584,53938,43344,46423,27808,46416,86869,19872,42416,83315,21168,43432,59728,27296,44710,43856,19296,43748,42352,21088,62051,55632,23383,22176,38608,19925,19152,42192,54484,53840,54616,46400,46496,103846,38320,18864,43380,42160,45690,27216,27968,44870,43872,38256,19189,18800,25776,29859,59984,27480,21952,43872,38613,37600,51552,55636,54432,55888,30034,22176,43959,9680,37584,51893,43344,46240,47780,44368,21977,19360,42416,86390,21168,43312,31060,27296,44368,23378,19296,42726,42208,53856,60005,54576,23200,30371,38608,19195,19152,42192,118966,53840,54560,56645,46496,22224,21938,18864,42359,42160,43600,111189,27936,44448,84835,37744,18936,18800,25776,92326,59984,27424,108228,43744,41696,53987,51552,54615,54432,55888,23893,22176,42704,21972,21200,43448,43344,46240,46758,44368,21920,43940,42416,21168,45683,26928,29495,27296,44368,84821,19296,42352,21732,53600,59752,54560,55968,92838,22224,19168,43476,41680,53584,62034,54560],Ht=["\u6B63","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D","\u4E03","\u516B","\u4E5D","\u5341","\u51AC","\u814A"],At=["\u521D\u4E00","\u521D\u4E8C","\u521D\u4E09","\u521D\u56DB","\u521D\u4E94","\u521D\u516D","\u521D\u4E03","\u521D\u516B","\u521D\u4E5D","\u521D\u5341","\u5341\u4E00","\u5341\u4E8C","\u5341\u4E09","\u5341\u56DB","\u5341\u4E94","\u5341\u516D","\u5341\u4E03","\u5341\u516B","\u5341\u4E5D","\u4E8C\u5341","\u5EFF\u4E00","\u5EFF\u4E8C","\u5EFF\u4E09","\u5EFF\u56DB","\u5EFF\u4E94","\u5EFF\u516D","\u5EFF\u4E03","\u5EFF\u516B","\u5EFF\u4E5D","\u4E09\u5341"],Ot=["\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"],Nt=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Bt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function ve(n){return String(n).padStart(2,"0")}function _t(n){let a=Te[n-1900],e=348;for(let t=32768;t>8;t>>=1)a&t&&(e+=1);return e+Xe(n)}function Xe(n){return Je(n)?Te[n-1900]&65536?30:29:0}function Je(n){return Te[n-1900]&15}function Vt(n,a){return Te[n-1900]&65536>>a?30:29}function Ut(n){let a=Je(n),e=[];for(let t=1;t<=12;t++)e.push({month:t,leap:!1,days:Vt(n,t)}),t===a&&e.push({month:t,leap:!0,days:Xe(n)});return e}function et(n){let a=n.getFullYear(),e=n.getMonth()+1,t=n.getDate();if(a<1900||a>2100)return"";let s=Math.round((Date.UTC(a,e-1,t)-Date.UTC(1900,0,31))/864e5),i=1900;for(;i<2101;){let r=_t(i);if(s30?"":(r.leap?"\u95F0":"")+Ht[r.month-1]+"\u6708"+At[l-1]}s-=r.days}return""}function tt(n,a){return(a==="en"?Nt:Ot)[n.getDay()]??""}function st(n,a){let e=ve(n.getHours())+":"+ve(n.getMinutes());return a==="en"?`${Bt[n.getMonth()]??""} ${n.getDate()}, ${n.getFullYear()} ${e}`:n.getFullYear()+"/"+ve(n.getMonth()+1)+"/"+ve(n.getDate())+" "+e}var qt={" ":"todo","/":"in-progress",x:"done",X:"done",">":"migrated","-":"cancel",p:"pending",w:"waiting"},Wt=/^(\s*)- \[(.)\] (.*)$/,zt=/(\d{4}-\d{2}-\d{2})/,$t=[{emoji:"\u23F3",key:"scheduled"},{emoji:"\u{1F4C5}",key:"due"},{emoji:"\u{1F6EB}",key:"startDate"},{emoji:"\u2705",key:"completionDate"},{emoji:"\u2795",key:"createdDate"}];function Qt(n,a,e){let t=Wt.exec(n);if(!t)return null;let s=t[1]??"",i=t[2]??" ",r=t[3]??"",l=qt[i]??"todo",c={file:a,line:e,indent:s.length,status:l,description:r,scheduled:null,due:null,recurrence:null,priority:"normal",startDate:null,completionDate:null,createdDate:null,taskId:null,dependsOn:null,heading:null,children:[]};for(let{emoji:p,key:g}of $t){let T=r.indexOf(p);if(T!==-1){let m=r.slice(T+p.length).trimStart(),x=zt.exec(m);x&&x[1]&&(c[g]=x[1])}}let d=r.indexOf("\u{1F501}");if(d!==-1){let p=r.slice(d+2).trim(),g=p.search(/[⏳📅🛫✅➕⏫🔼🔽⬇🆔⛔]/gu);c.recurrence=g===-1?p:p.slice(0,g).trim()}r.includes("\u23EB")?c.priority="highest":r.includes("\u{1F53C}")?c.priority="high":r.includes("\u{1F53D}")?c.priority="low":r.includes("\u2B07\uFE0F")&&(c.priority="lowest");let h=/🆔\s*(\S+)/.exec(r);h?.[1]&&(c.taskId=h[1]);let u=/⛔\s*(\S+)/.exec(r);return u?.[1]&&(c.dependsOn=u[1]),c.description=r.replace(/[⏳📅🛫✅➕]\s*\d{4}-\d{2}-\d{2}/gu,"").replace(/🔁[^⏳📅🛫✅➕⏫🔼🔽⬇🆔⛔]*/gu,"").replace(/[⏫🔼🔽⬇🆔⛔]\s*\S*/gu,"").replace(/\s{2,}/g," ").trim(),c}async function at(n,a){let e;try{e=await a.vault.read(n)}catch{return[]}let t=e.split(` -`),s=[],i=null;for(let r=0;rh.trim()).filter(h=>h.length>0),s=this.app.vault.getMarkdownFiles(),i=[],r=0,l=0;for(let h of s){if(this.isExcluded(h.path,t))continue;let u=h.path,p=this.cache.get(u),g=h.stat;if(p&&p.mtime===g.mtime)r++,i.push(...this.cloneTasks(p.tasks));else{l++;let m=await this.getFileTasks(h);m.length>0&&i.push(...m)}}this.cleanupCache(s.map(h=>h.path));let c=performance.now()-e,d=this.getStats();return this.debug&&this.log(`[ScanCache] Loaded ${i.length} tasks (cache: ${r} hits, ${l} misses, ${d.cachedFiles} stored) in ${c.toFixed(1)}ms`),i}cloneTasks(a){return a.map(e=>({...e,children:this.cloneTasks(e.children)}))}async getFileTasks(a){try{let t=a.stat.mtime,s=a.path,i=this.cache.get(s);if(i&&i.mtime===t)return this.debug&&this.log(`[Cache] HIT: ${a.path}`),this.cloneTasks(i.tasks);this.debug&&this.log(`[Cache] MISS: ${a.path}`);let r=await at(a,this.app),l=this.buildTaskHierarchy(r);if(this.cache.size>=this.maxSize){let c=this.cache.keys().next().value;c&&(this.cache.delete(c),this.debug&&this.log(`[Cache] Evicted: ${c}`))}return this.cache.set(s,{file:a,mtime:t,tasks:l}),l}catch(e){return console.warn("[ScanCache] Failed to process file, skipping:",a.path,e),[]}}buildTaskHierarchy(a){let e=[],t=[];for(let s of a){for(;t.length>0&&(t[t.length-1]?.indent??0)>=s.indent;)t.pop();let i=t[t.length-1];i?i.children.push(s):e.push(s),t.push(s)}return e}migrateCacheKey(a,e){if(this.cache.has(a)){let t=this.cache.get(a);this.cache.delete(a),this.cache.set(e,t),this.debug&&this.log(`[Cache] Renamed: ${a} -> ${e}`)}}cleanupCache(a){let e=new Set(a),t=0;for(let s of this.cache.keys())e.has(s)||(this.cache.delete(s),t++);this.debug&&t>0&&this.log(`[Cache] Cleaned up ${t} stale entries`)}log(a){console.warn(a)}isExcluded(a,e){return e.some(t=>{let s=t.trim();return s.length>0&&a.startsWith(s+"/")})}getStats(){return{cachedFiles:this.cache.size,parsedFiles:0}}clear(){this.cache.clear()}get size(){return this.cache.size}};var V="taskflow-view",it=250,ot="obsidian-tasks-plugin";function Yt(n){let a=n.plugins;return[a.plugins[ot],a[ot]].filter(t=>typeof t?.getTasks=="function")}var Kt={todo:"TODO","in-progress":"IN_PROGRESS",done:"DONE",cancel:"CANCELLED",migrated:"TODO",pending:"TODO",waiting:"TODO"};function Ge(n){if(!n)return null;if(typeof n=="string")return n;let a=n;return typeof a.format=="function"?a.format("YYYY-MM-DD"):null}function dt(n){return n.flatMap(a=>[a,...dt(a.children)])}function jt(){let n=new Date,a=n.getFullYear(),e=String(n.getMonth()+1).padStart(2,"0"),t=String(n.getDate()).padStart(2,"0");return`${a}-${e}-${t}`}function nt(n){return String(n).padStart(2,"0")}function pt(n,a){let e=n.split("-").map(Number),t=e[0]??0,s=e[1]??1,i=e[2]??1,r=new Date(t,s-1,i+a);return`${r.getFullYear()}-${nt(r.getMonth()+1)}-${nt(r.getDate())}`}function Zt(n){let a=n.split("-").map(Number),e=a[0]??0,t=a[1]??1,s=a[2]??1,i=(new Date(e,t-1,s).getDay()+6)%7;return pt(n,-i)}var Xt=3e4,Jt=400,rt=1200,es=40,lt=[800,2e3,5e3],ct=1500,ye=class extends v.ItemView{constructor(e,t){super(e);this.statTasks=[];this.activeGroup="gtd";this.activeTab="gtd-inbox";this.activeTabByGroup={};this.selectedGroupNotePaths={};this.groupNoteSelectorEl=null;this.groupBtns={};this.tabBtns={};this.tabPanels={};this.tabBodies={};this.tabCounts={};this.tabCollapsed={};this.tabGroups={};this.emptyGroupEl=null;this.emptyGroupTitleEl=null;this.renderEpoch=0;this.emptyTimers=new WeakMap;this.renderComponents=new Map;this.statsEl=null;this.statsChevron=null;this.progressFill=null;this.statsPct=null;this.pillOverdue=null;this.pillInProgress=null;this.pillTodo=null;this.pillCancel=null;this.pillDone=null;this.pillTotal=null;this.toTodoEl=null;this.toDoneEl=null;this.toInProgressEl=null;this.toOverdueEl=null;this.toWeekEl=null;this.toRingTodayDial=null;this.toRingTodayText=null;this.toRingWeekDial=null;this.toRingWeekText=null;this.importantBodyEl=null;this.importantMoreEl=null;this.importantExpanded=!1;this.importantEmptyTimer=null;this.headTimeEl=null;this.headMetaEl=null;this.headClockTimer=null;this.refreshBusy=!1;this.refreshQueued=!1;this.statsTimer=null;this.contentTimer=null;this.zeroRetryTimer=null;this.zeroRetries=0;this.countTimers=new WeakMap;this.observedBodies=new WeakSet;this.observedImportantBodies=new WeakSet;this.plugin=t,this.cacheManager=new we(t.app),this.syncActiveTab()}getGroups(){return this.plugin.settings.data.groups||[]}getTabsForGroup(e){let t=this.getGroups();return[...this.getTabs()].filter(s=>I(s,t)===e).sort((s,i)=>s.order-i.order)}getGroupNoteFiles(e){let t=this.getGroups().find(i=>i.id===e),s=t?.frontmatterProperty?.trim();return s?this.app.vault.getMarkdownFiles().filter(i=>_e(le(this.app.metadataCache.getFileCache(i)?.frontmatter,s),t?.frontmatterValues)).sort((i,r)=>i.path.localeCompare(r.path)):[]}getSelectedGroupNote(e){let t=this.selectedGroupNotePaths[e];return this.getGroupNoteFiles(e).find(s=>s.path===t)}renderGroupNoteSelector(){let e=this.groupNoteSelectorEl;if(!e)return;e.empty();let t=this.getGroups().find(s=>s.id===this.activeGroup);t&&(t.frontmatterProperty?.trim()&&this.renderGroupNoteSelect(e,t),this.renderGroupLimitInput(e,t))}renderGroupLimitInput(e,t){let s=e.createEl("input",{cls:"tasks-view-group-limit-input",attr:{type:"number",min:"1",step:"1",placeholder:o("view.group.limit"),title:o("view.group.limitDesc"),"aria-label":o("view.group.limitDesc")}});s.value=t.taskLimit?String(t.taskLimit):"",s.addEventListener("change",()=>{let i=parseInt(s.value,10),r=Number.isFinite(i)&&i>0?i:void 0;s.value=r?String(r):"",r!==t.taskLimit&&(t.taskLimit=r,this.plugin.saveHeadSettings(),this.renderActiveTabGuarded())})}renderGroupNoteSelect(e,t){let s=this.getGroupNoteFiles(this.activeGroup),i=this.selectedGroupNotePaths[this.activeGroup];s.some(l=>l.path===i)||(i=s[0]?.path??"",this.selectedGroupNotePaths[this.activeGroup]=i);let r=e.createEl("select",{cls:"tasks-view-group-note-select",attr:{"aria-label":o("view.group.selectNote",{group:t.label})}});if(s.length===0){r.createEl("option",{text:o("view.group.noMatchingNotes")}),r.disabled=!0;return}for(let l of s)r.createEl("option",{text:l.path.replace(/\.md$/i,""),value:l.path});r.value=i,r.addEventListener("change",()=>{this.selectedGroupNotePaths[this.activeGroup]=r.value,this.renderActiveTabGuarded()})}syncActiveTab(){let e=this.getGroups();for(let s of e){let i=this.getTabsForGroup(s.id);if(i.length===0){delete this.activeTabByGroup[s.id];continue}let r=this.activeTabByGroup[s.id];(!r||!i.some(l=>l.id===r))&&(this.activeTabByGroup[s.id]=i[0].id)}e.length>0&&!e.some(s=>s.id===this.activeGroup)&&(this.activeGroup=e[0].id);let t=this.getTabsForGroup(this.activeGroup);this.activeTab=t.length>0?this.activeTabByGroup[this.activeGroup]??t[0].id:""}getViewType(){return V}getDisplayText(){return"TaskFlow"}getIcon(){return"checkmark"}async onOpen(){this.addAction("settings","TaskFlow settings",()=>{this.app.setting.open(),this.app.setting.openTabById("taskflow")}),this.buildShell(),await this.refresh(),this.registerVaultWatcher()}async onClose(){this.stopHeadClock(),this.statsTimer&&window.clearTimeout(this.statsTimer),this.contentTimer&&window.clearTimeout(this.contentTimer),this.clearZeroRetry(),this.unloadAllRenderComponents(),this.cacheManager.clear()}buildShell(){this.unloadAllRenderComponents();let e=this.containerEl.children[1];e.empty(),e.addClass("tasks-view-container"),this.groupBtns={},this.tabBtns={},this.tabPanels={},this.tabBodies={},this.tabCounts={},this.tabCollapsed={},this.tabGroups={},this.emptyGroupEl=null,this.emptyGroupTitleEl=null,this.stopHeadClock(),this.headTimeEl=null,this.headMetaEl=null,this.statsEl=null,this.statsChevron=null,this.toTodoEl=null,this.toDoneEl=null,this.toInProgressEl=null,this.toOverdueEl=null,this.toWeekEl=null,this.toRingTodayDial=null,this.toRingTodayText=null,this.toRingWeekDial=null,this.toRingWeekText=null,this.importantBodyEl=null,this.importantMoreEl=null,this.importantExpanded=!1,this.importantEmptyTimer&&(window.clearTimeout(this.importantEmptyTimer),this.importantEmptyTimer=null),this.syncActiveTab(),this.renderWorkbenchHead(e),this.headTimeEl&&this.startHeadClock();let t=e.createDiv({cls:"tasks-view-main"}),s=this.plugin.settings.data;if(s.showTodayOverview||s.showImportantReminders){let i=t.createDiv({cls:"tf-panels"});s.showTodayOverview&&this.renderTodayOverview(i),s.showImportantReminders&&this.renderImportantModule(i)}this.renderQuickAdd(t),this.renderGroupTabs(t),this.renderTabs(t),this.buildStatsShell(t)}renderWorkbenchHead(e){let t=this.plugin.settings.data,s=t.showCover??!0,i=t.showHeadText??!0;if(!s&&!i)return;let r=e.createDiv({cls:"tf-head"});r.toggleClass("is-cover-only",s&&!i),r.toggleClass("is-text-only",i&&!s),s&&this.renderCover(r),i&&this.renderHeadText(r)}renderHeadText(e){let t=this.plugin.settings.data,s=e.createDiv({cls:"tf-head-row"}),i=s.createDiv({cls:"tf-head-left"}),r=(t.workbenchTitle??"").trim()||P;i.createDiv({cls:"tf-head-title",text:r});let l=Ve(t.workbenchSlogan);l&&i.createDiv({cls:"tf-head-slogan",text:l});let c=s.createDiv({cls:"tf-head-right"});this.headTimeEl=c.createDiv({cls:"tf-head-time"}),this.headMetaEl=c.createDiv({cls:"tf-head-meta"}),this.renderHeadClock()}renderHeadClock(){if(!this.headTimeEl||!this.headMetaEl)return;let e=new Date,t=Ne();this.headTimeEl.setText(st(e,t));let s=t==="zh"?et(e):"";this.headMetaEl.setText(tt(e,t)+(s?o("head.lunarSep")+s:""))}startHeadClock(){this.stopHeadClock(),this.headClockTimer=window.setInterval(()=>this.renderHeadClock(),Xt)}stopHeadClock(){this.headClockTimer!==null&&(window.clearInterval(this.headClockTimer),this.headClockTimer=null)}renderCover(e){let t=this.plugin.settings.data,s=e.createDiv({cls:"tf-head-cover"}),i=he(this.app,t.coverImagePath);if(i||this.mountDefaultBanner(s),i){s.addClass("has-cover");let d=s.createEl("img",{cls:"tf-head-cover-img",attr:{alt:"",draggable:"false"}});d.src=this.app.vault.getResourcePath(i),this.applyCoverPosition(d,t.coverPosition),d.addEventListener("error",()=>{d.remove(),s.removeClass("has-cover"),this.mountDefaultBanner(s)}),this.bindCoverDrag(d,s)}let r=s.createDiv({cls:"tf-head-cover-bar"}),l=s.createEl("input",{cls:"tf-head-cover-file",attr:{type:"file",accept:"image/*"}});l.addEventListener("change",()=>void this.onCoverPicked(l)),r.createEl("button",{cls:"tf-head-cover-btn",text:i?o("head.changeBanner"):o("head.uploadBanner"),attr:{type:"button"}}).addEventListener("click",()=>l.click()),i&&r.createEl("button",{cls:"tf-head-cover-btn",text:o("common.remove"),attr:{type:"button"}}).addEventListener("click",()=>void this.onCoverRemoved())}mountDefaultBanner(e){if(e.querySelector(".tf-head-cover-default"))return;e.addClass("is-default-banner");let t=e.createDiv({cls:"tf-head-cover-default"});$(t,Ye(o("banner.line")))||(console.error("[TaskFlow] \u9ED8\u8BA4\u6A2A\u5E45\u6E32\u67D3\u5931\u8D25"),e.removeClass("is-default-banner"),t.remove())}applyCoverPosition(e,t){e.style.setProperty("--tf-cover-pos",`${W(t)}%`)}bindCoverDrag(e,t){e.addEventListener("mousedown",s=>{if(s.button!==0)return;s.preventDefault();let i=this.plugin.settings.data,r=s.clientY,l=Math.max(1,t.getBoundingClientRect().height),c=W(i.coverPosition),d=!1,h=p=>{let g=p.clientY-r;!d&&Math.abs(g)<4||(d=!0,i.coverPosition=W(c-g/l*100),this.applyCoverPosition(e,i.coverPosition))},u=()=>{document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",u),d&&this.plugin.saveHeadSettings()};document.addEventListener("mousemove",h),document.addEventListener("mouseup",u)})}async onCoverPicked(e){let t=e.files?.[0];if(e.value="",!!t)try{await ge(this.plugin,t),new v.Notice(o("toast.bannerUpdated"))}catch(s){console.error("[TaskFlow] \u4FDD\u5B58\u6A2A\u5E45\u5931\u8D25:",s),new v.Notice(o("toast.bannerSaveFail")+(s instanceof Error?s.message:String(s)))}}async onCoverRemoved(){try{await me(this.plugin),new v.Notice(o("toast.bannerRemoved"))}catch(e){console.error("[TaskFlow] \u79FB\u9664\u6A2A\u5E45\u5931\u8D25:",e),new v.Notice(o("toast.bannerRemoveFail")+(e instanceof Error?e.message:String(e)))}}renderGroupTabs(e){let t=e.createDiv({cls:"tasks-view-group-bar"}),s=t.createDiv({cls:"tasks-view-group-segment"});for(let i of this.getGroups()){let r=s.createEl("button",{cls:"tasks-view-group-btn"+(this.activeGroup===i.id?" is-active":""),attr:{title:i.label}});(0,v.setIcon)(r.createSpan("tasks-view-group-icon"),i.icon),r.createSpan({cls:"tasks-view-group-label",text:i.label}),r.addEventListener("click",()=>this.switchGroup(i.id)),this.groupBtns[i.id]=r}this.groupNoteSelectorEl=t.createDiv({cls:"tasks-view-group-note-selector"}),this.renderGroupNoteSelector()}switchGroup(e){if(e!==this.activeGroup){this.activeGroup=e,this.syncActiveTab();for(let t of this.getGroups()){let s=this.groupBtns[t.id];s&&s.toggleClass("is-active",t.id===e)}this.applyTabVisibility(),this.renderGroupNoteSelector(),this.renderActiveTabGuarded()}}applyTabVisibility(){let e=!1;for(let t of Object.keys(this.tabBtns)){let s=this.tabGroups[t]===this.activeGroup,i=s&&t===this.activeTab;s&&(e=!0);let r=this.tabBtns[t];r&&(r.toggleClass("is-hidden",!s),r.toggleClass("is-active",i));let l=this.tabPanels[t];l&&l.toggleClass("is-hidden",!i)}this.emptyGroupEl&&this.emptyGroupEl.toggleClass("is-hidden",e),this.updateEmptyGroupLabel()}renderTabs(e){let t=this.getGroups(),s=[...this.getTabs()].sort((c,d)=>c.order-d.order),r=e.createDiv({cls:"tasks-view-tab-bar"}).createDiv({cls:"tasks-view-tab-segment"}),l=e.createDiv({cls:"tasks-view-tab-panels"});for(let c of s){let d=I(c,t);this.tabGroups[c.id]=d;let h=r.createEl("button",{cls:"tasks-view-tab-btn",text:R(c)});h.addEventListener("click",()=>this.switchTab(c.id)),this.tabBtns[c.id]=h,this.tabCollapsed[c.id]=!1;let u=l.createDiv({cls:"tasks-view-tab-panel tasks-view-scroll"});this.tabPanels[c.id]=u;let p={...c,showSectionHeader:c.showSectionHeader??!0};this.buildTabSection(u,p)}this.emptyGroupEl=l.createDiv({cls:"tasks-view-empty-group"}),this.emptyGroupEl.createDiv({cls:"tasks-view-empty-group-icon",text:"\u{1F5C2}"}),this.emptyGroupTitleEl=this.emptyGroupEl.createDiv({cls:"tasks-view-empty-group-title"}),this.emptyGroupEl.createDiv({cls:"tasks-view-empty-group-desc",text:o("empty.noTabsHint")}),this.applyTabVisibility()}updateEmptyGroupLabel(){if(!this.emptyGroupTitleEl)return;let e=this.getGroups().find(t=>t.id===this.activeGroup)?.label??o("common.thisGroup");this.emptyGroupTitleEl.setText(o("view.empty.noTabsInGroup",{name:e}))}buildTabSection(e,t){let s=e.createDiv({cls:"tasks-view-section"}),i=s.createDiv({cls:"tasks-view-section-header"}),r=i.createDiv({cls:"tasks-view-section-chevron"});(0,v.setIcon)(r,"chevron-down"),i.createSpan({cls:"tasks-view-section-title",text:R(t)});let l=i.createSpan({cls:"tasks-view-section-count",text:"0"});this.tabCounts[t.id]=l;let c=s.createDiv({cls:"tasks-view-section-body"});this.tabBodies[t.id]=c,this.observeBody(c,t),t.showSectionHeader?i.addEventListener("click",()=>{let d=this.tabCollapsed[t.id]??!1;this.tabCollapsed[t.id]=!d,c.toggleClass("is-collapsed",!d),(0,v.setIcon)(r,d?"chevron-down":"chevron-right")}):i.addClass("is-hidden")}switchTab(e){e!==this.activeTab&&(this.activeTab=e,this.activeTabByGroup[this.activeGroup]=e,this.applyTabVisibility(),this.renderActiveTabGuarded())}async refresh(){if(this.refreshBusy){this.refreshQueued=!0;return}this.refreshBusy=!0;try{await this.runRefresh()}finally{this.refreshBusy=!1}this.refreshQueued&&(this.refreshQueued=!1,this.refresh())}async runRefresh(){let e="own";try{let t=await this.getVaultTasks();this.statTasks=t.tasks,e=t.source}catch(t){console.error("[TaskFlow] \u83B7\u53D6\u4EFB\u52A1\u5931\u8D25\uFF0C\u6CBF\u7528\u4E0A\u4E00\u6B21\u7ED3\u679C:",t),this.statTasks=this.statTasks??[]}this.statTasks.length>0?this.clearZeroRetry():(console.warn(`[TaskFlow] \u7EDF\u8BA1\u5230 0 \u4E2A\u4EFB\u52A1\uFF08\u6570\u636E\u6765\u81EA${e==="tasks"?"Tasks \u63D2\u4EF6":"\u81EA\u5E26\u626B\u63CF"}\uFF09 \u2014\u2014 \u82E5 vault \u91CC\u786E\u5B9E\u6709\u4EFB\u52A1\uFF0C\u8BF7\u786E\u8BA4 Tasks \u63D2\u4EF6\u5DF2\u542F\u7528\uFF0C\u4E14\u5B83\u7684 Global Filter / Global Query \u6CA1\u6709\u628A\u4EFB\u52A1\u8FC7\u6EE4\u6389\u3002`),this.scheduleZeroRetry());try{await this.renderQueries()}catch(t){console.error("[TaskFlow] \u6E32\u67D3\u67E5\u8BE2\u5931\u8D25:",t)}try{await this.renderImportantReminders()}catch(t){console.error("[TaskFlow] \u6E32\u67D3\u91CD\u8981\u63D0\u9192\u5931\u8D25:",t)}this.updateStats()}scheduleRefresh(){this.statsTimer&&window.clearTimeout(this.statsTimer),this.statsTimer=window.setTimeout(()=>void this.refreshStats(),Jt),this.contentTimer&&window.clearTimeout(this.contentTimer),this.contentTimer=window.setTimeout(()=>void this.refreshContent(),rt)}scheduleZeroRetry(){if(this.zeroRetries>=lt.length)return;let e=lt[this.zeroRetries];this.zeroRetries++,this.zeroRetryTimer&&window.clearTimeout(this.zeroRetryTimer),this.zeroRetryTimer=window.setTimeout(()=>{this.zeroRetryTimer=null,this.refresh()},e)}clearZeroRetry(){this.zeroRetryTimer&&(window.clearTimeout(this.zeroRetryTimer),this.zeroRetryTimer=null),this.zeroRetries=0}async refreshStats(){if(!this.refreshBusy){this.refreshBusy=!0;try{try{let e=await this.getVaultTasks();this.statTasks=e.tasks,e.tasks.length>0&&this.clearZeroRetry()}catch(e){console.error("[TaskFlow] \u83B7\u53D6\u4EFB\u52A1\u5931\u8D25\uFF0C\u6CBF\u7528\u4E0A\u4E00\u6B21\u7ED3\u679C:",e),this.statTasks=this.statTasks??[]}this.updateStats()}finally{this.refreshBusy=!1}}}async refreshContent(){if(this.refreshBusy){this.contentTimer&&window.clearTimeout(this.contentTimer),this.contentTimer=window.setTimeout(()=>void this.refreshContent(),rt);return}this.refreshBusy=!0;try{await this.renderQueries()}catch(e){console.error("[TaskFlow] \u6E32\u67D3\u67E5\u8BE2\u5931\u8D25:",e)}try{await this.renderImportantReminders()}catch(e){console.error("[TaskFlow] \u6E32\u67D3\u91CD\u8981\u63D0\u9192\u5931\u8D25:",e)}finally{this.refreshBusy=!1}}freshRenderComponent(e){let t=this.renderComponents.get(e);if(t){try{t.unload()}catch(i){console.error(`[TaskFlow] \u5378\u8F7D\u65E7\u6E32\u67D3\u7EC4\u4EF6\u5931\u8D25\uFF08${e}\uFF09:`,i)}this.renderComponents.delete(e)}let s=new v.Component;return s.load(),this.renderComponents.set(e,s),s}pruneRenderComponents(e){for(let[t,s]of[...this.renderComponents])if(!e.has(t)){try{s.unload()}catch(i){console.error(`[TaskFlow] \u5378\u8F7D\u6E32\u67D3\u7EC4\u4EF6\u5931\u8D25\uFF08${t}\uFF09:`,i)}this.renderComponents.delete(t)}}unloadAllRenderComponents(){for(let[e,t]of[...this.renderComponents])try{t.unload()}catch(s){console.error(`[TaskFlow] \u5378\u8F7D\u6E32\u67D3\u7EC4\u4EF6\u5931\u8D25\uFF08${e}\uFF09:`,s)}this.renderComponents.clear()}async renderQueries(){let e=++this.renderEpoch;this.renderGroupNoteSelector();let t=this.getTabs().find(c=>c.id===this.activeTab);if(!t)return;let s=this.tabBodies[t.id];if(!s)return;let i=this.getGroups().find(c=>c.id===this.activeGroup),r=!!i?.frontmatterProperty?.trim(),l=r?this.getSelectedGroupNote(this.activeGroup):void 0;this.observeBody(s,t);try{s.empty();let c=s.parentElement;c&&c.removeClass("tasks-view-empty-state");let d="tab:"+t.id,h=this.freshRenderComponent(d);if(this.pruneRenderComponents(new Set([d,"important"])),r&&!l){this.renderEmptyState(s,t);return}let u=i?.taskLimit,p=u?`${t.query} +`),s=[],i=null;for(let r=0;rh.trim()).filter(h=>h.length>0),s=this.app.vault.getMarkdownFiles(),i=[],r=0,l=0;for(let h of s){if(this.isExcluded(h.path,t))continue;let u=h.path,p=this.cache.get(u),g=h.stat;if(p&&p.mtime===g.mtime)r++,i.push(...this.cloneTasks(p.tasks));else{l++;let m=await this.getFileTasks(h);m.length>0&&i.push(...m)}}this.cleanupCache(s.map(h=>h.path));let c=performance.now()-e,d=this.getStats();return this.debug&&this.log(`[ScanCache] Loaded ${i.length} tasks (cache: ${r} hits, ${l} misses, ${d.cachedFiles} stored) in ${c.toFixed(1)}ms`),i}cloneTasks(a){return a.map(e=>({...e,children:this.cloneTasks(e.children)}))}async getFileTasks(a){try{let t=a.stat.mtime,s=a.path,i=this.cache.get(s);if(i&&i.mtime===t)return this.debug&&this.log(`[Cache] HIT: ${a.path}`),this.cloneTasks(i.tasks);this.debug&&this.log(`[Cache] MISS: ${a.path}`);let r=await at(a,this.app),l=this.buildTaskHierarchy(r);if(this.cache.size>=this.maxSize){let c=this.cache.keys().next().value;c&&(this.cache.delete(c),this.debug&&this.log(`[Cache] Evicted: ${c}`))}return this.cache.set(s,{file:a,mtime:t,tasks:l}),l}catch(e){return console.warn("[ScanCache] Failed to process file, skipping:",a.path,e),[]}}buildTaskHierarchy(a){let e=[],t=[];for(let s of a){for(;t.length>0&&(t[t.length-1]?.indent??0)>=s.indent;)t.pop();let i=t[t.length-1];i?i.children.push(s):e.push(s),t.push(s)}return e}migrateCacheKey(a,e){if(this.cache.has(a)){let t=this.cache.get(a);this.cache.delete(a),this.cache.set(e,t),this.debug&&this.log(`[Cache] Renamed: ${a} -> ${e}`)}}cleanupCache(a){let e=new Set(a),t=0;for(let s of this.cache.keys())e.has(s)||(this.cache.delete(s),t++);this.debug&&t>0&&this.log(`[Cache] Cleaned up ${t} stale entries`)}log(a){console.warn(a)}isExcluded(a,e){return e.some(t=>{let s=t.trim();return s.length>0&&a.startsWith(s+"/")})}getStats(){return{cachedFiles:this.cache.size,parsedFiles:0}}clear(){this.cache.clear()}get size(){return this.cache.size}};var V="taskflow-view",it=250,ot="obsidian-tasks-plugin";function Yt(n){let a=n.plugins;return[a.plugins[ot],a[ot]].filter(t=>typeof t?.getTasks=="function")}var Kt={todo:"TODO","in-progress":"IN_PROGRESS",done:"DONE",cancel:"CANCELLED",migrated:"TODO",pending:"TODO",waiting:"TODO"};function Ge(n){if(!n)return null;if(typeof n=="string")return n;let a=n;return typeof a.format=="function"?a.format("YYYY-MM-DD"):null}function dt(n){return n.flatMap(a=>[a,...dt(a.children)])}function jt(){let n=new Date,a=n.getFullYear(),e=String(n.getMonth()+1).padStart(2,"0"),t=String(n.getDate()).padStart(2,"0");return`${a}-${e}-${t}`}function nt(n){return String(n).padStart(2,"0")}function pt(n,a){let e=n.split("-").map(Number),t=e[0]??0,s=e[1]??1,i=e[2]??1,r=new Date(t,s-1,i+a);return`${r.getFullYear()}-${nt(r.getMonth()+1)}-${nt(r.getDate())}`}function Zt(n){let a=n.split("-").map(Number),e=a[0]??0,t=a[1]??1,s=a[2]??1,i=(new Date(e,t-1,s).getDay()+6)%7;return pt(n,-i)}var Xt=3e4,Jt=400,rt=1200,es=40,lt=[800,2e3,5e3],ct=1500,ye=class extends v.ItemView{constructor(e,t){super(e);this.statTasks=[];this.activeGroup="gtd";this.activeTab="gtd-inbox";this.activeTabByGroup={};this.selectedGroupNotePaths={};this.groupNoteSelectorEl=null;this.groupBtns={};this.tabBtns={};this.tabPanels={};this.tabBodies={};this.tabCounts={};this.tabCollapsed={};this.tabGroups={};this.emptyGroupEl=null;this.emptyGroupTitleEl=null;this.renderEpoch=0;this.emptyTimers=new WeakMap;this.renderComponents=new Map;this.statsEl=null;this.statsChevron=null;this.progressFill=null;this.statsPct=null;this.pillOverdue=null;this.pillInProgress=null;this.pillTodo=null;this.pillCancel=null;this.pillDone=null;this.pillTotal=null;this.toTodoEl=null;this.toDoneEl=null;this.toInProgressEl=null;this.toOverdueEl=null;this.toWeekEl=null;this.toRingTodayDial=null;this.toRingTodayText=null;this.toRingWeekDial=null;this.toRingWeekText=null;this.importantBodyEl=null;this.importantMoreEl=null;this.importantExpanded=!1;this.importantEmptyTimer=null;this.headTimeEl=null;this.headMetaEl=null;this.headClockTimer=null;this.refreshBusy=!1;this.refreshQueued=!1;this.statsTimer=null;this.contentTimer=null;this.zeroRetryTimer=null;this.zeroRetries=0;this.countTimers=new WeakMap;this.observedBodies=new WeakSet;this.observedImportantBodies=new WeakSet;this.plugin=t,this.cacheManager=new we(t.app),this.syncActiveTab()}getGroups(){return this.plugin.settings.data.groups||[]}getTabsForGroup(e){let t=this.getGroups();return[...this.getTabs()].filter(s=>I(s,t)===e).sort((s,i)=>s.order-i.order)}getGroupNoteFiles(e){let t=this.getGroups().find(i=>i.id===e),s=t?.frontmatterProperty?.trim();return s?this.app.vault.getMarkdownFiles().filter(i=>_e(le(this.app.metadataCache.getFileCache(i)?.frontmatter,s),t?.frontmatterValues)).sort((i,r)=>i.path.localeCompare(r.path)):[]}getSelectedGroupNote(e){let t=this.selectedGroupNotePaths[e];return this.getGroupNoteFiles(e).find(s=>s.path===t)}renderGroupNoteSelector(){let e=this.groupNoteSelectorEl;if(!e)return;e.empty();let t=this.getGroups().find(s=>s.id===this.activeGroup);t&&(t.frontmatterProperty?.trim()&&this.renderGroupNoteSelect(e,t),this.renderGroupLimitInput(e,t))}renderGroupLimitInput(e,t){let s=e.createEl("input",{cls:"tasks-view-group-limit-input",attr:{type:"number",min:"1",step:"1",placeholder:o("view.group.limit"),title:o("view.group.limitDesc"),"aria-label":o("view.group.limitDesc")}});s.value=t.taskLimit?String(t.taskLimit):"",s.addEventListener("change",()=>{let i=parseInt(s.value,10),r=Number.isFinite(i)&&i>0?i:void 0;s.value=r?String(r):"",r!==t.taskLimit&&(t.taskLimit=r,this.plugin.saveHeadSettings(),this.renderActiveTabGuarded())})}renderGroupNoteSelect(e,t){let s=this.getGroupNoteFiles(this.activeGroup),i=this.selectedGroupNotePaths[this.activeGroup]??"";s.some(l=>l.path===i)||(i=s[0]?.path??"",this.selectedGroupNotePaths[this.activeGroup]=i);let r=e.createEl("select",{cls:"tasks-view-group-note-select",attr:{"aria-label":o("view.group.selectNote",{group:t.label})}});if(s.length===0){r.createEl("option",{text:o("view.group.noMatchingNotes")}),r.disabled=!0;return}for(let l of s)r.createEl("option",{text:l.path.replace(/\.md$/i,""),value:l.path});r.value=i,r.addEventListener("change",()=>{this.selectedGroupNotePaths[this.activeGroup]=r.value,this.renderActiveTabGuarded()})}syncActiveTab(){let e=this.getGroups();for(let s of e){let i=this.getTabsForGroup(s.id);if(i.length===0){delete this.activeTabByGroup[s.id];continue}let r=this.activeTabByGroup[s.id];(!r||!i.some(l=>l.id===r))&&(this.activeTabByGroup[s.id]=i[0].id)}e.length>0&&!e.some(s=>s.id===this.activeGroup)&&(this.activeGroup=e[0].id);let t=this.getTabsForGroup(this.activeGroup);this.activeTab=t.length>0?this.activeTabByGroup[this.activeGroup]??t[0].id:""}getViewType(){return V}getDisplayText(){return"TaskFlow"}getIcon(){return"checkmark"}async onOpen(){this.addAction("settings","TaskFlow settings",()=>{this.app.setting.open(),this.app.setting.openTabById("taskflow")}),this.buildShell(),await this.refresh(),this.registerVaultWatcher()}async onClose(){this.stopHeadClock(),this.statsTimer&&window.clearTimeout(this.statsTimer),this.contentTimer&&window.clearTimeout(this.contentTimer),this.clearZeroRetry(),this.unloadAllRenderComponents(),this.cacheManager.clear()}buildShell(){this.unloadAllRenderComponents();let e=this.containerEl.children[1];e.empty(),e.addClass("tasks-view-container"),this.groupBtns={},this.tabBtns={},this.tabPanels={},this.tabBodies={},this.tabCounts={},this.tabCollapsed={},this.tabGroups={},this.emptyGroupEl=null,this.emptyGroupTitleEl=null,this.stopHeadClock(),this.headTimeEl=null,this.headMetaEl=null,this.statsEl=null,this.statsChevron=null,this.toTodoEl=null,this.toDoneEl=null,this.toInProgressEl=null,this.toOverdueEl=null,this.toWeekEl=null,this.toRingTodayDial=null,this.toRingTodayText=null,this.toRingWeekDial=null,this.toRingWeekText=null,this.importantBodyEl=null,this.importantMoreEl=null,this.importantExpanded=!1,this.importantEmptyTimer&&(window.clearTimeout(this.importantEmptyTimer),this.importantEmptyTimer=null),this.syncActiveTab(),this.renderWorkbenchHead(e),this.headTimeEl&&this.startHeadClock();let t=e.createDiv({cls:"tasks-view-main"}),s=this.plugin.settings.data;if(s.showTodayOverview||s.showImportantReminders){let i=t.createDiv({cls:"tf-panels"});s.showTodayOverview&&this.renderTodayOverview(i),s.showImportantReminders&&this.renderImportantModule(i)}this.renderQuickAdd(t),this.renderGroupTabs(t),this.renderTabs(t),this.buildStatsShell(t)}renderWorkbenchHead(e){let t=this.plugin.settings.data,s=t.showCover??!0,i=t.showHeadText??!0;if(!s&&!i)return;let r=e.createDiv({cls:"tf-head"});r.toggleClass("is-cover-only",s&&!i),r.toggleClass("is-text-only",i&&!s),s&&this.renderCover(r),i&&this.renderHeadText(r)}renderHeadText(e){let t=this.plugin.settings.data,s=e.createDiv({cls:"tf-head-row"}),i=s.createDiv({cls:"tf-head-left"}),r=(t.workbenchTitle??"").trim()||P;i.createDiv({cls:"tf-head-title",text:r});let l=Ve(t.workbenchSlogan);l&&i.createDiv({cls:"tf-head-slogan",text:l});let c=s.createDiv({cls:"tf-head-right"});this.headTimeEl=c.createDiv({cls:"tf-head-time"}),this.headMetaEl=c.createDiv({cls:"tf-head-meta"}),this.renderHeadClock()}renderHeadClock(){if(!this.headTimeEl||!this.headMetaEl)return;let e=new Date,t=Ne();this.headTimeEl.setText(st(e,t));let s=t==="zh"?et(e):"";this.headMetaEl.setText(tt(e,t)+(s?o("head.lunarSep")+s:""))}startHeadClock(){this.stopHeadClock(),this.headClockTimer=window.setInterval(()=>this.renderHeadClock(),Xt)}stopHeadClock(){this.headClockTimer!==null&&(window.clearInterval(this.headClockTimer),this.headClockTimer=null)}renderCover(e){let t=this.plugin.settings.data,s=e.createDiv({cls:"tf-head-cover"}),i=he(this.app,t.coverImagePath);if(i||this.mountDefaultBanner(s),i){s.addClass("has-cover");let d=s.createEl("img",{cls:"tf-head-cover-img",attr:{alt:"",draggable:"false"}});d.src=this.app.vault.getResourcePath(i),this.applyCoverPosition(d,t.coverPosition),d.addEventListener("error",()=>{d.remove(),s.removeClass("has-cover"),this.mountDefaultBanner(s)}),this.bindCoverDrag(d,s)}let r=s.createDiv({cls:"tf-head-cover-bar"}),l=s.createEl("input",{cls:"tf-head-cover-file",attr:{type:"file",accept:"image/*"}});l.addEventListener("change",()=>void this.onCoverPicked(l)),r.createEl("button",{cls:"tf-head-cover-btn",text:i?o("head.changeBanner"):o("head.uploadBanner"),attr:{type:"button"}}).addEventListener("click",()=>l.click()),i&&r.createEl("button",{cls:"tf-head-cover-btn",text:o("common.remove"),attr:{type:"button"}}).addEventListener("click",()=>void this.onCoverRemoved())}mountDefaultBanner(e){if(e.querySelector(".tf-head-cover-default"))return;e.addClass("is-default-banner");let t=e.createDiv({cls:"tf-head-cover-default"});$(t,Ye(o("banner.line")))||(console.error("[TaskFlow] \u9ED8\u8BA4\u6A2A\u5E45\u6E32\u67D3\u5931\u8D25"),e.removeClass("is-default-banner"),t.remove())}applyCoverPosition(e,t){e.style.setProperty("--tf-cover-pos",`${W(t)}%`)}bindCoverDrag(e,t){e.addEventListener("mousedown",s=>{if(s.button!==0)return;s.preventDefault();let i=this.plugin.settings.data,r=s.clientY,l=Math.max(1,t.getBoundingClientRect().height),c=W(i.coverPosition),d=!1,h=p=>{let g=p.clientY-r;!d&&Math.abs(g)<4||(d=!0,i.coverPosition=W(c-g/l*100),this.applyCoverPosition(e,i.coverPosition))},u=()=>{document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",u),d&&this.plugin.saveHeadSettings()};document.addEventListener("mousemove",h),document.addEventListener("mouseup",u)})}async onCoverPicked(e){let t=e.files?.[0];if(e.value="",!!t)try{await ge(this.plugin,t),new v.Notice(o("toast.bannerUpdated"))}catch(s){console.error("[TaskFlow] \u4FDD\u5B58\u6A2A\u5E45\u5931\u8D25:",s),new v.Notice(o("toast.bannerSaveFail")+(s instanceof Error?s.message:String(s)))}}async onCoverRemoved(){try{await me(this.plugin),new v.Notice(o("toast.bannerRemoved"))}catch(e){console.error("[TaskFlow] \u79FB\u9664\u6A2A\u5E45\u5931\u8D25:",e),new v.Notice(o("toast.bannerRemoveFail")+(e instanceof Error?e.message:String(e)))}}renderGroupTabs(e){let t=e.createDiv({cls:"tasks-view-group-bar"}),s=t.createDiv({cls:"tasks-view-group-segment"});for(let i of this.getGroups()){let r=s.createEl("button",{cls:"tasks-view-group-btn"+(this.activeGroup===i.id?" is-active":""),attr:{title:i.label}});(0,v.setIcon)(r.createSpan("tasks-view-group-icon"),i.icon),r.createSpan({cls:"tasks-view-group-label",text:i.label}),r.addEventListener("click",()=>this.switchGroup(i.id)),this.groupBtns[i.id]=r}this.groupNoteSelectorEl=t.createDiv({cls:"tasks-view-group-note-selector"}),this.renderGroupNoteSelector()}switchGroup(e){if(e!==this.activeGroup){this.activeGroup=e,this.syncActiveTab();for(let t of this.getGroups()){let s=this.groupBtns[t.id];s&&s.toggleClass("is-active",t.id===e)}this.applyTabVisibility(),this.renderGroupNoteSelector(),this.renderActiveTabGuarded()}}applyTabVisibility(){let e=!1;for(let t of Object.keys(this.tabBtns)){let s=this.tabGroups[t]===this.activeGroup,i=s&&t===this.activeTab;s&&(e=!0);let r=this.tabBtns[t];r&&(r.toggleClass("is-hidden",!s),r.toggleClass("is-active",i));let l=this.tabPanels[t];l&&l.toggleClass("is-hidden",!i)}this.emptyGroupEl&&this.emptyGroupEl.toggleClass("is-hidden",e),this.updateEmptyGroupLabel()}renderTabs(e){let t=this.getGroups(),s=[...this.getTabs()].sort((c,d)=>c.order-d.order),r=e.createDiv({cls:"tasks-view-tab-bar"}).createDiv({cls:"tasks-view-tab-segment"}),l=e.createDiv({cls:"tasks-view-tab-panels"});for(let c of s){let d=I(c,t);this.tabGroups[c.id]=d;let h=r.createEl("button",{cls:"tasks-view-tab-btn",text:R(c)});h.addEventListener("click",()=>this.switchTab(c.id)),this.tabBtns[c.id]=h,this.tabCollapsed[c.id]=!1;let u=l.createDiv({cls:"tasks-view-tab-panel tasks-view-scroll"});this.tabPanels[c.id]=u;let p={...c,showSectionHeader:c.showSectionHeader??!0};this.buildTabSection(u,p)}this.emptyGroupEl=l.createDiv({cls:"tasks-view-empty-group"}),this.emptyGroupEl.createDiv({cls:"tasks-view-empty-group-icon",text:"\u{1F5C2}"}),this.emptyGroupTitleEl=this.emptyGroupEl.createDiv({cls:"tasks-view-empty-group-title"}),this.emptyGroupEl.createDiv({cls:"tasks-view-empty-group-desc",text:o("empty.noTabsHint")}),this.applyTabVisibility()}updateEmptyGroupLabel(){if(!this.emptyGroupTitleEl)return;let e=this.getGroups().find(t=>t.id===this.activeGroup)?.label??o("common.thisGroup");this.emptyGroupTitleEl.setText(o("view.empty.noTabsInGroup",{name:e}))}buildTabSection(e,t){let s=e.createDiv({cls:"tasks-view-section"}),i=s.createDiv({cls:"tasks-view-section-header"}),r=i.createDiv({cls:"tasks-view-section-chevron"});(0,v.setIcon)(r,"chevron-down"),i.createSpan({cls:"tasks-view-section-title",text:R(t)});let l=i.createSpan({cls:"tasks-view-section-count",text:"0"});this.tabCounts[t.id]=l;let c=s.createDiv({cls:"tasks-view-section-body"});this.tabBodies[t.id]=c,this.observeBody(c,t),t.showSectionHeader?i.addEventListener("click",()=>{let d=this.tabCollapsed[t.id]??!1;this.tabCollapsed[t.id]=!d,c.toggleClass("is-collapsed",!d),(0,v.setIcon)(r,d?"chevron-down":"chevron-right")}):i.addClass("is-hidden")}switchTab(e){e!==this.activeTab&&(this.activeTab=e,this.activeTabByGroup[this.activeGroup]=e,this.applyTabVisibility(),this.renderActiveTabGuarded())}async refresh(){if(this.refreshBusy){this.refreshQueued=!0;return}this.refreshBusy=!0;try{await this.runRefresh()}finally{this.refreshBusy=!1}this.refreshQueued&&(this.refreshQueued=!1,this.refresh())}async runRefresh(){let e="own";try{let t=await this.getVaultTasks();this.statTasks=t.tasks,e=t.source}catch(t){console.error("[TaskFlow] \u83B7\u53D6\u4EFB\u52A1\u5931\u8D25\uFF0C\u6CBF\u7528\u4E0A\u4E00\u6B21\u7ED3\u679C:",t),this.statTasks=this.statTasks??[]}this.statTasks.length>0?this.clearZeroRetry():(console.warn(`[TaskFlow] \u7EDF\u8BA1\u5230 0 \u4E2A\u4EFB\u52A1\uFF08\u6570\u636E\u6765\u81EA${e==="tasks"?"Tasks \u63D2\u4EF6":"\u81EA\u5E26\u626B\u63CF"}\uFF09 \u2014\u2014 \u82E5 vault \u91CC\u786E\u5B9E\u6709\u4EFB\u52A1\uFF0C\u8BF7\u786E\u8BA4 Tasks \u63D2\u4EF6\u5DF2\u542F\u7528\uFF0C\u4E14\u5B83\u7684 Global Filter / Global Query \u6CA1\u6709\u628A\u4EFB\u52A1\u8FC7\u6EE4\u6389\u3002`),this.scheduleZeroRetry());try{await this.renderQueries()}catch(t){console.error("[TaskFlow] \u6E32\u67D3\u67E5\u8BE2\u5931\u8D25:",t)}try{await this.renderImportantReminders()}catch(t){console.error("[TaskFlow] \u6E32\u67D3\u91CD\u8981\u63D0\u9192\u5931\u8D25:",t)}this.updateStats()}scheduleRefresh(){this.statsTimer&&window.clearTimeout(this.statsTimer),this.statsTimer=window.setTimeout(()=>void this.refreshStats(),Jt),this.contentTimer&&window.clearTimeout(this.contentTimer),this.contentTimer=window.setTimeout(()=>void this.refreshContent(),rt)}scheduleZeroRetry(){if(this.zeroRetries>=lt.length)return;let e=lt[this.zeroRetries];this.zeroRetries++,this.zeroRetryTimer&&window.clearTimeout(this.zeroRetryTimer),this.zeroRetryTimer=window.setTimeout(()=>{this.zeroRetryTimer=null,this.refresh()},e)}clearZeroRetry(){this.zeroRetryTimer&&(window.clearTimeout(this.zeroRetryTimer),this.zeroRetryTimer=null),this.zeroRetries=0}async refreshStats(){if(!this.refreshBusy){this.refreshBusy=!0;try{try{let e=await this.getVaultTasks();this.statTasks=e.tasks,e.tasks.length>0&&this.clearZeroRetry()}catch(e){console.error("[TaskFlow] \u83B7\u53D6\u4EFB\u52A1\u5931\u8D25\uFF0C\u6CBF\u7528\u4E0A\u4E00\u6B21\u7ED3\u679C:",e),this.statTasks=this.statTasks??[]}this.updateStats()}finally{this.refreshBusy=!1}}}async refreshContent(){if(this.refreshBusy){this.contentTimer&&window.clearTimeout(this.contentTimer),this.contentTimer=window.setTimeout(()=>void this.refreshContent(),rt);return}this.refreshBusy=!0;try{await this.renderQueries()}catch(e){console.error("[TaskFlow] \u6E32\u67D3\u67E5\u8BE2\u5931\u8D25:",e)}try{await this.renderImportantReminders()}catch(e){console.error("[TaskFlow] \u6E32\u67D3\u91CD\u8981\u63D0\u9192\u5931\u8D25:",e)}finally{this.refreshBusy=!1}}freshRenderComponent(e){let t=this.renderComponents.get(e);if(t){try{t.unload()}catch(i){console.error(`[TaskFlow] \u5378\u8F7D\u65E7\u6E32\u67D3\u7EC4\u4EF6\u5931\u8D25\uFF08${e}\uFF09:`,i)}this.renderComponents.delete(e)}let s=new v.Component;return s.load(),this.renderComponents.set(e,s),s}pruneRenderComponents(e){for(let[t,s]of[...this.renderComponents])if(!e.has(t)){try{s.unload()}catch(i){console.error(`[TaskFlow] \u5378\u8F7D\u6E32\u67D3\u7EC4\u4EF6\u5931\u8D25\uFF08${t}\uFF09:`,i)}this.renderComponents.delete(t)}}unloadAllRenderComponents(){for(let[e,t]of[...this.renderComponents])try{t.unload()}catch(s){console.error(`[TaskFlow] \u5378\u8F7D\u6E32\u67D3\u7EC4\u4EF6\u5931\u8D25\uFF08${e}\uFF09:`,s)}this.renderComponents.clear()}async renderQueries(){let e=++this.renderEpoch;this.renderGroupNoteSelector();let t=this.getTabs().find(c=>c.id===this.activeTab);if(!t)return;let s=this.tabBodies[t.id];if(!s)return;let i=this.getGroups().find(c=>c.id===this.activeGroup),r=!!i?.frontmatterProperty?.trim(),l=r?this.getSelectedGroupNote(this.activeGroup):void 0;this.observeBody(s,t);try{s.empty();let c=s.parentElement;c&&c.removeClass("tasks-view-empty-state");let d="tab:"+t.id,h=this.freshRenderComponent(d);if(this.pruneRenderComponents(new Set([d,"important"])),r&&!l){this.renderEmptyState(s,t);return}let u=i?.taskLimit,p=u?`${t.query} limit ${u}`:t.query,g=performance.now();await v.MarkdownRenderer.render(this.app,"```tasks\n"+p+"\n```",s,l?.path??"",h);let T=performance.now()-g;if(T>ct&&console.warn(`[TaskFlow] Tab\u300C${R(t)}\u300D\u6E32\u67D3\u8017\u65F6 ${T.toFixed(0)}ms\uFF08\u8D85\u8FC7 ${ct}ms\uFF0C\u591A\u534A\u662F\u8FD9\u6761 query \u592A\u91CD\uFF09: ${t.query}`),e!==this.renderEpoch)return}catch(c){if(console.error(`[TaskFlow] Tab\u300C${t.label}\u300D\u6E32\u67D3\u5931\u8D25:`,c),e!==this.renderEpoch)return;this.renderEmptyState(s,t)}}async renderActiveTabGuarded(){if(this.refreshBusy){this.refreshQueued=!0;return}this.refreshBusy=!0;try{await this.renderQueries()}catch(e){console.error("[TaskFlow] \u6E32\u67D3\u6FC0\u6D3B tab \u5931\u8D25:",e)}finally{this.refreshBusy=!1}this.refreshQueued&&(this.refreshQueued=!1,this.refresh())}observeBody(e,t){if(this.observedBodies.has(e))return;this.observedBodies.add(e);let s=()=>{if(this.scheduleCount(t.id,e),e.querySelector(".task-list-item")){let c=this.emptyTimers.get(e);c&&(window.clearTimeout(c),this.emptyTimers.delete(e)),this.removeEmptyState(e),this.scheduleCount(t.id,e);return}if(e.parentElement?.querySelector(".tasks-view-empty"))return;let r=this.emptyTimers.get(e);r&&window.clearTimeout(r);let l=window.setTimeout(()=>{this.emptyTimers.delete(e),!e.querySelector(".task-list-item")&&this.renderEmptyState(e,t)},it);this.emptyTimers.set(e,l)};new MutationObserver(s).observe(e,{childList:!0,subtree:!0})}async getVaultTasks(){let e=Yt(this.app)[0],t=e?.getTasks,s=null;if(typeof t=="function")try{let l=t.call(e);Array.isArray(l)&&(s=l.map(c=>{let d=c;return{statusType:d.status?.type??"TODO",due:Ge(d.dueDate),doneDate:Ge(d.doneDate)}}))}catch(l){console.error("[TaskFlow] \u8C03\u7528 Tasks.getTasks() \u5931\u8D25\uFF0C\u56DE\u9000\u5230\u81EA\u5E26\u626B\u63CF:",l)}if(s&&s.length>0)return{tasks:s,source:"tasks"};let i=await this.cacheManager.getAllTasks(this.plugin.settings.data),r=dt(i).map(l=>({statusType:Kt[l.status]??"TODO",due:Ge(l.due),doneDate:l.completionDate??null}));return s&&console.warn(`[TaskFlow] Tasks.getTasks() \u8FD4\u56DE 0 \u4E2A\u4EFB\u52A1\uFF0C\u5DF2\u56DE\u9000\u5230\u81EA\u5E26\u626B\u63CF\uFF08\u626B\u5230 ${r.length} \u4E2A\uFF09\u3002\u82E5 vault \u91CC\u786E\u5B9E\u6709\u4EFB\u52A1\uFF0C\u8BF7\u68C0\u67E5 Tasks \u7684 Global Filter / Global Query \u662F\u5426\u628A\u5B83\u4EEC\u8FC7\u6EE4\u6389\u4E86\u3002`),{tasks:r,source:"own"}}updateStats(){let e=0,t=0,s=0,i=0,r=0,l=0,c=0,d=0,h=0,u=jt(),p=Zt(u),g=pt(p,6);for(let f of this.statTasks){let U=f.statusType==="DONE",Ee=f.statusType==="CANCELLED",b=f.statusType!=="NON_TASK"&&f.statusType!=="EMPTY";switch(f.statusType){case"IN_PROGRESS":t++;break;case"DONE":r++;break;case"CANCELLED":i++;break;case"TODO":case"ON_HOLD":s++;break}b&&!U&&!Ee&&f.due!==null&&f.due=p&&f.due<=g&&d++),U&&f.doneDate!==null&&(f.doneDate===u&&c++,f.doneDate>=p&&f.doneDate<=g&&h++)}let T=this.statTasks.filter(f=>f.statusType!=="NON_TASK"&&f.statusType!=="EMPTY").length,m=T-i,x=r+t*.5,L=m>0?Math.round(x/m*100):0;this.progressFill&&(this.progressFill.style.width=`${L}%`),this.statsPct&&this.statsPct.setText(`${L}%`),this.pillOverdue&&this.pillOverdue.setText(String(e)),this.pillInProgress&&this.pillInProgress.setText(String(t)),this.pillTodo&&this.pillTodo.setText(String(s)),this.pillCancel&&this.pillCancel.setText(String(i)),this.pillDone&&this.pillDone.setText(String(r)),this.pillTotal&&this.pillTotal.setText(String(T));let F=c+l,K=h+d,A=F>0?Math.round(c/F*100):null,j=K>0?Math.round(h/K*100):null;this.toTodoEl&&this.toTodoEl.setText(String(l)),this.toDoneEl&&this.toDoneEl.setText(String(c)),this.toInProgressEl&&this.toInProgressEl.setText(String(t)),this.toOverdueEl&&(this.toOverdueEl.setText(String(e)),this.toOverdueEl.parentElement?.toggleClass("is-alert",e>0)),this.toWeekEl&&this.toWeekEl.setText(String(h)),this.toRingTodayDial&&this.toRingTodayText&&(this.toRingTodayDial.style.setProperty("--p",String(A??0)),this.toRingTodayText.setText(A===null?"\u2014":`${A}%`)),this.toRingWeekDial&&this.toRingWeekText&&(this.toRingWeekDial.style.setProperty("--p",String(j??0)),this.toRingWeekText.setText(j===null?"\u2014":`${j}%`))}updateTabCount(e,t){let s=this.tabCounts[e];s&&s.setText(String(t.querySelectorAll(".task-list-item").length))}scheduleCount(e,t){let s=this.countTimers.get(t);s&&window.clearTimeout(s),this.countTimers.set(t,window.setTimeout(()=>this.updateTabCount(e,t),es))}removeEmptyState(e){let t=e.parentElement??e,s=t.querySelector(".tasks-view-empty");s&&s.remove(),t.removeClass("tasks-view-empty-state")}renderEmptyState(e,t){let s=e.parentElement??e;if(s.querySelector(".tasks-view-empty"))return;s.classList.add("tasks-view-empty-state");let i=s.createDiv({cls:"tasks-view-empty"});i.createDiv({cls:"tasks-view-empty-icon"}).textContent="\u{1F4ED}",i.createEl("h3",{cls:"tasks-view-empty-title",text:o("empty.noTasks")}),i.createEl("p",{cls:"tasks-view-empty-desc",text:o("view.empty.noMatch",{label:R(t)})}),i.createEl("button",{cls:"tasks-view-empty-btn tf-btn tf-btn-primary",text:o("empty.newTask")}).addEventListener("click",()=>{let l=this.containerEl.querySelector(".tasks-view-quick-add-input");l&&l.focus()}),this.updateTabCount(t.id,e)}registerVaultWatcher(){this.registerEvent(this.app.vault.on("modify",async e=>{!(e instanceof v.TFile)||e.extension!=="md"||this.scheduleRefresh()})),this.registerEvent(this.app.vault.on("rename",(e,t)=>{e instanceof v.TFile&&e.extension==="md"&&this.cacheManager.migrateCacheKey(t,e.path)})),this.registerEvent(this.app.metadataCache.on("changed",()=>{if(!this.getGroups().find(s=>s.id===this.activeGroup)?.frontmatterProperty?.trim())return;let t=this.selectedGroupNotePaths[this.activeGroup];this.renderGroupNoteSelector(),this.selectedGroupNotePaths[this.activeGroup]!==t&&this.renderActiveTabGuarded()}))}renderQuickAdd(e){let s=e.createDiv({cls:"tasks-view-quick-add"}).createDiv({cls:"tasks-view-quick-add-top"}),i=s.createEl("input",{cls:"tasks-view-quick-add-input",attr:{placeholder:"Add to inbox\u2026",type:"text"}}),r=s.createEl("button",{cls:"tasks-view-settings-btn",attr:{"aria-label":"TaskFlow settings"}});(0,v.setIcon)(r,"settings"),r.addEventListener("click",()=>{this.app.setting.open(),this.app.setting.openTabById("taskflow")}),i.addEventListener("keydown",l=>{if(l.key==="Enter"){let c=i.value.trim();c&&(this.addToInbox(c),i.value="")}else l.key==="Escape"&&(i.value="",i.blur())})}getShortFileName(e){let t=e.split("/");return t[t.length-1]||e}async addToInbox(e){let{inboxFilePath:t}=this.plugin.settings.data,s=this.app.vault;try{let i=s.getFileByPath(t);i||(i=await s.create(t,""));let r=await s.read(i),l=`- [ ] ${e}`,c=r.endsWith(` `)||r===""?r+l+` diff --git a/package.json b/package.json index c6709ac..a8b6cb8 100644 --- a/package.json +++ b/package.json @@ -22,14 +22,10 @@ "globals": "^17.6.0", "jiti": "^2.6.1", "obsidian": "latest", - "typescript": "^5.9.3", + "typescript": "^5.8.3", "typescript-eslint": "^8.59.1" }, "dependencies": { - "sortablejs": "^1.15.7", - "tsc": "^2.0.4" - }, - "allowScripts": { - "esbuild@0.25.5": true + "sortablejs": "^1.15.7" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 227eb8c..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,3159 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - sortablejs: - specifier: ^1.15.7 - version: 1.15.7 - tsc: - specifier: ^2.0.4 - version: 2.0.4 - devDependencies: - '@eslint/js': - specifier: ^9.39.4 - version: 9.39.5 - '@types/node': - specifier: ^22.15.17 - version: 22.20.4 - esbuild: - specifier: 0.25.5 - version: 0.25.5 - eslint: - specifier: ^9.39.4 - version: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - eslint-plugin-obsidianmd: - specifier: ^0.3.0 - version: 0.3.0(@eslint/js@9.39.5)(@eslint/json@0.14.0)(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(obsidian@1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6))(supports-color@7.2.0)(typescript-eslint@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)) - globals: - specifier: ^17.6.0 - version: 17.12.0 - jiti: - specifier: ^2.6.1 - version: 2.7.0 - obsidian: - specifier: latest - version: 1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6) - typescript: - specifier: ^5.9.3 - version: 5.9.3 - typescript-eslint: - specifier: ^8.59.1 - version: 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - -packages: - - '@codemirror/state@6.5.0': - resolution: {integrity: sha512-MwBHVK60IiIHDcoMet78lxt6iw5gJOGSbNbOIVBHWVXIH4/Nq1+GQgLLGgI1KlnN86WDXsPudVaqYHKBIx7Eyw==} - - '@codemirror/view@6.38.6': - resolution: {integrity: sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==} - - '@esbuild/aix-ppc64@0.25.5': - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.5': - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.5': - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.5': - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.5': - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.5': - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.5': - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.5': - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.5': - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.5': - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.5': - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.5': - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.5': - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.5': - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.5': - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.5': - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.5': - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.5': - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.5': - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.5': - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.5': - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.25.5': - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.5': - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.5': - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.5': - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.10.1': - resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.2': - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.21.2': - resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.7': - resolution: {integrity: sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.39.5': - resolution: {integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/json@0.14.0': - resolution: {integrity: sha512-rvR/EZtvUG3p9uqrSmcDJPYSH7atmWr0RnFWN6m917MAPx82+zQgPUmDu0whPFG6XTyM0vB/hR6c1Q63OaYtCQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@humanfs/core@0.19.2': - resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.8': - resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} - engines: {node: '>=18.18.0'} - - '@humanfs/types@0.15.0': - resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/momoa@3.3.13': - resolution: {integrity: sha512-AbKq3EW41+HY6pNMJgAOrz68iyiTTf0Nr1JRHHfuG5zwniJ9Dw8J3U7oa1I2ptpqYwmEf1sXKOGK6lbdZ9eqmg==} - engines: {node: '>=18'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - - '@marijn/find-cluster-break@1.0.4': - resolution: {integrity: sha512-Wy0V7+SGUjnF9/TkiM1hKVDPj7jKXduPNboMVtHTA8dySMURWqfg/JZ9E2Sq8JgSJmkl7k7Qe9FLeMSrSraWmQ==} - - '@microsoft/eslint-plugin-sdl@1.1.0': - resolution: {integrity: sha512-dxdNHOemLnBhfY3eByrujX9KyLigcNtW8sU+axzWv5nLGcsSBeKW2YYyTpfPo1hV8YPOmIGnfA4fZHyKVtWqBQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - eslint: ^9 - - '@pkgr/core@0.1.2': - resolution: {integrity: sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - - '@types/codemirror@5.60.8': - resolution: {integrity: sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==} - - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - - '@types/estree@1.0.9': - resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - - '@types/node@20.12.12': - resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} - - '@types/node@22.20.4': - resolution: {integrity: sha512-zJRE40jpHtKqE/C4fgHrAKQLJuSpzEnP9ff9Y7YtoR3Wd2pwqzlekDeEuUQXjRd+QCYnVnNwuJYmhdk9XV8gvA==} - - '@types/tern@0.23.9': - resolution: {integrity: sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==} - - '@typescript-eslint/eslint-plugin@8.70.1': - resolution: {integrity: sha512-nDNrUQ/4ruSNYbu749TRY7cfrzPtoLHEXSNBI8aaNY32LlZCajixqRf3FqcKC4p5Cam4VOHYx/t+i5+nKXvrqA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.70.1 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/parser@8.70.1': - resolution: {integrity: sha512-nO974WLllwhSFWQXnMLj6nDGa8f0khKEz1JzpPJ1u7Vm/4X1X6ZHajpoknU4bb41vJyMB0HHVyS2GqdhWfIXZw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/project-service@8.70.1': - resolution: {integrity: sha512-62xOgboPfwc3/IgPSX/W6oQR3ZbF04194FPGUGH8HL8iLFHbt/456/8Ph1wLNUgVF+s94FlHoipBsz+v7+LMnA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/scope-manager@8.70.1': - resolution: {integrity: sha512-Pa0EeSeAusQc1WbjQMac+YfenewYTBu0KjgYvkUKwhXaHUKbFog23Dm/rp0DX/6tyYOQ3Xl1a+3EcFNZynGHCw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.70.1': - resolution: {integrity: sha512-jumze1fPI+sDOaM2TWGQdn39PDxTr7TZGeuyLkAbNyx2vtMT3uRnVKChN0hfht5V2TugphJzF6bYXvBcE09qqg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/type-utils@8.70.1': - resolution: {integrity: sha512-7zKTnyvaVWqzLZHPFQtX1hVHqgkMC+WebPWakNCSyrQVbIP1AM0L0TlBZtACldIRb6PptI8Odk+jyZ5kP3B1VA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/types@8.70.1': - resolution: {integrity: sha512-Dm1ypdhhrGCTyyehxElhgJ6kgk8MVCv5qXdoOVqPr1uqk42jX8KjrZqhROvdShczA8qrDoYiOWn1ykWlx2k81Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.70.1': - resolution: {integrity: sha512-TU8PwyGN0PQJUcE96mw8eCQ44SmxGdQlJmlWakHaHQ15eIuuvye5yNtmh/i6oS88jzXVQB71xdNkbkB/fMwL0g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/utils@8.70.1': - resolution: {integrity: sha512-Esgul8MsnKnRLdYU2Eb2cRV9bS5HJYtKj1ByJnOzzG2M58DGdSUQ1jUuILxipqcpB2h9WLrbD5GijIWUjX/Tqw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/visitor-keys@8.70.1': - resolution: {integrity: sha512-Vwj9lUIW5Xq3wQ9w6gv3R86g1hMK8f2zNOdGTAgeXUMMXFK78G9ruCjjqutHMNJc0+CH7LYRnHeUB9IT8wFmcw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.18.0: - resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv@6.15.0: - resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - - ajv@8.20.0: - resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - array-includes@3.2.0: - resolution: {integrity: sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg==} - engines: {node: '>= 0.4'} - - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlastindex@1.2.6: - resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - balanced-match@4.0.4: - resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} - engines: {node: 18 || 20 || >=22} - - brace-expansion@1.1.21: - resolution: {integrity: sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==} - - brace-expansion@2.1.7: - resolution: {integrity: sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==} - - brace-expansion@5.0.12: - resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==} - engines: {node: 20 || >=22} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.9: - resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - crelt@1.0.7: - resolution: {integrity: sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - empathic@2.1.0: - resolution: {integrity: sha512-AnfC1ATldl49/cvZdLPDjBfrRNwbDO05aibiOtzQu3qtlbJtomNLhF30HEtn/7iBz50dlMECqATo3fG0LrdEgw==} - engines: {node: '>=14'} - - enhanced-resolve@5.25.1: - resolution: {integrity: sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w==} - engines: {node: '>=10.13.0'} - - es-abstract-get@1.0.0: - resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==} - engines: {node: '>= 0.4'} - - es-abstract@1.24.2: - resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-iterator-helpers@1.4.0: - resolution: {integrity: sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.2: - resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.4: - resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} - engines: {node: '>= 0.4'} - - esbuild@0.25.5: - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} - engines: {node: '>=18'} - hasBin: true - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-compat-utils@0.5.1: - resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} - engines: {node: '>=12'} - peerDependencies: - eslint: '>=6.0.0' - - eslint-import-resolver-node@0.3.10: - resolution: {integrity: sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==} - - eslint-module-utils@2.14.0: - resolution: {integrity: sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-depend@1.3.1: - resolution: {integrity: sha512-1uo2rFAr9vzNrCYdp7IBZRB54LiyVxfaIso0R6/QV3t6Dax6DTbW/EV2Hktf0f4UtmGHK8UyzJWI382pwW04jw==} - - eslint-plugin-es-x@7.8.0: - resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '>=8' - - eslint-plugin-import@2.32.0: - resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-json-schema-validator@5.1.0: - resolution: {integrity: sha512-ZmVyxRIjm58oqe2kTuy90PpmZPrrKvOjRPXKzq8WCgRgAkidCgm5X8domL2KSfadZ3QFAmifMgGTcVNhZ5ez2g==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '>=6.0.0' - - eslint-plugin-n@17.10.3: - resolution: {integrity: sha512-ySZBfKe49nQZWR1yFaA0v/GsH6Fgp8ah6XV0WDz6CN8WO0ek4McMzb7A2xnf4DCYV43frjCygvb9f/wx7UUxRw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: '>=8.23.0' - - eslint-plugin-no-unsanitized@4.1.5: - resolution: {integrity: sha512-MSB4hXPVFQrI8weqzs6gzl7reP2k/qSjtCoL2vUMSDejIIq9YL1ZKvq5/ORBXab/PvfBBrWO2jWviYpL+4Ghfg==} - peerDependencies: - eslint: ^9 || ^10 - - eslint-plugin-obsidianmd@0.3.0: - resolution: {integrity: sha512-QvGDI6B2nxJBrsZKGTg31da2A/fEJNlnwN+fRZkaoPIu1QL3fYXUdpP7ThyMdr/0iTYQxifb9lt2X9cpydQx1w==} - engines: {node: '>= 18'} - hasBin: true - peerDependencies: - '@eslint/js': ^9.30.1 - '@eslint/json': 0.14.0 - eslint: '>=9.0.0' - obsidian: 1.8.7 - typescript-eslint: ^8.35.1 - - eslint-plugin-react@7.37.3: - resolution: {integrity: sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - - eslint-plugin-security@1.4.0: - resolution: {integrity: sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==} - - eslint-plugin-security@2.1.1: - resolution: {integrity: sha512-7cspIGj7WTfR3EhaILzAPcfCo5R9FbeWvbgsPYWivSurTBKW88VQxtP3c4aWMG9Hz/GfJlJVdXEJ3c8LqS+u2w==} - - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@5.0.1: - resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - - eslint@9.39.5: - resolution: {integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esquery@1.7.0: - resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fast-uri@3.1.8: - resolution: {integrity: sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.4.4: - resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.2.0: - resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.14.3: - resolution: {integrity: sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@15.15.0: - resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} - engines: {node: '>=18'} - - globals@17.12.0: - resolution: {integrity: sha512-cezEd/DTyyht9cvSSURyygXPfy04GtWO/5e6ZPvH7fCtjKz9PYOmuawphw1Ctd1f6C+5JypXfGD7ahNMXvevBA==} - engines: {node: '>=18'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.4: - resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} - engines: {node: '>= 0.4'} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - ignore@7.0.10: - resolution: {integrity: sha512-HpbUakT7xp5miBUywCHf36ZEuAJNklBJDDsGpUIjMzOSmM8ELSfA9Sa/QDPeNeqeoN31u+UTCkL4klCOVvRm4Q==} - engines: {node: '>= 4'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.17.0: - resolution: {integrity: sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-document.all@1.0.0: - resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} - - jiti@2.7.0: - resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} - hasBin: true - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.3.2: - resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-schema-migrate@2.0.0: - resolution: {integrity: sha512-r38SVTtojDRp4eD6WsCqiE0eNDt4v1WalBXb9cyZYw9ai5cGtBwzRNWjHzJl38w6TxFkXAIA7h+fyX3tnrAFhQ==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - - jsonc-eslint-parser@2.4.2: - resolution: {integrity: sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - minimatch@10.2.6: - resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} - engines: {node: 18 || 20 || >=22} - - minimatch@3.1.5: - resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - - minimatch@8.0.7: - resolution: {integrity: sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg==} - engines: {node: '>=16 || 14 >=14.17'} - - minimatch@9.0.9: - resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - module-replacements@2.11.0: - resolution: {integrity: sha512-j5sNQm3VCpQQ7nTqGeOZtoJtV3uKERgCBm9QRhmGRiXiqkf7iRFOkfxdJRZWLkqYY8PNf4cDQF/WfXUYLENrRA==} - - moment@2.29.4: - resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - node-exports-info@1.6.2: - resolution: {integrity: sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==} - engines: {node: '>= 0.4'} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} - - obsidian@1.13.1: - resolution: {integrity: sha512-qtTEA2pmhJzhuhJqzbBFRYhpIOqvW+krDYjtFynv66KbxBbumHBlsJfWw3I4jtnK/6fZwbQhCrmmDdRwXmX56w==} - peerDependencies: - '@codemirror/state': 6.5.0 - '@codemirror/view': 6.38.6 - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - own-keys@1.0.2: - resolution: {integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==} - engines: {node: '>= 0.4'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - picomatch@4.0.7: - resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} - engines: {node: '>=12'} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@2.0.0-next.7: - resolution: {integrity: sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==} - engines: {node: '>= 0.4'} - hasBin: true - - ret@0.1.15: - resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} - engines: {node: '>=0.12'} - - safe-array-concat@1.1.4: - resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} - engines: {node: '>=0.4'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - safe-regex@1.1.0: - resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} - - safe-regex@2.1.1: - resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.8.5: - resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} - engines: {node: '>=10'} - hasBin: true - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel-list@1.0.1: - resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.1: - resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} - engines: {node: '>= 0.4'} - - sortablejs@1.15.7: - resolution: {integrity: sha512-Kk8wLQPlS+yi1ZEf48a4+fzHa4yxjC30M/Sr2AnQu+f/MPwvvX9XjZ6OWejiz8crBsLwSq8GHqaxaET7u6ux0A==} - - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - - string.prototype.matchall@4.1.0: - resolution: {integrity: sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.11: - resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.10: - resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - style-mod@4.1.4: - resolution: {integrity: sha512-XXWIQt633/EpAFx8aZDOTjBzrCaGmhvEQlQo6MVPfa2OzO2cWo+4hV9h+6UkHYlXGfy+ODXKUdP7Pthmcu5ATw==} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - synckit@0.9.3: - resolution: {integrity: sha512-JJoOEKTfL1urb1mDoEblhD9NhEbWmq9jHEMEnxoC4ujUaZ4itA8vKgwkFAyNClgxplLi9tsUKX+EduK0p/l7sg==} - engines: {node: ^14.18.0 || >=16.0.0} - - tapable@2.3.3: - resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} - engines: {node: '>=6'} - - tinyglobby@0.2.17: - resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} - engines: {node: '>=12.0.0'} - - toml-eslint-parser@0.9.3: - resolution: {integrity: sha512-moYoCvkNUAPCxSW9jmHmRElhm4tVJpHL8ItC/+uYD0EpPSFXbck7yREz9tNdJVTSpHVod8+HoipcpbQ0oE6gsw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - ts-api-utils@2.5.0: - resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - tsc@2.0.4: - resolution: {integrity: sha512-fzoSieZI5KKJVBYGvwbVZs/J5za84f2lSTLPYf6AGiIf43tZ3GNrI1QzTLcjtyDDP4aLxd46RTZq1nQxe7+k5Q==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - hasBin: true - - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.5: - resolution: {integrity: sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.8: - resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} - engines: {node: '>= 0.4'} - - typescript-eslint@8.70.1: - resolution: {integrity: sha512-AcWG7KDjZ2THNXsgwttMaGmzVi0VFRlFYfqFHYQRbDpF3owuYbuiL8c7UUrd2k8s3PoSfIQrWfrGXfcElrWLYA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} - engines: {node: '>=14.17'} - hasBin: true - - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - w3c-keyname@2.2.8: - resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} - - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.24: - resolution: {integrity: sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - yaml-eslint-parser@1.3.2: - resolution: {integrity: sha512-odxVsHAkZYYglR30aPYRY4nUGJnoJ2y1ww2HDvZALo0BDETv9kWbi16J52eHs+PWRNmF4ub6nZqfVOeesOvntg==} - engines: {node: ^14.17.0 || >=16.0.0} - - yaml@2.9.1: - resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==} - engines: {node: '>= 14.6'} - hasBin: true - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - -snapshots: - - '@codemirror/state@6.5.0': - dependencies: - '@marijn/find-cluster-break': 1.0.4 - - '@codemirror/view@6.38.6': - dependencies: - '@codemirror/state': 6.5.0 - crelt: 1.0.7 - style-mod: 4.1.4 - w3c-keyname: 2.2.8 - - '@esbuild/aix-ppc64@0.25.5': - optional: true - - '@esbuild/android-arm64@0.25.5': - optional: true - - '@esbuild/android-arm@0.25.5': - optional: true - - '@esbuild/android-x64@0.25.5': - optional: true - - '@esbuild/darwin-arm64@0.25.5': - optional: true - - '@esbuild/darwin-x64@0.25.5': - optional: true - - '@esbuild/freebsd-arm64@0.25.5': - optional: true - - '@esbuild/freebsd-x64@0.25.5': - optional: true - - '@esbuild/linux-arm64@0.25.5': - optional: true - - '@esbuild/linux-arm@0.25.5': - optional: true - - '@esbuild/linux-ia32@0.25.5': - optional: true - - '@esbuild/linux-loong64@0.25.5': - optional: true - - '@esbuild/linux-mips64el@0.25.5': - optional: true - - '@esbuild/linux-ppc64@0.25.5': - optional: true - - '@esbuild/linux-riscv64@0.25.5': - optional: true - - '@esbuild/linux-s390x@0.25.5': - optional: true - - '@esbuild/linux-x64@0.25.5': - optional: true - - '@esbuild/netbsd-arm64@0.25.5': - optional: true - - '@esbuild/netbsd-x64@0.25.5': - optional: true - - '@esbuild/openbsd-arm64@0.25.5': - optional: true - - '@esbuild/openbsd-x64@0.25.5': - optional: true - - '@esbuild/sunos-x64@0.25.5': - optional: true - - '@esbuild/win32-arm64@0.25.5': - optional: true - - '@esbuild/win32-ia32@0.25.5': - optional: true - - '@esbuild/win32-x64@0.25.5': - optional: true - - '@eslint-community/eslint-utils@4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))': - dependencies: - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.2': {} - - '@eslint/config-array@0.21.2(supports-color@7.2.0)': - dependencies: - '@eslint/object-schema': 2.1.7 - debug: 4.4.3(supports-color@7.2.0) - minimatch: 3.1.5 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.4.2': - dependencies: - '@eslint/core': 0.17.0 - - '@eslint/core@0.17.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.7(supports-color@7.2.0)': - dependencies: - ajv: 6.15.0 - debug: 4.4.3(supports-color@7.2.0) - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.3.2 - minimatch: 3.1.5 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.39.5': {} - - '@eslint/json@0.14.0': - dependencies: - '@eslint/core': 0.17.0 - '@eslint/plugin-kit': 0.4.1 - '@humanwhocodes/momoa': 3.3.13 - natural-compare: 1.4.0 - - '@eslint/object-schema@2.1.7': {} - - '@eslint/plugin-kit@0.4.1': - dependencies: - '@eslint/core': 0.17.0 - levn: 0.4.1 - - '@humanfs/core@0.19.2': - dependencies: - '@humanfs/types': 0.15.0 - - '@humanfs/node@0.16.8': - dependencies: - '@humanfs/core': 0.19.2 - '@humanfs/types': 0.15.0 - '@humanwhocodes/retry': 0.4.3 - - '@humanfs/types@0.15.0': {} - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/momoa@3.3.13': {} - - '@humanwhocodes/retry@0.4.3': {} - - '@marijn/find-cluster-break@1.0.4': {} - - '@microsoft/eslint-plugin-sdl@1.1.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))': - dependencies: - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - eslint-plugin-n: 17.10.3(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - eslint-plugin-react: 7.37.3(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - eslint-plugin-security: 1.4.0 - - '@pkgr/core@0.1.2': {} - - '@rtsao/scc@1.1.0': {} - - '@types/codemirror@5.60.8': - dependencies: - '@types/tern': 0.23.9 - - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.9 - '@types/json-schema': 7.0.15 - - '@types/estree@1.0.9': {} - - '@types/json-schema@7.0.15': {} - - '@types/json5@0.0.29': {} - - '@types/node@20.12.12': - dependencies: - undici-types: 5.26.5 - - '@types/node@22.20.4': - dependencies: - undici-types: 6.21.0 - - '@types/tern@0.23.9': - dependencies: - '@types/estree': 1.0.9 - - '@typescript-eslint/eslint-plugin@8.70.1(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.70.1 - '@typescript-eslint/type-utils': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.70.1 - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - ignore: 7.0.10 - natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.70.1 - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/typescript-estree': 8.70.1(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.70.1 - debug: 4.4.3(supports-color@7.2.0) - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.70.1(supports-color@7.2.0)(typescript@5.4.5)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.70.1(typescript@5.4.5) - '@typescript-eslint/types': 8.70.1 - debug: 4.4.3(supports-color@7.2.0) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.70.1(supports-color@7.2.0)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.70.1(typescript@5.9.3) - '@typescript-eslint/types': 8.70.1 - debug: 4.4.3(supports-color@7.2.0) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.70.1': - dependencies: - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/visitor-keys': 8.70.1 - - '@typescript-eslint/tsconfig-utils@8.70.1(typescript@5.4.5)': - dependencies: - typescript: 5.4.5 - - '@typescript-eslint/tsconfig-utils@8.70.1(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/type-utils@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/typescript-estree': 8.70.1(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - debug: 4.4.3(supports-color@7.2.0) - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.70.1': {} - - '@typescript-eslint/typescript-estree@8.70.1(supports-color@7.2.0)(typescript@5.4.5)': - dependencies: - '@typescript-eslint/project-service': 8.70.1(supports-color@7.2.0)(typescript@5.4.5) - '@typescript-eslint/tsconfig-utils': 8.70.1(typescript@5.4.5) - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/visitor-keys': 8.70.1 - debug: 4.4.3(supports-color@7.2.0) - minimatch: 10.2.6 - semver: 7.8.5 - tinyglobby: 0.2.17 - ts-api-utils: 2.5.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.70.1(supports-color@7.2.0)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.70.1(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.70.1(typescript@5.9.3) - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/visitor-keys': 8.70.1 - debug: 4.4.3(supports-color@7.2.0) - minimatch: 10.2.6 - semver: 7.8.5 - tinyglobby: 0.2.17 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.4.5)': - dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - '@typescript-eslint/scope-manager': 8.70.1 - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/typescript-estree': 8.70.1(supports-color@7.2.0)(typescript@5.4.5) - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - '@typescript-eslint/scope-manager': 8.70.1 - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/typescript-estree': 8.70.1(supports-color@7.2.0)(typescript@5.9.3) - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.70.1': - dependencies: - '@typescript-eslint/types': 8.70.1 - eslint-visitor-keys: 5.0.1 - - acorn-jsx@5.3.2(acorn@8.18.0): - dependencies: - acorn: 8.18.0 - - acorn@8.18.0: {} - - ajv@6.15.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ajv@8.20.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.8 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - argparse@2.0.1: {} - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-includes@3.2.0: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-object-atoms: 1.1.2 - es-shim-unscopables: 1.1.0 - is-string: 1.1.1 - math-intrinsics: 1.1.0 - - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - es-shim-unscopables: 1.1.0 - - array.prototype.findlastindex@1.2.6: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - es-shim-unscopables: 1.1.0 - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - async-function@1.0.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - balanced-match@1.0.2: {} - - balanced-match@4.0.4: {} - - brace-expansion@1.1.21: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.1.7: - dependencies: - balanced-match: 1.0.2 - - brace-expansion@5.0.12: - dependencies: - balanced-match: 4.0.4 - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.9: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - concat-map@0.0.1: {} - - crelt@1.0.7: {} - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - debug@3.2.7(supports-color@7.2.0): - dependencies: - ms: 2.1.3 - optionalDependencies: - supports-color: 7.2.0 - - debug@4.4.3(supports-color@7.2.0): - dependencies: - ms: 2.1.3 - optionalDependencies: - supports-color: 7.2.0 - - deep-is@0.1.4: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - empathic@2.1.0: {} - - enhanced-resolve@5.25.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.3 - - es-abstract-get@1.0.0: - dependencies: - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - is-callable: 1.2.7 - object-inspect: 1.13.4 - - es-abstract@1.24.2: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.4 - function.prototype.name: 1.2.0 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.4 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.2 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.4 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.11 - string.prototype.trimend: 1.0.10 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.5 - typed-array-length: 1.0.8 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.24 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-iterator-helpers@1.4.0: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - math-intrinsics: 1.1.0 - - es-object-atoms@1.1.2: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.4 - - es-to-primitive@1.3.4: - dependencies: - es-abstract-get: 1.0.0 - es-define-property: 1.0.1 - es-errors: 1.3.0 - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - esbuild@0.25.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.5 - '@esbuild/android-arm': 0.25.5 - '@esbuild/android-arm64': 0.25.5 - '@esbuild/android-x64': 0.25.5 - '@esbuild/darwin-arm64': 0.25.5 - '@esbuild/darwin-x64': 0.25.5 - '@esbuild/freebsd-arm64': 0.25.5 - '@esbuild/freebsd-x64': 0.25.5 - '@esbuild/linux-arm': 0.25.5 - '@esbuild/linux-arm64': 0.25.5 - '@esbuild/linux-ia32': 0.25.5 - '@esbuild/linux-loong64': 0.25.5 - '@esbuild/linux-mips64el': 0.25.5 - '@esbuild/linux-ppc64': 0.25.5 - '@esbuild/linux-riscv64': 0.25.5 - '@esbuild/linux-s390x': 0.25.5 - '@esbuild/linux-x64': 0.25.5 - '@esbuild/netbsd-arm64': 0.25.5 - '@esbuild/netbsd-x64': 0.25.5 - '@esbuild/openbsd-arm64': 0.25.5 - '@esbuild/openbsd-x64': 0.25.5 - '@esbuild/sunos-x64': 0.25.5 - '@esbuild/win32-arm64': 0.25.5 - '@esbuild/win32-ia32': 0.25.5 - '@esbuild/win32-x64': 0.25.5 - - escape-string-regexp@4.0.0: {} - - eslint-compat-utils@0.5.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)): - dependencies: - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - semver: 7.8.5 - - eslint-import-resolver-node@0.3.10(supports-color@7.2.0): - dependencies: - debug: 3.2.7(supports-color@7.2.0) - is-core-module: 2.17.0 - resolve: 2.0.0-next.7 - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.14.0(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10(supports-color@7.2.0))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0): - dependencies: - debug: 3.2.7(supports-color@7.2.0) - optionalDependencies: - '@typescript-eslint/parser': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - eslint-import-resolver-node: 0.3.10(supports-color@7.2.0) - transitivePeerDependencies: - - supports-color - - eslint-plugin-depend@1.3.1: - dependencies: - empathic: 2.1.0 - module-replacements: 2.11.0 - semver: 7.8.5 - - eslint-plugin-es-x@7.8.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)): - dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - '@eslint-community/regexpp': 4.12.2 - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - eslint-compat-utils: 0.5.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.2.0 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7(supports-color@7.2.0) - doctrine: 2.1.0 - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - eslint-import-resolver-node: 0.3.10(supports-color@7.2.0) - eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10(supports-color@7.2.0))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) - hasown: 2.0.4 - is-core-module: 2.17.0 - is-glob: 4.0.3 - minimatch: 3.1.5 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - string.prototype.trimend: 1.0.10 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-json-schema-validator@5.1.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0): - dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - ajv: 8.20.0 - debug: 4.4.3(supports-color@7.2.0) - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - eslint-compat-utils: 0.5.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - json-schema-migrate: 2.0.0 - jsonc-eslint-parser: 2.4.2 - minimatch: 8.0.7 - synckit: 0.9.3 - toml-eslint-parser: 0.9.3 - tunnel-agent: 0.6.0 - yaml-eslint-parser: 1.3.2 - transitivePeerDependencies: - - supports-color - - eslint-plugin-n@17.10.3(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)): - dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - enhanced-resolve: 5.25.1 - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - eslint-plugin-es-x: 7.8.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - get-tsconfig: 4.14.3 - globals: 15.15.0 - ignore: 5.3.2 - minimatch: 9.0.9 - semver: 7.8.5 - - eslint-plugin-no-unsanitized@4.1.5(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)): - dependencies: - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - - eslint-plugin-obsidianmd@0.3.0(@eslint/js@9.39.5)(@eslint/json@0.14.0)(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(obsidian@1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6))(supports-color@7.2.0)(typescript-eslint@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)): - dependencies: - '@eslint/config-helpers': 0.4.2 - '@eslint/js': 9.39.5 - '@eslint/json': 0.14.0 - '@microsoft/eslint-plugin-sdl': 1.1.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - '@types/eslint': 9.6.1 - '@types/node': 20.12.12 - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/utils': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.4.5) - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - eslint-plugin-depend: 1.3.1 - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) - eslint-plugin-json-schema-validator: 5.1.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) - eslint-plugin-no-unsanitized: 4.1.5(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - eslint-plugin-security: 2.1.1 - globals: 14.0.0 - obsidian: 1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6) - semver: 7.8.5 - typescript: 5.4.5 - typescript-eslint: 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-react@7.37.3(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)): - dependencies: - array-includes: 3.2.0 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.4.0 - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - estraverse: 5.3.0 - hasown: 2.0.4 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.5 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.7 - semver: 6.3.1 - string.prototype.matchall: 4.1.0 - string.prototype.repeat: 1.0.0 - - eslint-plugin-security@1.4.0: - dependencies: - safe-regex: 1.1.0 - - eslint-plugin-security@2.1.1: - dependencies: - safe-regex: 2.1.1 - - eslint-scope@8.4.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.1: {} - - eslint-visitor-keys@5.0.1: {} - - eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0): - dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.2(supports-color@7.2.0) - '@eslint/config-helpers': 0.4.2 - '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.7(supports-color@7.2.0) - '@eslint/js': 9.39.5 - '@eslint/plugin-kit': 0.4.1 - '@humanfs/node': 0.16.8 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.9 - ajv: 6.15.0 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3(supports-color@7.2.0) - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.7.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.5 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 2.7.0 - transitivePeerDependencies: - - supports-color - - espree@10.4.0: - dependencies: - acorn: 8.18.0 - acorn-jsx: 5.3.2(acorn@8.18.0) - eslint-visitor-keys: 4.2.1 - - espree@9.6.1: - dependencies: - acorn: 8.18.0 - acorn-jsx: 5.3.2(acorn@8.18.0) - eslint-visitor-keys: 3.4.3 - - esquery@1.7.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - fast-deep-equal@3.1.3: {} - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fast-uri@3.1.8: {} - - fdir@6.5.0(picomatch@4.0.7): - optionalDependencies: - picomatch: 4.0.7 - - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.4.4 - keyv: 4.5.4 - - flatted@3.4.4: {} - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - - function-bind@1.1.2: {} - - function.prototype.name@1.2.0: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - es-define-property: 1.0.1 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - hasown: 2.0.4 - is-callable: 1.2.7 - is-document.all: 1.0.0 - - functions-have-names@1.2.3: {} - - generator-function@2.0.1: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.4 - math-intrinsics: 1.1.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.2 - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - get-tsconfig@4.14.3: - dependencies: - resolve-pkg-maps: 1.0.0 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - globals@14.0.0: {} - - globals@15.15.0: {} - - globals@17.12.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - gopd@1.2.0: {} - - graceful-fs@4.2.11: {} - - has-bigints@1.1.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.4: - dependencies: - function-bind: 1.1.2 - - ignore@5.3.2: {} - - ignore@7.0.10: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.4 - side-channel: 1.1.1 - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-core-module@2.17.0: - dependencies: - hasown: 2.0.4 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-document.all@1.0.0: - dependencies: - call-bound: 1.0.4 - - is-extglob@2.1.1: {} - - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-map@2.0.3: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.24 - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 - - jiti@2.7.0: {} - - js-tokens@4.0.0: {} - - js-yaml@4.3.2: - dependencies: - argparse: 2.0.1 - - json-buffer@3.0.1: {} - - json-schema-migrate@2.0.0: - dependencies: - ajv: 8.20.0 - - json-schema-traverse@0.4.1: {} - - json-schema-traverse@1.0.0: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - - jsonc-eslint-parser@2.4.2: - dependencies: - acorn: 8.18.0 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - semver: 7.8.5 - - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.2.0 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.merge@4.6.2: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - math-intrinsics@1.1.0: {} - - minimatch@10.2.6: - dependencies: - brace-expansion: 5.0.12 - - minimatch@3.1.5: - dependencies: - brace-expansion: 1.1.21 - - minimatch@8.0.7: - dependencies: - brace-expansion: 2.1.7 - - minimatch@9.0.9: - dependencies: - brace-expansion: 2.1.7 - - minimist@1.2.8: {} - - module-replacements@2.11.0: {} - - moment@2.29.4: {} - - ms@2.1.3: {} - - natural-compare@1.4.0: {} - - node-exports-info@1.6.2: - dependencies: - array.prototype.flatmap: 1.3.3 - es-errors: 1.3.0 - object.entries: 1.1.9 - semver: 6.3.1 - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.entries@1.1.9: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-object-atoms: 1.1.2 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - - object.values@1.2.1: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - obsidian@1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6): - dependencies: - '@codemirror/state': 6.5.0 - '@codemirror/view': 6.38.6 - '@types/codemirror': 5.60.8 - moment: 2.29.4 - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - own-keys@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - path-exists@4.0.0: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - picomatch@4.0.7: {} - - possible-typed-array-names@1.1.0: {} - - prelude-ls@1.2.1: {} - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - punycode@2.3.1: {} - - react-is@16.13.1: {} - - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regexp-tree@0.1.27: {} - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - require-from-string@2.0.2: {} - - resolve-from@4.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve@2.0.0-next.7: - dependencies: - es-errors: 1.3.0 - is-core-module: 2.17.0 - node-exports-info: 1.6.2 - object-keys: 1.1.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - ret@0.1.15: {} - - safe-array-concat@1.1.4: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-buffer@5.2.1: {} - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - safe-regex@1.1.0: - dependencies: - ret: 0.1.15 - - safe-regex@2.1.1: - dependencies: - regexp-tree: 0.1.27 - - semver@6.3.1: {} - - semver@7.8.5: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - side-channel-list@1.0.1: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.1: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.1 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - sortablejs@1.15.7: {} - - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - - string.prototype.matchall@4.1.0: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.1 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.24.2 - - string.prototype.trim@1.2.11: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-object-atoms: 1.1.2 - has-property-descriptors: 1.0.2 - safe-regex-test: 1.1.0 - - string.prototype.trimend@1.0.10: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - strip-bom@3.0.0: {} - - strip-json-comments@3.1.1: {} - - style-mod@4.1.4: {} - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - synckit@0.9.3: - dependencies: - '@pkgr/core': 0.1.2 - tslib: 2.8.1 - - tapable@2.3.3: {} - - tinyglobby@0.2.17: - dependencies: - fdir: 6.5.0(picomatch@4.0.7) - picomatch: 4.0.7 - - toml-eslint-parser@0.9.3: - dependencies: - eslint-visitor-keys: 3.4.3 - - ts-api-utils@2.5.0(typescript@5.4.5): - dependencies: - typescript: 5.4.5 - - ts-api-utils@2.5.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - - tsc@2.0.4: {} - - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tslib@2.8.1: {} - - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.5: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.8: - dependencies: - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typescript-eslint@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.70.1(@typescript-eslint/parser@8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/parser': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.70.1(supports-color@7.2.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.70.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - typescript@5.4.5: {} - - typescript@5.9.3: {} - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - undici-types@5.26.5: {} - - undici-types@6.21.0: {} - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - w3c-keyname@2.2.8: {} - - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.2.0 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.24 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.24: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - word-wrap@1.2.5: {} - - yaml-eslint-parser@1.3.2: - dependencies: - eslint-visitor-keys: 3.4.3 - yaml: 2.9.1 - - yaml@2.9.1: {} - - yocto-queue@0.1.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 49c0ad7..0000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,2 +0,0 @@ -allowBuilds: - esbuild: false diff --git a/src/view.ts b/src/view.ts index 3e7f765..48f5c0d 100644 --- a/src/view.ts +++ b/src/view.ts @@ -352,7 +352,7 @@ export class TaskFlowView extends ItemView { private renderGroupNoteSelect(host: HTMLElement, group: TabGroupConfig): void { const files = this.getGroupNoteFiles(this.activeGroup); - let selectedPath = this.selectedGroupNotePaths[this.activeGroup]; + let selectedPath = this.selectedGroupNotePaths[this.activeGroup] ?? ''; if (!files.some((file) => file.path === selectedPath)) { selectedPath = files[0]?.path ?? ''; this.selectedGroupNotePaths[this.activeGroup] = selectedPath;