From f46f4ac4c3aa798d7fb5a6e3558588536d391305 Mon Sep 17 00:00:00 2001 From: Thomas Peetz Date: Fri, 26 Jun 2026 19:53:16 +0200 Subject: [PATCH] vault backup: 2026-06-26 19:53:16disable unused plugins --- .obsidian/community-plugins.json | 4 - .../plugins/obsidian-tasks-plugin/main.js | 2 +- .../obsidian-tasks-plugin/manifest.json | 2 +- .obsidian/plugins/task-list-kanban/main.js | 6085 +++++++++++------ .../plugins/task-list-kanban/manifest.json | 4 +- .obsidian/plugins/task-list-kanban/styles.css | 163 +- .obsidian/plugins/templater-obsidian/main.js | 32 +- .../plugins/templater-obsidian/manifest.json | 2 +- Infos/Kontakte/Wolfgang Grzybowski.md | 4 +- 9 files changed, 4291 insertions(+), 2007 deletions(-) diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index 2af53e8..46c76e0 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -3,7 +3,6 @@ "dataview", "obsidian-tasks-plugin", "obsidian-sortable", - "auto-note-mover", "tag-wrangler", "obsidian-plugin-toc", "obsidian-charts", @@ -21,9 +20,6 @@ "obsidian-style-settings", "callout-manager", "find-unlinked-files", - "contribution-graph", - "datacore", - "desk", "external-file-embed-and-link", "obsidian-kanban", "task-list-kanban", diff --git a/.obsidian/plugins/obsidian-tasks-plugin/main.js b/.obsidian/plugins/obsidian-tasks-plugin/main.js index 403e557..701cf23 100644 --- a/.obsidian/plugins/obsidian-tasks-plugin/main.js +++ b/.obsidian/plugins/obsidian-tasks-plugin/main.js @@ -499,7 +499,7 @@ short mode `}Rr();function wx(){return[[" ","Unchecked","x","TODO"],["x","Checked"," ","DONE"],[">","Rescheduled","x","TODO"],["<","Scheduled","x","TODO"],["!","Important","x","TODO"],["-","Cancelled"," ","CANCELLED"],["/","In Progress","x","IN_PROGRESS"],["?","Question","x","TODO"],["*","Star","x","TODO"],["n","Note","x","TODO"],["l","Location","x","TODO"],["i","Information","x","TODO"],["I","Idea","x","TODO"],["S","Amount","x","TODO"],["p","Pro","x","TODO"],["c","Con","x","TODO"],["b","Bookmark","x","TODO"],['"',"Quote","x","TODO"],["0","Speech bubble 0","0","NON_TASK"],["1","Speech bubble 1","1","NON_TASK"],["2","Speech bubble 2","2","NON_TASK"],["3","Speech bubble 3","3","NON_TASK"],["4","Speech bubble 4","4","NON_TASK"],["5","Speech bubble 5","5","NON_TASK"],["6","Speech bubble 6","6","NON_TASK"],["7","Speech bubble 7","7","NON_TASK"],["8","Speech bubble 8","8","NON_TASK"],["9","Speech bubble 9","9","NON_TASK"]]}function Sx(){return[[" ","incomplete","x","TODO"],["x","complete / done"," ","DONE"],["-","cancelled"," ","CANCELLED"],[">","deferred","x","TODO"],["/","in progress, or half-done","x","IN_PROGRESS"],["!","Important","x","TODO"],["?","question","x","TODO"],["R","review","x","TODO"],["+","Inbox / task that should be processed later","x","TODO"],["b","bookmark","x","TODO"],["B","brainstorm","x","TODO"],["D","deferred or scheduled","x","TODO"],["I","Info","x","TODO"],["i","idea","x","TODO"],["N","note","x","TODO"],["Q","quote","x","TODO"],["W","win / success / reward","x","TODO"],["P","pro","x","TODO"],["C","con","x","TODO"]]}function _x(){return[[" ","To Do","x","TODO"],["/","In Progress","x","IN_PROGRESS"],["x","Done"," ","DONE"],["-","Cancelled"," ","CANCELLED"],[">","Rescheduled","x","TODO"],["<","Scheduled","x","TODO"],["!","Important","x","TODO"],["?","Question","x","TODO"],["i","Infomation","x","TODO"],["S","Amount","x","TODO"],["*","Star","x","TODO"],["b","Bookmark","x","TODO"],["\u201C","Quote","x","TODO"],["n","Note","x","TODO"],["l","Location","x","TODO"],["I","Idea","x","TODO"],["p","Pro","x","TODO"],["c","Con","x","TODO"],["u","Up","x","TODO"],["d","Down","x","TODO"]]}function Dx(){return[[" ","Unchecked","x","TODO"],["x","Checked"," ","DONE"],["-","Cancelled"," ","CANCELLED"],["/","In Progress","x","IN_PROGRESS"],[">","Deferred","x","TODO"],["!","Important","x","TODO"],["?","Question","x","TODO"],["r","Review","x","TODO"]]}function Ex(){return[[" ","Unchecked","x","TODO"],["x","Regular"," ","DONE"],["X","Checked"," ","DONE"],["-","Dropped"," ","CANCELLED"],[">","Forward","x","TODO"],["<","Migrated","x","TODO"],["D","Date","x","TODO"],["?","Question","x","TODO"],["/","Half Done","x","IN_PROGRESS"],["+","Add","x","TODO"],["R","Research","x","TODO"],["!","Important","x","TODO"],["i","Idea","x","TODO"],["B","Brainstorm","x","TODO"],["P","Pro","x","TODO"],["C","Con","x","TODO"],["Q","Quote","x","TODO"],["N","Note","x","TODO"],["b","Bookmark","x","TODO"],["I","Information","x","TODO"],["p","Paraphrase","x","TODO"],["L","Location","x","TODO"],["E","Example","x","TODO"],["A","Answer","x","TODO"],["r","Reward","x","TODO"],["c","Choice","x","TODO"],["d","Doing","x","IN_PROGRESS"],["T","Time","x","TODO"],["@","Character / Person","x","TODO"],["t","Talk","x","TODO"],["O","Outline / Plot","x","TODO"],["~","Conflict","x","TODO"],["W","World","x","TODO"],["f","Clue / Find","x","TODO"],["F","Foreshadow","x","TODO"],["H","Favorite / Health","x","TODO"],["&","Symbolism","x","TODO"],["s","Secret","x","TODO"]]}function xx(){return[[" ","Unchecked","x","TODO"],["x","Checked"," ","DONE"],[">","Rescheduled","x","TODO"],["<","Scheduled","x","TODO"],["!","Important","x","TODO"],["-","Cancelled"," ","CANCELLED"],["/","In Progress","x","IN_PROGRESS"],["?","Question","x","TODO"],["*","Star","x","TODO"],["n","Note","x","TODO"],["l","Location","x","TODO"],["i","Information","x","TODO"],["I","Idea","x","TODO"],["S","Amount","x","TODO"],["p","Pro","x","TODO"],["c","Con","x","TODO"],["b","Bookmark","x","TODO"],["f","Fire","x","TODO"],["k","Key","x","TODO"],["w","Win","x","TODO"],["u","Up","x","TODO"],["d","Down","x","TODO"]]}function Ox(){return[[" ","to-do","x","TODO"],["/","incomplete","x","IN_PROGRESS"],["x","done"," ","DONE"],["-","canceled"," ","CANCELLED"],[">","forwarded","x","TODO"],["<","scheduling","x","TODO"],["?","question","x","TODO"],["!","important","x","TODO"],["*","star","x","TODO"],['"',"quote","x","TODO"],["l","location","x","TODO"],["b","bookmark","x","TODO"],["i","information","x","TODO"],["S","savings","x","TODO"],["I","idea","x","TODO"],["p","pros","x","TODO"],["c","cons","x","TODO"],["f","fire","x","TODO"],["k","key","x","TODO"],["w","win","x","TODO"],["u","up","x","TODO"],["d","down","x","TODO"]]}function Rx(){return[[" ","to-do","x","TODO"],["/","incomplete","x","IN_PROGRESS"],["x","done"," ","DONE"],["-","canceled"," ","CANCELLED"],[">","forwarded","x","TODO"],["<","scheduling","x","TODO"],["?","question","x","TODO"],["!","important","x","TODO"],["*","star","x","TODO"],['"',"quote","x","TODO"],["l","location","x","TODO"],["b","bookmark","x","TODO"],["i","information","x","TODO"],["S","savings","x","TODO"],["I","idea","x","TODO"],["p","pros","x","TODO"],["c","cons","x","TODO"],["f","fire","x","TODO"],["k","key","x","TODO"],["w","win","x","TODO"],["u","up","x","TODO"],["d","down","x","TODO"]]}dt();dn();ya();var Er=require("obsidian");Nn();Nn();yr();br();var cf=class n{validate(t){let e=[];return e.push(...this.validateSymbol(t)),e.push(...this.validateName(t)),e.push(...this.validateNextSymbol(t)),e}validateStatusCollectionEntry(t){let[e,r,i,s]=t,a=[];if(a.push(...this.validateType(s)),e===i&&s!=="NON_TASK"&&a.push(`Status symbol '${e}' toggles to itself`),a.length>0)return a;let o=Oe.createFromImportedValue(t).configuration;return a.push(...this.validateSymbolTypeConventions(o)),a.push(...this.validate(o)),a}validateSymbol(t){return n.validateOneSymbol(t.symbol,"Task Status Symbol")}validateNextSymbol(t){return n.validateOneSymbol(t.nextStatusSymbol,"Task Next Status Symbol")}validateName(t){let e=[];return t.name.length===0&&e.push("Task Status Name cannot be empty."),e}validateType(t){let e=zt[t],r=[];return e||r.push(`Status Type "${t}" is not a valid type`),e=="EMPTY"&&r.push('Status Type "EMPTY" is not permitted in user data'),r}validateSymbolTypeConventions(t){let e=[],r=t.symbol,i=new Xe,s=r==="X"?"x":r,a=i.bySymbol(s);return a.type!=="EMPTY"&&(t.nextStatusSymbol!==a.nextStatusSymbol&&e.push(`Next Status Symbol for symbol '${r}': '${t.nextStatusSymbol}' is inconsistent with convention '${a.nextStatusSymbol}'`),t.type!==a.type&&e.push(`Status Type for symbol '${r}': '${t.type}' is inconsistent with convention '${a.type}'`)),e}static validateOneSymbol(t,e){let r=[];return t.length===0&&r.push(`${e} cannot be empty.`),t.length>1&&r.push(`${e} ("${t}") must be a single character.`),r}};yr();Rr();var Us=new cf,df=class n extends Er.Modal{constructor(e,r,i){super(e.app);this.plugin=e;this.saved=!1;this.error=!1;this.statusSymbol=r.symbol,this.statusName=r.name,this.statusNextSymbol=r.nextStatusSymbol,this.statusAvailableAsCommand=r.availableAsCommand,this.type=r.type,this.isCoreStatus=i}statusConfiguration(){return new bt(this.statusSymbol,this.statusName,this.statusNextSymbol,this.statusAvailableAsCommand,this.type)}display(){return A(this,null,function*(){let{contentEl:e}=this;e.empty();let r=e.createDiv(),i;new Er.Setting(r).setName(O.t("modals.customStatusModal.editStatusSymbol.name")).setDesc(O.t("modals.customStatusModal.editStatusSymbol.description")).addText(u=>{i=u,u.setValue(this.statusSymbol).onChange(c=>{this.statusSymbol=c,n.setValid(u,Us.validateSymbol(this.statusConfiguration()))})}).setDisabled(this.isCoreStatus).then(u=>{n.setValid(i,Us.validateSymbol(this.statusConfiguration()))});let s;new Er.Setting(r).setName(O.t("modals.customStatusModal.editStatusName.name")).setDesc(O.t("modals.customStatusModal.editStatusName.description")).addText(u=>{s=u,u.setValue(this.statusName).onChange(c=>{this.statusName=c,n.setValid(u,Us.validateName(this.statusConfiguration()))})}).then(u=>{n.setValid(s,Us.validateName(this.statusConfiguration()))});let a;new Er.Setting(r).setName(O.t("modals.customStatusModal.editNextStatusSymbol.name")).setDesc(O.t("modals.customStatusModal.editNextStatusSymbol.description")).addText(u=>{a=u,u.setValue(this.statusNextSymbol).onChange(c=>{this.statusNextSymbol=c,n.setValid(u,Us.validateNextSymbol(this.statusConfiguration()))})}).then(u=>{n.setValid(a,Us.validateNextSymbol(this.statusConfiguration()))}),new Er.Setting(r).setName(O.t("modals.customStatusModal.editStatusType.name")).setDesc(O.t("modals.customStatusModal.editStatusType.description")).addDropdown(u=>{["TODO","IN_PROGRESS","ON_HOLD","DONE","CANCELLED","NON_TASK"].forEach(d=>{u.addOption(d,d)}),u.setValue(this.type).onChange(d=>{this.type=Oe.getTypeFromStatusTypeString(d)})}),Oe.tasksPluginCanCreateCommandsForStatuses()&&new Er.Setting(r).setName(O.t("modals.customStatusModal.editAvailableAsCommand.name")).setDesc(O.t("modals.customStatusModal.editAvailableAsCommand.description")).addToggle(u=>{u.setValue(this.statusAvailableAsCommand).onChange(c=>A(this,null,function*(){this.statusAvailableAsCommand=c}))});let o=e.createDiv(),l=new Er.Setting(o);l.addButton(u=>(u.setTooltip("Save").setIcon("checkmark").onClick(()=>A(this,null,function*(){let c=Us.validate(this.statusConfiguration());if(c.length>0){let d=c.join(` `)+` -`+O.t("modals.customStatusModal.fixErrorsBeforeSaving");new Er.Notice(d);return}this.saved=!0,this.close()})),u)),l.addExtraButton(u=>(u.setIcon("cross").setTooltip("Cancel").onClick(()=>{this.saved=!1,this.close()}),u))})}onOpen(){this.display()}static setValidationError(e){e.inputEl.addClass("tasks-settings-is-invalid")}static removeValidationError(e){e.inputEl.removeClass("tasks-settings-is-invalid")}static setValid(e,r){r.length===0?n.removeValidationError(e):n.setValidationError(e)}};var Db=require("obsidian");function Cx(n,t,e){if(t===e||!Object.prototype.hasOwnProperty.call(n,t))return Y({},n);let r={};for(let[i,s]of Object.entries(n))i===t?r[e]=s:r[i]=s;return r}var Zl=class{constructor(t,e,r){this.originalName=t,this.isValid=e,this.errorMessage=r}},ff=class{validateRenames(t){let e={};for(let[r,i]of Object.entries(t)){let s={};for(let[a,o]of Object.entries(t))a!==r&&(s[o]="");e[r]=this.validateRename(s,"",i)}return e}validateRename(t,e,r){if(!r||r.trim()==="")return new Zl(e,!1,"Preset name cannot be empty or all whitespace");for(let i of Object.keys(t))if(i!==e&&i.trim()===r.trim())return new Zl(e,!1,"A preset with this name already exists");return new Zl(e,!0,null)}addPreset(t){let e=this.generateUniqueKey(t),r=Y({},t);return r[e]="",{presets:r,newKey:e}}renamePreset(t,e,r){return!r||r.trim()===""||(r=r.trim(),this.wouldCreateDuplicateKey(t,e,r))?null:Cx(t,e,r)}deletePreset(t,e){let r=Y({},t);return delete r[e],r}updatePresetValue(t,e,r){let i=Y({},t);return i[e]=r,i}wouldCreateDuplicateKey(t,e,r){let i=r.trim();if(e.trim()===i)return!1;for(let s of Object.keys(t))if(s!==e&&s.trim()===i)return!0;return!1}generateUniqueKey(t){let e="new_key",r=1;for(;Object.prototype.hasOwnProperty.call(t,`${e}_${r}`);)r++;return`${e}_${r}`}reorderPreset(t,e,r){let i=Object.keys(t),s=i.indexOf(e);if(s===-1||r<0||r>=i.length)return null;if(s===r)return Y({},t);let a=[...i];a.splice(s,1),a.splice(r,0,e);let o={};for(let l of a)o[l]=t[l];return o}};Rr();dt();var pf=class{constructor(t,e){this.presetsSettingsService=new ff;this.nameFields=new Map;this.plugin=t,this.events=e}renderPresetsSettings(t){let e=t.createDiv(),r=X(),i=()=>{e.empty(),this.nameFields.clear(),Object.entries(r.presets).forEach(([s,a])=>{this.renderPresetItem(e,r,s,a,i)})};i(),this.createAddNewPresetButton(t,r,i)}renderPresetItem(t,e,r,i,s){let a=t.createDiv({cls:"tasks-presets-wrapper"}),o=new Db.Setting(a);o.settingEl.addClass("tasks-presets-setting"),a.setAttribute("data-preset-key",r),o.addText(l=>{l.setPlaceholder("Name").setValue(r),l.inputEl.addClass("tasks-presets-key"),this.nameFields.set(r,{inputEl:l.inputEl,originalKey:r});let u=r;l.inputEl.addEventListener("input",d=>{u=d.target.value,this.validateAllInputs()});let c=()=>A(this,null,function*(){if(u&&u!==r){let d=this.presetsSettingsService.renamePreset(e.presets,r,u);d&&(yield this.savePresetsSettings(d,e,s))}});l.inputEl.addEventListener("blur",c),l.inputEl.addEventListener("keydown",d=>A(this,null,function*(){d.key==="Enter"&&(d.preventDefault(),l.inputEl.blur())}))}),o.addTextArea(l=>(l.inputEl.addClass("tasks-presets-value"),l.setPlaceholder("Query or filter text...").setValue(i),this.setupAutoResizingTextarea(l),l.onChange(u=>A(this,null,function*(){let c=this.presetsSettingsService.updatePresetValue(e.presets,r,u);yield this.savePresetsSettings(c,e,null)})))),o.addExtraButton(l=>{l.extraSettingsEl.addClass("tasks-presets-drag-handle"),l.setIcon("grip-vertical").setTooltip("Drag to reorder"),l.extraSettingsEl.addEventListener("mousedown",u=>{a.draggable=!0,l.extraSettingsEl.addClass("tasks-presets-drag-handle-active")}),l.extraSettingsEl.addEventListener("mouseup",u=>{l.extraSettingsEl.removeClass("tasks-presets-drag-handle-active")})}),o.addExtraButton(l=>{l.extraSettingsEl.addClass("tasks-presets-delete-button"),l.setIcon("cross").setTooltip("Delete").onClick(()=>A(this,null,function*(){let u=this.presetsSettingsService.deletePreset(e.presets,r);yield this.savePresetsSettings(u,e,s)}))}),this.setupDragAndDrop(a,r,e,s),o.infoEl.remove()}setupDragAndDrop(t,e,r,i){t.addEventListener("dragstart",s=>{s.dataTransfer&&(s.dataTransfer.setData("text/plain",e),s.dataTransfer.effectAllowed="move"),t.addClass("tasks-presets-dragging")}),t.addEventListener("dragend",s=>{t.draggable=!1,t.removeClass("tasks-presets-dragging"),this.clearDropIndicators()}),t.addEventListener("dragover",s=>{s.preventDefault(),s.dataTransfer&&(s.dataTransfer.dropEffect="move"),this.showDropIndicator(t,s)}),t.addEventListener("dragleave",s=>{let a=t.getBoundingClientRect(),o=s.clientX,l=s.clientY;(oa.right||la.bottom)&&this.clearDropIndicator(t)}),t.addEventListener("drop",s=>A(this,null,function*(){var c;s.preventDefault();let a=(c=s.dataTransfer)==null?void 0:c.getData("text/plain");if(!a||a===e){this.clearDropIndicators();return}let o=this.calculateDropPosition(t,s),l=this.getTargetIndex(e,o),u=this.presetsSettingsService.reorderPreset(r.presets,a,l);u&&(yield this.savePresetsSettings(u,r,i)),this.clearDropIndicators()}))}getTargetIndex(t,e){let r=X(),s=Object.keys(r.presets).indexOf(t);return e==="above"?s:s+1}showDropIndicator(t,e){this.clearDropIndicators(),this.calculateDropPosition(t,e)==="above"?t.addClass("tasks-presets-drop-above"):t.addClass("tasks-presets-drop-below")}calculateDropPosition(t,e){let r=t.getBoundingClientRect(),i=r.top+r.height/2;return e.clientY{this.clearDropIndicator(e)})}clearDropIndicator(t){t.removeClass("tasks-presets-drop-above"),t.removeClass("tasks-presets-drop-below")}validateAllInputs(){let t={};this.nameFields.forEach(({inputEl:r,originalKey:i})=>{t[i]=r.value});let e=this.presetsSettingsService.validateRenames(t);this.nameFields.forEach(({inputEl:r,originalKey:i})=>{var a;let s=e[i];s&&!s.isValid?(r.addClass("has-error"),r.title=(a=s.errorMessage)!=null?a:""):(r.removeClass("has-error"),r.title="")})}setupAutoResizingTextarea(t){let e=()=>{t.inputEl.setCssProps({height:"auto"}),t.inputEl.style.height=`${t.inputEl.scrollHeight}px`};e(),t.inputEl.addEventListener("input",e)}createAddNewPresetButton(t,e,r){new Db.Setting(t).addButton(i=>{i.setButtonText(O.t("settings.presets.buttons.addNewPreset")).setCta().onClick(()=>A(this,null,function*(){let{presets:s}=this.presetsSettingsService.addPreset(e.presets);yield this.savePresetsSettings(s,e,r)}))})}savePresetsSettings(t,e,r){return A(this,null,function*(){it({presets:t}),yield this.plugin.saveSettings(),e.presets=Y({},t),r&&r(),this.events.triggerReloadOpenSearchResults()})}};var at=class at extends me.PluginSettingTab{constructor({plugin:e,events:r}){super(e.app,e);this.customFunctions={insertTaskCoreStatusSettings:this.insertTaskCoreStatusSettings.bind(this),insertCustomTaskStatusSettings:this.insertCustomTaskStatusSettings.bind(this)};this.plugin=e,this.presetsSettingsUI=new pf(e,r),this.events=r}saveSettings(e){return A(this,null,function*(){yield this.plugin.saveSettings(),e&&this.display()})}display(){let{containerEl:e}=this;e.empty(),this.containerEl.addClass("tasks-settings"),new me.Setting(e).setName(O.t("settings.format.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.format.description.line1")}

${O.t("settings.format.description.line2")}

${O.t("settings.changeRequiresRestart")}

`+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Reference/Task+Formats/About+Task+Formats"))).addDropdown(c=>{for(let d of Object.keys(In))c.addOption(d,In[d].getDisplayName());c.setValue(X().taskFormat).onChange(d=>A(this,null,function*(){it({taskFormat:d}),yield this.plugin.saveSettings()}))}),new me.Setting(e).setName(O.t("settings.globalFilter.heading")).setHeading();let r=null;new me.Setting(e).setName(O.t("settings.globalFilter.filter.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.globalFilter.filter.description.line1")}

${O.t("settings.globalFilter.filter.description.line2")}

${O.t("settings.globalFilter.filter.description.line3")}
${O.t("settings.globalFilter.filter.description.line4")}

`+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Global+Filter"))).addText(c=>{c.setPlaceholder(O.t("settings.globalFilter.filter.placeholder")).setValue(Ae.getInstance().get()).onChange((0,me.debounce)(d=>A(this,null,function*(){it({globalFilter:d}),Ae.getInstance().set(d),yield this.plugin.saveSettings(),Kr(r,d.length>0),this.events.triggerReloadVault()}),500,!0))}),r=new me.Setting(e).setName(O.t("settings.globalFilter.removeFilter.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.globalFilter.removeFilter.description")}

${O.t("settings.changeRequiresRestart")}

`)).addToggle(c=>{let d=X();c.setValue(d.removeGlobalFilter).onChange(f=>A(this,null,function*(){it({removeGlobalFilter:f}),Ae.getInstance().setRemoveGlobalFilter(f),yield this.plugin.saveSettings()}))}),Kr(r,X().globalFilter.length>0),new me.Setting(e).setName(O.t("settings.globalQuery.heading")).setHeading(),FW(new me.Setting(e).setDesc(at.createFragmentWithHTML(`

${O.t("settings.globalQuery.query.description")}

`+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Queries/Global+Query"))).addTextArea(c=>{let d=X();c.inputEl.rows=4,c.setPlaceholder("# "+O.t("settings.globalQuery.query.placeholder")).setValue(d.globalQuery).onChange(f=>A(this,null,function*(){it({globalQuery:f}),or.getInstance().set(f),yield this.plugin.saveSettings(),this.events.triggerReloadOpenSearchResults()}))})),new me.Setting(e).setName(O.t("settings.searches.heading")).setHeading(),new me.Setting(e).setName(O.t("settings.searches.enableCustomSearches.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.searches.enableCustomSearches.description.line1",{filterByFunction:"filter by function",sortByFunction:"sort by function",groupByFunction:"group by function"})}

${O.t("settings.searches.enableCustomSearches.description.line2")}

${O.t("settings.searches.enableCustomSearches.description.line3")}

${O.t("settings.searches.enableCustomSearches.description.line4")}

`)).addToggle(c=>{c.setValue(en.getInstance().get()).onChange(d=>A(this,null,function*(){en.getInstance().set(d),this.events.triggerReloadOpenSearchResults()}))}),new me.Setting(e).setName(O.t("settings.searchResults.heading")).setHeading(),new me.Setting(e).setName(O.t("settings.searchResults.taskCountLocation.name")).setDesc(O.t("settings.searchResults.taskCountLocation.description")).addDropdown(c=>{c.addOption("top",O.t("settings.searchResults.taskCountLocation.options.top")),c.addOption("bottom",O.t("settings.searchResults.taskCountLocation.options.bottom")),c.setValue(X().searchResults.taskCountLocation).onChange(d=>A(this,null,function*(){it({searchResults:{taskCountLocation:d}}),yield this.plugin.saveSettings(),this.events.triggerReloadOpenSearchResults()}))}),new me.Setting(e).setName(O.t("settings.presets.name")).setHeading().setDesc(at.createFragmentWithHTML("

"+O.t("settings.presets.line1",{name:"name",instruction1:"preset name",instruction2:"{{preset.name}}"})+"

"+O.t("settings.presets.line2")+"

"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Queries/Presets"))),this.presetsSettingsUI.renderPresetsSettings(e),new me.Setting(e).setName(O.t("settings.statuses.heading")).setHeading();let{headingOpened:i}=X();[{text:O.t("settings.statuses.coreStatuses.heading"),level:"h3",class:"",open:!0,notice:{class:"setting-item-description",text:null,html:"

"+O.t("settings.statuses.coreStatuses.description.line1")+"

"+O.t("settings.statuses.coreStatuses.description.line2")+"

"+O.t("settings.changeRequiresRestart")+"

"},settings:[{name:"",description:"",type:"function",initialValue:"",placeholder:"",settingName:"insertTaskCoreStatusSettings",featureFlag:"",notice:null}]},{text:O.t("settings.statuses.customStatuses.heading"),level:"h3",class:"",open:!0,notice:{class:"setting-item-description",text:null,html:"

"+O.t("settings.statuses.customStatuses.description.line1")+"

"+O.t("settings.statuses.customStatuses.description.line2")+"

"+O.t("settings.statuses.customStatuses.description.line3")+"

"+O.t("settings.changeRequiresRestart")+`

${O.t("settings.statuses.customStatuses.description.line4")}

`},settings:[{name:"",description:"",type:"function",initialValue:"",placeholder:"",settingName:"insertCustomTaskStatusSettings",featureFlag:"",notice:null}]}].forEach(c=>{var p;let d=(p=i[c.text])!=null?p:!0,f=this.addOneSettingsBlock(e,c,i);f.open=d}),new me.Setting(e).setName(O.t("settings.dates.heading")).setHeading(),new me.Setting(e).setName(O.t("settings.dates.createdDate.name")).setDesc(at.createFragmentWithHTML(O.t("settings.dates.createdDate.description")+"
"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Dates#Created+date"))).addToggle(c=>{let d=X();c.setValue(d.setCreatedDate).onChange(f=>A(this,null,function*(){it({setCreatedDate:f}),yield this.plugin.saveSettings()}))}),new me.Setting(e).setName(O.t("settings.dates.doneDate.name")).setDesc(at.createFragmentWithHTML(O.t("settings.dates.doneDate.description")+"
"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Dates#Done+date"))).addToggle(c=>{let d=X();c.setValue(d.setDoneDate).onChange(f=>A(this,null,function*(){it({setDoneDate:f}),yield this.plugin.saveSettings()}))}),new me.Setting(e).setName(O.t("settings.dates.cancelledDate.name")).setDesc(at.createFragmentWithHTML(O.t("settings.dates.cancelledDate.description")+"
"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Dates#Cancelled+date"))).addToggle(c=>{let d=X();c.setValue(d.setCancelledDate).onChange(f=>A(this,null,function*(){it({setCancelledDate:f}),yield this.plugin.saveSettings()}))}),new me.Setting(e).setName(O.t("settings.datesFromFileNames.heading")).setHeading();let a=null,o=null;new me.Setting(e).setName(O.t("settings.datesFromFileNames.scheduledDate.toggle.name")).setDesc(at.createFragmentWithHTML(O.t("settings.datesFromFileNames.scheduledDate.toggle.description.line1")+"
"+O.t("settings.datesFromFileNames.scheduledDate.toggle.description.line2")+"
"+O.t("settings.datesFromFileNames.scheduledDate.toggle.description.line3")+"
"+O.t("settings.datesFromFileNames.scheduledDate.toggle.description.line4")+`

${O.t("settings.changeRequiresRestart")}

`+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Use+Filename+as+Default+Date"))).addToggle(c=>{let d=X();c.setValue(d.useFilenameAsScheduledDate).onChange(f=>A(this,null,function*(){it({useFilenameAsScheduledDate:f}),Kr(a,f),Kr(o,f),yield this.plugin.saveSettings()}))}),a=new me.Setting(e).setName(O.t("settings.datesFromFileNames.scheduledDate.extraFormat.name")).setDesc(at.createFragmentWithHTML(O.t("settings.datesFromFileNames.scheduledDate.extraFormat.description.line1")+`

${O.t("settings.changeRequiresRestart")}

${O.t("settings.datesFromFileNames.scheduledDate.extraFormat.description.line2")}

`)).addText(c=>{let d=X();c.setPlaceholder(O.t("settings.datesFromFileNames.scheduledDate.extraFormat.placeholder")).setValue(d.filenameAsScheduledDateFormat).onChange(f=>A(this,null,function*(){it({filenameAsScheduledDateFormat:f}),yield this.plugin.saveSettings()}))}),o=new me.Setting(e).setName(O.t("settings.datesFromFileNames.scheduledDate.folders.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.datesFromFileNames.scheduledDate.folders.description")}

${O.t("settings.changeRequiresRestart")}

`)).addText(c=>A(this,null,function*(){let d=X();yield this.plugin.saveSettings(),c.setValue(at.renderFolderArray(d.filenameAsDateFolders)).onChange(f=>A(this,null,function*(){let p=at.parseCommaSeparatedFolders(f);it({filenameAsDateFolders:p}),yield this.plugin.saveSettings()}))})),Kr(a,X().useFilenameAsScheduledDate),Kr(o,X().useFilenameAsScheduledDate),new me.Setting(e).setName(O.t("settings.recurringTasks.heading")).setHeading(),new me.Setting(e).setName(O.t("settings.recurringTasks.nextLine.name")).setDesc(at.createFragmentWithHTML(O.t("settings.recurringTasks.nextLine.description")+"
"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Recurring+Tasks"))).addToggle(c=>{let{recurrenceOnNextLine:d}=X();c.setValue(d).onChange(f=>A(this,null,function*(){it({recurrenceOnNextLine:f}),yield this.plugin.saveSettings()}))}),new me.Setting(e).setName(O.t("settings.recurringTasks.removeScheduledDate.name")).setDesc(at.createFragmentWithHTML(O.t("settings.recurringTasks.removeScheduledDate.description.line1")+"
"+O.t("settings.recurringTasks.removeScheduledDate.description.line2")+"
"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Recurring+Tasks"))).addToggle(c=>{let{removeScheduledDateOnRecurrence:d}=X();c.setValue(d).onChange(f=>A(this,null,function*(){it({removeScheduledDateOnRecurrence:f}),yield this.plugin.saveSettings()}))}),new me.Setting(e).setName(O.t("settings.autoSuggest.heading")).setHeading();let l=null,u=null;new me.Setting(e).setName(O.t("settings.autoSuggest.toggle.name")).setDesc(at.createFragmentWithHTML(O.t("settings.autoSuggest.toggle.description")+`

${O.t("settings.changeRequiresRestart")}

`+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Auto-Suggest"))).addToggle(c=>{let d=X();c.setValue(d.autoSuggestInEditor).onChange(f=>A(this,null,function*(){it({autoSuggestInEditor:f}),yield this.plugin.saveSettings(),Kr(l,f),Kr(u,f)}))}),l=new me.Setting(e).setName(O.t("settings.autoSuggest.minLength.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.autoSuggest.minLength.description")}

${O.t("settings.changeRequiresRestart")}

`)).addSlider(c=>{let d=X();c.setLimits(0,3,1).setValue(d.autoSuggestMinMatch).setDynamicTooltip().onChange(f=>A(this,null,function*(){it({autoSuggestMinMatch:f}),yield this.plugin.saveSettings()}))}),u=new me.Setting(e).setName(O.t("settings.autoSuggest.maxSuggestions.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.autoSuggest.maxSuggestions.description")}

${O.t("settings.changeRequiresRestart")}

`)).addSlider(c=>{let d=X();c.setLimits(3,20,1).setValue(d.autoSuggestMaxItems).setDynamicTooltip().onChange(f=>A(this,null,function*(){it({autoSuggestMaxItems:f}),yield this.plugin.saveSettings()}))}),Kr(l,X().autoSuggestInEditor),Kr(u,X().autoSuggestInEditor),new me.Setting(e).setName(O.t("settings.dialogs.heading")).setHeading(),new me.Setting(e).setName(O.t("settings.dialogs.accessKeys.name")).setDesc(at.createFragmentWithHTML(O.t("settings.dialogs.accessKeys.description")+"
"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Create+or+edit+Task#Keyboard+shortcuts"))).addToggle(c=>{let d=X();c.setValue(d.provideAccessKeys).onChange(f=>A(this,null,function*(){it({provideAccessKeys:f}),yield this.plugin.saveSettings()}))})}seeTheDocumentation(e){return`

${O.t("settings.seeTheDocumentation")}.

`}addOneSettingsBlock(e,r,i){let s=e.createEl("details",{cls:"tasks-nested-settings",attr:Y({},r.open||i[r.text]?{open:!0}:{})});s.empty(),s.ontoggle=()=>{i[r.text]=s.open,it({headingOpened:i}),this.plugin.saveSettings()};let a=s.createEl("summary");return new me.Setting(a).setHeading().setName(r.text),a.createDiv("collapser").createDiv("handle"),r.notice!==null&&r.notice.html!==null&&new me.Setting(s).setDesc(at.createFragmentWithHTML(r.notice.html)),r.settings.forEach(o=>{var l;if(!(o.featureFlag!==""&&!fD(o.featureFlag))&&(o.type==="checkbox"?new me.Setting(s).setName(o.name).setDesc(o.description).addToggle(u=>{let c=X();c.generalSettings[o.settingName]||Ts(o.settingName,o.initialValue),u.setValue(c.generalSettings[o.settingName]).onChange(d=>A(this,null,function*(){Ts(o.settingName,d),yield this.plugin.saveSettings()}))}):o.type==="text"?new me.Setting(s).setName(o.name).setDesc(o.description).addText(u=>{let c=X();c.generalSettings[o.settingName]||Ts(o.settingName,o.initialValue);let d=f=>A(this,null,function*(){Ts(o.settingName,f),yield this.plugin.saveSettings()});u.setPlaceholder(o.placeholder.toString()).setValue(c.generalSettings[o.settingName].toString()).onChange((0,me.debounce)(d,500,!0))}):o.type==="textarea"?new me.Setting(s).setName(o.name).setDesc(o.description).addTextArea(u=>{let c=X();c.generalSettings[o.settingName]||Ts(o.settingName,o.initialValue);let d=f=>A(this,null,function*(){Ts(o.settingName,f),yield this.plugin.saveSettings()});u.setPlaceholder(o.placeholder.toString()).setValue(c.generalSettings[o.settingName].toString()).onChange((0,me.debounce)(d,500,!0)),u.inputEl.rows=8,u.inputEl.cols=40}):o.type==="function"&&this.customFunctions[o.settingName](s,this),o.notice!==null)){let u=s.createEl("p",{cls:o.notice.class,text:(l=o.notice.text)!=null?l:""});o.notice.html!==null&&u.append((0,me.sanitizeHTMLToDom)(o.notice.html))}}),s}static parseCommaSeparatedFolders(e){return e.split(",").map(r=>r.trim()).map(r=>r.replace(/^\/|\/$/g,"")).filter(r=>r!=="")}static renderFolderArray(e){return e.join(",")}insertTaskCoreStatusSettings(e,r){let{statusSettings:i}=X();i.coreStatuses.forEach(a=>{Mx(e,a,i.coreStatuses,i,r,r.plugin,!0)}),new me.Setting(e).addButton(a=>{let o=O.t("settings.statuses.coreStatuses.buttons.checkStatuses.name");a.setButtonText(o).setCta().onClick(()=>A(this,null,function*(){let u=window.moment().format("YYYY-MM-DD HH-mm-ss"),c=`Tasks Plugin - ${o} ${u}.md`,d=this.plugin.manifest.version,f=Xe.getInstance(),p=kx(i,f,o,d),h=yield this.app.vault.create(c,p);yield this.app.workspace.getLeaf(!0).openFile(h)})),a.setTooltip(O.t("settings.statuses.coreStatuses.buttons.checkStatuses.tooltip"))}).infoEl.remove()}insertCustomTaskStatusSettings(e,r){let{statusSettings:i}=X();i.customStatuses.forEach(u=>{Mx(e,u,i.customStatuses,i,r,r.plugin,!1)}),e.createEl("div"),new me.Setting(e).addButton(u=>{u.setButtonText(O.t("settings.statuses.customStatuses.buttons.addNewStatus.name")).setCta().onClick(()=>A(null,null,function*(){wt.addStatus(i.customStatuses,new bt("","","",!1,"TODO")),yield ro(i,r)}))}).infoEl.remove();let a=[[O.t("settings.statuses.collections.anuppuccinTheme"),wx()],[O.t("settings.statuses.collections.auraTheme"),Sx()],[O.t("settings.statuses.collections.borderTheme"),_x()],[O.t("settings.statuses.collections.ebullientworksTheme"),Dx()],[O.t("settings.statuses.collections.itsThemeAndSlrvbCheckboxes"),Ex()],[O.t("settings.statuses.collections.minimalTheme"),Ox()],[O.t("settings.statuses.collections.thingsTheme"),Rx()],[O.t("settings.statuses.collections.lytModeTheme"),xx()]];for(let[u,c]of a)new me.Setting(e).addButton(f=>{let p=O.t("settings.statuses.collections.buttons.addCollection.name",{themeName:u,numberOfStatuses:c.length});f.setButtonText(p).onClick(()=>A(null,null,function*(){yield IW(c,i,r)}))}).infoEl.remove();new me.Setting(e).addButton(u=>{u.setButtonText(O.t("settings.statuses.customStatuses.buttons.addAllUnknown.name")).setCta().onClick(()=>A(this,null,function*(){let d=this.plugin.getTasks().map(p=>p.status),f=Xe.getInstance().findUnknownStatuses(d);f.length!==0&&(f.forEach(p=>{wt.addStatus(i.customStatuses,p)}),yield ro(i,r))}))}).infoEl.remove(),new me.Setting(e).addButton(u=>{u.setButtonText(O.t("settings.statuses.customStatuses.buttons.resetCustomStatuses.name")).setWarning().onClick(()=>A(this,null,function*(){wt.resetAllCustomStatuses(i),yield ro(i,r)}))}).infoEl.remove()}};at.createFragmentWithHTML=e=>(0,me.sanitizeHTMLToDom)(e);var mf=at;function Mx(n,t,e,r,i,s,a){let o=n.createEl("pre");o.addClass("row-for-status"),o.textContent=new Oe(t).previewText();let l=new me.Setting(n);l.infoEl.replaceWith(o),a||l.addExtraButton(u=>{u.setIcon("cross").setTooltip("Delete").onClick(()=>A(null,null,function*(){wt.deleteStatus(e,t)&&(yield ro(r,i))}))}),l.addExtraButton(u=>{u.setIcon("pencil").setTooltip("Edit").onClick(()=>A(null,null,function*(){let c=new df(s,t,a);c.onClose=()=>A(null,null,function*(){c.saved&&wt.replaceStatus(e,t,c.statusConfiguration())&&(yield ro(r,i))}),c.open()}))}),l.infoEl.remove()}function IW(n,t,e){return A(this,null,function*(){wt.bulkAddStatusCollection(t,n).forEach(i=>{new me.Notice(i)}),yield ro(t,e)})}function ro(n,t){return A(this,null,function*(){it({statusSettings:n}),wt.applyToStatusRegistry(n,Xe.getInstance()),yield t.saveSettings(!0)})}function FW(n){let{settingEl:t,infoEl:e,controlEl:r}=n,i=r.querySelector("textarea");i!==null&&(t.addClass("tasks-setting-multiline-text"),e.addClass("tasks-setting-multiline-text-info"),i.addClass("tasks-setting-multiline-text-textarea"))}function Kr(n,t){n?n.setVisibility(t):console.warn("Setting has not be initialised. Can update visibility of setting UI - in setSettingVisibility")}br();vs();var Ki=require("obsidian");wc();dt();iy();function LW(n){console.error(n),new Ki.Notice(n+` +`+O.t("modals.customStatusModal.fixErrorsBeforeSaving");new Er.Notice(d);return}this.saved=!0,this.close()})),u)),l.addExtraButton(u=>(u.setIcon("cross").setTooltip("Cancel").onClick(()=>{this.saved=!1,this.close()}),u))})}onOpen(){this.display()}static setValidationError(e){e.inputEl.addClass("tasks-settings-is-invalid")}static removeValidationError(e){e.inputEl.removeClass("tasks-settings-is-invalid")}static setValid(e,r){r.length===0?n.removeValidationError(e):n.setValidationError(e)}};var Db=require("obsidian");function Cx(n,t,e){if(t===e||!Object.prototype.hasOwnProperty.call(n,t))return Y({},n);let r={};for(let[i,s]of Object.entries(n))i===t?r[e]=s:r[i]=s;return r}var Zl=class{constructor(t,e,r){this.originalName=t,this.isValid=e,this.errorMessage=r}},ff=class{validateRenames(t){let e={};for(let[r,i]of Object.entries(t)){let s={};for(let[a,o]of Object.entries(t))a!==r&&(s[o]="");e[r]=this.validateRename(s,"",i)}return e}validateRename(t,e,r){if(!r||r.trim()==="")return new Zl(e,!1,"Preset name cannot be empty or all whitespace");for(let i of Object.keys(t))if(i!==e&&i.trim()===r.trim())return new Zl(e,!1,"A preset with this name already exists");return new Zl(e,!0,null)}addPreset(t){let e=this.generateUniqueKey(t),r=Y({},t);return r[e]="",{presets:r,newKey:e}}renamePreset(t,e,r){return!r||r.trim()===""||(r=r.trim(),this.wouldCreateDuplicateKey(t,e,r))?null:Cx(t,e,r)}deletePreset(t,e){let r=Y({},t);return delete r[e],r}updatePresetValue(t,e,r){let i=Y({},t);return i[e]=r,i}wouldCreateDuplicateKey(t,e,r){let i=r.trim();if(e.trim()===i)return!1;for(let s of Object.keys(t))if(s!==e&&s.trim()===i)return!0;return!1}generateUniqueKey(t){let e="new_key",r=1;for(;Object.prototype.hasOwnProperty.call(t,`${e}_${r}`);)r++;return`${e}_${r}`}reorderPreset(t,e,r){let i=Object.keys(t),s=i.indexOf(e);if(s===-1||r<0||r>=i.length)return null;if(s===r)return Y({},t);let a=[...i];a.splice(s,1),a.splice(r,0,e);let o={};for(let l of a)o[l]=t[l];return o}};Rr();dt();var pf=class{constructor(t,e){this.presetsSettingsService=new ff;this.nameFields=new Map;this.plugin=t,this.events=e}renderPresetsSettings(t){let e=t.createDiv(),r=X(),i=()=>{e.empty(),this.nameFields.clear(),Object.entries(r.presets).forEach(([s,a])=>{this.renderPresetItem(e,r,s,a,i)})};i(),this.createAddNewPresetButton(t,r,i)}renderPresetItem(t,e,r,i,s){let a=t.createDiv({cls:"tasks-presets-wrapper"}),o=new Db.Setting(a);o.settingEl.addClass("tasks-presets-setting"),a.setAttribute("data-preset-key",r),o.addText(l=>{l.setPlaceholder("Name").setValue(r),l.inputEl.addClass("tasks-presets-key"),this.nameFields.set(r,{inputEl:l.inputEl,originalKey:r});let u=r;l.inputEl.addEventListener("input",d=>{u=d.target.value,this.validateAllInputs()});let c=()=>A(this,null,function*(){if(u&&u!==r){let d=this.presetsSettingsService.renamePreset(e.presets,r,u);d&&(yield this.savePresetsSettings(d,e,s))}});l.inputEl.addEventListener("blur",c),l.inputEl.addEventListener("keydown",d=>A(this,null,function*(){d.key==="Enter"&&(d.preventDefault(),l.inputEl.blur())}))}),o.addTextArea(l=>(l.inputEl.addClass("tasks-presets-value"),l.setPlaceholder("Query or filter text...").setValue(i),this.setupAutoResizingTextarea(l),l.onChange(u=>A(this,null,function*(){let c=this.presetsSettingsService.updatePresetValue(e.presets,r,u);yield this.savePresetsSettings(c,e,null)})))),o.addExtraButton(l=>{l.extraSettingsEl.addClass("tasks-presets-drag-handle"),l.setIcon("grip-vertical").setTooltip("Drag to reorder"),l.extraSettingsEl.addEventListener("mousedown",u=>{a.draggable=!0,l.extraSettingsEl.addClass("tasks-presets-drag-handle-active")}),l.extraSettingsEl.addEventListener("mouseup",u=>{l.extraSettingsEl.removeClass("tasks-presets-drag-handle-active")})}),o.addExtraButton(l=>{l.extraSettingsEl.addClass("tasks-presets-delete-button"),l.setIcon("cross").setTooltip("Delete").onClick(()=>A(this,null,function*(){let u=this.presetsSettingsService.deletePreset(e.presets,r);yield this.savePresetsSettings(u,e,s)}))}),this.setupDragAndDrop(a,r,e,s),o.infoEl.remove()}setupDragAndDrop(t,e,r,i){t.addEventListener("dragstart",s=>{s.dataTransfer&&(s.dataTransfer.setData("text/plain",e),s.dataTransfer.effectAllowed="move"),t.addClass("tasks-presets-dragging")}),t.addEventListener("dragend",s=>{t.draggable=!1,t.removeClass("tasks-presets-dragging"),this.clearDropIndicators()}),t.addEventListener("dragover",s=>{s.preventDefault(),s.dataTransfer&&(s.dataTransfer.dropEffect="move"),this.showDropIndicator(t,s)}),t.addEventListener("dragleave",s=>{let a=t.getBoundingClientRect(),o=s.clientX,l=s.clientY;(oa.right||la.bottom)&&this.clearDropIndicator(t)}),t.addEventListener("drop",s=>A(this,null,function*(){var c;s.preventDefault();let a=(c=s.dataTransfer)==null?void 0:c.getData("text/plain");if(!a||a===e){this.clearDropIndicators();return}let o=this.calculateDropPosition(t,s),l=this.getTargetIndex(e,o),u=this.presetsSettingsService.reorderPreset(r.presets,a,l);u&&(yield this.savePresetsSettings(u,r,i)),this.clearDropIndicators()}))}getTargetIndex(t,e){let r=X(),s=Object.keys(r.presets).indexOf(t);return e==="above"?s:s+1}showDropIndicator(t,e){this.clearDropIndicators(),this.calculateDropPosition(t,e)==="above"?t.addClass("tasks-presets-drop-above"):t.addClass("tasks-presets-drop-below")}calculateDropPosition(t,e){let r=t.getBoundingClientRect(),i=r.top+r.height/2;return e.clientY{this.clearDropIndicator(e)})}clearDropIndicator(t){t.removeClass("tasks-presets-drop-above"),t.removeClass("tasks-presets-drop-below")}validateAllInputs(){let t={};this.nameFields.forEach(({inputEl:r,originalKey:i})=>{t[i]=r.value});let e=this.presetsSettingsService.validateRenames(t);this.nameFields.forEach(({inputEl:r,originalKey:i})=>{var a;let s=e[i];s&&!s.isValid?(r.addClass("has-error"),r.title=(a=s.errorMessage)!=null?a:""):(r.removeClass("has-error"),r.title="")})}setupAutoResizingTextarea(t){let e=()=>{t.inputEl.setCssProps({height:"auto"}),t.inputEl.style.height=`${t.inputEl.scrollHeight}px`};e(),t.inputEl.addEventListener("input",e)}createAddNewPresetButton(t,e,r){new Db.Setting(t).addButton(i=>{i.setButtonText(O.t("settings.presets.buttons.addNewPreset")).setCta().onClick(()=>A(this,null,function*(){let{presets:s}=this.presetsSettingsService.addPreset(e.presets);yield this.savePresetsSettings(s,e,r)}))})}savePresetsSettings(t,e,r){return A(this,null,function*(){it({presets:t}),yield this.plugin.saveSettings(),e.presets=Y({},t),r&&r(),this.events.triggerReloadOpenSearchResults()})}};var at=class at extends me.PluginSettingTab{constructor({plugin:e,events:r}){super(e.app,e);this.customFunctions={insertTaskCoreStatusSettings:this.insertTaskCoreStatusSettings.bind(this),insertCustomTaskStatusSettings:this.insertCustomTaskStatusSettings.bind(this)};this.plugin=e,this.presetsSettingsUI=new pf(e,r),this.events=r}saveSettingsAndRebuildSettingsTab(){return A(this,null,function*(){yield this.plugin.saveSettings();let e=this.containerEl.scrollTop;this.display(),requestAnimationFrame(()=>{this.containerEl.scrollTo({top:e})})})}display(){let{containerEl:e}=this;e.empty(),this.containerEl.addClass("tasks-settings"),new me.Setting(e).setName(O.t("settings.format.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.format.description.line1")}

${O.t("settings.format.description.line2")}

${O.t("settings.changeRequiresRestart")}

`+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Reference/Task+Formats/About+Task+Formats"))).addDropdown(c=>{for(let d of Object.keys(In))c.addOption(d,In[d].getDisplayName());c.setValue(X().taskFormat).onChange(d=>A(this,null,function*(){it({taskFormat:d}),yield this.plugin.saveSettings()}))}),new me.Setting(e).setName(O.t("settings.globalFilter.heading")).setHeading();let r=null;new me.Setting(e).setName(O.t("settings.globalFilter.filter.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.globalFilter.filter.description.line1")}

${O.t("settings.globalFilter.filter.description.line2")}

${O.t("settings.globalFilter.filter.description.line3")}
${O.t("settings.globalFilter.filter.description.line4")}

`+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Global+Filter"))).addText(c=>{c.setPlaceholder(O.t("settings.globalFilter.filter.placeholder")).setValue(Ae.getInstance().get()).onChange((0,me.debounce)(d=>A(this,null,function*(){it({globalFilter:d}),Ae.getInstance().set(d),yield this.plugin.saveSettings(),Kr(r,d.length>0),this.events.triggerReloadVault()}),500,!0))}),r=new me.Setting(e).setName(O.t("settings.globalFilter.removeFilter.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.globalFilter.removeFilter.description")}

${O.t("settings.changeRequiresRestart")}

`)).addToggle(c=>{let d=X();c.setValue(d.removeGlobalFilter).onChange(f=>A(this,null,function*(){it({removeGlobalFilter:f}),Ae.getInstance().setRemoveGlobalFilter(f),yield this.plugin.saveSettings()}))}),Kr(r,X().globalFilter.length>0),new me.Setting(e).setName(O.t("settings.globalQuery.heading")).setHeading(),FW(new me.Setting(e).setDesc(at.createFragmentWithHTML(`

${O.t("settings.globalQuery.query.description")}

`+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Queries/Global+Query"))).addTextArea(c=>{let d=X();c.inputEl.rows=4,c.setPlaceholder("# "+O.t("settings.globalQuery.query.placeholder")).setValue(d.globalQuery).onChange(f=>A(this,null,function*(){it({globalQuery:f}),or.getInstance().set(f),yield this.plugin.saveSettings(),this.events.triggerReloadOpenSearchResults()}))})),new me.Setting(e).setName(O.t("settings.searches.heading")).setHeading(),new me.Setting(e).setName(O.t("settings.searches.enableCustomSearches.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.searches.enableCustomSearches.description.line1",{filterByFunction:"filter by function",sortByFunction:"sort by function",groupByFunction:"group by function"})}

${O.t("settings.searches.enableCustomSearches.description.line2")}

${O.t("settings.searches.enableCustomSearches.description.line3")}

${O.t("settings.searches.enableCustomSearches.description.line4")}

`)).addToggle(c=>{c.setValue(en.getInstance().get()).onChange(d=>A(this,null,function*(){en.getInstance().set(d),this.events.triggerReloadOpenSearchResults()}))}),new me.Setting(e).setName(O.t("settings.searchResults.heading")).setHeading(),new me.Setting(e).setName(O.t("settings.searchResults.taskCountLocation.name")).setDesc(O.t("settings.searchResults.taskCountLocation.description")).addDropdown(c=>{c.addOption("top",O.t("settings.searchResults.taskCountLocation.options.top")),c.addOption("bottom",O.t("settings.searchResults.taskCountLocation.options.bottom")),c.setValue(X().searchResults.taskCountLocation).onChange(d=>A(this,null,function*(){it({searchResults:{taskCountLocation:d}}),yield this.plugin.saveSettings(),this.events.triggerReloadOpenSearchResults()}))}),new me.Setting(e).setName(O.t("settings.presets.name")).setHeading().setDesc(at.createFragmentWithHTML("

"+O.t("settings.presets.line1",{name:"name",instruction1:"preset name",instruction2:"{{preset.name}}"})+"

"+O.t("settings.presets.line2")+"

"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Queries/Presets"))),this.presetsSettingsUI.renderPresetsSettings(e),new me.Setting(e).setName(O.t("settings.statuses.heading")).setHeading();let{headingOpened:i}=X();[{text:O.t("settings.statuses.coreStatuses.heading"),level:"h3",class:"",open:!0,notice:{class:"setting-item-description",text:null,html:"

"+O.t("settings.statuses.coreStatuses.description.line1")+"

"+O.t("settings.statuses.coreStatuses.description.line2")+"

"+O.t("settings.changeRequiresRestart")+"

"},settings:[{name:"",description:"",type:"function",initialValue:"",placeholder:"",settingName:"insertTaskCoreStatusSettings",featureFlag:"",notice:null}]},{text:O.t("settings.statuses.customStatuses.heading"),level:"h3",class:"",open:!0,notice:{class:"setting-item-description",text:null,html:"

"+O.t("settings.statuses.customStatuses.description.line1")+"

"+O.t("settings.statuses.customStatuses.description.line2")+"

"+O.t("settings.statuses.customStatuses.description.line3")+"

"+O.t("settings.changeRequiresRestart")+`

${O.t("settings.statuses.customStatuses.description.line4")}

`},settings:[{name:"",description:"",type:"function",initialValue:"",placeholder:"",settingName:"insertCustomTaskStatusSettings",featureFlag:"",notice:null}]}].forEach(c=>{var p;let d=(p=i[c.text])!=null?p:!0,f=this.addOneSettingsBlock(e,c,i);f.open=d}),new me.Setting(e).setName(O.t("settings.dates.heading")).setHeading(),new me.Setting(e).setName(O.t("settings.dates.createdDate.name")).setDesc(at.createFragmentWithHTML(O.t("settings.dates.createdDate.description")+"
"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Dates#Created+date"))).addToggle(c=>{let d=X();c.setValue(d.setCreatedDate).onChange(f=>A(this,null,function*(){it({setCreatedDate:f}),yield this.plugin.saveSettings()}))}),new me.Setting(e).setName(O.t("settings.dates.doneDate.name")).setDesc(at.createFragmentWithHTML(O.t("settings.dates.doneDate.description")+"
"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Dates#Done+date"))).addToggle(c=>{let d=X();c.setValue(d.setDoneDate).onChange(f=>A(this,null,function*(){it({setDoneDate:f}),yield this.plugin.saveSettings()}))}),new me.Setting(e).setName(O.t("settings.dates.cancelledDate.name")).setDesc(at.createFragmentWithHTML(O.t("settings.dates.cancelledDate.description")+"
"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Dates#Cancelled+date"))).addToggle(c=>{let d=X();c.setValue(d.setCancelledDate).onChange(f=>A(this,null,function*(){it({setCancelledDate:f}),yield this.plugin.saveSettings()}))}),new me.Setting(e).setName(O.t("settings.datesFromFileNames.heading")).setHeading();let a=null,o=null;new me.Setting(e).setName(O.t("settings.datesFromFileNames.scheduledDate.toggle.name")).setDesc(at.createFragmentWithHTML(O.t("settings.datesFromFileNames.scheduledDate.toggle.description.line1")+"
"+O.t("settings.datesFromFileNames.scheduledDate.toggle.description.line2")+"
"+O.t("settings.datesFromFileNames.scheduledDate.toggle.description.line3")+"
"+O.t("settings.datesFromFileNames.scheduledDate.toggle.description.line4")+`

${O.t("settings.changeRequiresRestart")}

`+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Use+Filename+as+Default+Date"))).addToggle(c=>{let d=X();c.setValue(d.useFilenameAsScheduledDate).onChange(f=>A(this,null,function*(){it({useFilenameAsScheduledDate:f}),Kr(a,f),Kr(o,f),yield this.plugin.saveSettings()}))}),a=new me.Setting(e).setName(O.t("settings.datesFromFileNames.scheduledDate.extraFormat.name")).setDesc(at.createFragmentWithHTML(O.t("settings.datesFromFileNames.scheduledDate.extraFormat.description.line1")+`

${O.t("settings.changeRequiresRestart")}

${O.t("settings.datesFromFileNames.scheduledDate.extraFormat.description.line2")}

`)).addText(c=>{let d=X();c.setPlaceholder(O.t("settings.datesFromFileNames.scheduledDate.extraFormat.placeholder")).setValue(d.filenameAsScheduledDateFormat).onChange(f=>A(this,null,function*(){it({filenameAsScheduledDateFormat:f}),yield this.plugin.saveSettings()}))}),o=new me.Setting(e).setName(O.t("settings.datesFromFileNames.scheduledDate.folders.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.datesFromFileNames.scheduledDate.folders.description")}

${O.t("settings.changeRequiresRestart")}

`)).addText(c=>A(this,null,function*(){let d=X();yield this.plugin.saveSettings(),c.setValue(at.renderFolderArray(d.filenameAsDateFolders)).onChange(f=>A(this,null,function*(){let p=at.parseCommaSeparatedFolders(f);it({filenameAsDateFolders:p}),yield this.plugin.saveSettings()}))})),Kr(a,X().useFilenameAsScheduledDate),Kr(o,X().useFilenameAsScheduledDate),new me.Setting(e).setName(O.t("settings.recurringTasks.heading")).setHeading(),new me.Setting(e).setName(O.t("settings.recurringTasks.nextLine.name")).setDesc(at.createFragmentWithHTML(O.t("settings.recurringTasks.nextLine.description")+"
"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Recurring+Tasks"))).addToggle(c=>{let{recurrenceOnNextLine:d}=X();c.setValue(d).onChange(f=>A(this,null,function*(){it({recurrenceOnNextLine:f}),yield this.plugin.saveSettings()}))}),new me.Setting(e).setName(O.t("settings.recurringTasks.removeScheduledDate.name")).setDesc(at.createFragmentWithHTML(O.t("settings.recurringTasks.removeScheduledDate.description.line1")+"
"+O.t("settings.recurringTasks.removeScheduledDate.description.line2")+"
"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Recurring+Tasks"))).addToggle(c=>{let{removeScheduledDateOnRecurrence:d}=X();c.setValue(d).onChange(f=>A(this,null,function*(){it({removeScheduledDateOnRecurrence:f}),yield this.plugin.saveSettings()}))}),new me.Setting(e).setName(O.t("settings.autoSuggest.heading")).setHeading();let l=null,u=null;new me.Setting(e).setName(O.t("settings.autoSuggest.toggle.name")).setDesc(at.createFragmentWithHTML(O.t("settings.autoSuggest.toggle.description")+`

${O.t("settings.changeRequiresRestart")}

`+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Auto-Suggest"))).addToggle(c=>{let d=X();c.setValue(d.autoSuggestInEditor).onChange(f=>A(this,null,function*(){it({autoSuggestInEditor:f}),yield this.plugin.saveSettings(),Kr(l,f),Kr(u,f)}))}),l=new me.Setting(e).setName(O.t("settings.autoSuggest.minLength.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.autoSuggest.minLength.description")}

${O.t("settings.changeRequiresRestart")}

`)).addSlider(c=>{let d=X();c.setLimits(0,3,1).setValue(d.autoSuggestMinMatch).setDynamicTooltip().onChange(f=>A(this,null,function*(){it({autoSuggestMinMatch:f}),yield this.plugin.saveSettings()}))}),u=new me.Setting(e).setName(O.t("settings.autoSuggest.maxSuggestions.name")).setDesc(at.createFragmentWithHTML(`

${O.t("settings.autoSuggest.maxSuggestions.description")}

${O.t("settings.changeRequiresRestart")}

`)).addSlider(c=>{let d=X();c.setLimits(3,20,1).setValue(d.autoSuggestMaxItems).setDynamicTooltip().onChange(f=>A(this,null,function*(){it({autoSuggestMaxItems:f}),yield this.plugin.saveSettings()}))}),Kr(l,X().autoSuggestInEditor),Kr(u,X().autoSuggestInEditor),new me.Setting(e).setName(O.t("settings.dialogs.heading")).setHeading(),new me.Setting(e).setName(O.t("settings.dialogs.accessKeys.name")).setDesc(at.createFragmentWithHTML(O.t("settings.dialogs.accessKeys.description")+"
"+this.seeTheDocumentation("https://publish.obsidian.md/tasks/Getting+Started/Create+or+edit+Task#Keyboard+shortcuts"))).addToggle(c=>{let d=X();c.setValue(d.provideAccessKeys).onChange(f=>A(this,null,function*(){it({provideAccessKeys:f}),yield this.plugin.saveSettings()}))})}seeTheDocumentation(e){return`

${O.t("settings.seeTheDocumentation")}.

`}addOneSettingsBlock(e,r,i){let s=e.createEl("details",{cls:"tasks-nested-settings",attr:Y({},r.open||i[r.text]?{open:!0}:{})});s.empty(),s.ontoggle=()=>{i[r.text]=s.open,it({headingOpened:i}),this.plugin.saveSettings()};let a=s.createEl("summary");return new me.Setting(a).setHeading().setName(r.text),a.createDiv("collapser").createDiv("handle"),r.notice!==null&&r.notice.html!==null&&new me.Setting(s).setDesc(at.createFragmentWithHTML(r.notice.html)),r.settings.forEach(o=>{var l;if(!(o.featureFlag!==""&&!fD(o.featureFlag))&&(o.type==="checkbox"?new me.Setting(s).setName(o.name).setDesc(o.description).addToggle(u=>{let c=X();c.generalSettings[o.settingName]||Ts(o.settingName,o.initialValue),u.setValue(c.generalSettings[o.settingName]).onChange(d=>A(this,null,function*(){Ts(o.settingName,d),yield this.plugin.saveSettings()}))}):o.type==="text"?new me.Setting(s).setName(o.name).setDesc(o.description).addText(u=>{let c=X();c.generalSettings[o.settingName]||Ts(o.settingName,o.initialValue);let d=f=>A(this,null,function*(){Ts(o.settingName,f),yield this.plugin.saveSettings()});u.setPlaceholder(o.placeholder.toString()).setValue(c.generalSettings[o.settingName].toString()).onChange((0,me.debounce)(d,500,!0))}):o.type==="textarea"?new me.Setting(s).setName(o.name).setDesc(o.description).addTextArea(u=>{let c=X();c.generalSettings[o.settingName]||Ts(o.settingName,o.initialValue);let d=f=>A(this,null,function*(){Ts(o.settingName,f),yield this.plugin.saveSettings()});u.setPlaceholder(o.placeholder.toString()).setValue(c.generalSettings[o.settingName].toString()).onChange((0,me.debounce)(d,500,!0)),u.inputEl.rows=8,u.inputEl.cols=40}):o.type==="function"&&this.customFunctions[o.settingName](s,this),o.notice!==null)){let u=s.createEl("p",{cls:o.notice.class,text:(l=o.notice.text)!=null?l:""});o.notice.html!==null&&u.append((0,me.sanitizeHTMLToDom)(o.notice.html))}}),s}static parseCommaSeparatedFolders(e){return e.split(",").map(r=>r.trim()).map(r=>r.replace(/^\/|\/$/g,"")).filter(r=>r!=="")}static renderFolderArray(e){return e.join(",")}insertTaskCoreStatusSettings(e,r){let{statusSettings:i}=X();i.coreStatuses.forEach(a=>{Mx(e,a,i.coreStatuses,i,r,r.plugin,!0)}),new me.Setting(e).addButton(a=>{let o=O.t("settings.statuses.coreStatuses.buttons.checkStatuses.name");a.setButtonText(o).setCta().onClick(()=>A(this,null,function*(){let u=window.moment().format("YYYY-MM-DD HH-mm-ss"),c=`Tasks Plugin - ${o} ${u}.md`,d=this.plugin.manifest.version,f=Xe.getInstance(),p=kx(i,f,o,d),h=yield this.app.vault.create(c,p);yield this.app.workspace.getLeaf(!0).openFile(h)})),a.setTooltip(O.t("settings.statuses.coreStatuses.buttons.checkStatuses.tooltip"))}).infoEl.remove()}insertCustomTaskStatusSettings(e,r){let{statusSettings:i}=X();i.customStatuses.forEach(u=>{Mx(e,u,i.customStatuses,i,r,r.plugin,!1)}),e.createEl("div"),new me.Setting(e).addButton(u=>{u.setButtonText(O.t("settings.statuses.customStatuses.buttons.addNewStatus.name")).setCta().onClick(()=>A(null,null,function*(){wt.addStatus(i.customStatuses,new bt("","","",!1,"TODO")),yield ro(i,r)}))}).infoEl.remove();let a=[[O.t("settings.statuses.collections.anuppuccinTheme"),wx()],[O.t("settings.statuses.collections.auraTheme"),Sx()],[O.t("settings.statuses.collections.borderTheme"),_x()],[O.t("settings.statuses.collections.ebullientworksTheme"),Dx()],[O.t("settings.statuses.collections.itsThemeAndSlrvbCheckboxes"),Ex()],[O.t("settings.statuses.collections.minimalTheme"),Ox()],[O.t("settings.statuses.collections.thingsTheme"),Rx()],[O.t("settings.statuses.collections.lytModeTheme"),xx()]];for(let[u,c]of a)new me.Setting(e).addButton(f=>{let p=O.t("settings.statuses.collections.buttons.addCollection.name",{themeName:u,numberOfStatuses:c.length});f.setButtonText(p).onClick(()=>A(null,null,function*(){yield IW(c,i,r)}))}).infoEl.remove();new me.Setting(e).addButton(u=>{u.setButtonText(O.t("settings.statuses.customStatuses.buttons.addAllUnknown.name")).setCta().onClick(()=>A(this,null,function*(){let d=this.plugin.getTasks().map(p=>p.status),f=Xe.getInstance().findUnknownStatuses(d);f.length!==0&&(f.forEach(p=>{wt.addStatus(i.customStatuses,p)}),yield ro(i,r))}))}).infoEl.remove(),new me.Setting(e).addButton(u=>{u.setButtonText(O.t("settings.statuses.customStatuses.buttons.resetCustomStatuses.name")).setWarning().onClick(()=>A(this,null,function*(){wt.resetAllCustomStatuses(i),yield ro(i,r)}))}).infoEl.remove()}};at.createFragmentWithHTML=e=>(0,me.sanitizeHTMLToDom)(e);var mf=at;function Mx(n,t,e,r,i,s,a){let o=n.createEl("pre");o.addClass("row-for-status"),o.textContent=new Oe(t).previewText();let l=new me.Setting(n);l.infoEl.replaceWith(o),a||l.addExtraButton(u=>{u.setIcon("cross").setTooltip("Delete").onClick(()=>A(null,null,function*(){wt.deleteStatus(e,t)&&(yield ro(r,i))}))}),l.addExtraButton(u=>{u.setIcon("pencil").setTooltip("Edit").onClick(()=>A(null,null,function*(){let c=new df(s,t,a);c.onClose=()=>A(null,null,function*(){c.saved&&wt.replaceStatus(e,t,c.statusConfiguration())&&(yield ro(r,i))}),c.open()}))}),l.infoEl.remove()}function IW(n,t,e){return A(this,null,function*(){wt.bulkAddStatusCollection(t,n).forEach(i=>{new me.Notice(i)}),yield ro(t,e)})}function ro(n,t){return A(this,null,function*(){it({statusSettings:n}),wt.applyToStatusRegistry(n,Xe.getInstance()),yield t.saveSettingsAndRebuildSettingsTab()})}function FW(n){let{settingEl:t,infoEl:e,controlEl:r}=n,i=r.querySelector("textarea");i!==null&&(t.addClass("tasks-setting-multiline-text"),e.addClass("tasks-setting-multiline-text-info"),i.addClass("tasks-setting-multiline-text-textarea"))}function Kr(n,t){n?n.setVisibility(t):console.warn("Setting has not be initialised. Can update visibility of setting UI - in setSettingVisibility")}br();vs();var Ki=require("obsidian");wc();dt();iy();function LW(n){console.error(n),new Ki.Notice(n+` This message has been written to the console. `,1e4)}var hf=class extends Ki.EditorSuggest{constructor(t,e,r){super(t),this.settings=e,this.plugin=r,t.scope.register([],"Tab",()=>{var s;let i=(s=this.context)==null?void 0:s.editor;return i?(i.exec("indentMore"),!1):!0})}onTrigger(t,e,r){if(!this.settings.autoSuggestInEditor||r===void 0)return null;let i=e.getLine(t.line);return!iD(i,t,e)||this.grabSuggestions(e,r,i).length===0?null:{start:{line:t.line,ch:0},end:{line:t.line,ch:i.length},query:i}}getSuggestions(t){return t.file===void 0?[]:this.grabSuggestions(t.editor,t.file,t.query).map(r=>pe(Y({},r),{context:t}))}grabSuggestions(t,e,r){var u,c,d;let i=t.getCursor(),s=this.plugin.getTasks(),a=s.find(f=>f.taskLocation.path==e.path&&f.taskLocation.lineNumber==i.line),o=this.getMarkdownFileInfo(t),l=this.canSaveEdits(o);return(d=(c=(u=_l()).buildSuggestions)==null?void 0:c.call(u,r,i.ch,this.settings,s,l,a))!=null?d:[]}getMarkdownFileInfo(t){return t.cm.state.field(Ki.editorInfoField)}canSaveEdits(t){return t instanceof Ki.MarkdownView}renderSuggestion(t,e){e.setText(t.displayText)}selectSuggestion(t,e){return A(this,null,function*(){var l,u,c;let r=t.context.editor;if(t.suggestionType==="empty"){this.close();let d=new KeyboardEvent("keydown",{code:"Enter",key:"Enter"});(u=(l=r==null?void 0:r.cm)==null?void 0:l.contentDOM)==null||u.dispatchEvent(d);return}if(t.taskItDependsOn!=null){let d=kc(t.taskItDependsOn,this.plugin.getTasks().map(f=>f.id));if(t.appendText+=` ${d.id}`,t.taskItDependsOn!==d)if(t.context.file.path==d.path){let f=t.taskItDependsOn.originalMarkdown,p={line:t.taskItDependsOn.lineNumber,ch:0},h={line:t.taskItDependsOn.lineNumber,ch:f.length},b=t.context.editor.getRange(p,h);if(b!==f){let v=`Error adding new ID, due to mismatched data in Tasks memory and the editor: diff --git a/.obsidian/plugins/obsidian-tasks-plugin/manifest.json b/.obsidian/plugins/obsidian-tasks-plugin/manifest.json index a813c3b..6812337 100644 --- a/.obsidian/plugins/obsidian-tasks-plugin/manifest.json +++ b/.obsidian/plugins/obsidian-tasks-plugin/manifest.json @@ -1,7 +1,7 @@ { "id": "obsidian-tasks-plugin", "name": "Tasks", - "version": "8.2.1", + "version": "8.2.2", "minAppVersion": "1.8.7", "description": "Track tasks across your vault. Supports due dates, recurring tasks, done dates, sub-set of checklist items, and filtering.", "helpUrl": "https://publish.obsidian.md/tasks/", diff --git a/.obsidian/plugins/task-list-kanban/main.js b/.obsidian/plugins/task-list-kanban/main.js index 21e314c..f998fd4 100644 --- a/.obsidian/plugins/task-list-kanban/main.js +++ b/.obsidian/plugins/task-list-kanban/main.js @@ -52,13 +52,13 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce // node_modules/crypto-js/core.js var require_core = __commonJS({ "node_modules/crypto-js/core.js"(exports2, module2) { - (function(root18, factory) { + (function(root22, factory) { if (typeof exports2 === "object") { module2.exports = exports2 = factory(); } else if (typeof define === "function" && define.amd) { define([], factory); } else { - root18.CryptoJS = factory(); + root22.CryptoJS = factory(); } })(exports2, function() { var CryptoJS = CryptoJS || (function(Math2, undefined2) { @@ -660,13 +660,13 @@ var require_core = __commonJS({ // node_modules/crypto-js/sha256.js var require_sha256 = __commonJS({ "node_modules/crypto-js/sha256.js"(exports2, module2) { - (function(root18, factory) { + (function(root22, factory) { if (typeof exports2 === "object") { module2.exports = exports2 = factory(require_core()); } else if (typeof define === "function" && define.amd) { define(["./core"], factory); } else { - factory(root18.CryptoJS); + factory(root22.CryptoJS); } })(exports2, function(CryptoJS) { (function(Math2) { @@ -4267,10 +4267,10 @@ __export(entry_exports, { default: () => Base }); module.exports = __toCommonJS(entry_exports); -var import_obsidian12 = require("obsidian"); +var import_obsidian13 = require("obsidian"); // src/ui/text_view.ts -var import_obsidian11 = require("obsidian"); +var import_obsidian12 = require("obsidian"); // node_modules/svelte/src/internal/client/constants.js var DERIVED = 1 << 1; @@ -6156,11 +6156,11 @@ process_fn = function() { var effects = collected_effects = []; var render_effects = []; var updates = legacy_updates = []; - for (const root18 of roots) { + for (const root22 of roots) { try { - __privateMethod(this, _Batch_instances, traverse_fn).call(this, root18, effects, render_effects); + __privateMethod(this, _Batch_instances, traverse_fn).call(this, root22, effects, render_effects); } catch (e) { - reset_all(root18); + reset_all(root22); if (!__privateMethod(this, _Batch_instances, is_deferred_fn).call(this)) this.discard(); throw e; } @@ -6233,9 +6233,9 @@ process_fn = function() { * @param {Effect[]} effects * @param {Effect[]} render_effects */ -traverse_fn = function(root18, effects, render_effects) { - root18.f ^= CLEAN; - var effect2 = root18.first; +traverse_fn = function(root22, effects, render_effects) { + root22.f ^= CLEAN; + var effect2 = root22.first; while (effect2 !== null) { var flags2 = effect2.f; var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0; @@ -6413,8 +6413,8 @@ commit_fn = function() { } if (__privateGet(batch, _roots).length > 0 && !__privateGet(batch, _decrement_queued)) { batch.apply(); - for (var root18 of __privateGet(batch, _roots)) { - __privateMethod(_a5 = batch, _Batch_instances, traverse_fn).call(_a5, root18, [], []); + for (var root22 of __privateGet(batch, _roots)) { + __privateMethod(_a5 = batch, _Batch_instances, traverse_fn).call(_a5, root22, [], []); } __privateSet(batch, _roots, []); } @@ -7800,7 +7800,7 @@ function is_dirty(reaction) { } return false; } -function schedule_possible_effect_self_invalidation(signal, effect2, root18 = true) { +function schedule_possible_effect_self_invalidation(signal, effect2, root22 = true) { var reactions = signal.reactions; if (reactions === null) return; if (!async_mode_flag && current_sources !== null && current_sources.has(signal)) { @@ -7816,7 +7816,7 @@ function schedule_possible_effect_self_invalidation(signal, effect2, root18 = tr false ); } else if (effect2 === reaction) { - if (root18) { + if (root22) { set_signal_status(reaction, DIRTY); } else if ((reaction.f & CLEAN) !== 0) { set_signal_status(reaction, MAYBE_DIRTY); @@ -8844,21 +8844,21 @@ function from_namespace(content, flags2, ns = "svg") { /** @type {DocumentFragment} */ create_fragment_from_html(wrapped) ); - var root18 = ( + var root22 = ( /** @type {Element} */ get_first_child(fragment) ); if (is_fragment) { node = document.createDocumentFragment(); - while (get_first_child(root18)) { + while (get_first_child(root22)) { node.appendChild( /** @type {TemplateNode} */ - get_first_child(root18) + get_first_child(root22) ); } } else { node = /** @type {Element} */ - get_first_child(root18); + get_first_child(root22); } } var clone = ( @@ -10247,17 +10247,17 @@ function sanitize_slots(props) { function append_styles(anchor, css) { effect(() => { var _a5; - var root18 = anchor.getRootNode(); + var root22 = anchor.getRootNode(); var target = ( /** @type {ShadowRoot} */ - root18.host ? ( + root22.host ? ( /** @type {ShadowRoot} */ - root18 + root22 ) : ( /** @type {Document} */ - (_a5 = root18.head) != null ? _a5 : ( + (_a5 = root22.head) != null ? _a5 : ( /** @type {Document} */ - root18.ownerDocument.head + root22.ownerDocument.head ) ) ); @@ -10628,6 +10628,14 @@ function set_value(element2, value) { } element2.value = value != null ? value : ""; } +function set_checked(element2, checked) { + var attributes = get_attributes(element2); + if (attributes.checked === (attributes.checked = // treat null and undefined the same for the initial value + checked != null ? checked : void 0)) { + return; + } + element2.checked = checked; +} function set_selected(element2, selected) { if (selected) { if (!element2.hasAttribute("selected")) { @@ -11006,6 +11014,71 @@ function bind_prop(props, prop2, value) { } } +// node_modules/svelte/src/internal/client/dom/elements/bindings/size.js +var _listeners, _observer, _options, _ResizeObserverSingleton_instances, getObserver_fn; +var _ResizeObserverSingleton = class _ResizeObserverSingleton { + /** @param {ResizeObserverOptions} options */ + constructor(options2) { + __privateAdd(this, _ResizeObserverSingleton_instances); + /** */ + __privateAdd(this, _listeners, /* @__PURE__ */ new WeakMap()); + /** @type {ResizeObserver | undefined} */ + __privateAdd(this, _observer); + /** @type {ResizeObserverOptions} */ + __privateAdd(this, _options); + __privateSet(this, _options, options2); + } + /** + * @param {Element} element + * @param {(entry: ResizeObserverEntry) => any} listener + */ + observe(element2, listener) { + var listeners2 = __privateGet(this, _listeners).get(element2) || /* @__PURE__ */ new Set(); + listeners2.add(listener); + __privateGet(this, _listeners).set(element2, listeners2); + __privateMethod(this, _ResizeObserverSingleton_instances, getObserver_fn).call(this).observe(element2, __privateGet(this, _options)); + return () => { + var listeners3 = __privateGet(this, _listeners).get(element2); + listeners3.delete(listener); + if (listeners3.size === 0) { + __privateGet(this, _listeners).delete(element2); + __privateGet(this, _observer).unobserve(element2); + } + }; + } +}; +_listeners = new WeakMap(); +_observer = new WeakMap(); +_options = new WeakMap(); +_ResizeObserverSingleton_instances = new WeakSet(); +getObserver_fn = function() { + var _a5; + return (_a5 = __privateGet(this, _observer)) != null ? _a5 : __privateSet(this, _observer, new ResizeObserver( + /** @param {any} entries */ + (entries) => { + for (var entry of entries) { + _ResizeObserverSingleton.entries.set(entry.target, entry); + for (var listener of __privateGet(this, _listeners).get(entry.target) || []) { + listener(entry); + } + } + } + )); +}; +/** @static */ +__publicField(_ResizeObserverSingleton, "entries", /* @__PURE__ */ new WeakMap()); +var ResizeObserverSingleton = _ResizeObserverSingleton; +var resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({ + box: "border-box" +}); +function bind_element_size(element2, type, set2) { + var unsub = resize_observer_border_box.observe(element2, () => set2(element2[type])); + effect(() => { + untrack(() => set2(element2[type])); + return unsub; + }); +} + // node_modules/svelte/src/internal/client/dom/elements/bindings/this.js function is_bound_this(bound_value, element_or_component) { return bound_value === element_or_component || (bound_value == null ? void 0 : bound_value[STATE_SYMBOL]) === element_or_component; @@ -11572,851 +11645,6 @@ function kebab(input) { return input.replaceAll(/\p{Lu}/gu, (match) => `-${match.toLowerCase()}`).replaceAll(/\p{Z}/gu, "-").replaceAll(/[^\p{L}\p{N}\/-]/gu, "-").replaceAll(/-+/g, "-").replace(/^-/, "").replace(/-$/, ""); } -// src/ui/columns/definitions.ts -var RESERVED_COLUMN_KEYS = /* @__PURE__ */ new Set(["uncategorised", "done"]); -function parseColumnSpec(columnSpec) { - const hashMatch = columnSpec.match(/^(.+?)\(#([0-9a-fA-F]{6})\)$/); - const oxMatch = columnSpec.match(/^(.+?)\(0x([0-9a-fA-F]{6})\)$/); - const match = hashMatch || oxMatch; - if ((match == null ? void 0 : match[1]) && (match == null ? void 0 : match[2])) { - return { - raw: columnSpec, - label: match[1], - color: `#${match[2]}` - }; - } - return { - raw: columnSpec, - label: columnSpec - }; -} -function sanitizeIdBase(label) { - const normalized = kebab(label).replace(/[^a-z0-9-]/g, ""); - return normalized.length > 0 ? normalized : "column"; -} -function createColumnId(label, usedIds) { - const base = `column-${sanitizeIdBase(label)}`; - let candidate = base; - let suffix = 2; - while (usedIds.has(candidate) || RESERVED_COLUMN_KEYS.has(candidate)) { - candidate = `${base}-${suffix}`; - suffix += 1; - } - usedIds.add(candidate); - return candidate; -} -function normalizeMatchTags(tags) { - const normalized = tags.map((tag2) => tag2.trim().replace(/^#/, "")).filter((tag2) => tag2.length > 0); - return [...new Set(normalized)]; -} -function getNameModeWriteTag(column) { - return kebab(column.label); -} -function usesTagMatching(column) { - return column.matchMode === "tags"; -} -function getColumnWriteTags(column) { - return usesTagMatching(column) ? column.matchTags : [getNameModeWriteTag(column)]; -} -function columnRuleSignature(column) { - return usesTagMatching(column) ? `tags:${[...getColumnWriteTags(column)].sort().join(",")}` : `name:${getNameModeWriteTag(column)}`; -} -function matchesColumnDefinition(column, taskTags) { - if (usesTagMatching(column)) { - const explicitTags = getColumnWriteTags(column); - return explicitTags.length > 0 && explicitTags.every((tag2) => taskTags.has(tag2)); - } - const derivedTag = getNameModeWriteTag(column); - for (const tag2 of taskTags) { - if (kebab(tag2) === derivedTag) { - return true; - } - } - return false; -} -function getColumnMatchSpecificity(column) { - return usesTagMatching(column) ? getColumnWriteTags(column).length : 1; -} -function resolveMatchedColumnDefinition(columns, taskTags) { - let matchedColumn; - let matchedSpecificity = -1; - for (const column of columns) { - if (!matchesColumnDefinition(column, taskTags)) { - continue; - } - const specificity = getColumnMatchSpecificity(column); - if (!matchedColumn || specificity > matchedSpecificity) { - matchedColumn = column; - matchedSpecificity = specificity; - } - } - return matchedColumn; -} -function isPlacementTag(column, tag2) { - if (usesTagMatching(column)) { - return getColumnWriteTags(column).includes(tag2); - } - return kebab(tag2) === getNameModeWriteTag(column); -} -function getColumnHeaderTags(column) { - return usesTagMatching(column) ? column.matchTags : []; -} -function migrateColumnDefinitions(columns) { - const usedIds = /* @__PURE__ */ new Set(); - return columns.flatMap((column) => { - if (typeof column === "string") { - const parsed = parseColumnSpec(column); - return [ - { - id: createColumnId(parsed.label, usedIds), - label: parsed.label, - color: parsed.color, - matchMode: "name", - matchTags: [] - } - ]; - } - if (!column || typeof column !== "object") { - return []; - } - const label = typeof column.label === "string" ? column.label : ""; - const idCandidate = typeof column.id === "string" ? column.id : ""; - const id = idCandidate && !usedIds.has(idCandidate) && !RESERVED_COLUMN_KEYS.has(idCandidate) ? (usedIds.add(idCandidate), idCandidate) : createColumnId(label, usedIds); - return [ - { - id, - label, - color: typeof column.color === "string" && column.color.length > 0 ? column.color : void 0, - matchMode: column.matchMode === "tags" ? "tags" : "name", - matchTags: normalizeMatchTags(Array.isArray(column.matchTags) ? column.matchTags : []) - } - ]; - }); -} -function migrateCollapsedColumns(collapsedColumns, columns) { - if (!collapsedColumns || collapsedColumns.length === 0) { - return []; - } - const placementTagToId = /* @__PURE__ */ new Map(); - for (const column of columns) { - placementTagToId.set(getNameModeWriteTag(column), column.id); - } - const migrated = /* @__PURE__ */ new Set(); - for (const value of collapsedColumns) { - if (value === "done" || value === "uncategorised") { - migrated.add(value); - continue; - } - const matchedColumn = columns.find((column) => column.id === value); - if (matchedColumn) { - migrated.add(matchedColumn.id); - continue; - } - const mappedId = placementTagToId.get(value); - if (mappedId) { - migrated.add(mappedId); - } - } - return [...migrated]; -} - -// src/ui/columns/columns.ts -var createColumnStores = (settingsStore) => { - const columnDefinitions = derived([settingsStore], ([settings]) => { - var _a5; - return (_a5 = settings.columns) != null ? _a5 : []; - }); - const columnData = derived([columnDefinitions], ([columns]) => createColumnData(columns)); - const columnTagTable = derived([columnData], ([data]) => data.columnTagTable); - const columnColourTable = derived([columnData], ([data]) => data.columnColourTable); - const columnPlacementTagTable = derived([columnData], ([data]) => data.columnPlacementTagTable); - const columnMatchTagTable = derived([columnData], ([data]) => data.columnMatchTagTable); - return { - columnDefinitions, - columnTagTable, - columnColourTable, - columnPlacementTagTable, - columnMatchTagTable - }; -}; -function isColumnTag(input, columnTagTableStore) { - return input in get2(columnTagTableStore); -} -var DEFAULT_UNCATEGORIZED_LABEL = "Uncategorized"; -var DEFAULT_DONE_LABEL = "Done"; -function resolveDefaultColumnName(column, uncategorizedColumnName, doneColumnName) { - switch (column) { - case "uncategorised": - return uncategorizedColumnName || DEFAULT_UNCATEGORIZED_LABEL; - case "done": - return doneColumnName || DEFAULT_DONE_LABEL; - } -} -var createCollapsedColumnsStore = (settingsStore) => { - return derived([settingsStore], ([settings]) => { - var _a5; - return new Set((_a5 = settings.collapsedColumns) != null ? _a5 : []); - }); -}; -function createColumnData(columns) { - const columnTagTable = {}; - const columnColourTable = {}; - const columnPlacementTagTable = {}; - const columnMatchTagTable = {}; - for (const column of columns) { - if (RESERVED_COLUMN_KEYS.has(column.id)) continue; - columnTagTable[column.id] = column.label; - if (column.color) { - columnColourTable[column.id] = column.color; - } - columnPlacementTagTable[column.id] = getColumnWriteTags(column); - columnMatchTagTable[column.id] = getColumnHeaderTags(column); - } - return { - columnTagTable, - columnColourTable, - columnPlacementTagTable, - columnMatchTagTable - }; -} - -// src/ui/components/ColumnHeader.svelte -var import_obsidian2 = require("obsidian"); - -// src/ui/components/icon_button.svelte -var import_obsidian = require("obsidian"); -var root = from_html(``); -var $$css = { - hash: "svelte-1igl4u1", - code: "button.svelte-1igl4u1 {width:24px;height:24px;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-s);transition:background linear 100ms;cursor:pointer;background:unset;padding:0;}button.svelte-1igl4u1:focus-visible {outline:2px solid var(--background-modifier-border-focus);outline-offset:2px;}" -}; -function Icon_button($$anchor, $$props) { - if (new.target) return createClassComponent({ component: Icon_button, ...$$anchor }); - const $$sanitized_props = legacy_rest_props($$props, ["children", "$$slots", "$$events", "$$legacy"]); - const $$restProps = legacy_rest_props($$sanitized_props, ["icon"]); - push($$props, false); - append_styles($$anchor, $$css); - let icon = prop($$props, "icon", 12); - let element2 = mutable_source(); - function handleKeydown(e) { - var _a5; - if (e.key === "Enter" || e.key === " ") { - e.preventDefault(); - (_a5 = get(element2)) == null ? void 0 : _a5.click(); - } - } - legacy_pre_effect(() => (get(element2), import_obsidian.setIcon, deep_read_state(icon())), () => { - if (get(element2)) { - (0, import_obsidian.setIcon)(get(element2), icon()); - } - }); - legacy_pre_effect_reset(); - var $$exports = { - get icon() { - return icon(); - }, - set icon($$value) { - icon($$value); - flushSync(); - }, - $set: update_legacy_props, - $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) - }; - init(); - var button = root(); - attribute_effect(button, () => ({ tabindex: "0", ...$$restProps }), void 0, void 0, void 0, "svelte-1igl4u1"); - bind_this(button, ($$value) => set(element2, $$value), () => get(element2)); - event("click", button, function($$arg) { - bubble_event.call(this, $$props, $$arg); - }); - event("keydown", button, handleKeydown); - append($$anchor, button); - return pop($$exports); -} - -// src/ui/selection/task_selection_store.ts -var taskSelectionStore = writable(/* @__PURE__ */ new Map()); -function toggleTaskSelection(taskId) { - taskSelectionStore.update((map) => { - const current = map.get(taskId) || false; - map.set(taskId, !current); - return new Map(map); - }); -} -function isTaskSelected(taskId, selectionMap) { - return selectionMap.get(taskId) || false; -} -function getSelectedTaskCount(taskIds, selectionMap) { - return taskIds.filter((id) => selectionMap.get(id) || false).length; -} -function clearColumnSelections(columnTaskIds) { - taskSelectionStore.update((map) => { - for (const id of columnTaskIds) { - map.delete(id); - } - return new Map(map); - }); -} - -// src/ui/selection/selection_mode_store.ts -var selectionModeStore = writable(/* @__PURE__ */ new Map()); -function toggleSelectionMode(column) { - selectionModeStore.update((map) => { - const current = map.get(column) || false; - const newMode = !current; - map.set(column, newMode); - if (current && !newMode) { - taskSelectionStore.set(/* @__PURE__ */ new Map()); - } - return new Map(map); - }); -} -function isInSelectionMode(column, modeMap) { - return modeMap.get(column) || false; -} - -// src/ui/components/ColumnHeader.svelte -var root2 = from_html(` `); -var root_1 = from_html(`
`); -var root_2 = from_html(`
`); -var root_3 = from_html(`
`); -var root_4 = from_html(`

`); -var $$css2 = { - hash: "svelte-1q9xxoc", - code: '.column-header.svelte-1q9xxoc {width:100%;--header-accent: var(--column-color, var(--background-modifier-border-hover));--column-header-x-padding: var(--column-header-x-padding-override, var(--size-4-4));--column-header-y-padding: var(--column-header-y-padding-override, var(--size-4-4));display:flex;flex-direction:column;gap:var(--size-2-3);}.column-header.svelte-1q9xxoc::before {content:"";display:block;width:calc(100% + 2 * var(--column-header-x-padding));height:12px;margin:calc(-1 * var(--column-header-y-padding)) calc(-1 * var(--column-header-x-padding)) 0;border-radius:2px;background:var(--header-accent);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--text-normal) 10%, transparent);flex:0 0 auto;}.column-header.row-header.svelte-1q9xxoc {position:relative;display:flex;align-items:stretch;margin-bottom:0;}.column-header.row-header.svelte-1q9xxoc::before {position:absolute;top:calc(-1 * var(--column-header-y-padding));bottom:calc(-1 * var(--column-header-y-padding));left:calc(-1 * var(--column-header-x-padding));width:12px;height:auto;margin:0;}.column-header.row-header.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) {margin-right:0;padding-left:var(--size-4-3);box-sizing:border-box;}.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc),\n.column-header.row-header.svelte-1q9xxoc .selection-info:where(.svelte-1q9xxoc) {padding-left:var(--size-4-3);box-sizing:border-box;}.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc) {margin-top:var(--size-2-2);}.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc) .column-meta-line:where(.svelte-1q9xxoc) {justify-content:flex-start;flex-wrap:wrap;gap:var(--size-2-2) var(--size-4-2);}.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc) .column-meta-line:where(.svelte-1q9xxoc) .column-match-tags:where(.svelte-1q9xxoc) {order:1;flex:0 0 100%;}.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc) .column-meta-line:where(.svelte-1q9xxoc) .task-count:where(.svelte-1q9xxoc) {order:2;flex:0 0 100%;margin-left:0;}.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc) .column-meta-line:where(.svelte-1q9xxoc) .mode-toggle:where(.svelte-1q9xxoc) {order:3;flex:0 0 auto;}.column-header.collapsed.svelte-1q9xxoc {position:sticky;top:0;align-self:flex-start;z-index:1;}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) {flex-direction:column;align-items:center;min-height:unset;gap:var(--size-4-2);}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) .column-title-group:where(.svelte-1q9xxoc) {order:2;}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) .column-title-group:where(.svelte-1q9xxoc) h2:where(.svelte-1q9xxoc) {writing-mode:vertical-rl;text-orientation:mixed;white-space:nowrap;overflow:visible;text-overflow:unset;flex:0 0 auto;line-height:normal;}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) .task-count:where(.svelte-1q9xxoc) {order:3;writing-mode:horizontal-tb;align-self:center;line-height:normal;}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) .header-menu:where(.svelte-1q9xxoc) {display:flex;margin-left:0;order:4;}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) .header-menu button {width:20px;height:20px;}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) .collapse-btn:where(.svelte-1q9xxoc) {order:1;}.column-header.vertical-collapsed.row-header.svelte-1q9xxoc {margin-bottom:0;}.column-header.vertical-collapsed.row-header.svelte-1q9xxoc .header-menu:where(.svelte-1q9xxoc) {display:flex;}.header.svelte-1q9xxoc {display:flex;align-items:center;min-height:22px;width:100%;flex-shrink:0;gap:var(--size-4-2);}.header.svelte-1q9xxoc .column-title-group:where(.svelte-1q9xxoc) {min-width:0;display:flex;flex-direction:column;gap:2px;flex:1 1 auto;}.header.svelte-1q9xxoc h2:where(.svelte-1q9xxoc) {font-size:var(--font-ui-medium);font-weight:var(--font-bold);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.2;}.header.svelte-1q9xxoc .task-count:where(.svelte-1q9xxoc) {font-size:var(--font-ui-small);color:var(--text-muted);white-space:nowrap;align-self:flex-start;line-height:28px;}.header.svelte-1q9xxoc .header-menu:where(.svelte-1q9xxoc) {margin-left:auto;flex-shrink:0;display:flex;align-items:center;gap:var(--size-2-1);height:24px;}.header.svelte-1q9xxoc .collapse-btn:where(.svelte-1q9xxoc) {background:transparent;border:none;cursor:pointer;color:var(--text-muted);padding:0;width:20px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-s);font-size:var(--font-ui-smaller);line-height:1;flex-shrink:0;transition:color 0.15s ease, background 0.15s ease;}.header.svelte-1q9xxoc .collapse-btn:where(.svelte-1q9xxoc):hover {color:var(--text-normal);background:var(--background-modifier-hover);}.header.svelte-1q9xxoc .collapse-btn:where(.svelte-1q9xxoc):focus-visible {outline:2px solid var(--background-modifier-border-focus);outline-offset:2px;}.mode-toggle.svelte-1q9xxoc {display:flex;align-items:center;background:var(--background-modifier-form-field, var(--background-secondary));border-radius:var(--radius-s);padding:2px;gap:0;width:fit-content;max-width:100%;flex:0 0 auto;}.mode-toggle.svelte-1q9xxoc .mode-btn:where(.svelte-1q9xxoc) {font-size:var(--font-ui-smaller);padding:1px 5px;min-width:0;width:auto;border:none;background:transparent;color:var(--text-muted);border-radius:calc(var(--radius-s) - 2px);cursor:pointer;transition:background 0.15s ease, color 0.15s ease;white-space:nowrap;box-shadow:none;line-height:1.2;}.mode-toggle.svelte-1q9xxoc .mode-btn:where(.svelte-1q9xxoc):hover {background:transparent;color:var(--text-normal);box-shadow:none;}.mode-toggle.svelte-1q9xxoc .mode-btn.active:where(.svelte-1q9xxoc) {background:var(--background-primary);color:var(--text-normal);box-shadow:var(--input-shadow);font-weight:var(--font-medium);}.mode-toggle.svelte-1q9xxoc .mode-btn:where(.svelte-1q9xxoc):focus-visible {outline:2px solid var(--background-modifier-border-focus);outline-offset:1px;}.column-meta.svelte-1q9xxoc {display:flex;flex-direction:column;gap:var(--size-2-1);width:100%;align-items:flex-start;}.column-meta.svelte-1q9xxoc .column-meta-line:where(.svelte-1q9xxoc) {display:flex;align-items:center;justify-content:space-between;width:100%;gap:var(--size-2-3);min-width:0;}.column-meta.svelte-1q9xxoc .column-meta-line:where(.svelte-1q9xxoc) .task-count:where(.svelte-1q9xxoc) {font-size:var(--font-ui-small);color:var(--text-muted);white-space:nowrap;line-height:1.3;margin-left:auto;flex:0 0 auto;}.column-match-tags.svelte-1q9xxoc {font-size:var(--font-ui-small);color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3;min-width:0;flex:1 1 auto;}.selection-info.svelte-1q9xxoc {font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);}' -}; -function ColumnHeader($$anchor, $$props) { - if (new.target) return createClassComponent({ component: ColumnHeader, ...$$anchor }); - push($$props, false); - append_styles($$anchor, $$css2); - const $columnTagTableStore = () => store_get(columnTagTableStore(), "$columnTagTableStore", $$stores); - const $columnColourTableStore = () => store_get(columnColourTableStore(), "$columnColourTableStore", $$stores); - const $columnMatchTagTableStore = () => store_get(columnMatchTagTableStore(), "$columnMatchTagTableStore", $$stores); - const $selectionModeStore = () => store_get(selectionModeStore, "$selectionModeStore", $$stores); - const $taskSelectionStore = () => store_get(taskSelectionStore, "$taskSelectionStore", $$stores); - const [$$stores, $$cleanup] = setup_stores(); - const columnTitle = mutable_source(); - const columnColor = mutable_source(); - const columnMatchTags = mutable_source(); - const taskCountLabel = mutable_source(); - const collapseIcon = mutable_source(); - const isHorizontalCollapsed = mutable_source(); - const isVerticalCollapsed = mutable_source(); - const displayTaskCount = mutable_source(); - const showColumnMatchTags = mutable_source(); - const isSelectMode = mutable_source(); - const columnTaskIds = mutable_source(); - const selectedCount = mutable_source(); - const selectedIds = mutable_source(); - const showContextMenu = mutable_source(); - let column = prop($$props, "column", 12); - let tasks = prop($$props, "tasks", 12); - let taskActions = prop($$props, "taskActions", 12); - let columnTagTableStore = prop($$props, "columnTagTableStore", 12); - let columnColourTableStore = prop($$props, "columnColourTableStore", 12); - let columnMatchTagTableStore = prop($$props, "columnMatchTagTableStore", 12); - let isVerticalFlow = prop($$props, "isVerticalFlow", 12, false); - let isCollapsed = prop($$props, "isCollapsed", 12, false); - let onToggleCollapse = prop($$props, "onToggleCollapse", 12); - let uncategorizedColumnName = prop($$props, "uncategorizedColumnName", 12, void 0); - let doneColumnName = prop($$props, "doneColumnName", 12, void 0); - function getColumnTitle(col, columnTagTable) { - switch (col) { - case "done": - case "uncategorised": - return resolveDefaultColumnName(col, uncategorizedColumnName(), doneColumnName()); - default: - return columnTagTable[col]; - } - } - function showMenu(e) { - const menu = new import_obsidian2.Menu(); - if (get(isSelectMode) && get(selectedCount) > 0) { - if (column() !== "done") { - menu.addItem((i) => { - i.setTitle(`Move ${get(selectedCount)} selected to ${resolveDefaultColumnName("done", uncategorizedColumnName(), doneColumnName())}`).onClick(async () => { - for (const id of get(selectedIds)) { - await taskActions().markDone(id); - } - clearColumnSelections(get(columnTaskIds)); - }); - }); - } - for (const [tag2, label] of Object.entries($columnTagTableStore())) { - const tagAsColumn = tag2; - if (tagAsColumn === column()) continue; - menu.addItem((i) => { - i.setTitle(`Move ${get(selectedCount)} selected to ${label}`).onClick(async () => { - for (const id of get(selectedIds)) { - await taskActions().changeColumn(id, tagAsColumn); - } - clearColumnSelections(get(columnTaskIds)); - }); - }); - } - menu.addSeparator(); - const selectedTasks = get(selectedIds).map((id) => tasks().find((t) => t.id === id)).filter(Boolean); - const allCancelled = selectedTasks.length > 0 && selectedTasks.every((t) => t.isCancelled); - if (allCancelled) { - menu.addItem((i) => { - i.setTitle(`Restore ${get(selectedCount)} selected`).onClick(async () => { - await taskActions().restoreTasks(get(selectedIds)); - clearColumnSelections(get(columnTaskIds)); - }); - }); - } else { - menu.addItem((i) => { - i.setTitle(`Cancel ${get(selectedCount)} selected`).onClick(async () => { - await taskActions().cancelTasks(get(selectedIds)); - clearColumnSelections(get(columnTaskIds)); - }); - }); - } - menu.addSeparator(); - menu.addItem((i) => { - i.setTitle(`Archive ${get(selectedCount)} selected`).onClick(async () => { - await taskActions().archiveTasks(get(selectedIds)); - clearColumnSelections(get(columnTaskIds)); - }); - }); - } - if (column() === "done") { - menu.addItem((i) => { - i.setTitle(`Archive all`).onClick(() => taskActions().archiveTasks(tasks().map(({ id }) => id))); - }); - } - menu.showAtMouseEvent(e); - } - legacy_pre_effect( - () => (deep_read_state(uncategorizedColumnName()), deep_read_state(doneColumnName()), deep_read_state(column()), $columnTagTableStore()), - () => { - set(columnTitle, (() => { - void uncategorizedColumnName(); - void doneColumnName(); - return getColumnTitle(column(), $columnTagTableStore()); - })()); - } - ); - legacy_pre_effect( - () => (isColumnTag, deep_read_state(column()), deep_read_state(columnTagTableStore()), $columnColourTableStore()), - () => { - set(columnColor, isColumnTag(column(), columnTagTableStore()) ? $columnColourTableStore()[column()] : void 0); - } - ); - legacy_pre_effect( - () => (isColumnTag, deep_read_state(column()), deep_read_state(columnTagTableStore()), $columnMatchTagTableStore()), - () => { - var _a5; - set(columnMatchTags, isColumnTag(column(), columnTagTableStore()) ? (_a5 = $columnMatchTagTableStore()[column()]) != null ? _a5 : [] : []); - } - ); - legacy_pre_effect(() => deep_read_state(tasks()), () => { - set(taskCountLabel, tasks().length === 1 ? "1 task" : `${tasks().length} tasks`); - }); - legacy_pre_effect(() => deep_read_state(isCollapsed()), () => { - set(collapseIcon, isCollapsed() ? "\u25B6" : "\u25BC"); - }); - legacy_pre_effect( - () => (deep_read_state(isCollapsed()), deep_read_state(isVerticalFlow())), - () => { - set(isHorizontalCollapsed, isCollapsed() && !isVerticalFlow()); - } - ); - legacy_pre_effect( - () => (deep_read_state(isCollapsed()), deep_read_state(isVerticalFlow())), - () => { - set(isVerticalCollapsed, isCollapsed() && isVerticalFlow()); - } - ); - legacy_pre_effect( - () => (deep_read_state(isCollapsed()), deep_read_state(tasks()), get(taskCountLabel)), - () => { - set(displayTaskCount, isCollapsed() ? `${tasks().length}` : get(taskCountLabel)); - } - ); - legacy_pre_effect(() => (get(columnMatchTags), deep_read_state(isCollapsed())), () => { - set(showColumnMatchTags, get(columnMatchTags).length > 0 && !isCollapsed()); - }); - legacy_pre_effect( - () => (isInSelectionMode, deep_read_state(column()), $selectionModeStore()), - () => { - set(isSelectMode, isInSelectionMode(column(), $selectionModeStore())); - } - ); - legacy_pre_effect(() => deep_read_state(tasks()), () => { - set(columnTaskIds, tasks().map((t) => t.id)); - }); - legacy_pre_effect( - () => (getSelectedTaskCount, get(columnTaskIds), $taskSelectionStore()), - () => { - set(selectedCount, getSelectedTaskCount(get(columnTaskIds), $taskSelectionStore())); - } - ); - legacy_pre_effect(() => (get(columnTaskIds), isTaskSelected, $taskSelectionStore()), () => { - set(selectedIds, get(columnTaskIds).filter((id) => isTaskSelected(id, $taskSelectionStore()))); - }); - legacy_pre_effect( - () => (deep_read_state(column()), get(isSelectMode), get(selectedCount)), - () => { - set(showContextMenu, column() === "done" || get(isSelectMode) && get(selectedCount) > 0); - } - ); - legacy_pre_effect_reset(); - var $$exports = { - get column() { - return column(); - }, - set column($$value) { - column($$value); - flushSync(); - }, - get tasks() { - return tasks(); - }, - set tasks($$value) { - tasks($$value); - flushSync(); - }, - get taskActions() { - return taskActions(); - }, - set taskActions($$value) { - taskActions($$value); - flushSync(); - }, - get columnTagTableStore() { - return columnTagTableStore(); - }, - set columnTagTableStore($$value) { - columnTagTableStore($$value); - flushSync(); - }, - get columnColourTableStore() { - return columnColourTableStore(); - }, - set columnColourTableStore($$value) { - columnColourTableStore($$value); - flushSync(); - }, - get columnMatchTagTableStore() { - return columnMatchTagTableStore(); - }, - set columnMatchTagTableStore($$value) { - columnMatchTagTableStore($$value); - flushSync(); - }, - get isVerticalFlow() { - return isVerticalFlow(); - }, - set isVerticalFlow($$value) { - isVerticalFlow($$value); - flushSync(); - }, - get isCollapsed() { - return isCollapsed(); - }, - set isCollapsed($$value) { - isCollapsed($$value); - flushSync(); - }, - get onToggleCollapse() { - return onToggleCollapse(); - }, - set onToggleCollapse($$value) { - onToggleCollapse($$value); - flushSync(); - }, - get uncategorizedColumnName() { - return uncategorizedColumnName(); - }, - set uncategorizedColumnName($$value) { - uncategorizedColumnName($$value); - flushSync(); - }, - get doneColumnName() { - return doneColumnName(); - }, - set doneColumnName($$value) { - doneColumnName($$value); - flushSync(); - }, - $set: update_legacy_props, - $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) - }; - init(); - var div = root_4(); - let classes; - let styles; - var div_1 = child(div); - var button = child(div_1); - var text2 = child(button, true); - reset(button); - var div_2 = sibling(button, 2); - var h2 = child(div_2); - var text_1 = child(h2, true); - reset(h2); - reset(div_2); - var node = sibling(div_2, 2); - { - var consequent = ($$anchor2) => { - var span = root2(); - var text_2 = child(span, true); - reset(span); - template_effect(() => { - set_attribute2(span, "aria-label", get(taskCountLabel)); - set_text(text_2, get(displayTaskCount)); - }); - append($$anchor2, span); - }; - if_block(node, ($$render) => { - if (isCollapsed()) $$render(consequent); - }); - } - var div_3 = sibling(node, 2); - var node_1 = child(div_3); - { - var consequent_1 = ($$anchor2) => { - Icon_button($$anchor2, { - icon: "lucide-more-vertical", - get "aria-label"() { - var _a5; - return `Column options for ${(_a5 = get(columnTitle)) != null ? _a5 : ""}`; - }, - $$events: { click: showMenu } - }); - }; - if_block(node_1, ($$render) => { - if (get(showContextMenu)) $$render(consequent_1); - }); - } - reset(div_3); - reset(div_1); - var node_2 = sibling(div_1, 2); - { - var consequent_3 = ($$anchor2) => { - var div_4 = root_2(); - var div_5 = child(div_4); - var node_3 = child(div_5); - { - var consequent_2 = ($$anchor3) => { - var div_6 = root_1(); - var text_3 = child(div_6, true); - reset(div_6); - template_effect( - ($0, $1) => { - set_attribute2(div_6, "title", $0); - set_text(text_3, $1); - }, - [ - () => (get(columnMatchTags), untrack(() => get(columnMatchTags).map((tag2) => `#${tag2}`).join(" "))), - () => (get(columnMatchTags), untrack(() => get(columnMatchTags).map((tag2) => `#${tag2}`).join(" "))) - ] - ); - append($$anchor3, div_6); - }; - if_block(node_3, ($$render) => { - if (get(showColumnMatchTags)) $$render(consequent_2); - }); - } - var span_1 = sibling(node_3, 2); - var text_4 = child(span_1, true); - reset(span_1); - var div_7 = sibling(span_1, 2); - var button_1 = child(div_7); - let classes_1; - var button_2 = sibling(button_1, 2); - let classes_2; - reset(div_7); - reset(div_5); - reset(div_4); - template_effect(() => { - set_attribute2(span_1, "aria-label", get(taskCountLabel)); - set_text(text_4, get(displayTaskCount)); - classes_1 = set_class(button_1, 1, "mode-btn svelte-1q9xxoc", null, classes_1, { active: !get(isSelectMode) }); - set_attribute2(button_1, "aria-pressed", !get(isSelectMode)); - classes_2 = set_class(button_2, 1, "mode-btn svelte-1q9xxoc", null, classes_2, { active: get(isSelectMode) }); - set_attribute2(button_2, "aria-pressed", get(isSelectMode)); - }); - event("click", button_1, () => { - if (get(isSelectMode)) toggleSelectionMode(column()); - }); - event("click", button_2, () => { - if (!get(isSelectMode)) toggleSelectionMode(column()); - }); - append($$anchor2, div_4); - }; - if_block(node_2, ($$render) => { - if (!isCollapsed()) $$render(consequent_3); - }); - } - var node_4 = sibling(node_2, 2); - { - var consequent_4 = ($$anchor2) => { - var div_8 = root_3(); - var text_5 = child(div_8); - reset(div_8); - template_effect(() => { - var _a5; - return set_text(text_5, `${(_a5 = get(selectedCount)) != null ? _a5 : ""} selected`); - }); - append($$anchor2, div_8); - }; - if_block(node_4, ($$render) => { - if (get(isSelectMode) && get(selectedCount) > 0) $$render(consequent_4); - }); - } - reset(div); - template_effect(() => { - var _a5, _b3; - classes = set_class(div, 1, "column-header svelte-1q9xxoc", null, classes, { - "row-header": isVerticalFlow(), - collapsed: get(isHorizontalCollapsed), - "vertical-collapsed": get(isVerticalCollapsed) - }); - styles = set_style(div, "", styles, { "--column-color": get(columnColor) }); - set_attribute2(button, "aria-expanded", !isCollapsed()); - set_attribute2(button, "aria-label", `${isCollapsed() ? "Expand" : "Collapse"} ${(_a5 = get(columnTitle)) != null ? _a5 : ""} column`); - set_text(text2, get(collapseIcon)); - set_attribute2(h2, "id", `column-title-${(_b3 = column()) != null ? _b3 : ""}`); - set_attribute2(h2, "title", get(columnTitle)); - set_text(text_1, get(columnTitle)); - }); - event("click", button, function(...$$args) { - var _a5; - (_a5 = onToggleCollapse()) == null ? void 0 : _a5.apply(this, $$args); - }); - append($$anchor, div); - var $$pop = pop($$exports); - $$cleanup(); - return $$pop; -} - -// src/ui/board/BoardCell.svelte -var import_obsidian6 = require("obsidian"); - -// src/ui/board/cell_creation.ts -function deriveCellCreationMetadata(secondaryAxisBucket) { - var _a5, _b3, _c2; - const value = (_a5 = secondaryAxisBucket.meta) == null ? void 0 : _a5.value; - switch ((_c2 = (_b3 = secondaryAxisBucket.meta) == null ? void 0 : _b3.source) == null ? void 0 : _c2.kind) { - case "file": - return { - targetFilePath: typeof value === "string" ? value : null, - additionalTags: [] - }; - case "tag-prefix": - return { - targetFilePath: null, - additionalTags: typeof value === "string" ? [value] : [] - }; - case "none": - default: - return { - targetFilePath: null, - additionalTags: [] - }; - } -} - -// src/ui/dnd/store.ts -var isDraggingStore = writable(null); - -// src/ui/components/task_menu.svelte -var import_obsidian3 = require("obsidian"); -function Task_menu($$anchor, $$props) { - if (new.target) return createClassComponent({ component: Task_menu, ...$$anchor }); - push($$props, false); - const $columnTagTableStore = () => store_get(columnTagTableStore(), "$columnTagTableStore", $$stores); - const [$$stores, $$cleanup] = setup_stores(); - let task = prop($$props, "task", 12); - let taskActions = prop($$props, "taskActions", 12); - let columnTagTableStore = prop($$props, "columnTagTableStore", 12); - let doneColumnName = prop($$props, "doneColumnName", 12, void 0); - function showMenu(e) { - const menu = new import_obsidian3.Menu(); - const target = e.target; - if (!target) { - return; - } - const boundingRect = target.getBoundingClientRect(); - const y = boundingRect.top + boundingRect.height / 2; - const x = boundingRect.left + boundingRect.width / 2; - menu.addItem((i) => { - i.setTitle(`Go to file`).onClick(() => taskActions().viewFile(task().id)); - }); - menu.addSeparator(); - for (const [tag2, label] of Object.entries($columnTagTableStore())) { - menu.addItem((i) => { - i.setTitle(`Move to ${label}`).onClick(() => taskActions().changeColumn(task().id, tag2)); - if (task().column === tag2) { - i.setDisabled(true); - } - }); - } - menu.addItem((i) => { - i.setTitle(`Move to ${resolveDefaultColumnName("done", void 0, doneColumnName())}`).onClick(() => taskActions().markDone(task().id)); - if (task().done) { - i.setDisabled(true); - } - }); - menu.addSeparator(); - menu.addItem((i) => { - i.setTitle(`Duplicate task`).onClick(() => taskActions().duplicateTask(task().id)); - }); - menu.addItem((i) => { - if (task().isCancelled) { - i.setTitle(`Restore task`).onClick(() => taskActions().restoreTasks([task().id])); - } else { - i.setTitle(`Cancel task`).onClick(() => taskActions().cancelTasks([task().id])); - } - }); - menu.addItem((i) => { - i.setTitle(`Archive task`).onClick(() => taskActions().archiveTasks([task().id])); - }); - menu.addItem((i) => { - i.setTitle(`Delete task`).onClick(() => taskActions().deleteTask(task().id)); - }); - menu.showAtPosition({ x, y }); - } - var $$exports = { - get task() { - return task(); - }, - set task($$value) { - task($$value); - flushSync(); - }, - get taskActions() { - return taskActions(); - }, - set taskActions($$value) { - taskActions($$value); - flushSync(); - }, - get columnTagTableStore() { - return columnTagTableStore(); - }, - set columnTagTableStore($$value) { - columnTagTableStore($$value); - flushSync(); - }, - get doneColumnName() { - return doneColumnName(); - }, - set doneColumnName($$value) { - doneColumnName($$value); - flushSync(); - }, - $set: update_legacy_props, - $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) - }; - init(); - Icon_button($$anchor, { icon: "lucide-more-vertical", $$events: { click: showMenu } }); - var $$pop = pop($$exports); - $$cleanup(); - return $$pop; -} - // src/parsing/properties/property_schema.ts var PropertySchemaOption = /* @__PURE__ */ ((PropertySchemaOption3) => { PropertySchemaOption3["None"] = "none"; @@ -12456,26 +11684,6 @@ function createPropertyMapWithStatus(rawLine) { return properties; } -// src/parsing/properties/none_schema.ts -var NoneSchema = class { - constructor() { - this.id = "none" /* None */; - this.label = "None"; - } - parseProperties(rawLine) { - return createPropertyMapWithStatus(rawLine); - } - knownKeys() { - return [ - { - key: UNIVERSAL_STATUS_PROPERTY_KEY, - label: "Status", - type: "text" - } - ]; - } -}; - // src/parsing/properties/normalization.ts var PROPERTY_KEY_ALIASES = { completion: "done", @@ -12544,13 +11752,16 @@ var DATE_FIELDS = [ { key: "done", label: "Done", emojis: ["\u2705", "\u{1F3C1}"] }, { key: "created", label: "Created", emojis: ["\u2795"] } ]; -var PRIORITY_VALUES = /* @__PURE__ */ new Map([ - ["\u{1F53A}", 5], - ["\u23EB", 4], - ["\u{1F53C}", 3], - ["\u{1F53D}", 2], - ["\u23EC", 1] -]); +var TASKS_PRIORITY_OPTIONS = [ + { value: "highest", label: "Highest", emoji: "\u{1F53A}", weight: 5 }, + { value: "high", label: "High", emoji: "\u23EB", weight: 4 }, + { value: "medium", label: "Medium", emoji: "\u{1F53C}", weight: 3 }, + { value: "low", label: "Low", emoji: "\u{1F53D}", weight: 2 }, + { value: "lowest", label: "Lowest", emoji: "\u23EC", weight: 1 } +]; +var PRIORITY_VALUES = new Map( + TASKS_PRIORITY_OPTIONS.map((option) => [option.emoji, option.weight]) +); var METADATA_EMOJIS = [ ...DATE_FIELDS.flatMap((field) => field.emojis), ...PRIORITY_VALUES.keys(), @@ -12567,6 +11778,13 @@ function getTasksPriorityEmoji(value) { } return void 0; } +function getTasksPriorityOption(value) { + return TASKS_PRIORITY_OPTIONS.find((option) => option.value === value); +} +function getTasksPriorityValueFromWeight(weight) { + var _a5; + return (_a5 = TASKS_PRIORITY_OPTIONS.find((option) => option.weight === weight)) == null ? void 0 : _a5.value; +} function parseDateFields(rawLine) { return DATE_FIELDS.flatMap( (field) => field.emojis.flatMap((emoji) => { @@ -12654,6 +11872,2047 @@ var TasksPluginSchema = class { } }; +// src/parsing/properties/display.ts +var PRIORITY_LABELS = { + 5: "Highest", + 4: "High", + 3: "Medium", + 2: "Low", + 1: "Lowest" +}; +function formatPriorityColumnLabel(value) { + var _a5, _b3; + return (_b3 = (_a5 = getTasksPriorityOption(value)) == null ? void 0 : _a5.label) != null ? _b3 : value ? formatPropertyLabel(value) : ""; +} +function formatPropertyLabel(key2) { + if (!key2) return key2; + return key2.charAt(0).toUpperCase() + key2.slice(1); +} +function formatPropertyValue(prop2) { + var _a5; + if (prop2.value instanceof Date) { + return prop2.value.toLocaleDateString(void 0, { + month: "short", + day: "numeric", + timeZone: "UTC" + }); + } + if (prop2.key === "priority" && typeof prop2.value === "number") { + return (_a5 = PRIORITY_LABELS[prop2.value]) != null ? _a5 : String(prop2.value); + } + if (prop2.value === null) { + return prop2.rawValue; + } + return String(prop2.value); +} +function tasksIconFor(prop2) { + if (prop2.key === "priority" && typeof prop2.value === "number") { + return getTasksPriorityEmoji(prop2.value); + } + return TASKS_PROPERTY_ICONS[prop2.key]; +} +function stripDisplayedPropertiesFromContent(content, properties) { + let result = content; + for (const [key2, prop2] of properties) { + if (key2 === UNIVERSAL_STATUS_PROPERTY_KEY) continue; + if (!prop2.rawValue) continue; + result = result.split(prop2.rawValue).join(" "); + } + return result.replace(/[ \t]{2,}/g, " ").trim(); +} +function toDisplayProperties(properties) { + const result = []; + for (const [key2, prop2] of properties) { + if (key2 === UNIVERSAL_STATUS_PROPERTY_KEY) continue; + result.push({ + key: key2, + label: formatPropertyLabel(key2), + value: formatPropertyValue(prop2), + icon: tasksIconFor(prop2) + }); + } + return result; +} + +// src/ui/columns/definitions.ts +var RESERVED_COLUMN_KEYS = /* @__PURE__ */ new Set(["uncategorised", "done"]); +function parseColumnSpec(columnSpec) { + const hashMatch = columnSpec.match(/^(.+?)\(#([0-9a-fA-F]{6})\)$/); + const oxMatch = columnSpec.match(/^(.+?)\(0x([0-9a-fA-F]{6})\)$/); + const match = hashMatch || oxMatch; + if ((match == null ? void 0 : match[1]) && (match == null ? void 0 : match[2])) { + return { + raw: columnSpec, + label: match[1], + color: `#${match[2]}` + }; + } + return { + raw: columnSpec, + label: columnSpec + }; +} +function sanitizeIdBase(label) { + const normalized = kebab(label).replace(/[^a-z0-9-]/g, ""); + return normalized.length > 0 ? normalized : "column"; +} +function createColumnId(label, usedIds) { + const base = `column-${sanitizeIdBase(label)}`; + let candidate = base; + let suffix = 2; + while (usedIds.has(candidate) || RESERVED_COLUMN_KEYS.has(candidate)) { + candidate = `${base}-${suffix}`; + suffix += 1; + } + usedIds.add(candidate); + return candidate; +} +function normalizeMatchTags(tags) { + const normalized = tags.map((tag2) => tag2.trim().replace(/^#/, "")).filter((tag2) => tag2.length > 0); + return [...new Set(normalized)]; +} +function getNameModeWriteTag(column) { + return kebab(column.label); +} +function usesTagMatching(column) { + return column.matchMode === "tags"; +} +function usesStatusMatching(column) { + return column.matchMode === "status"; +} +function usesPriorityMatching(column) { + return column.matchMode === "priority"; +} +function getColumnWriteTags(column) { + return usesStatusMatching(column) || usesPriorityMatching(column) ? [] : usesTagMatching(column) ? column.matchTags : [getNameModeWriteTag(column)]; +} +function columnRuleSignature(column) { + var _a5, _b3, _c2; + return usesStatusMatching(column) ? `status:${(_a5 = column.matchStatus) != null ? _a5 : ""}` : usesPriorityMatching(column) ? `priority:${(_b3 = getColumnPrioritySchema(column)) != null ? _b3 : ""}:${(_c2 = normalizePriorityMatchValue(column.matchPriority, getColumnPrioritySchema(column))) != null ? _c2 : ""}` : usesTagMatching(column) ? `tags:${[...getColumnWriteTags(column)].sort().join(",")}` : `name:${getNameModeWriteTag(column)}`; +} +function normalizeColumnMatchContext(context) { + return context instanceof Set ? { tags: context } : context; +} +function getColumnStatus(column) { + return column && usesStatusMatching(column) ? column.matchStatus : void 0; +} +function getColumnPriority(column) { + return column && usesPriorityMatching(column) ? column.matchPriority : void 0; +} +function getColumnPrioritySchema(column) { + var _a5; + return column && usesPriorityMatching(column) ? (_a5 = column.matchPropertySchema) != null ? _a5 : "tasks" /* TasksPlugin */ : void 0; +} +function getStatusColumnLabel(status) { + return status === " " ? "unchecked" : status != null ? status : ""; +} +function getPriorityColumnLabel(priority) { + return formatPriorityColumnLabel(priority); +} +function normalizePriorityMatchValue(priority, schema) { + const trimmed = priority == null ? void 0 : priority.trim(); + if (!trimmed) { + return void 0; + } + return schema === "dataview" /* Dataview */ ? trimmed.toLowerCase() : trimmed; +} +function matchesColumnDefinition(column, context) { + const { tags: taskTags, status, priority, prioritySchema, priorities } = normalizeColumnMatchContext(context); + if (usesStatusMatching(column)) { + return !!column.matchStatus && status === column.matchStatus; + } + if (usesPriorityMatching(column)) { + const columnPrioritySchema = getColumnPrioritySchema(column); + const priorityForSchema = columnPrioritySchema ? priorities == null ? void 0 : priorities[columnPrioritySchema] : void 0; + return !!column.matchPriority && (priorityForSchema !== void 0 ? normalizePriorityMatchValue(priorityForSchema, columnPrioritySchema) === normalizePriorityMatchValue(column.matchPriority, columnPrioritySchema) : normalizePriorityMatchValue(priority, prioritySchema) === normalizePriorityMatchValue(column.matchPriority, columnPrioritySchema) && prioritySchema === columnPrioritySchema); + } + if (usesTagMatching(column)) { + const explicitTags = getColumnWriteTags(column); + return explicitTags.length > 0 && explicitTags.every((tag2) => taskTags.has(tag2)); + } + const derivedTag = getNameModeWriteTag(column); + for (const tag2 of taskTags) { + if (kebab(tag2) === derivedTag) { + return true; + } + } + return false; +} +function getColumnMatchSpecificity(column) { + return usesTagMatching(column) ? getColumnWriteTags(column).length : 1; +} +function usesTagBasedPlacement(column) { + return !usesStatusMatching(column) && !usesPriorityMatching(column); +} +function resolveMatchedColumnDefinition(columns, context) { + let matchedColumn; + let matchedSpecificity = -1; + for (const column of columns) { + if (!matchesColumnDefinition(column, context)) { + continue; + } + const specificity = getColumnMatchSpecificity(column); + if (!matchedColumn) { + matchedColumn = column; + matchedSpecificity = specificity; + continue; + } + if (usesTagBasedPlacement(matchedColumn) && usesTagBasedPlacement(column) && specificity > matchedSpecificity) { + matchedColumn = column; + matchedSpecificity = specificity; + } + } + return matchedColumn; +} +function isPlacementTag(column, tag2) { + if (usesStatusMatching(column) || usesPriorityMatching(column)) { + return false; + } + if (usesTagMatching(column)) { + return getColumnWriteTags(column).includes(tag2); + } + return kebab(tag2) === getNameModeWriteTag(column); +} +function getColumnHeaderTags(column) { + return usesTagMatching(column) ? column.matchTags : []; +} +function getColumnHeaderSubtitle(column) { + var _a5; + if (usesStatusMatching(column)) { + return column.matchStatus ? { kind: "status", value: column.matchStatus, label: getStatusColumnLabel(column.matchStatus) } : void 0; + } + if (usesPriorityMatching(column)) { + const priority = getTasksPriorityOption(column.matchPriority); + return column.matchPriority ? { + kind: "priority", + value: column.matchPriority, + label: (_a5 = priority == null ? void 0 : priority.label) != null ? _a5 : getPriorityColumnLabel(column.matchPriority), + icon: priority == null ? void 0 : priority.emoji + } : void 0; + } + return void 0; +} +function migrateColumnDefinitions(columns) { + const usedIds = /* @__PURE__ */ new Set(); + return columns.flatMap((column) => { + if (typeof column === "string") { + const parsed = parseColumnSpec(column); + return [ + { + id: createColumnId(parsed.label, usedIds), + label: parsed.label, + color: parsed.color, + matchMode: "name", + matchTags: [], + matchStatus: void 0, + matchPriority: void 0, + matchPropertySchema: void 0 + } + ]; + } + if (!column || typeof column !== "object") { + return []; + } + const label = typeof column.label === "string" ? column.label : ""; + const idCandidate = typeof column.id === "string" ? column.id : ""; + const id = idCandidate && !usedIds.has(idCandidate) && !RESERVED_COLUMN_KEYS.has(idCandidate) ? (usedIds.add(idCandidate), idCandidate) : createColumnId(label, usedIds); + const matchMode = column.matchMode === "tags" || column.matchMode === "status" || column.matchMode === "priority" ? column.matchMode : "name"; + const matchStatus = typeof column.matchStatus === "string" ? column.matchStatus : void 0; + const matchPriority = typeof column.matchPriority === "string" ? column.matchPriority : void 0; + const matchPropertySchema = column.matchPropertySchema === "dataview" /* Dataview */ || column.matchPropertySchema === "tasks" /* TasksPlugin */ ? column.matchPropertySchema : matchMode === "priority" ? "tasks" /* TasksPlugin */ : void 0; + return [ + { + id, + label, + color: typeof column.color === "string" && column.color.length > 0 ? column.color : void 0, + matchMode, + matchTags: normalizeMatchTags(Array.isArray(column.matchTags) ? column.matchTags : []), + matchStatus, + matchPriority, + matchPropertySchema + } + ]; + }); +} +function migrateCollapsedColumns(collapsedColumns, columns) { + if (!collapsedColumns || collapsedColumns.length === 0) { + return []; + } + const placementTagToId = /* @__PURE__ */ new Map(); + for (const column of columns) { + placementTagToId.set(getNameModeWriteTag(column), column.id); + } + const migrated = /* @__PURE__ */ new Set(); + for (const value of collapsedColumns) { + if (value === "done" || value === "uncategorised") { + migrated.add(value); + continue; + } + const matchedColumn = columns.find((column) => column.id === value); + if (matchedColumn) { + migrated.add(matchedColumn.id); + continue; + } + const mappedId = placementTagToId.get(value); + if (mappedId) { + migrated.add(mappedId); + } + } + return [...migrated]; +} + +// src/ui/columns/columns.ts +var createColumnStores = (settingsStore) => { + const columnDefinitions = derived([settingsStore], ([settings]) => { + var _a5; + return (_a5 = settings.columns) != null ? _a5 : []; + }); + const columnData = derived([columnDefinitions], ([columns]) => createColumnData(columns)); + const columnTagTable = derived([columnData], ([data]) => data.columnTagTable); + const columnColourTable = derived([columnData], ([data]) => data.columnColourTable); + const columnPlacementTagTable = derived([columnData], ([data]) => data.columnPlacementTagTable); + const columnMatchTagTable = derived([columnData], ([data]) => data.columnMatchTagTable); + const columnSubtitleTable = derived([columnData], ([data]) => data.columnSubtitleTable); + return { + columnDefinitions, + columnTagTable, + columnColourTable, + columnPlacementTagTable, + columnMatchTagTable, + columnSubtitleTable + }; +}; +function isColumnTag(input, columnTagTableStore) { + return input in get2(columnTagTableStore); +} +var DEFAULT_UNCATEGORIZED_LABEL = "Uncategorized"; +var DEFAULT_DONE_LABEL = "Done"; +function resolveDefaultColumnName(column, uncategorizedColumnName, doneColumnName) { + switch (column) { + case "uncategorised": + return uncategorizedColumnName || DEFAULT_UNCATEGORIZED_LABEL; + case "done": + return doneColumnName || DEFAULT_DONE_LABEL; + } +} +var createCollapsedColumnsStore = (settingsStore) => { + return derived([settingsStore], ([settings]) => { + var _a5; + return new Set((_a5 = settings.collapsedColumns) != null ? _a5 : []); + }); +}; +function createColumnData(columns) { + const columnTagTable = {}; + const columnColourTable = {}; + const columnPlacementTagTable = {}; + const columnMatchTagTable = {}; + const columnSubtitleTable = {}; + for (const column of columns) { + if (RESERVED_COLUMN_KEYS.has(column.id)) continue; + columnTagTable[column.id] = column.label; + if (column.color) { + columnColourTable[column.id] = column.color; + } + columnPlacementTagTable[column.id] = getColumnWriteTags(column); + columnMatchTagTable[column.id] = getColumnHeaderTags(column); + const subtitle = getColumnHeaderSubtitle(column); + if (subtitle) { + columnSubtitleTable[column.id] = subtitle; + } + } + return { + columnTagTable, + columnColourTable, + columnPlacementTagTable, + columnMatchTagTable, + columnSubtitleTable + }; +} + +// src/ui/components/ColumnHeader.svelte +var import_obsidian3 = require("obsidian"); + +// src/ui/components/icon_button.svelte +var import_obsidian = require("obsidian"); +var root = from_html(`
`); +var $$css = { + hash: "svelte-1igl4u1", + code: "div.svelte-1igl4u1 {width:24px;height:24px;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-s);transition:background linear 100ms;cursor:pointer;background:transparent;border:none;box-shadow:none;padding:0;margin:0;}div.svelte-1igl4u1:hover {background-color:var(--background-modifier-hover);}div.svelte-1igl4u1:focus-visible {outline:2px solid var(--background-modifier-border-focus);outline-offset:2px;}" +}; +function Icon_button($$anchor, $$props) { + if (new.target) return createClassComponent({ component: Icon_button, ...$$anchor }); + const $$sanitized_props = legacy_rest_props($$props, ["children", "$$slots", "$$events", "$$legacy"]); + const $$restProps = legacy_rest_props($$sanitized_props, ["icon"]); + push($$props, false); + append_styles($$anchor, $$css); + let icon = prop($$props, "icon", 12); + let element2 = mutable_source(); + function handleKeydown(e) { + var _a5; + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + (_a5 = get(element2)) == null ? void 0 : _a5.click(); + } + } + legacy_pre_effect(() => (get(element2), import_obsidian.setIcon, deep_read_state(icon())), () => { + if (get(element2)) { + (0, import_obsidian.setIcon)(get(element2), icon()); + } + }); + legacy_pre_effect_reset(); + var $$exports = { + get icon() { + return icon(); + }, + set icon($$value) { + icon($$value); + flushSync(); + }, + $set: update_legacy_props, + $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) + }; + init(); + var div = root(); + attribute_effect( + div, + () => ({ + class: "clickable-icon", + role: "button", + tabindex: "0", + ...$$restProps + }), + void 0, + void 0, + void 0, + "svelte-1igl4u1" + ); + bind_this(div, ($$value) => set(element2, $$value), () => get(element2)); + event("click", div, function($$arg) { + bubble_event.call(this, $$props, $$arg); + }); + event("keydown", div, handleKeydown); + append($$anchor, div); + return pop($$exports); +} + +// src/ui/selection/task_selection_store.ts +var taskSelectionStore = writable(/* @__PURE__ */ new Map()); +function toggleTaskSelection(taskId) { + taskSelectionStore.update((map) => { + const current = map.get(taskId) || false; + map.set(taskId, !current); + return new Map(map); + }); +} +function isTaskSelected(taskId, selectionMap) { + return selectionMap.get(taskId) || false; +} +function getSelectedTaskCount(taskIds, selectionMap) { + return taskIds.filter((id) => selectionMap.get(id) || false).length; +} +function clearColumnSelections(columnTaskIds) { + taskSelectionStore.update((map) => { + for (const id of columnTaskIds) { + map.delete(id); + } + return new Map(map); + }); +} + +// src/ui/selection/selection_mode_store.ts +var selectionModeStore = writable(/* @__PURE__ */ new Map()); +function toggleSelectionMode(column) { + selectionModeStore.update((map) => { + const current = map.get(column) || false; + const newMode = !current; + map.set(column, newMode); + if (current && !newMode) { + taskSelectionStore.set(/* @__PURE__ */ new Map()); + } + return new Map(map); + }); +} +function isInSelectionMode(column, modeMap) { + return modeMap.get(column) || false; +} + +// src/ui/components/icon.svelte +var import_obsidian2 = require("obsidian"); +var root2 = from_html(``); +var $$css2 = { + hash: "svelte-1cj3qcy", + code: ".icon.svelte-1cj3qcy {display:inline-flex;justify-content:center;align-items:center;flex-shrink:0;}.icon.svelte-1cj3qcy svg {width:100%;height:100%;}" +}; +function Icon($$anchor, $$props) { + if (new.target) return createClassComponent({ component: Icon, ...$$anchor }); + push($$props, false); + append_styles($$anchor, $$css2); + let name = prop($$props, "name", 12); + let size2 = prop( + $$props, + "size", + 12, + 16 + // Default icon size in pixels + ); + let opacity = prop($$props, "opacity", 12, 1); + let ariaLabel = prop($$props, "ariaLabel", 12, void 0); + let element2 = mutable_source(); + onMount(() => { + if (get(element2)) { + (0, import_obsidian2.setIcon)(get(element2), name()); + } + }); + legacy_pre_effect(() => (get(element2), deep_read_state(name()), import_obsidian2.setIcon), () => { + if (get(element2) && name()) { + (0, import_obsidian2.setIcon)(get(element2), name()); + } + }); + legacy_pre_effect_reset(); + var $$exports = { + get name() { + return name(); + }, + set name($$value) { + name($$value); + flushSync(); + }, + get size() { + return size2(); + }, + set size($$value) { + size2($$value); + flushSync(); + }, + get opacity() { + return opacity(); + }, + set opacity($$value) { + opacity($$value); + flushSync(); + }, + get ariaLabel() { + return ariaLabel(); + }, + set ariaLabel($$value) { + ariaLabel($$value); + flushSync(); + }, + $set: update_legacy_props, + $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) + }; + init(); + var span = root2(); + let styles; + bind_this(span, ($$value) => set(element2, $$value), () => get(element2)); + template_effect(() => { + var _a5, _b3; + set_attribute2(span, "aria-label", ariaLabel()); + set_attribute2(span, "role", ariaLabel() ? "img" : void 0); + styles = set_style(span, "", styles, { + width: `${(_a5 = size2()) != null ? _a5 : ""}px`, + height: `${(_b3 = size2()) != null ? _b3 : ""}px`, + opacity: opacity() + }); + }); + append($$anchor, span); + return pop($$exports); +} + +// src/ui/components/task_status_display.ts +function shouldRenderStatusAsText(status) { + return status.length > 1 || /\p{Extended_Pictographic}/u.test(status); +} + +// src/ui/components/TaskStatusMarker.svelte +var root3 = from_html(` `); +var root_1 = from_html(``); +var root_2 = from_html(``); +var $$css3 = { + hash: "svelte-48e5ji", + code: ".task-status-marker.svelte-48e5ji {display:inline-flex !important;align-items:center;justify-content:center;width:var(--task-status-marker-size);height:var(--task-status-marker-size);min-width:var(--task-status-marker-size);min-height:var(--task-status-marker-size);overflow:visible;margin:0 !important;padding:0 !important;text-indent:0 !important;line-height:1 !important;list-style:none !important;vertical-align:middle;}.task-status-marker.svelte-48e5ji .task-list-item.HyperMD-task-line:where(.svelte-48e5ji) {display:contents !important;}.task-status-marker.svelte-48e5ji .source-status-checkbox:where(.svelte-48e5ji),\n.task-status-marker.svelte-48e5ji .status-text-marker:where(.svelte-48e5ji) {display:inline-flex !important;align-items:center !important;justify-content:center !important;box-sizing:border-box;width:var(--task-status-marker-size) !important;height:var(--task-status-marker-size) !important;min-width:var(--task-status-marker-size) !important;min-height:var(--task-status-marker-size) !important;margin:0 !important;padding:0 !important;pointer-events:none;text-indent:0 !important;line-height:1 !important;vertical-align:middle !important;}.task-status-marker.svelte-48e5ji .status-text-marker:where(.svelte-48e5ji) {font-size:calc(var(--task-status-marker-size) - 3px);}.task-status-marker.svelte-48e5ji .source-status-checkbox:where(.svelte-48e5ji) {position:relative !important;top:0 !important;left:0 !important;transform:none !important;margin:0 !important;padding:0 !important;appearance:none !important;-webkit-appearance:none !important;box-sizing:border-box !important;}" +}; +function TaskStatusMarker($$anchor, $$props) { + if (new.target) return createClassComponent({ component: TaskStatusMarker, ...$$anchor }); + push($$props, false); + append_styles($$anchor, $$css3); + const isCustom = mutable_source(); + const markerSize = mutable_source(); + const resolvedIsChecked = mutable_source(); + let status = prop($$props, "status", 12); + let isDone = prop($$props, "isDone", 12, false); + let isChecked = prop($$props, "isChecked", 12, void 0); + let size2 = prop($$props, "size", 12, 16); + legacy_pre_effect(() => deep_read_state(status()), () => { + set(isCustom, status() !== " "); + }); + legacy_pre_effect(() => deep_read_state(size2()), () => { + set(markerSize, `${size2()}px`); + }); + legacy_pre_effect(() => (deep_read_state(isChecked()), deep_read_state(isDone())), () => { + var _a5; + set(resolvedIsChecked, (_a5 = isChecked()) != null ? _a5 : isDone()); + }); + legacy_pre_effect_reset(); + var $$exports = { + get status() { + return status(); + }, + set status($$value) { + status($$value); + flushSync(); + }, + get isDone() { + return isDone(); + }, + set isDone($$value) { + isDone($$value); + flushSync(); + }, + get isChecked() { + return isChecked(); + }, + set isChecked($$value) { + isChecked($$value); + flushSync(); + }, + get size() { + return size2(); + }, + set size($$value) { + size2($$value); + flushSync(); + }, + $set: update_legacy_props, + $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) + }; + init(); + var fragment = comment(); + var node = first_child(fragment); + { + var consequent_1 = ($$anchor2) => { + var span = root_2(); + let styles; + var span_1 = child(span); + let classes; + var node_1 = child(span_1); + { + var consequent = ($$anchor3) => { + var span_2 = root3(); + var text2 = child(span_2, true); + reset(span_2); + template_effect(() => set_text(text2, status())); + append($$anchor3, span_2); + }; + var d = user_derived(() => (deep_read_state(shouldRenderStatusAsText), deep_read_state(status()), untrack(() => shouldRenderStatusAsText(status())))); + var alternate = ($$anchor3) => { + var input = root_1(); + remove_input_defaults(input); + template_effect(() => { + set_attribute2(input, "data-task", status()); + set_checked(input, get(resolvedIsChecked)); + }); + append($$anchor3, input); + }; + if_block(node_1, ($$render) => { + if (get(d)) $$render(consequent); + else $$render(alternate, -1); + }); + } + reset(span_1); + reset(span); + template_effect(() => { + styles = set_style(span, "", styles, { "--task-status-marker-size": get(markerSize) }); + classes = set_class(span_1, 1, "task-list-item HyperMD-task-line svelte-48e5ji", null, classes, { "is-checked": get(resolvedIsChecked) }); + set_attribute2(span_1, "data-task", status()); + }); + append($$anchor2, span); + }; + var alternate_1 = ($$anchor2) => { + { + let $0 = derived_safe_equal(() => isDone() ? "lucide-check-square" : "lucide-square"); + let $1 = derived_safe_equal(() => isDone() ? 1 : 0.5); + Icon($$anchor2, { + get name() { + return get($0); + }, + get size() { + return size2(); + }, + get opacity() { + return get($1); + } + }); + } + }; + if_block(node, ($$render) => { + if (get(isCustom)) $$render(consequent_1); + else $$render(alternate_1, -1); + }); + } + append($$anchor, fragment); + return pop($$exports); +} + +// src/ui/components/ColumnHeader.svelte +var root4 = from_html(` `); +var root_12 = from_html(`
`); +var root_22 = from_html(`
Status
`); +var root_3 = from_html(``); +var root_4 = from_html(`
Priority
`); +var root_5 = from_html(`
`); +var root_6 = from_html(`
`); +var root_7 = from_html(`

`); +var $$css4 = { + hash: "svelte-1q9xxoc", + code: '.column-header.svelte-1q9xxoc {width:100%;--header-accent: var(--column-color, var(--background-modifier-border-hover));--column-header-x-padding: var(--column-header-x-padding-override, var(--size-4-4));--column-header-y-padding: var(--column-header-y-padding-override, var(--size-4-4));display:flex;flex-direction:column;gap:var(--size-2-3);}.column-header.svelte-1q9xxoc::before {content:"";display:block;width:calc(100% + 2 * var(--column-header-x-padding));height:12px;margin:calc(-1 * var(--column-header-y-padding)) calc(-1 * var(--column-header-x-padding)) 0;border-radius:2px;background:var(--header-accent);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--text-normal) 10%, transparent);flex:0 0 auto;}.column-header.row-header.svelte-1q9xxoc {position:relative;display:flex;align-items:stretch;margin-bottom:0;}.column-header.row-header.svelte-1q9xxoc::before {position:absolute;top:calc(-1 * var(--column-header-y-padding));bottom:calc(-1 * var(--column-header-y-padding));left:calc(-1 * var(--column-header-x-padding));width:12px;height:auto;margin:0;z-index:3;}.column-header.row-header.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) {margin:calc(-1 * var(--size-4-2)) calc(-1 * var(--size-4-3)) calc(-1 * var(--size-2-2));padding:var(--size-4-2) var(--size-4-3) var(--size-2-2);width:calc(100% + 2 * var(--size-4-3));box-sizing:border-box;position:sticky;top:var(--header-height, 0px);z-index:2;background:color-mix(in srgb, var(--background-secondary) 72%, var(--background-primary));}.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc),\n.column-header.row-header.svelte-1q9xxoc .selection-info:where(.svelte-1q9xxoc) {padding-left:var(--size-4-3);box-sizing:border-box;}.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc) {margin-top:var(--size-2-2);}.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc) .column-meta-line:where(.svelte-1q9xxoc) {justify-content:flex-start;flex-wrap:wrap;gap:var(--size-2-2) var(--size-4-2);}.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc) .column-meta-line:where(.svelte-1q9xxoc) .column-match-tags:where(.svelte-1q9xxoc),\n.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc) .column-meta-line:where(.svelte-1q9xxoc) .column-match-status:where(.svelte-1q9xxoc),\n.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc) .column-meta-line:where(.svelte-1q9xxoc) .column-match-priority:where(.svelte-1q9xxoc) {order:1;flex:0 0 100%;}.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc) .column-meta-line:where(.svelte-1q9xxoc) .task-count:where(.svelte-1q9xxoc) {order:2;flex:0 0 100%;margin-left:0;}.column-header.row-header.svelte-1q9xxoc .column-meta:where(.svelte-1q9xxoc) .column-meta-line:where(.svelte-1q9xxoc) .mode-toggle:where(.svelte-1q9xxoc) {order:3;flex:0 0 auto;}.column-header.collapsed.svelte-1q9xxoc {position:sticky;top:0;align-self:flex-start;z-index:1;}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) {flex-direction:column;align-items:center;min-height:unset;gap:var(--size-4-2);}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) .column-title-group:where(.svelte-1q9xxoc) {order:2;}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) .column-title-group:where(.svelte-1q9xxoc) h2:where(.svelte-1q9xxoc) {writing-mode:vertical-rl;text-orientation:mixed;white-space:nowrap;overflow:visible;text-overflow:unset;flex:0 0 auto;line-height:normal;}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) .task-count:where(.svelte-1q9xxoc) {order:3;writing-mode:horizontal-tb;align-self:center;line-height:normal;}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) .header-menu:where(.svelte-1q9xxoc) {display:flex;margin-left:0;order:4;}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) .header-menu button {width:20px;height:20px;}.column-header.collapsed.svelte-1q9xxoc .header:where(.svelte-1q9xxoc) .collapse-btn:where(.svelte-1q9xxoc) {order:1;}.column-header.vertical-collapsed.row-header.svelte-1q9xxoc {margin-bottom:0;}.column-header.vertical-collapsed.row-header.svelte-1q9xxoc .header-menu:where(.svelte-1q9xxoc) {display:flex;}.header.svelte-1q9xxoc {display:flex;align-items:center;min-height:22px;width:100%;flex-shrink:0;gap:var(--size-4-2);}.header.svelte-1q9xxoc .column-title-group:where(.svelte-1q9xxoc) {min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:2px;flex:1 1 auto;}.header.svelte-1q9xxoc h2:where(.svelte-1q9xxoc) {font-size:var(--font-ui-medium);font-weight:var(--font-bold);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.2;position:sticky;left:calc(var(--sticky-left-offset, 0px) + var(--column-header-x-padding, var(--size-4-4)));max-width:100%;}.header.svelte-1q9xxoc .task-count:where(.svelte-1q9xxoc) {font-size:var(--font-ui-small);color:var(--text-muted);white-space:nowrap;align-self:flex-start;line-height:28px;}.header.svelte-1q9xxoc .header-menu:where(.svelte-1q9xxoc) {margin-left:auto;flex-shrink:0;display:flex;align-items:center;gap:var(--size-2-1);height:24px;}.header.svelte-1q9xxoc .collapse-btn:where(.svelte-1q9xxoc) {background:transparent;border:none;box-shadow:none;cursor:pointer;color:var(--text-muted);padding:0;width:14px;height:24px;display:flex;align-items:center;justify-content:center;font-size:10px;line-height:1;flex-shrink:0;transition:color 0.15s ease;}.header.svelte-1q9xxoc .collapse-btn:where(.svelte-1q9xxoc):hover {color:var(--text-normal);background:transparent;}.header.svelte-1q9xxoc .collapse-btn:where(.svelte-1q9xxoc):focus-visible {outline:2px solid var(--background-modifier-border-focus);outline-offset:2px;}.mode-toggle.svelte-1q9xxoc {display:flex;align-items:center;background:var(--background-modifier-form-field, var(--background-secondary));border-radius:var(--radius-s);padding:2px;gap:0;width:fit-content;max-width:100%;flex:0 0 auto;}.mode-toggle.svelte-1q9xxoc .mode-btn:where(.svelte-1q9xxoc) {font-size:var(--font-ui-smaller);padding:1px 5px;min-width:0;width:auto;border:none;background:transparent;color:var(--text-muted);border-radius:calc(var(--radius-s) - 2px);cursor:pointer;transition:background 0.15s ease, color 0.15s ease;white-space:nowrap;box-shadow:none;line-height:1.2;}.mode-toggle.svelte-1q9xxoc .mode-btn:where(.svelte-1q9xxoc):hover {background:transparent;color:var(--text-normal);box-shadow:none;}.mode-toggle.svelte-1q9xxoc .mode-btn.active:where(.svelte-1q9xxoc) {background:var(--background-primary);color:var(--text-normal);box-shadow:var(--input-shadow);font-weight:var(--font-medium);}.mode-toggle.svelte-1q9xxoc .mode-btn:where(.svelte-1q9xxoc):focus-visible {outline:2px solid var(--background-modifier-border-focus);outline-offset:1px;}.column-meta.svelte-1q9xxoc {display:flex;flex-direction:column;gap:var(--size-2-1);width:100%;align-items:flex-start;}.column-meta.svelte-1q9xxoc .column-meta-line:where(.svelte-1q9xxoc) {display:flex;align-items:center;justify-content:space-between;width:100%;gap:var(--size-2-3);min-width:0;}.column-meta.svelte-1q9xxoc .column-meta-line:where(.svelte-1q9xxoc) .task-count:where(.svelte-1q9xxoc) {font-size:var(--font-ui-small);color:var(--text-muted);white-space:nowrap;line-height:1.3;margin-left:auto;flex:0 0 auto;}.column-match-tags.svelte-1q9xxoc,\n.column-match-status.svelte-1q9xxoc,\n.column-match-priority.svelte-1q9xxoc {font-size:var(--font-ui-small);color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3;min-width:0;flex:1 1 auto;}.column-match-status.svelte-1q9xxoc,\n.column-match-priority.svelte-1q9xxoc {display:inline-flex;align-items:center;gap:var(--size-2-2);flex:0 0 auto;overflow:visible;}.column-match-status-label.svelte-1q9xxoc {font-weight:var(--font-medium);}.column-priority-preview.svelte-1q9xxoc {display:inline-flex;align-items:center;gap:3px;min-width:0;}.column-priority-icon.svelte-1q9xxoc {line-height:1;}.column-status-preview.svelte-1q9xxoc {display:inline-flex !important;align-items:center !important;justify-content:center !important;width:18px !important;height:18px !important;min-width:18px !important;min-height:18px !important;max-width:18px !important;max-height:18px !important;margin:0 !important;padding:0 !important;text-indent:0 !important;line-height:1 !important;list-style:none !important;color:var(--text-normal);vertical-align:middle;}.selection-info.svelte-1q9xxoc {font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);}' +}; +function ColumnHeader($$anchor, $$props) { + if (new.target) return createClassComponent({ component: ColumnHeader, ...$$anchor }); + push($$props, false); + append_styles($$anchor, $$css4); + const $columnTagTableStore = () => store_get(columnTagTableStore(), "$columnTagTableStore", $$stores); + const $columnColourTableStore = () => store_get(columnColourTableStore(), "$columnColourTableStore", $$stores); + const $columnMatchTagTableStore = () => store_get(columnMatchTagTableStore(), "$columnMatchTagTableStore", $$stores); + const $columnSubtitleTableStore = () => store_get(columnSubtitleTableStore(), "$columnSubtitleTableStore", $$stores); + const $selectionModeStore = () => store_get(selectionModeStore, "$selectionModeStore", $$stores); + const $taskSelectionStore = () => store_get(taskSelectionStore, "$taskSelectionStore", $$stores); + const [$$stores, $$cleanup] = setup_stores(); + const columnTitle = mutable_source(); + const columnColor = mutable_source(); + const columnMatchTags = mutable_source(); + const columnStatusMarker = mutable_source(); + const columnStatusLabel = mutable_source(); + const columnPriorityLabel = mutable_source(); + const columnPriorityIcon = mutable_source(); + const taskCountLabel = mutable_source(); + const collapseIcon = mutable_source(); + const isHorizontalCollapsed = mutable_source(); + const isVerticalCollapsed = mutable_source(); + const displayTaskCount = mutable_source(); + const showColumnMatchTags = mutable_source(); + const showColumnStatus = mutable_source(); + const showColumnPriority = mutable_source(); + const isSelectMode = mutable_source(); + const columnTaskIds = mutable_source(); + const selectedCount = mutable_source(); + const selectedIds = mutable_source(); + const showContextMenu = mutable_source(); + let column = prop($$props, "column", 12); + let tasks = prop($$props, "tasks", 12); + let taskActions = prop($$props, "taskActions", 12); + let columnTagTableStore = prop($$props, "columnTagTableStore", 12); + let columnColourTableStore = prop($$props, "columnColourTableStore", 12); + let columnMatchTagTableStore = prop($$props, "columnMatchTagTableStore", 12); + let columnSubtitleTableStore = prop($$props, "columnSubtitleTableStore", 12); + let isVerticalFlow = prop($$props, "isVerticalFlow", 12, false); + let isCollapsed = prop($$props, "isCollapsed", 12, false); + let onToggleCollapse = prop($$props, "onToggleCollapse", 12); + let uncategorizedColumnName = prop($$props, "uncategorizedColumnName", 12, void 0); + let doneColumnName = prop($$props, "doneColumnName", 12, void 0); + let columnSubtitle = mutable_source(); + function getColumnTitle(col, columnTagTable) { + switch (col) { + case "done": + case "uncategorised": + return resolveDefaultColumnName(col, uncategorizedColumnName(), doneColumnName()); + default: + return columnTagTable[col]; + } + } + function showMenu(e) { + const menu = new import_obsidian3.Menu(); + if (get(isSelectMode) && get(selectedCount) > 0) { + if (column() !== "done") { + menu.addItem((i) => { + i.setTitle(`Move ${get(selectedCount)} selected to ${resolveDefaultColumnName("done", uncategorizedColumnName(), doneColumnName())}`).onClick(async () => { + for (const id of get(selectedIds)) { + await taskActions().markDone(id); + } + clearColumnSelections(get(columnTaskIds)); + }); + }); + } + for (const [tag2, label] of Object.entries($columnTagTableStore())) { + const tagAsColumn = tag2; + if (tagAsColumn === column()) continue; + menu.addItem((i) => { + i.setTitle(`Move ${get(selectedCount)} selected to ${label}`).onClick(async () => { + for (const id of get(selectedIds)) { + await taskActions().changeColumn(id, tagAsColumn); + } + clearColumnSelections(get(columnTaskIds)); + }); + }); + } + menu.addSeparator(); + const selectedTasks = get(selectedIds).map((id) => tasks().find((t) => t.id === id)).filter(Boolean); + const allCancelled = selectedTasks.length > 0 && selectedTasks.every((t) => t.isCancelled); + if (allCancelled) { + menu.addItem((i) => { + i.setTitle(`Restore ${get(selectedCount)} selected`).onClick(async () => { + await taskActions().restoreTasks(get(selectedIds)); + clearColumnSelections(get(columnTaskIds)); + }); + }); + } else { + menu.addItem((i) => { + i.setTitle(`Cancel ${get(selectedCount)} selected`).onClick(async () => { + await taskActions().cancelTasks(get(selectedIds)); + clearColumnSelections(get(columnTaskIds)); + }); + }); + } + menu.addSeparator(); + menu.addItem((i) => { + i.setTitle(`Archive ${get(selectedCount)} selected`).onClick(async () => { + await taskActions().archiveTasks(get(selectedIds)); + clearColumnSelections(get(columnTaskIds)); + }); + }); + } + if (column() === "done") { + menu.addItem((i) => { + i.setTitle(`Archive all`).onClick(() => taskActions().archiveTasks(tasks().map(({ id }) => id))); + }); + } + menu.showAtMouseEvent(e); + } + legacy_pre_effect( + () => (deep_read_state(uncategorizedColumnName()), deep_read_state(doneColumnName()), deep_read_state(column()), $columnTagTableStore()), + () => { + set(columnTitle, (() => { + void uncategorizedColumnName(); + void doneColumnName(); + return getColumnTitle(column(), $columnTagTableStore()); + })()); + } + ); + legacy_pre_effect( + () => (isColumnTag, deep_read_state(column()), deep_read_state(columnTagTableStore()), $columnColourTableStore()), + () => { + set(columnColor, isColumnTag(column(), columnTagTableStore()) ? $columnColourTableStore()[column()] : void 0); + } + ); + legacy_pre_effect( + () => (isColumnTag, deep_read_state(column()), deep_read_state(columnTagTableStore()), $columnMatchTagTableStore()), + () => { + var _a5; + set(columnMatchTags, isColumnTag(column(), columnTagTableStore()) ? (_a5 = $columnMatchTagTableStore()[column()]) != null ? _a5 : [] : []); + } + ); + legacy_pre_effect( + () => (isColumnTag, deep_read_state(column()), deep_read_state(columnTagTableStore()), $columnSubtitleTableStore()), + () => { + set(columnSubtitle, isColumnTag(column(), columnTagTableStore()) ? $columnSubtitleTableStore()[column()] : void 0); + } + ); + legacy_pre_effect(() => get(columnSubtitle), () => { + var _a5; + set(columnStatusMarker, ((_a5 = get(columnSubtitle)) == null ? void 0 : _a5.kind) === "status" ? get(columnSubtitle).value : void 0); + }); + legacy_pre_effect(() => get(columnSubtitle), () => { + var _a5; + set(columnStatusLabel, ((_a5 = get(columnSubtitle)) == null ? void 0 : _a5.kind) === "status" ? get(columnSubtitle).label : ""); + }); + legacy_pre_effect(() => get(columnSubtitle), () => { + var _a5; + set(columnPriorityLabel, ((_a5 = get(columnSubtitle)) == null ? void 0 : _a5.kind) === "priority" ? get(columnSubtitle).label : ""); + }); + legacy_pre_effect(() => get(columnSubtitle), () => { + var _a5; + set(columnPriorityIcon, ((_a5 = get(columnSubtitle)) == null ? void 0 : _a5.kind) === "priority" ? get(columnSubtitle).icon : void 0); + }); + legacy_pre_effect(() => deep_read_state(tasks()), () => { + set(taskCountLabel, tasks().length === 1 ? "1 task" : `${tasks().length} tasks`); + }); + legacy_pre_effect(() => deep_read_state(isCollapsed()), () => { + set(collapseIcon, isCollapsed() ? "\u25B6" : "\u25BC"); + }); + legacy_pre_effect( + () => (deep_read_state(isCollapsed()), deep_read_state(isVerticalFlow())), + () => { + set(isHorizontalCollapsed, isCollapsed() && !isVerticalFlow()); + } + ); + legacy_pre_effect( + () => (deep_read_state(isCollapsed()), deep_read_state(isVerticalFlow())), + () => { + set(isVerticalCollapsed, isCollapsed() && isVerticalFlow()); + } + ); + legacy_pre_effect( + () => (deep_read_state(isCollapsed()), deep_read_state(tasks()), get(taskCountLabel)), + () => { + set(displayTaskCount, isCollapsed() ? `${tasks().length}` : get(taskCountLabel)); + } + ); + legacy_pre_effect(() => (get(columnMatchTags), deep_read_state(isCollapsed())), () => { + set(showColumnMatchTags, get(columnMatchTags).length > 0 && !isCollapsed()); + }); + legacy_pre_effect(() => (get(columnStatusMarker), deep_read_state(isCollapsed())), () => { + set(showColumnStatus, get(columnStatusMarker) !== void 0 && !isCollapsed()); + }); + legacy_pre_effect(() => (get(columnSubtitle), deep_read_state(isCollapsed())), () => { + var _a5; + set(showColumnPriority, ((_a5 = get(columnSubtitle)) == null ? void 0 : _a5.kind) === "priority" && !isCollapsed()); + }); + legacy_pre_effect( + () => (isInSelectionMode, deep_read_state(column()), $selectionModeStore()), + () => { + set(isSelectMode, isInSelectionMode(column(), $selectionModeStore())); + } + ); + legacy_pre_effect(() => deep_read_state(tasks()), () => { + set(columnTaskIds, tasks().map((t) => t.id)); + }); + legacy_pre_effect( + () => (getSelectedTaskCount, get(columnTaskIds), $taskSelectionStore()), + () => { + set(selectedCount, getSelectedTaskCount(get(columnTaskIds), $taskSelectionStore())); + } + ); + legacy_pre_effect(() => (get(columnTaskIds), isTaskSelected, $taskSelectionStore()), () => { + set(selectedIds, get(columnTaskIds).filter((id) => isTaskSelected(id, $taskSelectionStore()))); + }); + legacy_pre_effect( + () => (deep_read_state(column()), get(isSelectMode), get(selectedCount)), + () => { + set(showContextMenu, column() === "done" || get(isSelectMode) && get(selectedCount) > 0); + } + ); + legacy_pre_effect_reset(); + var $$exports = { + get column() { + return column(); + }, + set column($$value) { + column($$value); + flushSync(); + }, + get tasks() { + return tasks(); + }, + set tasks($$value) { + tasks($$value); + flushSync(); + }, + get taskActions() { + return taskActions(); + }, + set taskActions($$value) { + taskActions($$value); + flushSync(); + }, + get columnTagTableStore() { + return columnTagTableStore(); + }, + set columnTagTableStore($$value) { + columnTagTableStore($$value); + flushSync(); + }, + get columnColourTableStore() { + return columnColourTableStore(); + }, + set columnColourTableStore($$value) { + columnColourTableStore($$value); + flushSync(); + }, + get columnMatchTagTableStore() { + return columnMatchTagTableStore(); + }, + set columnMatchTagTableStore($$value) { + columnMatchTagTableStore($$value); + flushSync(); + }, + get columnSubtitleTableStore() { + return columnSubtitleTableStore(); + }, + set columnSubtitleTableStore($$value) { + columnSubtitleTableStore($$value); + flushSync(); + }, + get isVerticalFlow() { + return isVerticalFlow(); + }, + set isVerticalFlow($$value) { + isVerticalFlow($$value); + flushSync(); + }, + get isCollapsed() { + return isCollapsed(); + }, + set isCollapsed($$value) { + isCollapsed($$value); + flushSync(); + }, + get onToggleCollapse() { + return onToggleCollapse(); + }, + set onToggleCollapse($$value) { + onToggleCollapse($$value); + flushSync(); + }, + get uncategorizedColumnName() { + return uncategorizedColumnName(); + }, + set uncategorizedColumnName($$value) { + uncategorizedColumnName($$value); + flushSync(); + }, + get doneColumnName() { + return doneColumnName(); + }, + set doneColumnName($$value) { + doneColumnName($$value); + flushSync(); + }, + $set: update_legacy_props, + $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) + }; + init(); + var div = root_7(); + let classes; + let styles; + var div_1 = child(div); + var span = child(div_1); + var text2 = child(span, true); + reset(span); + var div_2 = sibling(span, 2); + var h2 = child(div_2); + var text_1 = child(h2, true); + reset(h2); + reset(div_2); + var node = sibling(div_2, 2); + { + var consequent = ($$anchor2) => { + var span_1 = root4(); + var text_2 = child(span_1, true); + reset(span_1); + template_effect(() => { + set_attribute2(span_1, "aria-label", get(taskCountLabel)); + set_text(text_2, get(displayTaskCount)); + }); + append($$anchor2, span_1); + }; + if_block(node, ($$render) => { + if (isCollapsed()) $$render(consequent); + }); + } + var div_3 = sibling(node, 2); + var node_1 = child(div_3); + { + var consequent_1 = ($$anchor2) => { + Icon_button($$anchor2, { + icon: "lucide-more-vertical", + get "aria-label"() { + var _a5; + return `Column options for ${(_a5 = get(columnTitle)) != null ? _a5 : ""}`; + }, + $$events: { click: showMenu } + }); + }; + if_block(node_1, ($$render) => { + if (get(showContextMenu)) $$render(consequent_1); + }); + } + reset(div_3); + reset(div_1); + var node_2 = sibling(div_1, 2); + { + var consequent_6 = ($$anchor2) => { + var div_4 = root_5(); + var div_5 = child(div_4); + var node_3 = child(div_5); + { + var consequent_2 = ($$anchor3) => { + var div_6 = root_12(); + var text_3 = child(div_6, true); + reset(div_6); + template_effect( + ($0, $1) => { + set_attribute2(div_6, "title", $0); + set_text(text_3, $1); + }, + [ + () => (get(columnMatchTags), untrack(() => get(columnMatchTags).map((tag2) => `#${tag2}`).join(" "))), + () => (get(columnMatchTags), untrack(() => get(columnMatchTags).map((tag2) => `#${tag2}`).join(" "))) + ] + ); + append($$anchor3, div_6); + }; + if_block(node_3, ($$render) => { + if (get(showColumnMatchTags)) $$render(consequent_2); + }); + } + var node_4 = sibling(node_3, 2); + { + var consequent_3 = ($$anchor3) => { + var div_7 = root_22(); + var span_2 = sibling(child(div_7), 2); + var node_5 = child(span_2); + { + let $0 = derived_safe_equal(() => { + var _a5; + return (_a5 = get(columnStatusMarker)) != null ? _a5 : " "; + }); + TaskStatusMarker(node_5, { + get status() { + return get($0); + }, + size: 18 + }); + } + reset(span_2); + reset(div_7); + template_effect(() => { + var _a5, _b3; + set_attribute2(div_7, "title", `Status: ${(_a5 = get(columnStatusLabel)) != null ? _a5 : ""}`); + set_attribute2(span_2, "aria-label", `Status: ${(_b3 = get(columnStatusLabel)) != null ? _b3 : ""}`); + }); + append($$anchor3, div_7); + }; + if_block(node_4, ($$render) => { + if (get(showColumnStatus)) $$render(consequent_3); + }); + } + var node_6 = sibling(node_4, 2); + { + var consequent_5 = ($$anchor3) => { + var div_8 = root_4(); + var span_3 = sibling(child(div_8), 2); + var node_7 = child(span_3); + { + var consequent_4 = ($$anchor4) => { + var span_4 = root_3(); + var text_4 = child(span_4, true); + reset(span_4); + template_effect(() => set_text(text_4, get(columnPriorityIcon))); + append($$anchor4, span_4); + }; + if_block(node_7, ($$render) => { + if (get(columnPriorityIcon)) $$render(consequent_4); + }); + } + var span_5 = sibling(node_7, 2); + var text_5 = child(span_5, true); + reset(span_5); + reset(span_3); + reset(div_8); + template_effect(() => { + var _a5, _b3; + set_attribute2(div_8, "title", `Priority: ${(_a5 = get(columnPriorityLabel)) != null ? _a5 : ""}`); + set_attribute2(span_3, "aria-label", `Priority: ${(_b3 = get(columnPriorityLabel)) != null ? _b3 : ""}`); + set_text(text_5, get(columnPriorityLabel)); + }); + append($$anchor3, div_8); + }; + if_block(node_6, ($$render) => { + if (get(showColumnPriority)) $$render(consequent_5); + }); + } + var span_6 = sibling(node_6, 2); + var text_6 = child(span_6, true); + reset(span_6); + var div_9 = sibling(span_6, 2); + var button = child(div_9); + let classes_1; + var button_1 = sibling(button, 2); + let classes_2; + reset(div_9); + reset(div_5); + reset(div_4); + template_effect(() => { + set_attribute2(span_6, "aria-label", get(taskCountLabel)); + set_text(text_6, get(displayTaskCount)); + classes_1 = set_class(button, 1, "mode-btn svelte-1q9xxoc", null, classes_1, { active: !get(isSelectMode) }); + set_attribute2(button, "aria-pressed", !get(isSelectMode)); + classes_2 = set_class(button_1, 1, "mode-btn svelte-1q9xxoc", null, classes_2, { active: get(isSelectMode) }); + set_attribute2(button_1, "aria-pressed", get(isSelectMode)); + }); + event("click", button, () => { + if (get(isSelectMode)) toggleSelectionMode(column()); + }); + event("click", button_1, () => { + if (!get(isSelectMode)) toggleSelectionMode(column()); + }); + append($$anchor2, div_4); + }; + if_block(node_2, ($$render) => { + if (!isCollapsed()) $$render(consequent_6); + }); + } + var node_8 = sibling(node_2, 2); + { + var consequent_7 = ($$anchor2) => { + var div_10 = root_6(); + var text_7 = child(div_10); + reset(div_10); + template_effect(() => { + var _a5; + return set_text(text_7, `${(_a5 = get(selectedCount)) != null ? _a5 : ""} selected`); + }); + append($$anchor2, div_10); + }; + if_block(node_8, ($$render) => { + if (get(isSelectMode) && get(selectedCount) > 0) $$render(consequent_7); + }); + } + reset(div); + template_effect(() => { + var _a5, _b3; + classes = set_class(div, 1, "column-header svelte-1q9xxoc", null, classes, { + "row-header": isVerticalFlow(), + collapsed: get(isHorizontalCollapsed), + "vertical-collapsed": get(isVerticalCollapsed) + }); + styles = set_style(div, "", styles, { "--column-color": get(columnColor) }); + set_attribute2(span, "aria-expanded", !isCollapsed()); + set_attribute2(span, "aria-label", `${isCollapsed() ? "Expand" : "Collapse"} ${(_a5 = get(columnTitle)) != null ? _a5 : ""} column`); + set_text(text2, get(collapseIcon)); + set_attribute2(h2, "id", `column-title-${(_b3 = column()) != null ? _b3 : ""}`); + set_attribute2(h2, "title", get(columnTitle)); + set_text(text_1, get(columnTitle)); + }); + event("click", span, function(...$$args) { + var _a5; + (_a5 = onToggleCollapse()) == null ? void 0 : _a5.apply(this, $$args); + }); + event("keydown", span, (e) => { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + onToggleCollapse()(); + } + }); + append($$anchor, div); + var $$pop = pop($$exports); + $$cleanup(); + return $$pop; +} + +// src/ui/board/BoardCell.svelte +var import_obsidian7 = require("obsidian"); + +// src/ui/board/cell_creation.ts +function deriveCellCreationMetadata(secondaryAxisBucket) { + var _a5, _b3, _c2; + const value = (_a5 = secondaryAxisBucket.meta) == null ? void 0 : _a5.value; + switch ((_c2 = (_b3 = secondaryAxisBucket.meta) == null ? void 0 : _b3.source) == null ? void 0 : _c2.kind) { + case "file": + return { + targetFilePath: typeof value === "string" ? value : null, + additionalTags: [] + }; + case "tag-prefix": + return { + targetFilePath: null, + additionalTags: typeof value === "string" ? [value] : [] + }; + case "none": + default: + return { + targetFilePath: null, + additionalTags: [] + }; + } +} + +// src/ui/dnd/store.ts +var isDraggingStore = writable(null); +var subtaskDraggingStore = writable(null); + +// src/ui/tasks/source_block.ts +function parseSourceTaskLine(input) { + const match = input.match(sourceTaskLineRegex); + if (!match) { + return null; + } + const [, indentation, bullet, status, content] = match; + if (indentation == null || bullet == null || status == null || content == null) { + return null; + } + return { indentation, bullet, status, content }; +} +function getSourceNodeText(node) { + return node.kind === "task" ? node.content : node.rawLine.slice(node.indentation.length); +} +function getRawListItemText(node) { + var _a5; + const match = node.rawLine.slice(node.indentation.length).match(/^[-*+]\s+(.+)$/); + return (_a5 = match == null ? void 0 : match[1]) != null ? _a5 : null; +} +function getVisibleSourceTaskDescendants(nodes) { + return flattenSourceBlockNodes(nodes).filter( + (node) => node.kind === "task" && node.taskVisibility === "visible" + ); +} +function flattenSourceBlockNodes(nodes) { + return nodes.flatMap((node) => [ + node, + ...flattenSourceBlockNodes(node.sourceChildren) + ]); +} +var sourceTaskLineRegex = /^(\s*)([-*+])\s\[([^\[\]]*)\]\s(.+)/; + +// src/ui/components/TaskLineRow.svelte +var root5 = from_html(`
`); +var root_13 = from_html(`
`); +var $$css5 = { + hash: "svelte-1y3uj64", + code: ".task-line-row.svelte-1y3uj64 {--task-line-base-padding-left: calc(var(--size-4-2) + 8px);--task-line-indent-step: 1.65rem;--task-line-marker-size: 20px;--task-line-row-height: 1.3em;--task-line-column-gap: var(--size-2-2);--task-line-block-padding: 0 var(--size-4-2) var(--size-2-1)\n calc(\n var(--task-line-base-padding-left) +\n (var(--task-line-depth) * var(--task-line-indent-step))\n );display:grid;grid-template-columns:var(--task-line-marker-size) minmax(0, 1fr);column-gap:var(--task-line-column-gap);align-items:start;padding:var(--task-line-block-padding);}.task-line-row.has-actions.svelte-1y3uj64 {grid-template-columns:var(--task-line-marker-size) minmax(0, 1fr) auto;}.task-line-row.card-variant.svelte-1y3uj64 {--task-line-column-gap: var(--size-2-3);--task-line-row-height: var(--task-content-line-height, 1.5rem);--task-line-block-padding: var(--size-4-2) var(--size-4-2)\n var(--size-4-2)\n calc(\n var(--task-line-base-padding-left) +\n (var(--task-line-depth) * var(--task-line-indent-step))\n );}.task-line-marker.svelte-1y3uj64,\n.task-line-actions.svelte-1y3uj64 {display:flex;align-items:center;justify-content:center;min-width:0;height:var(--task-line-row-height);}.task-line-content.svelte-1y3uj64 {display:block;min-width:0;min-height:var(--task-line-row-height);}.task-line-actions.svelte-1y3uj64 {justify-content:flex-end;}" +}; +function TaskLineRow($$anchor, $$props) { + if (new.target) return createClassComponent({ component: TaskLineRow, ...$$anchor }); + push($$props, false); + append_styles($$anchor, $$css5); + let depth = prop($$props, "depth", 12, 0); + let hasActions = prop($$props, "hasActions", 12, false); + let variant = prop($$props, "variant", 12, "source"); + var $$exports = { + get depth() { + return depth(); + }, + set depth($$value) { + depth($$value); + flushSync(); + }, + get hasActions() { + return hasActions(); + }, + set hasActions($$value) { + hasActions($$value); + flushSync(); + }, + get variant() { + return variant(); + }, + set variant($$value) { + variant($$value); + flushSync(); + }, + $set: update_legacy_props, + $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) + }; + var div = root_13(); + let classes; + let styles; + var div_1 = child(div); + var node = child(div_1); + slot(node, $$props, "marker", {}, null); + reset(div_1); + var div_2 = sibling(div_1, 2); + var node_1 = child(div_2); + slot(node_1, $$props, "default", {}, null); + reset(div_2); + var node_2 = sibling(div_2, 2); + { + var consequent = ($$anchor2) => { + var div_3 = root5(); + var node_3 = child(div_3); + slot(node_3, $$props, "actions", {}, null); + reset(div_3); + append($$anchor2, div_3); + }; + if_block(node_2, ($$render) => { + if (hasActions()) $$render(consequent); + }); + } + reset(div); + template_effect(() => { + classes = set_class(div, 1, "task-line-row svelte-1y3uj64", null, classes, { + "has-actions": hasActions(), + "card-variant": variant() === "card" + }); + styles = set_style(div, "", styles, { "--task-line-depth": depth() }); + }); + append($$anchor, div); + return pop($$exports); +} + +// src/ui/components/TaskSourceRow.svelte +var import_obsidian4 = require("obsidian"); + +// src/ui/components/TaskSourceStatusButton.svelte +var root6 = from_html(``); +var $$css6 = { + hash: "svelte-74sw79", + code: ".icon-button.source-row-status.svelte-74sw79 {display:flex;justify-content:center;align-items:center;width:20px;height:20px;padding:0;border:none;background:transparent;cursor:pointer;border-radius:var(--radius-s);box-shadow:none;overflow:visible;}.icon-button.source-row-status.svelte-74sw79:hover, .icon-button.source-row-status.svelte-74sw79:active {background:transparent;box-shadow:none;}.icon-button.source-row-status.svelte-74sw79:disabled {cursor:default;opacity:0.35;}.icon-button.source-row-status.usesStatusMarker.svelte-74sw79 {color:var(--text-normal);}.icon-button.source-row-status.is-done.svelte-74sw79 svg {color:var(--interactive-accent);}" +}; +function TaskSourceStatusButton($$anchor, $$props) { + if (new.target) return createClassComponent({ component: TaskSourceStatusButton, ...$$anchor }); + push($$props, false); + append_styles($$anchor, $$css6); + const isDone = mutable_source(); + const isIgnored = mutable_source(); + const isChecked = mutable_source(); + const displayStatusIsCustom = mutable_source(); + let task = prop($$props, "task", 12); + let taskActions = prop($$props, "taskActions", 12); + let node = prop($$props, "node", 12); + let isSelectionMode = prop($$props, "isSelectionMode", 12, false); + function toggleStatus() { + void taskActions().toggleSourceTaskStatus(task().id, node().rowIndex); + } + function handleKeydown(e) { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + toggleStatus(); + } + } + legacy_pre_effect(() => (deep_read_state(task()), deep_read_state(node())), () => { + set(isDone, task().isSourceTaskStatusDone(node().status)); + }); + legacy_pre_effect(() => deep_read_state(node()), () => { + set(isIgnored, node().taskVisibility === "ignored"); + }); + legacy_pre_effect(() => (get(isDone), get(isIgnored)), () => { + set(isChecked, get(isDone) || get(isIgnored)); + }); + legacy_pre_effect(() => deep_read_state(node()), () => { + set(displayStatusIsCustom, node().status !== " "); + }); + legacy_pre_effect_reset(); + var $$exports = { + get task() { + return task(); + }, + set task($$value) { + task($$value); + flushSync(); + }, + get taskActions() { + return taskActions(); + }, + set taskActions($$value) { + taskActions($$value); + flushSync(); + }, + get node() { + return node(); + }, + set node($$value) { + node($$value); + flushSync(); + }, + get isSelectionMode() { + return isSelectionMode(); + }, + set isSelectionMode($$value) { + isSelectionMode($$value); + flushSync(); + }, + $set: update_legacy_props, + $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) + }; + init(); + var button = root6(); + let classes; + var node_1 = child(button); + TaskStatusMarker(node_1, { + get status() { + return deep_read_state(node()), untrack(() => node().status); + }, + get isDone() { + return get(isDone); + }, + size: 16 + }); + reset(button); + template_effect(() => { + classes = set_class(button, 1, "icon-button source-row-status svelte-74sw79", null, classes, { + "is-done": get(isDone), + usesStatusMarker: get(displayStatusIsCustom) + }); + set_attribute2(button, "aria-checked", get(isChecked)); + button.disabled = isSelectionMode(); + set_attribute2(button, "tabindex", isSelectionMode() ? -1 : 0); + }); + event("click", button, stopPropagation(toggleStatus)); + event("keydown", button, stopPropagation(handleKeydown)); + append($$anchor, button); + return pop($$exports); +} + +// src/ui/components/TaskSourceRow.svelte +var root7 = from_html(``); +var root_14 = from_html(``); +var root_23 = from_html(``); +var root_32 = from_html(``); +var root_42 = from_html(`
`); +var $$css7 = { + hash: "svelte-smkg1f", + code: '.source-row.svelte-smkg1f {--source-row-line-height: 1.3;position:relative;}.source-row.is-dragging.svelte-smkg1f {opacity:0.4;}.source-row.drop-before.svelte-smkg1f::before, .source-row.drop-after.svelte-smkg1f::before {content:"";position:absolute;left:calc(var(--task-line-base-padding-left, 20px) + var(--drag-indicator-depth, 0) * var(--task-line-indent-step, 26px));right:8px;height:2px;background:var(--interactive-accent);pointer-events:none;}.source-row.drop-before.svelte-smkg1f::after, .source-row.drop-after.svelte-smkg1f::after {content:"";position:absolute;left:calc(var(--task-line-base-padding-left, 20px) + var(--drag-indicator-depth, 0) * var(--task-line-indent-step, 26px) - 8px);width:10px;height:10px;border-radius:999px;background:var(--interactive-accent);pointer-events:none;}.source-row.drop-before.svelte-smkg1f::before {top:-1px;}.source-row.drop-before.svelte-smkg1f::after {top:-5px;}.source-row.drop-after.svelte-smkg1f::before {bottom:-1px;}.source-row.drop-after.svelte-smkg1f::after {bottom:-5px;}.delete-subtask-btn.svelte-smkg1f {display:flex;justify-content:center;align-items:center;width:20px;height:20px;padding:0;border:none;background:transparent;cursor:pointer;color:var(--text-muted);opacity:0;transition:opacity 0.15s ease, color 0.15s ease;box-shadow:none;}.delete-subtask-btn.svelte-smkg1f:hover {color:var(--text-error, var(--text-accent));background:transparent;box-shadow:none;}.source-row.svelte-smkg1f:hover .delete-subtask-btn:where(.svelte-smkg1f) {opacity:0.8;}.delete-subtask-btn.svelte-smkg1f:hover {opacity:1 !important;}.source-row-preview.svelte-smkg1f {display:block;width:100%;height:auto;min-height:var(--task-line-row-height, 1.5rem);appearance:none;padding:0;border:none;background:transparent;box-shadow:none;color:var(--text-normal);font:inherit;line-height:var(--source-row-line-height);text-align:left;white-space:pre-wrap;overflow-wrap:anywhere;cursor:text;}.source-row-preview.svelte-smkg1f:hover, .source-row-preview.svelte-smkg1f:active {background:transparent;box-shadow:none;}.source-row-preview.svelte-smkg1f:focus-visible {outline:2px solid var(--background-modifier-border-focus);outline-offset:2px;}textarea.svelte-smkg1f {cursor:text;background-color:var(--color-base-25);width:100%;min-height:1.6rem;resize:none;}.source-row-bullet.svelte-smkg1f {display:block;width:8px;height:8px;border-radius:50%;background:var(--text-muted);}.is-ignored-task.svelte-smkg1f .source-row-preview:where(.svelte-smkg1f) {color:var(--text-normal);}' +}; +function TaskSourceRow($$anchor, $$props) { + if (new.target) return createClassComponent({ component: TaskSourceRow, ...$$anchor }); + push($$props, false); + append_styles($$anchor, $$css7); + const $subtaskDraggingStore = () => store_get(subtaskDraggingStore, "$subtaskDraggingStore", $$stores); + const [$$stores, $$cleanup] = setup_stores(); + const rawListItemText = mutable_source(); + const editText = mutable_source(); + const previewText = mutable_source(); + let app = prop($$props, "app", 12); + let task = prop($$props, "task", 12); + let taskActions = prop($$props, "taskActions", 12); + let node = prop($$props, "node", 12); + let isSelectionMode = prop($$props, "isSelectionMode", 12, false); + let depth = prop($$props, "depth", 12, 0); + let isEditing = mutable_source(false); + let isDragging = mutable_source(false); + let isDraggedOver = mutable_source(false); + let dropBefore = mutable_source(false); + let dropAfter = mutable_source(false); + let dragIndicatorDepth = mutable_source(depth()); + function startEditing() { + set(isEditing, true); + } + function finishEditing(e) { + const next2 = e.currentTarget.value; + set(isEditing, false); + if (next2 !== get(editText)) { + void taskActions().updateSourceBlockRow(task().id, node().rowIndex, next2); + } + } + function handleTextareaKeydown(e) { + var _a5; + if (e.key === "Enter" && !e.shiftKey || e.key === "Escape") { + e.preventDefault(); + (_a5 = e.currentTarget) == null ? void 0 : _a5.blur(); + if (e.key === "Escape") { + set(isEditing, false); + } + } + } + function handlePreviewKeydown(e) { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + startEditing(); + } + } + function focusAndAutosize(node2) { + function resize() { + node2.style.height = "0px"; + node2.style.height = `${node2.scrollHeight}px`; + } + const focusTimer = setTimeout(() => node2.focus(), 0); + node2.addEventListener("input", resize); + resize(); + return { + destroy() { + clearTimeout(focusTimer); + node2.removeEventListener("input", resize); + } + }; + } + class ConfirmDeleteSubtaskModal extends import_obsidian4.Modal { + constructor(app2, subtaskText, onConfirm) { + super(app2); + this.subtaskText = subtaskText; + this.onConfirm = onConfirm; + } + onOpen() { + this.contentEl.addClass("task-list-kanban-confirm-modal"); + this.contentEl.createEl("h2", { text: "Delete subtask?" }); + this.contentEl.createEl("p", { + text: `Are you sure you want to delete "${this.subtaskText}" and all its nested items? This action cannot be undone.` + }); + const actions = this.contentEl.createDiv({ cls: "confirm-modal-actions" }); + const cancelButton = actions.createEl("button", { text: "Cancel" }); + cancelButton.addEventListener("click", () => this.close()); + const deleteButton = actions.createEl("button", { text: "Delete", cls: "mod-warning" }); + deleteButton.addEventListener("click", () => { + this.onConfirm(); + this.close(); + }); + window.requestAnimationFrame(() => cancelButton.focus()); + } + onClose() { + this.contentEl.empty(); + } + } + function handleDeleteClick() { + const text2 = node().kind === "task" ? node().content : node().rawLine.trim(); + new ConfirmDeleteSubtaskModal(app(), text2, () => { + void taskActions().deleteSourceBlockRow(task().id, node().rowIndex); + }).open(); + } + function handleDragStart(e) { + e.stopPropagation(); + set(isDragging, true); + subtaskDraggingStore.set({ + taskId: task().id, + draggedRowIndex: node().rowIndex, + draggedIndentation: node().indentation + }); + if (e.dataTransfer) { + e.dataTransfer.setData("text/plain", `${task().id}:${node().rowIndex}`); + e.dataTransfer.dropEffect = "move"; + } + } + function handleDragEnd(e) { + e.stopPropagation(); + set(isDragging, false); + subtaskDraggingStore.set(null); + } + function handleDragOver(e) { + if (!$subtaskDraggingStore() || $subtaskDraggingStore().taskId !== task().id) return; + if ($subtaskDraggingStore().draggedRowIndex === node().rowIndex) return; + e.preventDefault(); + e.stopPropagation(); + set(isDraggedOver, true); + const rect = e.currentTarget.getBoundingClientRect(); + const relativeY = e.clientY - rect.top; + set(dropBefore, relativeY < rect.height / 2); + set(dropAfter, !get(dropBefore)); + const mouseX = e.clientX - rect.left; + const hoveredRowDepth = depth(); + const maxDepth = get(dropBefore) ? hoveredRowDepth : hoveredRowDepth + 1; + set(dragIndicatorDepth, Math.min(maxDepth, Math.max(1, Math.floor((mouseX - 20) / 26)))); + } + function handleDragLeave(e) { + e.stopPropagation(); + set(isDraggedOver, false); + set(dropBefore, false); + set(dropAfter, false); + } + function handleDrop(e) { + if (!$subtaskDraggingStore() || $subtaskDraggingStore().taskId !== task().id) return; + e.preventDefault(); + e.stopPropagation(); + set(isDraggedOver, false); + const draggedRowIndex = $subtaskDraggingStore().draggedRowIndex; + subtaskDraggingStore.set(null); + const position = get(dropBefore) ? "before" : "after"; + void taskActions().moveSourceBlockRow(task().id, draggedRowIndex, node().rowIndex, position, get(dragIndicatorDepth)); + set(dropBefore, false); + set(dropAfter, false); + } + legacy_pre_effect(() => (deep_read_state(node()), getRawListItemText), () => { + set(rawListItemText, node().kind === "raw" ? getRawListItemText(node()) : null); + }); + legacy_pre_effect( + () => (get(rawListItemText), getSourceNodeText, deep_read_state(node())), + () => { + var _a5; + set(editText, ((_a5 = get(rawListItemText)) != null ? _a5 : getSourceNodeText(node())).replaceAll("
", "\n")); + } + ); + legacy_pre_effect(() => (get(rawListItemText), get(editText)), () => { + var _a5; + set(previewText, ((_a5 = get(rawListItemText)) != null ? _a5 : get(editText)).replaceAll("
", "\n")); + }); + legacy_pre_effect(() => $subtaskDraggingStore(), () => { + if (!$subtaskDraggingStore()) { + set(isDraggedOver, false); + set(dropBefore, false); + set(dropAfter, false); + } + }); + legacy_pre_effect_reset(); + var $$exports = { + get app() { + return app(); + }, + set app($$value) { + app($$value); + flushSync(); + }, + get task() { + return task(); + }, + set task($$value) { + task($$value); + flushSync(); + }, + get taskActions() { + return taskActions(); + }, + set taskActions($$value) { + taskActions($$value); + flushSync(); + }, + get node() { + return node(); + }, + set node($$value) { + node($$value); + flushSync(); + }, + get isSelectionMode() { + return isSelectionMode(); + }, + set isSelectionMode($$value) { + isSelectionMode($$value); + flushSync(); + }, + get depth() { + return depth(); + }, + set depth($$value) { + depth($$value); + flushSync(); + }, + $set: update_legacy_props, + $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) + }; + init(); + var div = root_42(); + let classes; + let styles; + var node_1 = child(div); + TaskLineRow(node_1, { + get depth() { + return depth(); + }, + hasActions: true, + children: ($$anchor2, $$slotProps) => { + var fragment = comment(); + var node_2 = first_child(fragment); + { + var consequent = ($$anchor3) => { + var textarea = root7(); + remove_textarea_child(textarea); + action(textarea, ($$node) => focusAndAutosize == null ? void 0 : focusAndAutosize($$node)); + effect(() => event("keydown", textarea, handleTextareaKeydown)); + effect(() => event("blur", textarea, finishEditing)); + template_effect(() => set_value(textarea, get(editText))); + append($$anchor3, textarea); + }; + var alternate = ($$anchor3) => { + var button = root_14(); + var text_1 = child(button, true); + reset(button); + template_effect(() => set_text(text_1, get(previewText))); + event("click", button, stopPropagation(startEditing)); + event("keydown", button, stopPropagation(handlePreviewKeydown)); + append($$anchor3, button); + }; + if_block(node_2, ($$render) => { + if (get(isEditing)) $$render(consequent); + else $$render(alternate, -1); + }); + } + append($$anchor2, fragment); + }, + $$slots: { + default: true, + marker: ($$anchor2, $$slotProps) => { + var fragment_1 = comment(); + var node_3 = first_child(fragment_1); + { + var consequent_1 = ($$anchor3) => { + TaskSourceStatusButton($$anchor3, { + get task() { + return task(); + }, + get taskActions() { + return taskActions(); + }, + get node() { + return node(); + }, + get isSelectionMode() { + return isSelectionMode(); + } + }); + }; + var consequent_2 = ($$anchor3) => { + var span = root_23(); + append($$anchor3, span); + }; + if_block(node_3, ($$render) => { + if (deep_read_state(node()), untrack(() => node().kind === "task")) $$render(consequent_1); + else if (get(rawListItemText) !== null) $$render(consequent_2, 1); + }); + } + append($$anchor2, fragment_1); + }, + actions: ($$anchor2, $$slotProps) => { + var fragment_3 = comment(); + var node_4 = first_child(fragment_3); + { + var consequent_3 = ($$anchor3) => { + var button_1 = root_32(); + var node_5 = child(button_1); + Icon(node_5, { name: "lucide-x", size: 14, opacity: 0.6 }); + reset(button_1); + event("click", button_1, stopPropagation(handleDeleteClick)); + append($$anchor3, button_1); + }; + if_block(node_4, ($$render) => { + if (!isSelectionMode()) $$render(consequent_3); + }); + } + append($$anchor2, fragment_3); + } + } + }); + var node_6 = sibling(node_1, 2); + slot(node_6, $$props, "default", {}, null); + reset(div); + template_effect(() => { + classes = set_class(div, 1, "source-row svelte-smkg1f", null, classes, { + "is-ignored-task": node().kind === "task" && node().taskVisibility === "ignored", + "is-raw-list-item": get(rawListItemText) !== null, + "is-dragging": get(isDragging), + "is-dragged-over": get(isDraggedOver), + "drop-before": get(isDraggedOver) && get(dropBefore), + "drop-after": get(isDraggedOver) && get(dropAfter) + }); + set_attribute2(div, "draggable", !get(isEditing)); + styles = set_style(div, "", styles, { "--drag-indicator-depth": get(dragIndicatorDepth) }); + }); + event("dragstart", div, handleDragStart); + event("dragend", div, handleDragEnd); + event("dragover", div, handleDragOver); + event("dragleave", div, handleDragLeave); + event("drop", div, handleDrop); + append($$anchor, div); + var $$pop = pop($$exports); + $$cleanup(); + return $$pop; +} + +// src/ui/components/TaskSourceRows.svelte +function TaskSourceRows($$anchor, $$props) { + if (new.target) return createClassComponent({ component: TaskSourceRows, ...$$anchor }); + push($$props, false); + let app = prop($$props, "app", 12); + let task = prop($$props, "task", 12); + let taskActions = prop($$props, "taskActions", 12); + let nodes = prop($$props, "nodes", 28, () => []); + let isSelectionMode = prop($$props, "isSelectionMode", 12, false); + let depth = prop($$props, "depth", 12, 0); + var $$exports = { + get app() { + return app(); + }, + set app($$value) { + app($$value); + flushSync(); + }, + get task() { + return task(); + }, + set task($$value) { + task($$value); + flushSync(); + }, + get taskActions() { + return taskActions(); + }, + set taskActions($$value) { + taskActions($$value); + flushSync(); + }, + get nodes() { + return nodes(); + }, + set nodes($$value) { + nodes($$value); + flushSync(); + }, + get isSelectionMode() { + return isSelectionMode(); + }, + set isSelectionMode($$value) { + isSelectionMode($$value); + flushSync(); + }, + get depth() { + return depth(); + }, + set depth($$value) { + depth($$value); + flushSync(); + }, + $set: update_legacy_props, + $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) + }; + var fragment = comment(); + var node_1 = first_child(fragment); + each(node_1, 1, nodes, (node) => node.rowIndex, ($$anchor2, node) => { + TaskSourceRow($$anchor2, { + get app() { + return app(); + }, + get task() { + return task(); + }, + get taskActions() { + return taskActions(); + }, + get node() { + return get(node); + }, + get isSelectionMode() { + return isSelectionMode(); + }, + get depth() { + return depth(); + }, + children: ($$anchor3, $$slotProps) => { + var fragment_2 = comment(); + var node_2 = first_child(fragment_2); + { + var consequent = ($$anchor4) => { + var fragment_3 = comment(); + var node_3 = first_child(fragment_3); + { + let $0 = derived_safe_equal(() => depth() + 1); + TaskSourceRows(node_3, { + get app() { + return app(); + }, + get task() { + return task(); + }, + get taskActions() { + return taskActions(); + }, + get nodes() { + return get(node), untrack(() => get(node).sourceChildren); + }, + get isSelectionMode() { + return isSelectionMode(); + }, + get depth() { + return get($0); + } + }); + } + append($$anchor4, fragment_3); + }; + if_block(node_2, ($$render) => { + if (get(node), untrack(() => get(node).sourceChildren.length > 0)) $$render(consequent); + }); + } + append($$anchor3, fragment_2); + }, + $$slots: { default: true } + }); + }); + append($$anchor, fragment); + return pop($$exports); +} + +// src/ui/components/task_menu.svelte +var import_obsidian5 = require("obsidian"); +function Task_menu($$anchor, $$props) { + if (new.target) return createClassComponent({ component: Task_menu, ...$$anchor }); + push($$props, false); + const $columnTagTableStore = () => store_get(columnTagTableStore(), "$columnTagTableStore", $$stores); + const [$$stores, $$cleanup] = setup_stores(); + let task = prop($$props, "task", 12); + let taskActions = prop($$props, "taskActions", 12); + let columnTagTableStore = prop($$props, "columnTagTableStore", 12); + let doneColumnName = prop($$props, "doneColumnName", 12, void 0); + function showMenu(e) { + const menu = new import_obsidian5.Menu(); + const target = e.target; + if (!target) { + return; + } + const boundingRect = target.getBoundingClientRect(); + const y = boundingRect.top + boundingRect.height / 2; + const x = boundingRect.left + boundingRect.width / 2; + menu.addItem((i) => { + i.setTitle(`Go to file`).onClick(() => taskActions().viewFile(task().id)); + }); + menu.addSeparator(); + for (const [tag2, label] of Object.entries($columnTagTableStore())) { + menu.addItem((i) => { + i.setTitle(`Move to ${label}`).onClick(() => taskActions().changeColumn(task().id, tag2)); + if (task().column === tag2) { + i.setDisabled(true); + } + }); + } + menu.addItem((i) => { + i.setTitle(`Move to ${resolveDefaultColumnName("done", void 0, doneColumnName())}`).onClick(() => taskActions().markDone(task().id)); + if (task().done) { + i.setDisabled(true); + } + }); + menu.addSeparator(); + menu.addItem((i) => { + i.setTitle(`Duplicate task`).onClick(() => taskActions().duplicateTask(task().id)); + }); + menu.addItem((i) => { + if (task().isCancelled) { + i.setTitle(`Restore task`).onClick(() => taskActions().restoreTasks([task().id])); + } else { + i.setTitle(`Cancel task`).onClick(() => taskActions().cancelTasks([task().id])); + } + }); + menu.addItem((i) => { + i.setTitle(`Archive task`).onClick(() => taskActions().archiveTasks([task().id])); + }); + menu.addItem((i) => { + i.setTitle(`Delete task`).onClick(() => taskActions().deleteTask(task().id)); + }); + menu.showAtPosition({ x, y }); + } + var $$exports = { + get task() { + return task(); + }, + set task($$value) { + task($$value); + flushSync(); + }, + get taskActions() { + return taskActions(); + }, + set taskActions($$value) { + taskActions($$value); + flushSync(); + }, + get columnTagTableStore() { + return columnTagTableStore(); + }, + set columnTagTableStore($$value) { + columnTagTableStore($$value); + flushSync(); + }, + get doneColumnName() { + return doneColumnName(); + }, + set doneColumnName($$value) { + doneColumnName($$value); + flushSync(); + }, + $set: update_legacy_props, + $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) + }; + init(); + Icon_button($$anchor, { icon: "lucide-more-vertical", $$events: { click: showMenu } }); + var $$pop = pop($$exports); + $$cleanup(); + return $$pop; +} + +// src/parsing/properties/none_schema.ts +var NoneSchema = class { + constructor() { + this.id = "none" /* None */; + this.label = "None"; + } + parseProperties(rawLine) { + return createPropertyMapWithStatus(rawLine); + } + knownKeys() { + return [ + { + key: UNIVERSAL_STATUS_PROPERTY_KEY, + label: "Status", + type: "text" + } + ]; + } +}; + // src/parsing/properties/dataview_schema.ts var DATAVIEW_KEY_PATTERN = "[a-zA-Z0-9_-]+"; var ENCLOSED_DATAVIEW_REGEX = /\[\s*([a-zA-Z0-9_-]+)\s*::\s*([^\]]*?)\s*\]|\(\s*([a-zA-Z0-9_-]+)\s*::\s*([^\)]*?)\s*\)/g; @@ -12781,8 +14040,8 @@ function compareByProperty(a, b, key2, direction, options2 = {}) { const aValue = (_b3 = (_a5 = a.properties.get(key2)) == null ? void 0 : _a5.value) != null ? _b3 : null; const bValue = (_d = (_c2 = b.properties.get(key2)) == null ? void 0 : _c2.value) != null ? _d : null; if (aValue === null && bValue === null) return 0; - if (aValue === null) return 1; - if (bValue === null) return -1; + if (aValue === null) return direction === "desc" ? -1 : 1; + if (bValue === null) return direction === "desc" ? 1 : -1; if (key2 === UNIVERSAL_STATUS_PROPERTY_KEY) { return compareStatusMarkerValues( aValue, @@ -12822,11 +14081,14 @@ function compareStatusMarkerValues(a, b, statusMarkerOrder, doneStatusMarkers = return direction === "desc" ? -result : result; } function createStatusMarkerRankMap(statusMarkerOrder) { + return createMarkerRankMap(getOrderedStatusMarkers(statusMarkerOrder).join("")); +} +function getOrderedStatusMarkers(statusMarkerOrder) { const orderedMarkers = Array.from(statusMarkerOrder); if (!orderedMarkers.includes(" ")) { orderedMarkers.unshift(" "); } - return createMarkerRankMap(orderedMarkers.join("")); + return orderedMarkers; } function createMarkerRankMap(markers) { const rankByMarker = /* @__PURE__ */ new Map(); @@ -12838,64 +14100,6 @@ function createMarkerRankMap(markers) { return rankByMarker; } -// src/parsing/properties/display.ts -var PRIORITY_LABELS = { - 5: "Highest", - 4: "High", - 3: "Medium", - 2: "Low", - 1: "Lowest" -}; -function formatPropertyLabel(key2) { - if (!key2) return key2; - return key2.charAt(0).toUpperCase() + key2.slice(1); -} -function formatPropertyValue(prop2) { - var _a5; - if (prop2.value instanceof Date) { - return prop2.value.toLocaleDateString(void 0, { - month: "short", - day: "numeric", - timeZone: "UTC" - }); - } - if (prop2.key === "priority" && typeof prop2.value === "number") { - return (_a5 = PRIORITY_LABELS[prop2.value]) != null ? _a5 : String(prop2.value); - } - if (prop2.value === null) { - return prop2.rawValue; - } - return String(prop2.value); -} -function tasksIconFor(prop2) { - if (prop2.key === "priority" && typeof prop2.value === "number") { - return getTasksPriorityEmoji(prop2.value); - } - return TASKS_PROPERTY_ICONS[prop2.key]; -} -function stripDisplayedPropertiesFromContent(content, properties) { - let result = content; - for (const [key2, prop2] of properties) { - if (key2 === UNIVERSAL_STATUS_PROPERTY_KEY) continue; - if (!prop2.rawValue) continue; - result = result.split(prop2.rawValue).join(" "); - } - return result.replace(/[ \t]{2,}/g, " ").trim(); -} -function toDisplayProperties(properties) { - const result = []; - for (const [key2, prop2] of properties) { - if (key2 === UNIVERSAL_STATUS_PROPERTY_KEY) continue; - result.push({ - key: key2, - label: formatPropertyLabel(key2), - value: formatPropertyValue(prop2), - icon: tasksIconFor(prop2) - }); - } - return result; -} - // src/parsing/properties/write.ts var TASKS_WRITERS = { due: "\u{1F4C5}", @@ -12909,6 +14113,7 @@ var DATAVIEW_WRITERS = { start: "start", completion: "completion" }; +var DATAVIEW_PRIORITY_KEY = "priority"; var TRAILING_BLOCK_LINK_REGEX = /(\s\^[a-zA-Z0-9-]+)$/; var TasksPluginWriteAdapter = class { constructor() { @@ -12932,6 +14137,18 @@ var TasksPluginWriteAdapter = class { const property = this.propertySchema.parseProperties(rawLine).get(propertyKey); return property ? removeProperty(rawLine, property) : rawLine; } + upsertPriority(rawLine, priority) { + const option = getTasksPriorityOption(priority); + if (!option) { + return rawLine; + } + const property = this.propertySchema.parseProperties(rawLine).get("priority"); + return upsertProperty(rawLine, property, option.emoji); + } + removePriority(rawLine) { + const property = this.propertySchema.parseProperties(rawLine).get("priority"); + return property ? removeProperty(rawLine, property) : rawLine; + } }; var DataviewWriteAdapter = class { constructor() { @@ -12952,6 +14169,18 @@ var DataviewWriteAdapter = class { const property = this.propertySchema.parseProperties(rawLine).get(key2); return property ? removeProperty(rawLine, property) : rawLine; } + upsertPriority(rawLine, priority) { + const normalizedPriority = priority.trim(); + if (!normalizedPriority) { + return rawLine; + } + const property = this.propertySchema.parseProperties(rawLine).get(DATAVIEW_PRIORITY_KEY); + return upsertProperty(rawLine, property, formatDataviewField(DATAVIEW_PRIORITY_KEY, normalizedPriority)); + } + removePriority(rawLine) { + const property = this.propertySchema.parseProperties(rawLine).get(DATAVIEW_PRIORITY_KEY); + return property ? removeProperty(rawLine, property) : rawLine; + } }; var WRITE_ADAPTERS = { ["tasks" /* TasksPlugin */]: new TasksPluginWriteAdapter(), @@ -13031,17 +14260,17 @@ function getSchemaImpl(option) { } // src/ui/components/DateInputFields.svelte -var root3 = from_html(``); -var root_12 = from_html(``); -var root_22 = from_html(`
`); -var $$css3 = { +var root8 = from_html(``); +var root_15 = from_html(``); +var root_24 = from_html(`
`); +var $$css8 = { hash: "svelte-4hxhuo", code: ".date-input-fields.svelte-4hxhuo {display:flex;flex-wrap:wrap;align-items:end;gap:var(--size-2-2);width:100%;}.date-input-field.svelte-4hxhuo {display:flex;flex-direction:column;gap:2px;min-width:116px;flex:1 1 116px;color:var(--text-muted);font-size:var(--font-smallest);text-transform:uppercase;}.date-input-field.svelte-4hxhuo input:where(.svelte-4hxhuo) {width:100%;min-height:28px;font-size:var(--font-ui-smaller);text-transform:none;}.done-date-editing.svelte-4hxhuo {display:inline-flex;align-items:center;gap:var(--size-2-1);min-height:28px;padding:1px var(--size-2-2);border:var(--border-width) solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-secondary-alt);color:var(--text-muted);box-shadow:none;line-height:var(--line-height-tight);}.done-date-editing.svelte-4hxhuo:hover {border-color:var(--text-muted);color:var(--text-normal);background:var(--background-secondary);box-shadow:none;}" }; function DateInputFields($$anchor, $$props) { if (new.target) return createClassComponent({ component: DateInputFields, ...$$anchor }); push($$props, false); - append_styles($$anchor, $$css3); + append_styles($$anchor, $$css8); let values = prop($$props, "values", 12); let onDateChange = prop($$props, "onDateChange", 12); let showDoneButton = prop($$props, "showDoneButton", 12, false); @@ -13085,10 +14314,10 @@ function DateInputFields($$anchor, $$props) { $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) }; init(); - var div = root_22(); + var div = root_24(); var node = child(div); each(node, 1, () => editableDateFields, (field) => field.key, ($$anchor2, field) => { - var label = root3(); + var label = root8(); var span = child(label); var text2 = child(span, true); reset(span); @@ -13117,7 +14346,7 @@ function DateInputFields($$anchor, $$props) { var node_1 = sibling(node, 2); { var consequent = ($$anchor2) => { - var button = root_12(); + var button = root_15(); event("mousedown", button, stopPropagation(function($$arg) { bubble_event.call(this, $$props, $$arg); })); @@ -13143,16 +14372,16 @@ function DateInputFields($$anchor, $$props) { } // src/ui/components/TaskDateFields.svelte -var root4 = from_html(`
`); -var root_13 = from_html(`
`); -var $$css4 = { +var root9 = from_html(`
`); +var root_16 = from_html(`
`); +var $$css9 = { hash: "svelte-1ml44qr", code: ".task-date-fields.svelte-1ml44qr {display:contents;font-size:var(--font-ui-smaller);}.add-date-button.svelte-1ml44qr {display:inline-flex;align-items:center;gap:var(--size-2-1);height:auto;min-height:0;padding:0 var(--size-2-2);margin:0;border:none;border-radius:var(--radius-s);background:transparent;color:var(--text-accent);box-shadow:none;font-size:inherit;font-weight:var(--font-medium);line-height:inherit;}.add-date-button.svelte-1ml44qr span:where(.svelte-1ml44qr) {font-size:inherit;line-height:1;}.add-date-button.svelte-1ml44qr:hover {background:transparent;color:var(--text-accent-hover);box-shadow:none;}.edit-mode.svelte-1ml44qr {display:flex;width:100%;padding-top:var(--size-2-1);border-top:var(--border-width) solid var(--background-modifier-border);}" }; function TaskDateFields($$anchor, $$props) { if (new.target) return createClassComponent({ component: TaskDateFields, ...$$anchor }); push($$props, false); - append_styles($$anchor, $$css4); + append_styles($$anchor, $$css9); const dateEditingEnabled = mutable_source(); const dateValues = mutable_source(); const showDateInputs = mutable_source(); @@ -13273,7 +14502,7 @@ function TaskDateFields($$anchor, $$props) { var node = first_child(fragment); { var consequent = ($$anchor2) => { - var div = root4(); + var div = root9(); var button = child(div); reset(div); event("mousedown", button, stopPropagation(function($$arg) { @@ -13289,7 +14518,7 @@ function TaskDateFields($$anchor, $$props) { append($$anchor2, div); }; var consequent_1 = ($$anchor2) => { - var div_1 = root_13(); + var div_1 = root_16(); var node_1 = child(div_1); DateInputFields(node_1, { get values() { @@ -13311,91 +14540,8 @@ function TaskDateFields($$anchor, $$props) { return pop($$exports); } -// src/ui/components/icon.svelte -var import_obsidian4 = require("obsidian"); -var root5 = from_html(``); -var $$css5 = { - hash: "svelte-1cj3qcy", - code: ".icon.svelte-1cj3qcy {display:inline-flex;justify-content:center;align-items:center;flex-shrink:0;}.icon.svelte-1cj3qcy svg {width:100%;height:100%;}" -}; -function Icon($$anchor, $$props) { - if (new.target) return createClassComponent({ component: Icon, ...$$anchor }); - push($$props, false); - append_styles($$anchor, $$css5); - let name = prop($$props, "name", 12); - let size2 = prop( - $$props, - "size", - 12, - 16 - // Default icon size in pixels - ); - let opacity = prop($$props, "opacity", 12, 1); - let ariaLabel = prop($$props, "ariaLabel", 12, void 0); - let element2 = mutable_source(); - onMount(() => { - if (get(element2)) { - (0, import_obsidian4.setIcon)(get(element2), name()); - } - }); - legacy_pre_effect(() => (get(element2), deep_read_state(name()), import_obsidian4.setIcon), () => { - if (get(element2) && name()) { - (0, import_obsidian4.setIcon)(get(element2), name()); - } - }); - legacy_pre_effect_reset(); - var $$exports = { - get name() { - return name(); - }, - set name($$value) { - name($$value); - flushSync(); - }, - get size() { - return size2(); - }, - set size($$value) { - size2($$value); - flushSync(); - }, - get opacity() { - return opacity(); - }, - set opacity($$value) { - opacity($$value); - flushSync(); - }, - get ariaLabel() { - return ariaLabel(); - }, - set ariaLabel($$value) { - ariaLabel($$value); - flushSync(); - }, - $set: update_legacy_props, - $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) - }; - init(); - var span = root5(); - let styles; - bind_this(span, ($$value) => set(element2, $$value), () => get(element2)); - template_effect(() => { - var _a5, _b3; - set_attribute2(span, "aria-label", ariaLabel()); - set_attribute2(span, "role", ariaLabel() ? "img" : void 0); - styles = set_style(span, "", styles, { - width: `${(_a5 = size2()) != null ? _a5 : ""}px`, - height: `${(_b3 = size2()) != null ? _b3 : ""}px`, - opacity: opacity() - }); - }); - append($$anchor, span); - return pop($$exports); -} - // src/ui/components/task.svelte -var import_obsidian5 = require("obsidian"); +var import_obsidian6 = require("obsidian"); // node_modules/zod/lib/index.mjs var util; @@ -17398,11 +18544,27 @@ function isStatusMatch(statusContent, markers) { if (!singleChar) return false; return markersChars.includes(singleChar); } +function getNextStatusMarker(currentStatus, doneStatusMarkers, statusMarkerOrder) { + var _a5; + if (isStatusMatch(currentStatus, doneStatusMarkers)) { + return { status: " ", done: false }; + } + const orderedMarkers = getOrderedStatusMarkers(statusMarkerOrder); + const currentIndex = orderedMarkers.indexOf(currentStatus); + const nextMarker = currentIndex >= 0 ? orderedMarkers[currentIndex + 1] : void 0; + if (!nextMarker || isStatusMatch(nextMarker, doneStatusMarkers)) { + return { + status: (_a5 = Array.from(doneStatusMarkers)[0]) != null ? _a5 : "x", + done: true + }; + } + return { status: nextMarker, done: false }; +} var Task = class { - constructor(rawContent, fileHandle, rowIndex, context) { + constructor(rawContent, fileHandle, rowIndex, context, sourceChildren = []) { this.rowIndex = rowIndex; this._deleted = false; - var _a5; + var _a5, _b3; const [, blockLink] = (_a5 = rawContent.match(blockLinkRegexp)) != null ? _a5 : []; this.blockLink = blockLink; const match = (blockLink ? rawContent.replace(blockLinkRegexp, "") : rawContent).match(taskStringRegex); @@ -17415,6 +18577,7 @@ var Task = class { if (!content) { throw new Error("Content not found in raw content"); } + this.sourceChildren = sourceChildren; const tags = getTagsFromContent(content); this._id = (0, import_sha256.default)(content + fileHandle.path + rowIndex).toString(); this.content = content; @@ -17422,7 +18585,16 @@ var Task = class { this._done = isStatusMatch(this._displayStatus, context.doneStatusMarkers); this._path = fileHandle.path; this._indentation = indentation || ""; - const matchedColumn = resolveMatchedColumnDefinition(context.columnDefinitions, tags); + this.properties = context.propertySchema.parseProperties(rawContent); + this.propertySchemaOption = context.propertySchema.id; + const priorityMatches = getTaskPriorityMatchValues(rawContent); + const matchedColumn = resolveMatchedColumnDefinition(context.columnDefinitions, { + tags, + status: this._displayStatus, + priority: getTaskPriorityMatchValue(this.propertySchemaOption, this.properties), + prioritySchema: this.propertySchemaOption === "tasks" /* TasksPlugin */ ? "tasks" /* TasksPlugin */ : this.propertySchemaOption === "dataview" /* Dataview */ ? "dataview" /* Dataview */ : void 0, + priorities: priorityMatches + }); for (const tag2 of tags) { if (tag2 === "done") { if (!this._column) { @@ -17447,10 +18619,17 @@ var Task = class { this.content = this.stripTagFromContent(this.content, tag2); } } + if (matchedColumn && usesStatusMatching(matchedColumn) && !this._column) { + this._column = matchedColumn.id; + } + if (matchedColumn && usesPriorityMatching(matchedColumn) && !this._column) { + this._column = matchedColumn.id; + } this._tags = tags; this.blockLink = blockLink; - this.properties = context.propertySchema.parseProperties(rawContent); this.consolidateTags = context.consolidateTags; + this.sourceColumnDefinitions = context.columnDefinitions; + this.columnDefinitions = (_b3 = context.columnWriteDefinitions) != null ? _b3 : context.columnDefinitions; this.columnPlacementTagTable = context.columnPlacementTagTable; this.doneStatusMarkers = context.doneStatusMarkers; this.cancelledStatusMarkers = context.cancelledStatusMarkers; @@ -17478,6 +18657,20 @@ var Task = class { this._done = false; this._displayStatus = " "; } + cycleStatus(statusMarkerOrder) { + const next2 = getNextStatusMarker( + this._displayStatus, + this.doneStatusMarkers, + statusMarkerOrder + ); + if (next2.done) { + this.done = true; + return true; + } + this._done = false; + this._displayStatus = next2.status; + return false; + } get displayStatus() { return this._displayStatus; } @@ -17491,9 +18684,23 @@ var Task = class { return this._column; } set column(column) { - this._column = column; + if (column === "done") { + this.done = true; + return; + } + const wasDone = this._done; + if (column === "uncategorised") { + this.moveToUncategorised(); + if (wasDone) { + this._displayStatus = " "; + } + return; + } this._done = false; - this._displayStatus = " "; + if (wasDone) { + this._displayStatus = " "; + } + this.moveToColumn(column); } get tags() { return this._tags; @@ -17508,6 +18715,48 @@ var Task = class { } return this.getPlacementTagsForColumn(this.column); } + getColumnDefinition(column, definitions = this.columnDefinitions) { + if (!column) return void 0; + return definitions.find((definition) => definition.id === column); + } + moveToColumn(column) { + const sourceColumn = this.getColumnDefinition( + this._column && this._column !== "archived" && this._column !== "done" && this._column !== "uncategorised" ? this._column : void 0, + this.sourceColumnDefinitions + ); + const destinationColumn = this.getColumnDefinition(column); + if (sourceColumn && usesStatusMatching(sourceColumn)) { + this._displayStatus = " "; + } + const sourcePrioritySchema = getColumnPrioritySchema(sourceColumn); + if (sourceColumn && sourcePrioritySchema) { + this.removePriorityPlacement(sourcePrioritySchema); + } + const destinationStatus = destinationColumn ? getColumnStatus(destinationColumn) : void 0; + if (destinationStatus) { + this._displayStatus = destinationStatus; + } + const destinationPriority = getColumnPriority(destinationColumn); + if (destinationPriority && destinationColumn) { + this.writePriorityPlacement(destinationPriority, getColumnPrioritySchema(destinationColumn)); + } + this._column = column; + } + moveToUncategorised() { + const sourceColumn = this.getColumnDefinition( + this._column && this._column !== "archived" && this._column !== "done" && this._column !== "uncategorised" ? this._column : void 0, + this.sourceColumnDefinitions + ); + if (sourceColumn && usesStatusMatching(sourceColumn)) { + this._displayStatus = " "; + } + const sourcePrioritySchema = getColumnPrioritySchema(sourceColumn); + if (sourceColumn && sourcePrioritySchema) { + this.removePriorityPlacement(sourcePrioritySchema); + } + this._column = void 0; + this._done = false; + } stripTagFromContent(value, tag2) { const escapedTag = escapeRegExp2(tag2); return value.replace(new RegExp(`(^|\\s)#${escapedTag}(?=$|\\s|[^-_/\\p{L}\\p{N}])`, "gu"), "$1").replace(/[ \t]{2,}/g, " ").trim(); @@ -17528,11 +18777,36 @@ var Task = class { stripPlacementTags(value, placementTags) { return placementTags.reduce((nextValue, tag2) => this.stripTagFromContent(nextValue, tag2), value); } + transformContentWithPropertyWriter(transform) { + const rawLine = `- [ ] ${this.content.trim()}`; + const transformed = transform(rawLine); + const match = transformed.match(taskStringRegex); + if (match == null ? void 0 : match[3]) { + this.content = match[3]; + } + } + removePriorityPlacement(schema = getPriorityColumnContextSchema(this.propertySchemaOption)) { + if (!schema) return; + const adapter = getPropertyWriteAdapter(schema); + if (!adapter) return; + this.transformContentWithPropertyWriter((rawLine) => adapter.removePriority(rawLine)); + } + writePriorityPlacement(priority, schema = getPriorityColumnContextSchema(this.propertySchemaOption)) { + if (!schema) return; + const adapter = getPropertyWriteAdapter(schema); + if (!adapter) return; + this.transformContentWithPropertyWriter((rawLine) => adapter.upsertPriority(rawLine, priority)); + } serialise() { if (this._deleted) { return ""; } const placementTags = this.getCurrentPlacementTags(); + const currentColumnDefinition = this.getColumnDefinition( + this.column && this.column !== "archived" && this.column !== "done" && this.column !== "uncategorised" ? this.column : void 0 + ); + const usesStatusPlacement = !!currentColumnDefinition && usesStatusMatching(currentColumnDefinition); + const usesPriorityPlacement = !!currentColumnDefinition && usesPriorityMatching(currentColumnDefinition); const serialisedContent = placementTags.length > 0 ? this.stripPlacementTags(this.content.trim(), placementTags) : this.content.trim(); const serialisedTags = this.consolidateTags ? Array.from(this.tags).filter((tag2) => !placementTags.includes(tag2)) : []; return [ @@ -17540,20 +18814,72 @@ var Task = class { `- [${this._displayStatus}] `, serialisedContent, this.consolidateTags && serialisedTags.length > 0 ? ` ${serialisedTags.map((tag2) => `#${tag2}`).join(" ")}` : "", - this.column ? this.column === "archived" ? ` #${this.column}` : placementTags.length > 0 ? ` ${placementTags.map((tag2) => `#${tag2}`).join(" ")}` : ` #${this.column}` : "", + this.column ? this.column === "archived" ? ` #${this.column}` : usesStatusPlacement || usesPriorityPlacement ? "" : placementTags.length > 0 ? ` ${placementTags.map((tag2) => `#${tag2}`).join(" ")}` : ` #${this.column}` : "", this.blockLink ? ` ^${this.blockLink}` : "" ].join("").trimEnd(); } + get sourceBlockLineCount() { + return 1 + flattenSourceBlockNodes(this.sourceChildren).length; + } + sourceBlockRows(serializedParent = this.serialise()) { + return [ + serializedParent, + ...flattenSourceBlockNodes(this.sourceChildren).map((node) => node.rawLine) + ]; + } + updateSourceBlockRowContent(rowIndex, content) { + const node = this.findSourceBlockNode(rowIndex); + if (!node) { + return null; + } + if (node.kind === "raw") { + if (content === "") { + return ""; + } + const rawListItemMatch = node.rawLine.slice(node.indentation.length).match(/^([-*+]\s+)(.+)$/); + if (rawListItemMatch && !/^[-*+]\s+/.test(content)) { + return `${node.indentation}${rawListItemMatch[1]}${content}`; + } + return `${node.indentation}${content}`; + } + const parsed = parseSourceTaskLine(node.rawLine); + if (!parsed) { + return null; + } + return `${parsed.indentation}${parsed.bullet} [${parsed.status}] ${content}`; + } + cycleSourceTaskRowStatus(rowIndex, statusMarkerOrder) { + const node = this.findSourceBlockNode(rowIndex); + if (!node || node.kind !== "task") { + return null; + } + const parsed = parseSourceTaskLine(node.rawLine); + if (!parsed) { + return null; + } + const next2 = getNextStatusMarker( + parsed.status || " ", + this.doneStatusMarkers, + statusMarkerOrder + ); + return `${parsed.indentation}${parsed.bullet} [${next2.status}] ${parsed.content}`; + } + isSourceTaskStatusDone(status) { + return isStatusMatch(status, this.doneStatusMarkers); + } + findSourceBlockNode(rowIndex) { + var _a5; + return (_a5 = flattenSourceBlockNodes(this.sourceChildren).find((node) => node.rowIndex === rowIndex)) != null ? _a5 : null; + } serialiseForColumn(column) { const originalColumn = this._column; const originalDone = this._done; const originalDisplayStatus = this._displayStatus; + const originalContent = this.content; if (column === "done") { this.done = true; } else if (column === "uncategorised") { - this._column = void 0; - this._done = false; - this._displayStatus = " "; + this.moveToUncategorised(); } else { this.column = column; } @@ -17563,9 +18889,18 @@ var Task = class { this._column = originalColumn; this._done = originalDone; this._displayStatus = originalDisplayStatus; + this.content = originalContent; } } archive() { + const sourceColumn = this.getColumnDefinition( + this._column && this._column !== "archived" && this._column !== "done" && this._column !== "uncategorised" ? this._column : void 0, + this.sourceColumnDefinitions + ); + const sourcePrioritySchema = getColumnPrioritySchema(sourceColumn); + if (sourceColumn && sourcePrioritySchema) { + this.removePriorityPlacement(sourcePrioritySchema); + } if (!this._done) { this._displayStatus = "x"; } @@ -17587,15 +18922,12 @@ function isTrackedTaskString(input, ignoredStatusMarkers = DEFAULT_IGNORED_STATU if (input.includes("#archived")) { return false; } - if (!taskStringRegex.test(input)) { + const parsed = parseSourceTaskLine(input); + if (!parsed) { return false; } - const match = input.match(taskStringRegex); - if (match) { - const [, , status] = match; - if (isStatusMatch(status, ignoredStatusMarkers)) { - return false; - } + if (isStatusMatch(parsed.status, ignoredStatusMarkers)) { + return false; } return true; } @@ -17604,10 +18936,35 @@ var blockLinkRegexp = /\s\^([a-zA-Z0-9-]+)$/; function escapeRegExp2(input) { return input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } +function getTaskPriorityMatchValue(propertySchemaOption, properties) { + const priority = properties.get("priority"); + if (propertySchemaOption === "tasks" /* TasksPlugin */ && typeof (priority == null ? void 0 : priority.value) === "number") { + return getTasksPriorityValueFromWeight(priority.value); + } + if (propertySchemaOption === "dataview" /* Dataview */ && typeof (priority == null ? void 0 : priority.value) === "string") { + return priority.value.trim(); + } + return void 0; +} +function getPriorityColumnContextSchema(propertySchemaOption) { + return propertySchemaOption === "tasks" /* TasksPlugin */ || propertySchemaOption === "dataview" /* Dataview */ ? propertySchemaOption : void 0; +} +function getTaskPriorityMatchValues(rawLine) { + return { + ["tasks" /* TasksPlugin */]: getTaskPriorityMatchValue( + "tasks" /* TasksPlugin */, + getSchemaImpl("tasks" /* TasksPlugin */).parseProperties(rawLine) + ), + ["dataview" /* Dataview */]: getTaskPriorityMatchValue( + "dataview" /* Dataview */, + getSchemaImpl("dataview" /* Dataview */).parseProperties(rawLine) + ) + }; +} // src/ui/tasks/task_grouping.ts var DEFAULT_GROUP_BUCKET_ID = "__default__"; -function deriveGroupBuckets(tasks, source2, excludedTags = [], statusMarkerOrder = "", doneStatusMarkers = "") { +function deriveGroupBuckets(tasks, source2, excludedTags = [], statusMarkerOrder = "", doneStatusMarkers = "", groupDirection = "asc") { var _a5; if (source2.kind === "file") { const paths = [...new Set(tasks.map((task) => task.path))].sort( @@ -17624,13 +18981,14 @@ function deriveGroupBuckets(tasks, source2, excludedTags = [], statusMarkerOrder } ]; } - return paths.map((path) => ({ + const buckets = paths.map((path) => ({ id: createFileGroupBucketId(path), label: path, value: path, source: source2, isDefault: false })); + return applyGroupDirection(buckets, groupDirection); } if (source2.kind === "tag-prefix") { const prefix = normalizeTagPrefix(source2.prefix); @@ -17673,7 +19031,7 @@ function deriveGroupBuckets(tasks, source2, excludedTags = [], statusMarkerOrder source: { kind: "tag-prefix", prefix }, isDefault: true }); - return buckets; + return applyGroupDirection(buckets, groupDirection); } if (source2.kind === "property") { const valueMap = /* @__PURE__ */ new Map(); @@ -17715,7 +19073,7 @@ function deriveGroupBuckets(tasks, source2, excludedTags = [], statusMarkerOrder isDefault: true }); } - return buckets; + return applyGroupDirection(buckets, groupDirection); } return [ { @@ -17727,6 +19085,9 @@ function deriveGroupBuckets(tasks, source2, excludedTags = [], statusMarkerOrder } ]; } +function applyGroupDirection(buckets, groupDirection) { + return groupDirection === "desc" ? [...buckets].reverse() : buckets; +} function getTaskTagGroupValue(task, source2, excludedTags = []) { return resolveTaskGroupTag(task, normalizeTagPrefix(source2.prefix), createNormalizedTagSet(excludedTags)); } @@ -17930,8 +19291,11 @@ var columnDefinitionSchema = z.object({ id: z.string(), label: z.string(), color: z.string().optional(), - matchMode: z.enum(["name", "tags"]).default("name"), - matchTags: z.array(z.string()).default([]) + matchMode: z.enum(["name", "tags", "status", "priority"]).default("name"), + matchTags: z.array(z.string()).default([]), + matchStatus: z.string().optional(), + matchPriority: z.string().optional(), + matchPropertySchema: z.enum(["tasks" /* TasksPlugin */, "dataview" /* Dataview */]).optional() }); var manualOrderEntriesSchema = z.array(z.string()); var manualOrderCellSchema = z.record(z.string(), manualOrderEntriesSchema); @@ -17985,9 +19349,11 @@ var settingsObject = z.object({ groupSource: groupSourceSchema.default({ kind: "none" }).optional(), propertySchema: z.nativeEnum(PropertySchemaOption).catch("none" /* None */).optional(), propertyDisplay: z.nativeEnum(PropertyDisplayMode).catch("none" /* None */).optional(), + treatNestedTasksAsSubtasks: z.boolean().default(false).optional(), columnOrderMode: z.nativeEnum(ColumnOrderMode).catch("file" /* FileOrder */).optional(), sortProperty: z.string().nullable().default(null).optional(), sortDirection: z.enum(["asc", "desc"]).catch("asc").optional(), + groupDirection: z.enum(["asc", "desc"]).catch("asc").optional(), // Cell-local manual ordering: group bucket id -> column id -> `path::blockLink`. // Stored alongside display settings in the board's frontmatter (the plugin has // no separate data file), but kept as its own field so it is never conflated @@ -18024,9 +19390,11 @@ var defaultSettings = { groupSource: { kind: "none" }, propertySchema: "none" /* None */, propertyDisplay: "none" /* None */, + treatNestedTasksAsSubtasks: false, columnOrderMode: "file" /* FileOrder */, sortProperty: null, sortDirection: "asc", + groupDirection: "asc", manualOrder: {} }; var createSettingsStore = () => writable(defaultSettings); @@ -18059,7 +19427,10 @@ function createDefaultColumns(labels) { id: createColumnId(label, usedIds), label, matchMode: "name", - matchTags: [] + matchTags: [], + matchStatus: void 0, + matchPriority: void 0, + matchPropertySchema: void 0 })); } @@ -18085,33 +19456,36 @@ function stripTagFromRenderedContent(content, tag2) { } // src/ui/components/task.svelte -var root6 = from_html(``); -var root_14 = from_html(` `); -var root_23 = from_html(``); -var root_32 = from_html(``); -var root_42 = from_html(`
`); -var root_5 = from_html(``); -var root_6 = from_html(``); -var root_7 = from_html(`# `); -var root_8 = from_html(`
`); -var root_9 = from_html(`
 
`); -var root_10 = from_html(` `); -var root_11 = from_html(` `); -var root_122 = from_html(` `); -var root_132 = from_html(`
`); -var root_142 = from_html(` `); -var root_15 = from_html(` `, 1); -var root_16 = from_html(`
`); -var root_17 = from_html(``); -var root_18 = from_html(`
`); -var $$css6 = { +var root10 = from_html(``); +var root_17 = from_html(`
`); +var root_25 = from_html(`
`); +var root_33 = from_html(`
`); +var root_43 = from_html(``); +var root_52 = from_html(``); +var root_62 = from_html(``); +var root_72 = from_html(``); +var root_8 = from_html(` `, 1); +var root_9 = from_html(`
Subtask
`); +var root_10 = from_html(` `, 1); +var root_11 = from_html(`# `); +var root_122 = from_html(`
`); +var root_132 = from_html(`
 
`); +var root_142 = from_html(` `); +var root_152 = from_html(` `); +var root_162 = from_html(` `); +var root_172 = from_html(`
`); +var root_18 = from_html(` `); +var root_19 = from_html(`
`); +var root_20 = from_html(``); +var root_21 = from_html(`
`); +var $$css10 = { hash: "svelte-1fvsaoa", - code: '.task.svelte-1fvsaoa {--task-accent: var(--task-accent-color, var(--background-modifier-border-hover));--task-footer-line-height: 1.15;--task-footer-block-padding: 2px;position:relative;overflow:hidden;background:var(--background-primary);border-radius:var(--radius-s);border:var(--border-width) solid var(--background-modifier-border);cursor:grab;box-shadow:0 1px 2px rgba(0, 0, 0, 0.06);transition:border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;}.task.svelte-1fvsaoa::before {content:"";position:absolute;inset:0 auto 0 0;width:8px;background:var(--task-accent);}.task.svelte-1fvsaoa:hover {border-color:color-mix(in srgb, var(--text-muted) 45%, var(--background-modifier-border));box-shadow:0 8px 22px rgba(0, 0, 0, 0.08);transform:translateY(-1px);}.task.is-dragging.svelte-1fvsaoa {opacity:0.15;}.task.is-selected.svelte-1fvsaoa {border-color:var(--interactive-accent);background:color-mix(in srgb, var(--interactive-accent) 8%, var(--background-primary));}.task.svelte-1fvsaoa .task-row:where(.svelte-1fvsaoa) {padding:var(--size-4-2) var(--size-4-2) var(--size-4-2) calc(var(--size-4-2) + 8px);display:flex;gap:var(--size-2-3);align-items:flex-start;}.task.svelte-1fvsaoa .task-row:where(.svelte-1fvsaoa) .task-row-left:where(.svelte-1fvsaoa) {display:flex;align-items:center;justify-content:center;flex-shrink:0;width:18px;height:18px;margin-top:2px;}.task.svelte-1fvsaoa .task-row:where(.svelte-1fvsaoa) .task-row-content:where(.svelte-1fvsaoa) {flex:1;min-width:0;}.task.svelte-1fvsaoa .task-row:where(.svelte-1fvsaoa) .task-row-content:where(.svelte-1fvsaoa) textarea:where(.svelte-1fvsaoa) {cursor:text;background-color:var(--color-base-25);width:100%;}.task.svelte-1fvsaoa .task-row:where(.svelte-1fvsaoa) .task-row-content:where(.svelte-1fvsaoa) .content-preview:where(.svelte-1fvsaoa) {min-height:1.5rem;}.task.svelte-1fvsaoa .task-row:where(.svelte-1fvsaoa) .task-row-content:where(.svelte-1fvsaoa) .content-preview:where(.svelte-1fvsaoa):focus {box-shadow:0 0 0 3px var(--background-modifier-border-focus);}.task.svelte-1fvsaoa .task-row:where(.svelte-1fvsaoa) .task-row-right:where(.svelte-1fvsaoa) {display:flex;align-items:center;flex-shrink:0;margin-top:-4px;}.task.svelte-1fvsaoa .icon-button:where(.svelte-1fvsaoa) {display:flex;justify-content:center;align-items:center;width:22px;height:22px;padding:0;border:none;background:transparent;cursor:pointer;border-radius:var(--radius-s);transition:opacity 0.2s ease;box-shadow:none;}.task.svelte-1fvsaoa .icon-button:where(.svelte-1fvsaoa):hover, .task.svelte-1fvsaoa .icon-button:where(.svelte-1fvsaoa):active {background:transparent;box-shadow:none;}.task.svelte-1fvsaoa .icon-button:where(.svelte-1fvsaoa):focus-visible {outline:2px solid var(--background-modifier-border-focus);outline-offset:2px;}.task.svelte-1fvsaoa .icon-button.select-task:where(.svelte-1fvsaoa):hover svg {opacity:0.8 !important;color:var(--interactive-accent);}.task.svelte-1fvsaoa .icon-button.select-task.is-selected:where(.svelte-1fvsaoa) svg {color:var(--interactive-accent);}.task.svelte-1fvsaoa .icon-button.pin-marker:where(.svelte-1fvsaoa) svg {color:var(--interactive-accent);}.task.svelte-1fvsaoa .icon-button.pin-marker:where(.svelte-1fvsaoa):hover svg {opacity:1 !important;}.task.svelte-1fvsaoa .icon-button.usesStatusMarker:where(.svelte-1fvsaoa) {color:var(--text-normal);}.task.svelte-1fvsaoa .icon-button.usesStatusMarker:where(.svelte-1fvsaoa) .source-status-checkbox:where(.svelte-1fvsaoa), .task.svelte-1fvsaoa .icon-button.usesStatusMarker:where(.svelte-1fvsaoa) .status-text-marker:where(.svelte-1fvsaoa) {display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;min-width:18px;min-height:18px;margin:0 !important;padding:0 !important;pointer-events:none;line-height:1;}.task.svelte-1fvsaoa .icon-button.usesStatusMarker:where(.svelte-1fvsaoa) .status-text-marker:where(.svelte-1fvsaoa) {font-size:15px;}.task.svelte-1fvsaoa .drag-handle:where(.svelte-1fvsaoa) {display:flex;align-items:center;justify-content:center;width:22px;height:22px;cursor:grab;}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) {border-top:var(--border-width) solid var(--background-modifier-border);padding:var(--task-footer-block-padding) var(--size-4-2) var(--task-footer-block-padding) calc(var(--size-4-2) + 8px);font-size:var(--font-ui-smaller);line-height:var(--task-footer-line-height);display:flex;align-items:center;min-height:0;}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa) {display:inline-flex;align-items:center;justify-content:flex-start;gap:var(--size-2-1);width:auto;max-width:100%;padding:0;min-height:0;height:auto;border:none;background:transparent;cursor:pointer;text-align:left;box-shadow:none;transition:opacity 0.2s ease;border-radius:var(--radius-s);font:inherit;line-height:inherit;}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa):hover {background:transparent;box-shadow:none;}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa):hover svg {opacity:1 !important;color:var(--interactive-accent);}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa):hover .file-path:where(.svelte-1fvsaoa) {color:var(--interactive-accent);}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa):focus-visible {outline:2px solid var(--background-modifier-border-focus);outline-offset:2px;}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa) .file-path:where(.svelte-1fvsaoa) {margin:0;color:var(--text-muted);transition:color 0.2s ease;overflow-wrap:anywhere;white-space:normal;min-width:0;line-height:inherit;}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa) svg {width:1em;height:1em;}.task.svelte-1fvsaoa .task-tags:where(.svelte-1fvsaoa) {display:flex;flex-wrap:wrap;gap:var(--size-2-1);padding:0 var(--size-4-2) var(--size-4-2) calc(var(--size-4-2) + 8px);margin-top:calc(-1 * var(--size-2-2));}.task.svelte-1fvsaoa .task-tags:where(.svelte-1fvsaoa) span:where(.svelte-1fvsaoa) {background-color:var(--background-secondary);color:var(--text-muted);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);padding:1px 5px;font-size:var(--font-ui-smaller);line-height:1.1;display:inline-flex;align-items:center;transition:color 0.15s ease, border-color 0.15s ease;}.task.svelte-1fvsaoa .task-tags:where(.svelte-1fvsaoa) span:where(.svelte-1fvsaoa):hover {color:var(--text-normal);border-color:var(--text-muted);}.task.svelte-1fvsaoa .task-tags:where(.svelte-1fvsaoa) span:where(.svelte-1fvsaoa) .cm-formatting-hashtag {color:var(--text-accent) !important;font-weight:var(--font-medium);margin-right:1px;}.task.svelte-1fvsaoa .task-tags:where(.svelte-1fvsaoa) span:where(.svelte-1fvsaoa) .cm-hashtag-end {color:inherit !important;}.task.svelte-1fvsaoa .task-properties-debug:where(.svelte-1fvsaoa) {padding:var(--size-2-3) var(--size-4-2) var(--size-2-3) calc(var(--size-4-2) + 8px);border-top:var(--border-width) solid var(--background-modifier-border);background-color:var(--background-secondary-alt);font-size:var(--font-ui-smaller);overflow-x:auto;}.task.svelte-1fvsaoa .task-properties-debug:where(.svelte-1fvsaoa) pre:where(.svelte-1fvsaoa) {margin:0;}.task.svelte-1fvsaoa .task-properties:where(.svelte-1fvsaoa) {display:flex;flex-wrap:wrap;gap:var(--size-2-2);padding:var(--task-footer-block-padding) var(--size-4-2) var(--task-footer-block-padding) calc(var(--size-4-2) + 8px);border-top:var(--border-width) solid var(--background-modifier-border);font-size:var(--font-ui-smaller);line-height:var(--task-footer-line-height);}.task.svelte-1fvsaoa .task-date-properties:where(.svelte-1fvsaoa) {align-items:center;}.task.svelte-1fvsaoa .task-date-properties:where(.svelte-1fvsaoa) .edit-mode {flex-basis:100%;}.task.svelte-1fvsaoa .task-property:where(.svelte-1fvsaoa) {display:inline-flex;align-items:baseline;gap:var(--size-2-1);padding:0 var(--size-2-2);border-radius:var(--radius-s);background-color:var(--background-secondary-alt);line-height:inherit;}.task.svelte-1fvsaoa .task-property-label:where(.svelte-1fvsaoa) {color:var(--text-muted);text-transform:uppercase;font-size:var(--font-smallest);letter-spacing:0.02em;}.task.svelte-1fvsaoa .task-property.dataview-property:where(.svelte-1fvsaoa) .task-property-label:where(.svelte-1fvsaoa) {text-transform:none;letter-spacing:0;}.task.svelte-1fvsaoa .task-property-icon:where(.svelte-1fvsaoa) {font-size:inherit;line-height:1;}.task.svelte-1fvsaoa .task-property-value:where(.svelte-1fvsaoa) {color:var(--text-normal);}.task-row-content img {max-width:100%;max-height:160px;object-fit:contain;}.task-row-content code {white-space:pre-wrap;}.task-row-content .content-preview,\n.task-row-content .content-preview > ul,\n.task-row-content .content-preview > ul > li,\n.task-row-content .content-preview > ul > li > p {margin:0;}.task .task-row-content .content-preview > ul {padding-left:0 !important;margin:0 !important;list-style:none !important;}.task-row-content .content-preview .task-list-item {min-width:0;word-break:break-word;padding-left:0 !important;list-style-type:none !important;}.task-row-content input.task-nested-checkbox {pointer-events:none;}.task-row-content .content-preview .task-list-item > input[type="checkbox"].task-primary-checkbox {display:none !important;}.task-row-content .content-preview .task-list-item > *:not(input[type="checkbox"]) {min-width:0;}' + code: '.task.svelte-1fvsaoa {--task-accent: var(--task-accent-color, var(--background-modifier-border-hover));--task-content-line-height: 1.5rem;--task-footer-line-height: 1.15;--task-footer-block-padding: 2px;position:relative;overflow:hidden;background:var(--background-primary);border-radius:var(--radius-s);border:var(--border-width) solid var(--background-modifier-border);cursor:grab;box-shadow:0 1px 2px rgba(0, 0, 0, 0.06);transition:border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;}.task.svelte-1fvsaoa::before {content:"";position:absolute;inset:0 auto 0 0;width:8px;background:var(--task-accent);}.task.svelte-1fvsaoa:hover {border-color:color-mix(in srgb, var(--text-muted) 45%, var(--background-modifier-border));box-shadow:0 8px 22px rgba(0, 0, 0, 0.08);transform:translateY(-1px);}.task.is-dragging.svelte-1fvsaoa {opacity:0.15;}.task.is-selected.svelte-1fvsaoa {border-color:var(--interactive-accent);background:color-mix(in srgb, var(--interactive-accent) 8%, var(--background-primary));}.task.svelte-1fvsaoa .task-row-content:where(.svelte-1fvsaoa) {min-width:0;}.task.svelte-1fvsaoa .task-row-content:where(.svelte-1fvsaoa) textarea:where(.svelte-1fvsaoa) {cursor:text;background-color:var(--color-base-25);width:100%;}.task.svelte-1fvsaoa .task-row-content:where(.svelte-1fvsaoa) .content-preview:where(.svelte-1fvsaoa) {min-height:var(--task-content-line-height);}.task.svelte-1fvsaoa .task-row-content:where(.svelte-1fvsaoa) .content-preview:where(.svelte-1fvsaoa):focus {box-shadow:0 0 0 3px var(--background-modifier-border-focus);}.task.svelte-1fvsaoa .icon-button:where(.svelte-1fvsaoa) {display:flex;justify-content:center;align-items:center;width:20px;height:20px;padding:0;border:none;background:transparent;cursor:pointer;border-radius:var(--radius-s);transition:opacity 0.2s ease;box-shadow:none;overflow:visible;}.task.svelte-1fvsaoa .icon-button:where(.svelte-1fvsaoa):hover, .task.svelte-1fvsaoa .icon-button:where(.svelte-1fvsaoa):active {background:transparent;box-shadow:none;}.task.svelte-1fvsaoa .icon-button:where(.svelte-1fvsaoa):focus-visible {outline:2px solid var(--background-modifier-border-focus);outline-offset:2px;}.task.svelte-1fvsaoa .icon-button.select-task:where(.svelte-1fvsaoa):hover svg {opacity:0.8 !important;color:var(--interactive-accent);}.task.svelte-1fvsaoa .icon-button.select-task.is-selected:where(.svelte-1fvsaoa) svg {color:var(--interactive-accent);}.task.svelte-1fvsaoa .icon-button.pin-marker:where(.svelte-1fvsaoa) svg {color:var(--interactive-accent);}.task.svelte-1fvsaoa .icon-button.pin-marker:where(.svelte-1fvsaoa):hover svg {opacity:1 !important;}.task.svelte-1fvsaoa .icon-button.usesStatusMarker:where(.svelte-1fvsaoa) {color:var(--text-normal);}.task.svelte-1fvsaoa .drag-handle:where(.svelte-1fvsaoa) {display:flex;align-items:center;justify-content:center;width:22px;height:22px;cursor:grab;}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) {border-top:var(--border-width) solid var(--background-modifier-border);padding:var(--task-footer-block-padding) var(--size-4-2) var(--task-footer-block-padding) calc(var(--size-4-2) + 8px);font-size:var(--font-ui-smaller);line-height:var(--task-footer-line-height);display:flex;align-items:center;min-height:0;}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa) {display:inline-flex;align-items:center;justify-content:flex-start;gap:var(--size-2-1);width:auto;max-width:100%;padding:0;min-height:0;height:auto;border:none;background:transparent;cursor:pointer;text-align:left;box-shadow:none;transition:opacity 0.2s ease;border-radius:var(--radius-s);font:inherit;line-height:inherit;}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa):hover {background:transparent;box-shadow:none;}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa):hover svg {opacity:1 !important;color:var(--interactive-accent);}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa):hover .file-path:where(.svelte-1fvsaoa) {color:var(--interactive-accent);}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa):focus-visible {outline:2px solid var(--background-modifier-border-focus);outline-offset:2px;}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa) .file-path:where(.svelte-1fvsaoa) {margin:0;color:var(--text-muted);transition:color 0.2s ease;overflow-wrap:anywhere;white-space:normal;min-width:0;line-height:inherit;}.task.svelte-1fvsaoa .task-footer:where(.svelte-1fvsaoa) .go-to-file-button:where(.svelte-1fvsaoa) svg {width:1em;height:1em;}.task.svelte-1fvsaoa .task-tags:where(.svelte-1fvsaoa) {display:flex;flex-wrap:wrap;gap:var(--size-2-1);padding:0 var(--size-4-2) var(--size-4-2) calc(var(--size-4-2) + 8px);margin-top:calc(-1 * var(--size-2-2));}.task.svelte-1fvsaoa .task-tags:where(.svelte-1fvsaoa) span:where(.svelte-1fvsaoa) {background-color:var(--background-secondary);color:var(--text-muted);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);padding:1px 5px;font-size:var(--font-ui-smaller);line-height:1.1;display:inline-flex;align-items:center;transition:color 0.15s ease, border-color 0.15s ease;}.task.svelte-1fvsaoa .task-tags:where(.svelte-1fvsaoa) span:where(.svelte-1fvsaoa):hover {color:var(--text-normal);border-color:var(--text-muted);}.task.svelte-1fvsaoa .task-tags:where(.svelte-1fvsaoa) span:where(.svelte-1fvsaoa) .cm-formatting-hashtag {color:var(--text-accent) !important;font-weight:var(--font-medium);margin-right:1px;}.task.svelte-1fvsaoa .task-tags:where(.svelte-1fvsaoa) span:where(.svelte-1fvsaoa) .cm-hashtag-end {color:inherit !important;}.task.svelte-1fvsaoa .task-properties-debug:where(.svelte-1fvsaoa) {padding:var(--size-2-3) var(--size-4-2) var(--size-2-3) calc(var(--size-4-2) + 8px);border-top:var(--border-width) solid var(--background-modifier-border);background-color:var(--background-secondary-alt);font-size:var(--font-ui-smaller);overflow-x:auto;}.task.svelte-1fvsaoa .task-properties-debug:where(.svelte-1fvsaoa) pre:where(.svelte-1fvsaoa) {margin:0;}.task.svelte-1fvsaoa .task-properties:where(.svelte-1fvsaoa) {display:flex;flex-wrap:wrap;gap:var(--size-2-2);padding:var(--task-footer-block-padding) var(--size-4-2) var(--task-footer-block-padding) calc(var(--size-4-2) + 8px);border-top:var(--border-width) solid var(--background-modifier-border);font-size:var(--font-ui-smaller);line-height:var(--task-footer-line-height);}.task.svelte-1fvsaoa .task-date-properties:where(.svelte-1fvsaoa) {align-items:center;}.task.svelte-1fvsaoa .task-date-properties:where(.svelte-1fvsaoa) .edit-mode {flex-basis:100%;}.task.svelte-1fvsaoa .task-property:where(.svelte-1fvsaoa) {display:inline-flex;align-items:baseline;gap:var(--size-2-1);padding:0 var(--size-2-2);border-radius:var(--radius-s);background-color:var(--background-secondary-alt);line-height:inherit;}.task.svelte-1fvsaoa .task-property-label:where(.svelte-1fvsaoa) {color:var(--text-muted);text-transform:uppercase;font-size:var(--font-smallest);letter-spacing:0.02em;}.task.svelte-1fvsaoa .task-property.dataview-property:where(.svelte-1fvsaoa) .task-property-label:where(.svelte-1fvsaoa) {text-transform:none;letter-spacing:0;}.task.svelte-1fvsaoa .task-property-icon:where(.svelte-1fvsaoa) {font-size:inherit;line-height:1;}.task.svelte-1fvsaoa .task-property-value:where(.svelte-1fvsaoa) {color:var(--text-normal);}.task-row-content img {max-width:100%;max-height:160px;object-fit:contain;}.task-row-content code {white-space:pre-wrap;}.task-row-content .content-preview,\n.task-row-content .content-preview > ul,\n.task-row-content .content-preview > ul > li,\n.task-row-content .content-preview > ul > li > p {margin:0;}.task .task-row-content .content-preview > ul {padding-left:0 !important;margin:0 !important;list-style:none !important;}.task-row-content .content-preview .task-list-item {min-width:0;word-break:break-word;padding-left:0 !important;list-style-type:none !important;}.task-row-content input.task-nested-checkbox {pointer-events:none;}.task-row-content .content-preview .task-list-item > input[type="checkbox"].task-primary-checkbox {display:none !important;}.task-row-content .content-preview .task-list-item > *:not(input[type="checkbox"]) {min-width:0;}.task-progress-wrapper.svelte-1fvsaoa {display:flex;align-items:center;gap:var(--size-4-2);margin-top:var(--size-2-2);margin-bottom:var(--size-2-1);}.task-progress-wrapper.is-complete.svelte-1fvsaoa .task-progress-bar:where(.svelte-1fvsaoa) {background-color:hsl(140, 75%, 45%);background-image:linear-gradient(90deg, hsl(140, 75%, 40%) 0%, hsl(140, 75%, 50%) 100%);box-shadow:0 0 6px hsla(140, 75%, 45%, 0.3);}.task-progress-wrapper.is-complete.svelte-1fvsaoa .task-progress-text:where(.svelte-1fvsaoa) {color:hsl(140, 75%, 45%);font-weight:var(--font-bold);}.task-progress-bar-container.svelte-1fvsaoa {flex:1;height:6px;background-color:var(--background-modifier-border);border-radius:3px;overflow:hidden;box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.05);}.task-progress-bar.svelte-1fvsaoa {height:100%;background-color:var(--interactive-accent);background-image:linear-gradient(90deg, hsla(var(--accent-h, 210), var(--accent-s, 75%), calc(var(--accent-l, 50%) - 5%), 0.95) 0%, var(--interactive-accent) 100%);border-radius:3px;transition:width 0.4s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.3s ease, background-image 0.3s ease;box-shadow:0 1px 2px rgba(0, 0, 0, 0.1);}.task-progress-text.svelte-1fvsaoa {font-size:var(--font-ui-smaller);color:var(--text-muted);font-weight:var(--font-medium);white-space:nowrap;transition:color 0.3s ease;}.subtask-collapse-btn.svelte-1fvsaoa {background:transparent;border:none;box-shadow:none;padding:0;color:var(--text-muted);font-size:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;width:var(--task-line-marker-size, 20px);height:14px;line-height:1;flex-shrink:0;transition:color 0.15s ease;\n /* Shift to the left under the checkbox */margin-left:calc(-1 * (var(--task-line-marker-size, 20px) + var(--task-line-column-gap, var(--size-2-3))));margin-right:var(--task-line-column-gap, var(--size-2-3));}.subtask-collapse-btn.svelte-1fvsaoa:hover {color:var(--text-normal);background:transparent;}.add-subtask-container.svelte-1fvsaoa {padding:var(--size-2-2) var(--size-4-2) var(--size-2-2) calc(var(--size-4-2) + 8px);}.add-subtask-btn.svelte-1fvsaoa {display:inline-flex;align-items:center;gap:var(--size-2-1);align-self:flex-start;cursor:pointer;border:0;border-radius:var(--radius-s);box-shadow:none;margin:0;min-height:22px;padding:0;background:transparent;background-color:transparent;color:var(--text-accent);font-size:var(--font-ui-smaller);font-weight:var(--font-medium);line-height:1.2;}.add-subtask-btn.svelte-1fvsaoa span:where(.svelte-1fvsaoa) {display:inline-flex;align-items:center;justify-content:center;font-size:var(--font-ui-small);line-height:1;}.add-subtask-btn.svelte-1fvsaoa:hover {color:var(--text-accent-hover);background:transparent;background-color:transparent;}.add-subtask-btn.svelte-1fvsaoa:active {color:var(--text-accent-hover);background:transparent;background-color:transparent;}' }; function Task2($$anchor, $$props) { if (new.target) return createClassComponent({ component: Task2, ...$$anchor }); push($$props, false); - append_styles($$anchor, $$css6); + append_styles($$anchor, $$css10); const displayStatusIsCustom = mutable_source(); const excludedTagNames = mutable_source(); const visibleTags = mutable_source(); @@ -18121,6 +19495,10 @@ function Task2($$anchor, $$props) { const dateDisplayProperties = mutable_source(); const nonDateDisplayProperties = mutable_source(); const dateProperties = mutable_source(); + const visibleSubtasks = mutable_source(); + const totalSubtasksCount = mutable_source(); + const completedSubtasksCount = mutable_source(); + const completionPercentage = mutable_source(); let app = prop($$props, "app", 12); let task = prop($$props, "task", 12); let taskActions = prop($$props, "taskActions", 12); @@ -18145,6 +19523,7 @@ function Task2($$anchor, $$props) { let showDragHandle = prop($$props, "showDragHandle", 12, false); let onUnpin = prop($$props, "onUnpin", 12, () => { }); + let treatNestedTasksAsSubtasks = prop($$props, "treatNestedTasksAsSubtasks", 12, false); function handleContentBlur() { var _a5; set(isEditing, false); @@ -18166,8 +19545,9 @@ function Task2($$anchor, $$props) { } let isEditing = mutable_source(false); let isDragging = mutable_source(false); - function shouldRenderStatusAsText(status) { - return status.length > 1 || /\p{Extended_Pictographic}/u.test(status); + let isSubtasksCollapsed = mutable_source(false); + function toggleSubtasksCollapse() { + set(isSubtasksCollapsed, !get(isSubtasksCollapsed)); } function handleDragStart(e) { handleContentBlur(); @@ -18288,9 +19668,9 @@ function Task2($$anchor, $$props) { markdownComponent.unload(); } get(previewContainerEl).empty(); - markdownComponent = new import_obsidian5.Component(); + markdownComponent = new import_obsidian6.Component(); const contentToRender = renderTaskMarkdown(); - await import_obsidian5.MarkdownRenderer.render(app(), contentToRender, get(previewContainerEl), task().path, markdownComponent); + await import_obsidian6.MarkdownRenderer.render(app(), contentToRender, get(previewContainerEl), task().path, markdownComponent); setupLinkHandlers(); postProcessRenderedContent(selectionMode); } @@ -18304,7 +19684,7 @@ function Task2($$anchor, $$props) { e.stopPropagation(); const linkTarget = anchorEl.getAttribute("data-href"); if (linkTarget && app()) { - app().workspace.openLinkText(linkTarget, task().path, import_obsidian5.Keymap.isModEvent(e)); + app().workspace.openLinkText(linkTarget, task().path, import_obsidian6.Keymap.isModEvent(e)); } }); anchorEl.addEventListener("mouseover", (e) => { @@ -18356,7 +19736,7 @@ function Task2($$anchor, $$props) { primaryCheckbox.disabled = false; primaryCheckbox.style.removeProperty("visibility"); primaryCheckbox.removeAttribute("aria-hidden"); - primaryCheckbox.setAttribute("aria-label", task().done ? "Mark as incomplete" : "Mark as complete"); + primaryCheckbox.setAttribute("aria-label", "Advance status"); primaryCheckbox.addEventListener("click", handlePrimaryCheckboxClick); } } @@ -18428,6 +19808,18 @@ function Task2($$anchor, $$props) { var _a5, _b3; set(dateProperties, new Map(Array.from((_b3 = (_a5 = task().properties) == null ? void 0 : _a5.entries()) != null ? _b3 : []).filter(([key2]) => editableDatePropertyKeys.has(key2)))); }); + legacy_pre_effect(() => (getVisibleSourceTaskDescendants, deep_read_state(task())), () => { + set(visibleSubtasks, getVisibleSourceTaskDescendants(task().sourceChildren)); + }); + legacy_pre_effect(() => get(visibleSubtasks), () => { + set(totalSubtasksCount, get(visibleSubtasks).length); + }); + legacy_pre_effect(() => (get(visibleSubtasks), deep_read_state(task())), () => { + set(completedSubtasksCount, get(visibleSubtasks).filter((node) => task().isSourceTaskStatusDone(node.status)).length); + }); + legacy_pre_effect(() => (get(totalSubtasksCount), get(completedSubtasksCount)), () => { + set(completionPercentage, get(totalSubtasksCount) > 0 ? Math.round(get(completedSubtasksCount) / get(totalSubtasksCount) * 100) : 0); + }); legacy_pre_effect_reset(); var $$exports = { get app() { @@ -18584,321 +19976,390 @@ function Task2($$anchor, $$props) { onUnpin($$value); flushSync(); }, + get treatNestedTasksAsSubtasks() { + return treatNestedTasksAsSubtasks(); + }, + set treatNestedTasksAsSubtasks($$value) { + treatNestedTasksAsSubtasks($$value); + flushSync(); + }, $set: update_legacy_props, $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) }; init(); - var div = root_18(); + var div = root_21(); let classes; let styles; - var div_1 = child(div); - var div_2 = child(div_1); - var node = child(div_2); - { - var consequent = ($$anchor2) => { - var button = root6(); - let classes_1; - var node_1 = child(button); + var node_1 = child(div); + TaskLineRow(node_1, { + variant: "card", + hasActions: true, + children: ($$anchor2, $$slotProps) => { + var div_1 = root_33(); + var node_2 = child(div_1); { - let $0 = derived_safe_equal(() => isSelected() ? "lucide-check-circle" : "lucide-circle"); - let $1 = derived_safe_equal(() => isSelected() ? 1 : 0.5); - Icon(node_1, { - get name() { - return get($0); - }, - size: 18, - get opacity() { - return get($1); - } - }); - } - reset(button); - template_effect(() => { - classes_1 = set_class(button, 1, "icon-button select-task svelte-1fvsaoa", null, classes_1, { "is-selected": isSelected() }); - set_attribute2(button, "aria-label", isSelected() ? "Deselect for bulk actions" : "Select for bulk actions"); - set_attribute2(button, "aria-checked", isSelected()); - set_attribute2(button, "title", isSelected() ? "Deselect for bulk actions" : "Select for bulk actions"); - }); - event("click", button, function(...$$args) { - var _a5; - (_a5 = onToggleSelection()) == null ? void 0 : _a5.apply(this, $$args); - }); - event("keydown", button, (e) => { - if (e.key === "Enter" || e.key === " ") { - e.preventDefault(); - onToggleSelection()(); - } - }); - append($$anchor2, button); - }; - var alternate_2 = ($$anchor2) => { - var button_1 = root6(); - let classes_2; - var node_2 = child(button_1); - { - var consequent_2 = ($$anchor3) => { - var fragment = comment(); - var node_3 = first_child(fragment); - { - var consequent_1 = ($$anchor4) => { - var span = root_14(); - var text2 = child(span, true); - reset(span); - template_effect(() => set_text(text2, (deep_read_state(task()), untrack(() => task().displayStatus)))); - append($$anchor4, span); - }; - var d = user_derived(() => (deep_read_state(task()), untrack(() => shouldRenderStatusAsText(task().displayStatus)))); - var alternate = ($$anchor4) => { - var span_1 = root_23(); - template_effect(() => set_attribute2(span_1, "data-task", (deep_read_state(task()), untrack(() => task().displayStatus)))); - append($$anchor4, span_1); - }; - if_block(node_3, ($$render) => { - if (get(d)) $$render(consequent_1); - else $$render(alternate, -1); - }); - } - append($$anchor3, fragment); + var consequent = ($$anchor3) => { + var textarea = root10(); + remove_textarea_child(textarea); + let classes_1; + bind_this(textarea, ($$value) => set(textAreaEl, $$value), () => get(textAreaEl)); + template_effect( + ($0) => { + set_value(textarea, $0); + classes_1 = set_class(textarea, 1, "svelte-1fvsaoa", null, classes_1, { editing: get(isEditing) }); + }, + [ + () => (deep_read_state(task()), untrack(() => task().content.replaceAll("
", "\n"))) + ] + ); + event("keypress", textarea, handleKeypress); + event("blur", textarea, handleContentBlur); + event("input", textarea, onInput); + append($$anchor3, textarea); }; - var alternate_1 = ($$anchor3) => { - { - let $0 = derived_safe_equal(() => (deep_read_state(task()), untrack(() => task().done ? "lucide-check-square" : "lucide-square"))); - let $1 = derived_safe_equal(() => (deep_read_state(task()), untrack(() => task().done ? 1 : 0.5))); - Icon($$anchor3, { - get name() { - return get($0); - }, - size: 18, - get opacity() { - return get($1); - } - }); - } + var alternate = ($$anchor3) => { + var div_2 = root_17(); + bind_this(div_2, ($$value) => set(previewContainerEl, $$value), () => get(previewContainerEl)); + event("mouseup", div_2, handleFocus); + event("keypress", div_2, handleOpenKeypress); + append($$anchor3, div_2); }; if_block(node_2, ($$render) => { - if (get(displayStatusIsCustom)) $$render(consequent_2); - else $$render(alternate_1, -1); + if (get(isEditing)) $$render(consequent); + else $$render(alternate, -1); }); } - reset(button_1); - template_effect(() => { - classes_2 = set_class(button_1, 1, "icon-button toggle-done-task svelte-1fvsaoa", null, classes_2, { - "is-done": task().done, - usesStatusMarker: get(displayStatusIsCustom), - "markdown-rendered": get(displayStatusIsCustom), - "markdown-preview-view": get(displayStatusIsCustom), - "task-list-item": get(displayStatusIsCustom), - "is-checked": get(displayStatusIsCustom) - }); - set_attribute2(button_1, "data-task", (get(displayStatusIsCustom), deep_read_state(task()), untrack(() => get(displayStatusIsCustom) ? task().displayStatus : void 0))); - set_attribute2(button_1, "aria-label", (deep_read_state(task()), untrack(() => task().done ? "Mark as incomplete" : "Mark as complete"))); - set_attribute2(button_1, "aria-checked", (deep_read_state(task()), untrack(() => task().done))); - set_attribute2(button_1, "title", (deep_read_state(task()), untrack(() => task().done ? "Mark as incomplete" : "Mark as complete"))); - }); - event("click", button_1, () => void taskActions().toggleDone(task().id)); - event("keydown", button_1, (e) => { - if (e.key === "Enter" || e.key === " ") { - e.preventDefault(); - void taskActions().toggleDone(task().id); - } - }); - append($$anchor2, button_1); - }; - if_block(node, ($$render) => { - if (isSelectionMode()) $$render(consequent); - else $$render(alternate_2, -1); - }); - } - reset(div_2); - var div_3 = sibling(div_2, 2); - var node_4 = child(div_3); - { - var consequent_3 = ($$anchor2) => { - var textarea = root_32(); - remove_textarea_child(textarea); - let classes_3; - bind_this(textarea, ($$value) => set(textAreaEl, $$value), () => get(textAreaEl)); - template_effect( - ($0) => { - set_value(textarea, $0); - classes_3 = set_class(textarea, 1, "svelte-1fvsaoa", null, classes_3, { editing: get(isEditing) }); - }, - [ - () => (deep_read_state(task()), untrack(() => task().content.replaceAll("
", "\n"))) - ] - ); - event("keypress", textarea, handleKeypress); - event("blur", textarea, handleContentBlur); - event("input", textarea, onInput); - append($$anchor2, textarea); - }; - var alternate_3 = ($$anchor2) => { - var div_4 = root_42(); - bind_this(div_4, ($$value) => set(previewContainerEl, $$value), () => get(previewContainerEl)); - event("mouseup", div_4, handleFocus); - event("keypress", div_4, handleOpenKeypress); - append($$anchor2, div_4); - }; - if_block(node_4, ($$render) => { - if (get(isEditing)) $$render(consequent_3); - else $$render(alternate_3, -1); - }); - } - reset(div_3); - var div_5 = sibling(div_3, 2); - var node_5 = child(div_5); - { - var consequent_4 = ($$anchor2) => { - var button_2 = root_5(); - var node_6 = child(button_2); - Icon(node_6, { name: "lucide-pin", size: 16, opacity: 0.9 }); - reset(button_2); - event("click", button_2, stopPropagation(function(...$$args) { - var _a5; - (_a5 = onUnpin()) == null ? void 0 : _a5.apply(this, $$args); - })); - event("keydown", button_2, (e) => { - if (e.key === "Enter" || e.key === " ") { - e.preventDefault(); - e.stopPropagation(); - onUnpin()(); - } - }); - append($$anchor2, button_2); - }; - if_block(node_5, ($$render) => { - if (isManualOrder() && isPinned()) $$render(consequent_4); - }); - } - var node_7 = sibling(node_5, 2); - { - var consequent_5 = ($$anchor2) => { - var span_2 = root_6(); - var node_8 = child(span_2); - Icon(node_8, { name: "lucide-grip-vertical", size: 16, opacity: 0.5 }); - reset(span_2); - append($$anchor2, span_2); - }; - if_block(node_7, ($$render) => { - if (isManualOrder() && showDragHandle()) $$render(consequent_5); - }); - } - var node_9 = sibling(node_7, 2); - Task_menu(node_9, { - get task() { - return task(); - }, - get taskActions() { - return taskActions(); - }, - get columnTagTableStore() { - return columnTagTableStore(); - }, - get doneColumnName() { - return doneColumnName(); - } - }); - reset(div_5); - reset(div_1); - var node_10 = sibling(div_1, 2); - { - var consequent_6 = ($$anchor2) => { - var div_6 = root_8(); - each(div_6, 5, () => get(visibleTags), index, ($$anchor3, tag2) => { - var span_3 = root_7(); - var span_4 = sibling(child(span_3)); - var text_1 = child(span_4, true); - reset(span_4); - reset(span_3); - template_effect(() => set_text(text_1, get(tag2))); - append($$anchor3, span_3); - }); - reset(div_6); - append($$anchor2, div_6); - }; - if_block(node_10, ($$render) => { - if (get(shouldconsolidateTags)) $$render(consequent_6); - }); - } - var node_11 = sibling(node_10, 2); - { - var consequent_7 = ($$anchor2) => { - var div_7 = root_9(); - var pre = child(div_7); - var code = child(pre); - var text_2 = child(code, true); - reset(code); - reset(pre); - reset(div_7); - template_effect(($0) => set_text(text_2, $0), [ - () => (deep_read_state(task()), untrack(() => JSON.stringify(Array.from(task().properties.entries()), null, 2))) - ]); - append($$anchor2, div_7); - }; - var consequent_10 = ($$anchor2) => { - var fragment_2 = comment(); - var node_12 = first_child(fragment_2); + var node_3 = sibling(node_2, 2); { - var consequent_9 = ($$anchor3) => { - var div_8 = root_132(); - each(div_8, 5, () => get(nonDateDisplayProperties), (prop2) => prop2.key, ($$anchor4, prop2) => { - var span_5 = root_122(); - var node_13 = child(span_5); + var consequent_1 = ($$anchor3) => { + var div_3 = root_25(); + let classes_2; + var span = child(div_3); + let classes_3; + var text2 = child(span, true); + reset(span); + var div_4 = sibling(span, 2); + var div_5 = child(div_4); + reset(div_4); + var span_1 = sibling(div_4, 2); + var text_1 = child(span_1); + reset(span_1); + reset(div_3); + template_effect(() => { + var _a5, _b3, _c2, _d; + classes_2 = set_class(div_3, 1, "task-progress-wrapper svelte-1fvsaoa", null, classes_2, { "is-complete": get(completionPercentage) === 100 }); + classes_3 = set_class(span, 1, "subtask-collapse-btn svelte-1fvsaoa", null, classes_3, { collapsed: get(isSubtasksCollapsed) }); + set_attribute2(span, "aria-label", get(isSubtasksCollapsed) ? "Expand subtasks" : "Collapse subtasks"); + set_text(text2, get(isSubtasksCollapsed) ? "\u25B6" : "\u25BC"); + set_style(div_5, `width: ${(_a5 = get(completionPercentage)) != null ? _a5 : ""}%`); + set_text(text_1, `${(_b3 = get(completedSubtasksCount)) != null ? _b3 : ""}/${(_c2 = get(totalSubtasksCount)) != null ? _c2 : ""} (${(_d = get(completionPercentage)) != null ? _d : ""}%)`); + }); + event("click", span, stopPropagation(toggleSubtasksCollapse)); + event("keydown", span, stopPropagation((e) => { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + toggleSubtasksCollapse(); + } + })); + append($$anchor3, div_3); + }; + if_block(node_3, ($$render) => { + if (treatNestedTasksAsSubtasks() && get(totalSubtasksCount) > 0) $$render(consequent_1); + }); + } + reset(div_1); + append($$anchor2, div_1); + }, + $$slots: { + default: true, + marker: ($$anchor2, $$slotProps) => { + var fragment = comment(); + var node_4 = first_child(fragment); + { + var consequent_2 = ($$anchor3) => { + var button = root_43(); + let classes_4; + var node_5 = child(button); { - var consequent_8 = ($$anchor5) => { - var span_6 = root_10(); - var text_3 = child(span_6, true); - reset(span_6); - template_effect(() => { - set_attribute2(span_6, "title", (get(prop2), untrack(() => get(prop2).label))); - set_attribute2(span_6, "aria-label", (get(prop2), untrack(() => get(prop2).label))); - set_text(text_3, (get(prop2), untrack(() => get(prop2).icon))); - }); - append($$anchor5, span_6); - }; - var alternate_4 = ($$anchor5) => { - var span_7 = root_11(); - var text_4 = child(span_7, true); - reset(span_7); - template_effect(() => set_text(text_4, (get(prop2), untrack(() => get(prop2).label)))); - append($$anchor5, span_7); - }; - if_block(node_13, ($$render) => { - if (get(prop2), untrack(() => get(prop2).icon)) $$render(consequent_8); - else $$render(alternate_4, -1); + let $0 = derived_safe_equal(() => isSelected() ? "lucide-check-circle" : "lucide-circle"); + let $1 = derived_safe_equal(() => isSelected() ? 1 : 0.5); + Icon(node_5, { + get name() { + return get($0); + }, + size: 18, + get opacity() { + return get($1); + } }); } - var span_8 = sibling(node_13, 2); - var text_5 = child(span_8, true); - reset(span_8); - reset(span_5); - template_effect(() => set_text(text_5, (get(prop2), untrack(() => get(prop2).value)))); - append($$anchor4, span_5); + reset(button); + template_effect(() => { + classes_4 = set_class(button, 1, "icon-button select-task svelte-1fvsaoa", null, classes_4, { "is-selected": isSelected() }); + set_attribute2(button, "aria-label", isSelected() ? "Deselect for bulk actions" : "Select for bulk actions"); + set_attribute2(button, "aria-checked", isSelected()); + }); + event("click", button, function(...$$args) { + var _a5; + (_a5 = onToggleSelection()) == null ? void 0 : _a5.apply(this, $$args); + }); + event("keydown", button, (e) => { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + onToggleSelection()(); + } + }); + append($$anchor3, button); + }; + var alternate_1 = ($$anchor3) => { + var button_1 = root_52(); + let classes_5; + var node_6 = child(button_1); + TaskStatusMarker(node_6, { + get status() { + return deep_read_state(task()), untrack(() => task().displayStatus); + }, + get isDone() { + return deep_read_state(task()), untrack(() => task().done); + }, + size: 16 + }); + reset(button_1); + template_effect(() => { + classes_5 = set_class(button_1, 1, "icon-button toggle-done-task svelte-1fvsaoa", null, classes_5, { + "is-done": task().done, + usesStatusMarker: get(displayStatusIsCustom) + }); + set_attribute2(button_1, "aria-checked", (deep_read_state(task()), untrack(() => task().done))); + }); + event("click", button_1, () => void taskActions().toggleDone(task().id)); + event("keydown", button_1, (e) => { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + void taskActions().toggleDone(task().id); + } + }); + append($$anchor3, button_1); + }; + if_block(node_4, ($$render) => { + if (isSelectionMode()) $$render(consequent_2); + else $$render(alternate_1, -1); + }); + } + append($$anchor2, fragment); + }, + actions: ($$anchor2, $$slotProps) => { + var fragment_1 = root_8(); + var node_7 = first_child(fragment_1); + { + var consequent_3 = ($$anchor3) => { + var button_2 = root_62(); + var node_8 = child(button_2); + Icon(node_8, { name: "lucide-pin", size: 16, opacity: 0.9 }); + reset(button_2); + event("click", button_2, stopPropagation(function(...$$args) { + var _a5; + (_a5 = onUnpin()) == null ? void 0 : _a5.apply(this, $$args); + })); + event("keydown", button_2, (e) => { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + e.stopPropagation(); + onUnpin()(); + } + }); + append($$anchor3, button_2); + }; + if_block(node_7, ($$render) => { + if (isManualOrder() && isPinned()) $$render(consequent_3); + }); + } + var node_9 = sibling(node_7, 2); + { + var consequent_4 = ($$anchor3) => { + var span_2 = root_72(); + var node_10 = child(span_2); + Icon(node_10, { name: "lucide-grip-vertical", size: 16, opacity: 0.5 }); + reset(span_2); + append($$anchor3, span_2); + }; + if_block(node_9, ($$render) => { + if (isManualOrder() && showDragHandle()) $$render(consequent_4); + }); + } + var node_11 = sibling(node_9, 2); + Task_menu(node_11, { + get task() { + return task(); + }, + get taskActions() { + return taskActions(); + }, + get columnTagTableStore() { + return columnTagTableStore(); + }, + get doneColumnName() { + return doneColumnName(); + } + }); + append($$anchor2, fragment_1); + } + } + }); + var node_12 = sibling(node_1, 2); + { + var consequent_7 = ($$anchor2) => { + var fragment_2 = root_10(); + var node_13 = first_child(fragment_2); + { + var consequent_5 = ($$anchor3) => { + TaskSourceRows($$anchor3, { + get app() { + return app(); + }, + get task() { + return task(); + }, + get taskActions() { + return taskActions(); + }, + get nodes() { + return deep_read_state(task()), untrack(() => task().sourceChildren); + }, + get isSelectionMode() { + return isSelectionMode(); + }, + depth: 1 }); - reset(div_8); - append($$anchor3, div_8); }; - if_block(node_12, ($$render) => { - if (get(nonDateDisplayProperties), untrack(() => get(nonDateDisplayProperties).length > 0)) $$render(consequent_9); + if_block(node_13, ($$render) => { + if (deep_read_state(task()), untrack(() => task().sourceChildren.length > 0)) $$render(consequent_5); + }); + } + var node_14 = sibling(node_13, 2); + { + var consequent_6 = ($$anchor3) => { + var div_6 = root_9(); + var div_7 = child(div_6); + reset(div_6); + event("click", div_7, stopPropagation(() => void taskActions().addSourceBlockRow(task().id, task().rowIndex, "child", "task"))); + event("keydown", div_7, stopPropagation((e) => { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + void taskActions().addSourceBlockRow(task().id, task().rowIndex, "child", "task"); + } + })); + append($$anchor3, div_6); + }; + if_block(node_14, ($$render) => { + if (treatNestedTasksAsSubtasks()) $$render(consequent_6); }); } append($$anchor2, fragment_2); }; - if_block(node_11, ($$render) => { - if (deep_read_state(propertyDisplay()), deep_read_state(PropertyDisplayMode), deep_read_state(task()), untrack(() => propertyDisplay() === "debug" /* Debug */ && task().properties && task().properties.size > 0)) $$render(consequent_7); - else if (deep_read_state(propertyDisplay()), deep_read_state(PropertyDisplayMode), deep_read_state(task()), untrack(() => propertyDisplay() === "pretty" /* Pretty */ && task().properties)) $$render(consequent_10, 1); + if_block(node_12, ($$render) => { + if (!get(isSubtasksCollapsed)) $$render(consequent_7); }); } - var node_14 = sibling(node_11, 2); + var node_15 = sibling(node_12, 2); { - var consequent_13 = ($$anchor2) => { - var div_9 = root_16(); - var node_15 = child(div_9); + var consequent_8 = ($$anchor2) => { + var div_8 = root_122(); + each(div_8, 5, () => get(visibleTags), index, ($$anchor3, tag2) => { + var span_3 = root_11(); + var span_4 = sibling(child(span_3)); + var text_2 = child(span_4, true); + reset(span_4); + reset(span_3); + template_effect(() => set_text(text_2, get(tag2))); + append($$anchor3, span_3); + }); + reset(div_8); + append($$anchor2, div_8); + }; + if_block(node_15, ($$render) => { + if (get(shouldconsolidateTags)) $$render(consequent_8); + }); + } + var node_16 = sibling(node_15, 2); + { + var consequent_9 = ($$anchor2) => { + var div_9 = root_132(); + var pre = child(div_9); + var code = child(pre); + var text_3 = child(code, true); + reset(code); + reset(pre); + reset(div_9); + template_effect(($0) => set_text(text_3, $0), [ + () => (deep_read_state(task()), untrack(() => JSON.stringify(Array.from(task().properties.entries()), null, 2))) + ]); + append($$anchor2, div_9); + }; + var consequent_12 = ($$anchor2) => { + var fragment_4 = comment(); + var node_17 = first_child(fragment_4); { - var consequent_12 = ($$anchor3) => { - var fragment_3 = root_15(); - var node_16 = first_child(fragment_3); - TaskDateFields(node_16, { + var consequent_11 = ($$anchor3) => { + var div_10 = root_172(); + each(div_10, 5, () => get(nonDateDisplayProperties), (prop2) => prop2.key, ($$anchor4, prop2) => { + var span_5 = root_162(); + var node_18 = child(span_5); + { + var consequent_10 = ($$anchor5) => { + var span_6 = root_142(); + var text_4 = child(span_6, true); + reset(span_6); + template_effect(() => { + set_attribute2(span_6, "title", (get(prop2), untrack(() => get(prop2).label))); + set_attribute2(span_6, "aria-label", (get(prop2), untrack(() => get(prop2).label))); + set_text(text_4, (get(prop2), untrack(() => get(prop2).icon))); + }); + append($$anchor5, span_6); + }; + var alternate_2 = ($$anchor5) => { + var span_7 = root_152(); + var text_5 = child(span_7, true); + reset(span_7); + template_effect(() => set_text(text_5, (get(prop2), untrack(() => get(prop2).label)))); + append($$anchor5, span_7); + }; + if_block(node_18, ($$render) => { + if (get(prop2), untrack(() => get(prop2).icon)) $$render(consequent_10); + else $$render(alternate_2, -1); + }); + } + var span_8 = sibling(node_18, 2); + var text_6 = child(span_8, true); + reset(span_8); + reset(span_5); + template_effect(() => set_text(text_6, (get(prop2), untrack(() => get(prop2).value)))); + append($$anchor4, span_5); + }); + reset(div_10); + append($$anchor3, div_10); + }; + if_block(node_17, ($$render) => { + if (get(nonDateDisplayProperties), untrack(() => get(nonDateDisplayProperties).length > 0)) $$render(consequent_11); + }); + } + append($$anchor2, fragment_4); + }; + if_block(node_16, ($$render) => { + if (deep_read_state(propertyDisplay()), deep_read_state(PropertyDisplayMode), deep_read_state(task()), untrack(() => propertyDisplay() === "debug" /* Debug */ && task().properties && task().properties.size > 0)) $$render(consequent_9); + else if (deep_read_state(propertyDisplay()), deep_read_state(PropertyDisplayMode), deep_read_state(task()), untrack(() => propertyDisplay() === "pretty" /* Pretty */ && task().properties)) $$render(consequent_12, 1); + }); + } + var node_19 = sibling(node_16, 2); + { + var consequent_15 = ($$anchor2) => { + var div_11 = root_19(); + var node_20 = child(div_11); + { + var consequent_14 = ($$anchor3) => { + var fragment_5 = root_10(); + var node_21 = first_child(fragment_5); + TaskDateFields(node_21, { get task() { return task(); }, @@ -18919,50 +20380,50 @@ function Task2($$anchor, $$props) { }, $$legacy: true }); - var node_17 = sibling(node_16, 2); - each(node_17, 1, () => get(dateDisplayProperties), (prop2) => prop2.key, ($$anchor4, prop2) => { - var span_9 = root_142(); - let classes_4; - var node_18 = child(span_9); + var node_22 = sibling(node_21, 2); + each(node_22, 1, () => get(dateDisplayProperties), (prop2) => prop2.key, ($$anchor4, prop2) => { + var span_9 = root_18(); + let classes_6; + var node_23 = child(span_9); { - var consequent_11 = ($$anchor5) => { - var span_10 = root_10(); - var text_6 = child(span_10, true); + var consequent_13 = ($$anchor5) => { + var span_10 = root_142(); + var text_7 = child(span_10, true); reset(span_10); template_effect(() => { set_attribute2(span_10, "title", (get(prop2), untrack(() => get(prop2).label))); set_attribute2(span_10, "aria-label", (get(prop2), untrack(() => get(prop2).label))); - set_text(text_6, (get(prop2), untrack(() => get(prop2).icon))); + set_text(text_7, (get(prop2), untrack(() => get(prop2).icon))); }); append($$anchor5, span_10); }; - var alternate_5 = ($$anchor5) => { - var span_11 = root_11(); - var text_7 = child(span_11, true); + var alternate_3 = ($$anchor5) => { + var span_11 = root_152(); + var text_8 = child(span_11, true); reset(span_11); - template_effect(() => set_text(text_7, (get(prop2), untrack(() => get(prop2).label)))); + template_effect(() => set_text(text_8, (get(prop2), untrack(() => get(prop2).label)))); append($$anchor5, span_11); }; - if_block(node_18, ($$render) => { - if (get(prop2), untrack(() => get(prop2).icon)) $$render(consequent_11); - else $$render(alternate_5, -1); + if_block(node_23, ($$render) => { + if (get(prop2), untrack(() => get(prop2).icon)) $$render(consequent_13); + else $$render(alternate_3, -1); }); } - var span_12 = sibling(node_18, 2); - var text_8 = child(span_12, true); + var span_12 = sibling(node_23, 2); + var text_9 = child(span_12, true); reset(span_12); reset(span_9); template_effect(() => { - classes_4 = set_class(span_9, 1, "task-property svelte-1fvsaoa", null, classes_4, { + classes_6 = set_class(span_9, 1, "task-property svelte-1fvsaoa", null, classes_6, { "dataview-property": propertySchemaOption() === "dataview" /* Dataview */ }); - set_text(text_8, (get(prop2), untrack(() => get(prop2).value))); + set_text(text_9, (get(prop2), untrack(() => get(prop2).value))); }); append($$anchor4, span_9); }); - append($$anchor3, fragment_3); + append($$anchor3, fragment_5); }; - var alternate_6 = ($$anchor3) => { + var alternate_4 = ($$anchor3) => { TaskDateFields($$anchor3, { get task() { return task(); @@ -18985,31 +20446,31 @@ function Task2($$anchor, $$props) { $$legacy: true }); }; - if_block(node_15, ($$render) => { - if (!get(isEditingDates)) $$render(consequent_12); - else $$render(alternate_6, -1); + if_block(node_20, ($$render) => { + if (!get(isEditingDates)) $$render(consequent_14); + else $$render(alternate_4, -1); }); } - reset(div_9); - append($$anchor2, div_9); + reset(div_11); + append($$anchor2, div_11); }; - if_block(node_14, ($$render) => { - if (get(dateEditingEnabled)) $$render(consequent_13); + if_block(node_19, ($$render) => { + if (get(dateEditingEnabled)) $$render(consequent_15); }); } - var node_19 = sibling(node_14, 2); + var node_24 = sibling(node_19, 2); { - var consequent_14 = ($$anchor2) => { - var div_10 = root_17(); - var button_3 = child(div_10); - var node_20 = child(button_3); - Icon(node_20, { name: "lucide-arrow-up-right", size: 18, opacity: 0.5 }); - var span_13 = sibling(node_20, 2); - var text_9 = child(span_13, true); + var consequent_16 = ($$anchor2) => { + var div_12 = root_20(); + var button_3 = child(div_12); + var node_25 = child(button_3); + Icon(node_25, { name: "lucide-arrow-up-right", size: 18, opacity: 0.5 }); + var span_13 = sibling(node_25, 2); + var text_10 = child(span_13, true); reset(span_13); reset(button_3); - reset(div_10); - template_effect(() => set_text(text_9, (deep_read_state(task()), untrack(() => task().path)))); + reset(div_12); + template_effect(() => set_text(text_10, (deep_read_state(task()), untrack(() => task().path)))); event("click", button_3, (e) => taskActions().viewFile(task().id, e)); event("keydown", button_3, (e) => { if (e.key === "Enter" || e.key === " ") { @@ -19017,10 +20478,10 @@ function Task2($$anchor, $$props) { taskActions().viewFile(task().id, e); } }); - append($$anchor2, div_10); + append($$anchor2, div_12); }; - if_block(node_19, ($$render) => { - if (showFilepath()) $$render(consequent_14); + if_block(node_24, ($$render) => { + if (showFilepath()) $$render(consequent_16); }); } reset(div); @@ -19172,21 +20633,21 @@ function ensureRowBlockLink(row, existing) { } // src/ui/board/BoardCell.svelte -var root7 = from_html(`(default)`); -var root_19 = from_html(`
\u2192
`); -var root_24 = from_html(`
`, 1); -var root_33 = from_html(`
`); -var root_43 = from_html(`
`); -var root_52 = from_html(`
`); -var root_62 = from_html(`
`); -var $$css7 = { +var root11 = from_html(`(default)`); +var root_110 = from_html(`
\u2192
`); +var root_26 = from_html(`
Task
`, 1); +var root_34 = from_html(`
`); +var root_44 = from_html(`
`); +var root_53 = from_html(`
`); +var root_63 = from_html(`
`); +var $$css11 = { hash: "svelte-xi2aql", - code: '.tasks-wrapper.svelte-xi2aql {display:flex;flex-direction:column;height:100%;min-height:100%;border:var(--border-width) solid transparent;border-radius:var(--radius-s);\n /* The wrapper should be invisible if collapsed in horizontal mode */}.tasks-wrapper.collapsed.svelte-xi2aql {display:none;}.tasks-wrapper.vertical-collapsed.svelte-xi2aql {display:none;}.tasks-wrapper.vertical-flow.svelte-xi2aql {width:100%;display:flex;flex-direction:column;gap:var(--size-4-2);}.tasks-wrapper.vertical-flow.svelte-xi2aql .tasks:where(.svelte-xi2aql) {order:1;flex-direction:row;flex-wrap:nowrap;align-items:flex-start;min-width:max-content;}.tasks-wrapper.vertical-flow.svelte-xi2aql .tasks:where(.svelte-xi2aql) .task {width:var(--column-width, 300px);flex-shrink:0;}.tasks-wrapper.vertical-flow.svelte-xi2aql .task-slot:where(.svelte-xi2aql) {flex:0 0 var(--column-width, 300px);}.tasks-wrapper.vertical-flow.svelte-xi2aql .new-task-input:where(.svelte-xi2aql) {order:4;width:var(--column-width, 300px);box-sizing:border-box;}.tasks-wrapper.vertical-flow.svelte-xi2aql .add-new-controls:where(.svelte-xi2aql) {order:2;}.tasks-wrapper.vertical-flow.svelte-xi2aql .file-indicator:where(.svelte-xi2aql) {order:3;}.tasks-wrapper.drop-active.svelte-xi2aql .tasks:where(.svelte-xi2aql) {opacity:0.4;}.tasks-wrapper.drop-hover.svelte-xi2aql {border-color:color-mix(in srgb, var(--column-color, var(--interactive-accent)) 75%, transparent);background:color-mix(in srgb, var(--column-color, var(--interactive-accent)) 10%, transparent);}.tasks-wrapper.svelte-xi2aql .tasks:where(.svelte-xi2aql) {display:flex;flex-direction:column;gap:var(--size-4-2);padding-top:var(--size-4-2);}.tasks-wrapper.svelte-xi2aql .task-slot:where(.svelte-xi2aql) {position:relative;}.tasks-wrapper.svelte-xi2aql .task-slot.drop-before:where(.svelte-xi2aql)::before, .tasks-wrapper.svelte-xi2aql .task-slot.drop-after:where(.svelte-xi2aql)::after {content:"";position:absolute;left:0;right:0;height:2px;background:var(--column-color, var(--interactive-accent));border-radius:1px;}.tasks-wrapper.svelte-xi2aql .task-slot.drop-before:where(.svelte-xi2aql)::before {top:calc(-1 * var(--size-4-1));}.tasks-wrapper.svelte-xi2aql .task-slot.drop-after:where(.svelte-xi2aql)::after {bottom:calc(-1 * var(--size-4-1));}.tasks-wrapper.svelte-xi2aql .new-task-input:where(.svelte-xi2aql) {margin-top:var(--size-4-3);background-color:var(--background-primary);border-radius:var(--radius-s);border:var(--border-width) solid var(--background-modifier-border);padding:var(--size-4-2);}.tasks-wrapper.svelte-xi2aql .new-task-input:where(.svelte-xi2aql) textarea:where(.svelte-xi2aql) {cursor:text;background-color:var(--color-base-25);width:100%;}.tasks-wrapper.svelte-xi2aql .new-task-date-fields:where(.svelte-xi2aql) {margin-top:var(--size-2-3);}.tasks-wrapper.svelte-xi2aql .add-new-btn:where(.svelte-xi2aql) {display:inline-flex;align-items:center;gap:var(--size-2-1);align-self:flex-start;cursor:pointer;border:0;border-radius:var(--radius-s);box-shadow:none;margin:0;min-height:26px;padding:0;background:transparent;color:var(--text-accent);font-size:var(--font-ui-small);font-weight:var(--font-medium);line-height:1.2;}.tasks-wrapper.svelte-xi2aql .add-new-btn:where(.svelte-xi2aql) span:where(.svelte-xi2aql) {display:inline-flex;align-items:center;justify-content:center;font-size:var(--font-ui-medium);line-height:1;}.tasks-wrapper.svelte-xi2aql .add-new-controls:where(.svelte-xi2aql) {display:inline-flex;align-items:center;gap:var(--size-2-1);align-self:flex-start;border:0;background:transparent;box-shadow:none;}.tasks-wrapper.svelte-xi2aql .add-new-picker-btn {flex-shrink:0;width:22px;height:26px;border:0;border-radius:var(--radius-s);box-shadow:none;margin:0;background-color:transparent;color:var(--text-accent);}.tasks-wrapper.svelte-xi2aql .add-new-btn:where(.svelte-xi2aql),\n.tasks-wrapper.svelte-xi2aql .add-new-picker-btn {background-color:transparent;}.tasks-wrapper.svelte-xi2aql .add-new-btn:where(.svelte-xi2aql):hover:not(:disabled),\n.tasks-wrapper.svelte-xi2aql .add-new-picker-btn:hover:not(:disabled) {background-color:transparent;color:var(--text-accent-hover);}.tasks-wrapper.svelte-xi2aql .add-new-btn:where(.svelte-xi2aql):active:not(:disabled),\n.tasks-wrapper.svelte-xi2aql .add-new-picker-btn:active:not(:disabled) {background-color:transparent;color:var(--text-accent-hover);}.tasks-wrapper.svelte-xi2aql .file-indicator:where(.svelte-xi2aql) {display:flex;align-items:center;gap:var(--size-2-1);font-size:var(--font-ui-small);color:var(--text-muted);margin-top:var(--size-2-1);}.tasks-wrapper.svelte-xi2aql .file-indicator:where(.svelte-xi2aql) .file-indicator-arrow:where(.svelte-xi2aql) {flex-shrink:0;}.tasks-wrapper.svelte-xi2aql .file-indicator:where(.svelte-xi2aql) .file-indicator-name:where(.svelte-xi2aql) {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.tasks-wrapper.svelte-xi2aql .file-indicator:where(.svelte-xi2aql) .file-indicator-label:where(.svelte-xi2aql) {white-space:nowrap;}' + code: '.tasks-wrapper.svelte-xi2aql {display:flex;flex-direction:column;height:100%;min-height:100%;border:var(--border-width) solid transparent;border-radius:var(--radius-s);\n /* The wrapper should be invisible if collapsed in horizontal mode */}.tasks-wrapper.collapsed.svelte-xi2aql {display:none;}.tasks-wrapper.vertical-collapsed.svelte-xi2aql {display:none;}.tasks-wrapper.vertical-flow.svelte-xi2aql {width:100%;display:flex;flex-direction:column;gap:var(--size-4-2);}.tasks-wrapper.vertical-flow.svelte-xi2aql .tasks:where(.svelte-xi2aql) {order:1;flex-direction:row;flex-wrap:nowrap;align-items:flex-start;min-width:max-content;}.tasks-wrapper.vertical-flow.svelte-xi2aql .tasks:where(.svelte-xi2aql) .task {width:var(--column-width, 300px);flex-shrink:0;}.tasks-wrapper.vertical-flow.svelte-xi2aql .task-slot:where(.svelte-xi2aql) {flex:0 0 var(--column-width, 300px);}.tasks-wrapper.vertical-flow.svelte-xi2aql .new-task-input:where(.svelte-xi2aql) {order:4;width:var(--column-width, 300px);box-sizing:border-box;}.tasks-wrapper.vertical-flow.svelte-xi2aql .add-new-controls:where(.svelte-xi2aql) {order:2;}.tasks-wrapper.vertical-flow.svelte-xi2aql .file-indicator:where(.svelte-xi2aql) {order:3;}.tasks-wrapper.drop-active.svelte-xi2aql .tasks:where(.svelte-xi2aql) {opacity:0.4;}.tasks-wrapper.drop-hover.svelte-xi2aql {border-color:color-mix(in srgb, var(--column-color, var(--interactive-accent)) 75%, transparent);background:color-mix(in srgb, var(--column-color, var(--interactive-accent)) 10%, transparent);}.tasks-wrapper.svelte-xi2aql .tasks:where(.svelte-xi2aql) {display:flex;flex-direction:column;gap:var(--size-4-2);padding-top:var(--size-4-2);}.tasks-wrapper.svelte-xi2aql .task-slot:where(.svelte-xi2aql) {position:relative;}.tasks-wrapper.svelte-xi2aql .task-slot.drop-before:where(.svelte-xi2aql)::before, .tasks-wrapper.svelte-xi2aql .task-slot.drop-after:where(.svelte-xi2aql)::before {content:"";position:absolute;left:8px;right:8px;height:2px;background:var(--column-color, var(--interactive-accent));pointer-events:none;}.tasks-wrapper.svelte-xi2aql .task-slot.drop-before:where(.svelte-xi2aql)::after, .tasks-wrapper.svelte-xi2aql .task-slot.drop-after:where(.svelte-xi2aql)::after {content:"";position:absolute;left:4px;width:10px;height:10px;border-radius:999px;background:var(--column-color, var(--interactive-accent));pointer-events:none;}.tasks-wrapper.svelte-xi2aql .task-slot.drop-before:where(.svelte-xi2aql)::before {top:calc(-1 * var(--size-4-1) - 1px);}.tasks-wrapper.svelte-xi2aql .task-slot.drop-before:where(.svelte-xi2aql)::after {top:calc(-1 * var(--size-4-1) - 5px);}.tasks-wrapper.svelte-xi2aql .task-slot.drop-after:where(.svelte-xi2aql)::before {bottom:calc(-1 * var(--size-4-1) - 1px);}.tasks-wrapper.svelte-xi2aql .task-slot.drop-after:where(.svelte-xi2aql)::after {bottom:calc(-1 * var(--size-4-1) - 5px);}.tasks-wrapper.svelte-xi2aql .new-task-input:where(.svelte-xi2aql) {margin-top:var(--size-4-3);background-color:var(--background-primary);border-radius:var(--radius-s);border:var(--border-width) solid var(--background-modifier-border);padding:var(--size-4-2);}.tasks-wrapper.svelte-xi2aql .new-task-input:where(.svelte-xi2aql) textarea:where(.svelte-xi2aql) {cursor:text;background-color:var(--color-base-25);width:100%;}.tasks-wrapper.svelte-xi2aql .new-task-date-fields:where(.svelte-xi2aql) {margin-top:var(--size-2-3);}.tasks-wrapper.svelte-xi2aql .add-new-btn:where(.svelte-xi2aql) {display:inline-flex;align-items:center;gap:var(--size-2-1);align-self:flex-start;cursor:pointer;border:0;border-radius:var(--radius-s);box-shadow:none;margin:0;min-height:26px;padding:0;background:transparent;background-color:transparent;color:var(--text-accent);font-size:var(--font-ui-small);font-weight:var(--font-medium);line-height:1.2;}.tasks-wrapper.svelte-xi2aql .add-new-btn:where(.svelte-xi2aql) span:where(.svelte-xi2aql) {display:inline-flex;align-items:center;justify-content:center;font-size:var(--font-ui-medium);line-height:1;}.tasks-wrapper.svelte-xi2aql .add-new-btn.disabled:where(.svelte-xi2aql) {cursor:not-allowed;opacity:0.5;color:var(--text-muted);pointer-events:none;}.tasks-wrapper.svelte-xi2aql .add-new-controls:where(.svelte-xi2aql) {display:inline-flex;align-items:center;gap:var(--size-2-1);align-self:flex-start;border:0;background:transparent;box-shadow:none;}.tasks-wrapper.svelte-xi2aql .add-new-picker-btn {flex-shrink:0;width:22px;height:26px;border:0;border-radius:var(--radius-s);box-shadow:none;margin:0;background-color:transparent;color:var(--text-accent);}.tasks-wrapper.svelte-xi2aql .add-new-picker-btn.disabled:where(.svelte-xi2aql) {cursor:not-allowed;opacity:0.5;color:var(--text-muted);pointer-events:none;}.tasks-wrapper.svelte-xi2aql .add-new-btn:where(.svelte-xi2aql),\n.tasks-wrapper.svelte-xi2aql .add-new-picker-btn {background-color:transparent;}.tasks-wrapper.svelte-xi2aql .add-new-btn:where(.svelte-xi2aql):hover:not(.disabled),\n.tasks-wrapper.svelte-xi2aql .add-new-picker-btn:hover:not(.disabled) {background-color:transparent;color:var(--text-accent-hover);}.tasks-wrapper.svelte-xi2aql .add-new-btn:where(.svelte-xi2aql):active:not(.disabled),\n.tasks-wrapper.svelte-xi2aql .add-new-picker-btn:active:not(.disabled) {background-color:transparent;color:var(--text-accent-hover);}.tasks-wrapper.svelte-xi2aql .file-indicator:where(.svelte-xi2aql) {display:flex;align-items:center;gap:var(--size-2-1);font-size:var(--font-ui-small);color:var(--text-muted);margin-top:var(--size-2-1);}.tasks-wrapper.svelte-xi2aql .file-indicator:where(.svelte-xi2aql) .file-indicator-arrow:where(.svelte-xi2aql) {flex-shrink:0;}.tasks-wrapper.svelte-xi2aql .file-indicator:where(.svelte-xi2aql) .file-indicator-name:where(.svelte-xi2aql) {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.tasks-wrapper.svelte-xi2aql .file-indicator:where(.svelte-xi2aql) .file-indicator-label:where(.svelte-xi2aql) {white-space:nowrap;}' }; function BoardCell($$anchor, $$props) { if (new.target) return createClassComponent({ component: BoardCell, ...$$anchor }); push($$props, false); - append_styles($$anchor, $$css7); + append_styles($$anchor, $$css11); const $selectionModeStore = () => store_get(selectionModeStore, "$selectionModeStore", $$stores); const $taskSelectionStore = () => store_get(taskSelectionStore, "$taskSelectionStore", $$stores); const $isDraggingStore = () => store_get(isDraggingStore, "$isDraggingStore", $$stores); @@ -19230,6 +20691,7 @@ function BoardCell($$anchor, $$props) { let targetFileIsDefault = prop($$props, "targetFileIsDefault", 12, false); let doneColumnName = prop($$props, "doneColumnName", 12, void 0); let accentColor = prop($$props, "accentColor", 12, void 0); + let treatNestedTasksAsSubtasks = prop($$props, "treatNestedTasksAsSubtasks", 12, false); let isManualOrder = prop($$props, "isManualOrder", 12, false); let manualOrderEntries = prop($$props, "manualOrderEntries", 12, void 0); let reorderEnabled = prop($$props, "reorderEnabled", 12, false); @@ -19399,8 +20861,6 @@ function BoardCell($$anchor, $$props) { async function applyColumnChange(taskIds) { for (const id of taskIds) { switch (get(column)) { - case "uncategorised": - break; case "done": await taskActions().markDone(id); break; @@ -19425,11 +20885,11 @@ function BoardCell($$anchor, $$props) { set(creationMetadata, deriveCellCreationMetadata(secondaryAxisBucket())); } ); - legacy_pre_effect(() => (get(creationMetadata), deep_read_state(app()), import_obsidian6.TFile), () => { + legacy_pre_effect(() => (get(creationMetadata), deep_read_state(app()), import_obsidian7.TFile), () => { set(fileGroupTargetFile, (() => { if (!get(creationMetadata).targetFilePath) return null; const file = app().vault.getAbstractFileByPath(get(creationMetadata).targetFilePath); - return file instanceof import_obsidian6.TFile ? file : null; + return file instanceof import_obsidian7.TFile ? file : null; })()); }); legacy_pre_effect( @@ -19644,6 +21104,13 @@ function BoardCell($$anchor, $$props) { accentColor($$value); flushSync(); }, + get treatNestedTasksAsSubtasks() { + return treatNestedTasksAsSubtasks(); + }, + set treatNestedTasksAsSubtasks($$value) { + treatNestedTasksAsSubtasks($$value); + flushSync(); + }, get isManualOrder() { return isManualOrder(); }, @@ -19676,54 +21143,64 @@ function BoardCell($$anchor, $$props) { $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) }; init(); - var div = root_62(); + var div = root_63(); let classes; var node = child(div); { var consequent_2 = ($$anchor2) => { - var fragment = root_24(); + var fragment = root_26(); var div_1 = first_child(fragment); - var button = child(div_1); - var node_1 = sibling(button, 2); + var div_2 = child(div_1); + let classes_1; + var node_1 = sibling(div_2, 2); { - let $0 = derived_safe_equal(() => !!get(pendingNewTask)); + let $0 = derived_safe_equal(() => get(pendingNewTask) ? "disabled" : ""); + let $1 = derived_safe_equal(() => !!get(pendingNewTask)); Icon_button(node_1, { - class: "add-new-picker-btn", + get class() { + var _a5; + return `add-new-picker-btn ${(_a5 = get($0)) != null ? _a5 : ""}`; + }, icon: "lucide-chevron-down", get "aria-label"() { var _a5; return `Choose file for new task in ${(_a5 = get(columnTitle)) != null ? _a5 : ""}`; }, get disabled() { - return get($0); + return get($1); }, - $$events: { click: handleChooseTaskFileClick } + $$events: { + click(...$$args) { + var _a5; + (_a5 = !get(pendingNewTask) ? handleChooseTaskFileClick : void 0) == null ? void 0 : _a5.apply(this, $$args); + } + } }); } reset(div_1); var node_2 = sibling(div_1, 2); { var consequent_1 = ($$anchor3) => { - var div_2 = root_19(); - var span = sibling(child(div_2), 2); + var div_3 = root_110(); + var span = sibling(child(div_3), 2); var text2 = child(span, true); reset(span); var node_3 = sibling(span, 2); { var consequent = ($$anchor4) => { - var span_1 = root7(); + var span_1 = root11(); append($$anchor4, span_1); }; if_block(node_3, ($$render) => { if (get(effectiveTargetFileIsDefault)) $$render(consequent); }); } - reset(div_2); + reset(div_3); template_effect(() => { set_attribute2(span, "title", (get(effectiveTargetTaskFile), untrack(() => get(effectiveTargetTaskFile).path))); set_text(text2, (get(effectiveTargetTaskFile), untrack(() => get(effectiveTargetTaskFile).name))); }); - append($$anchor3, div_2); + append($$anchor3, div_3); }; if_block(node_2, ($$render) => { if (get(effectiveTargetTaskFile)) $$render(consequent_1); @@ -19731,10 +21208,21 @@ function BoardCell($$anchor, $$props) { } template_effect(() => { var _a5; - set_attribute2(button, "aria-label", `Add new task to ${(_a5 = get(columnTitle)) != null ? _a5 : ""}`); - button.disabled = !!get(pendingNewTask); + classes_1 = set_class(div_2, 1, "add-new-btn svelte-xi2aql", null, classes_1, { disabled: !!get(pendingNewTask) }); + set_attribute2(div_2, "tabindex", get(pendingNewTask) ? -1 : 0); + set_attribute2(div_2, "aria-label", `Add new task to ${(_a5 = get(columnTitle)) != null ? _a5 : ""}`); + set_attribute2(div_2, "aria-disabled", !!get(pendingNewTask)); + }); + event("click", div_2, function(...$$args) { + var _a5; + (_a5 = !get(pendingNewTask) ? handleAddNewClick : void 0) == null ? void 0 : _a5.apply(this, $$args); + }); + event("keydown", div_2, (e) => { + if (!get(pendingNewTask) && (e.key === "Enter" || e.key === " ")) { + e.preventDefault(); + handleAddNewClick(); + } }); - event("click", button, handleAddNewClick); append($$anchor2, fragment); }; if_block(node, ($$render) => { @@ -19744,42 +21232,42 @@ function BoardCell($$anchor, $$props) { var node_4 = sibling(node, 2); { var consequent_4 = ($$anchor2) => { - var div_3 = root_43(); - var textarea = child(div_3); + var div_4 = root_44(); + var textarea = child(div_4); bind_this(textarea, ($$value) => set(newTaskTextAreaEl, $$value), () => get(newTaskTextAreaEl)); var node_5 = sibling(textarea, 2); { var consequent_3 = ($$anchor3) => { - var div_4 = root_33(); - var node_6 = child(div_4); + var div_5 = root_34(); + var node_6 = child(div_5); DateInputFields(node_6, { get values() { return get(newTaskDateValues); }, onDateChange: handleNewTaskDateChange }); - reset(div_4); - append($$anchor3, div_4); + reset(div_5); + append($$anchor3, div_5); }; if_block(node_5, ($$render) => { if (get(canEditNewTaskDates)) $$render(consequent_3); }); } - reset(div_3); - bind_this(div_3, ($$value) => set(newTaskInputEl, $$value), () => get(newTaskInputEl)); + reset(div_4); + bind_this(div_4, ($$value) => set(newTaskInputEl, $$value), () => get(newTaskInputEl)); event("keydown", textarea, handleNewTaskKeydown); - event("focusout", div_3, handleNewTaskSave); - append($$anchor2, div_3); + event("focusout", div_4, handleNewTaskSave); + append($$anchor2, div_4); }; if_block(node_4, ($$render) => { if (get(pendingNewTask)) $$render(consequent_4); }); } - var div_5 = sibling(node_4, 2); - each(div_5, 5, () => get(tasks), (task) => task.id, ($$anchor2, task) => { - var div_6 = root_52(); - let classes_1; - var node_7 = child(div_6); + var div_6 = sibling(node_4, 2); + each(div_6, 5, () => get(tasks), (task) => task.id, ($$anchor2, task) => { + var div_7 = root_53(); + let classes_2; + var node_7 = child(div_7); { let $0 = derived_safe_equal(() => (deep_read_state(isTaskSelected), get(task), $taskSelectionStore(), untrack(() => isTaskSelected(get(task).id, $taskSelectionStore())))); let $1 = derived_safe_equal(() => (get(pinnedIds), get(task), untrack(() => get(pinnedIds).has(get(task).id)))); @@ -19811,6 +21299,9 @@ function BoardCell($$anchor, $$props) { get excludedTags() { return excludedTags(); }, + get treatNestedTasksAsSubtasks() { + return treatNestedTasksAsSubtasks(); + }, get displayColumn() { return get(column); }, @@ -19848,29 +21339,25 @@ function BoardCell($$anchor, $$props) { onUnpin: () => taskActions().unpinTask(cell().secondaryId, get(column), get(task).id) }); } - reset(div_6); - template_effect(() => classes_1 = set_class(div_6, 1, "task-slot svelte-xi2aql", null, classes_1, { + reset(div_7); + template_effect(() => classes_2 = set_class(div_7, 1, "task-slot svelte-xi2aql", null, classes_2, { "drop-before": get(isManualReorderDrag) && get(reorderOverId) === get(task).id && get(reorderPlaceBefore), "drop-after": get(isManualReorderDrag) && get(reorderOverId) === get(task).id && !get(reorderPlaceBefore) })); - event("dragover", div_6, (e) => handleReorderDragOver(e, get(task).id)); - event("drop", div_6, (e) => handleReorderDrop(e, get(task).id)); - event("dragleave", div_6, handleReorderDragLeave); - append($$anchor2, div_6); + event("dragover", div_7, (e) => handleReorderDragOver(e, get(task).id)); + event("drop", div_7, (e) => handleReorderDrop(e, get(task).id)); + event("dragleave", div_7, handleReorderDragLeave); + append($$anchor2, div_7); }); - reset(div_5); + reset(div_6); reset(div); - template_effect(() => { - var _a5; - classes = set_class(div, 1, "tasks-wrapper svelte-xi2aql", null, classes, { - "vertical-flow": isVerticalFlow(), - collapsed: isCollapsed() && !isVerticalFlow(), - "vertical-collapsed": isCollapsed() && isVerticalFlow(), - "drop-active": !!get(draggingData) && !get(isManualReorderDrag), - "drop-hover": get(isDraggedOver) - }); - set_attribute2(div, "aria-label", `Tasks for ${(_a5 = get(columnTitle)) != null ? _a5 : ""}`); - }); + template_effect(() => classes = set_class(div, 1, "tasks-wrapper svelte-xi2aql", null, classes, { + "vertical-flow": isVerticalFlow(), + collapsed: isCollapsed() && !isVerticalFlow(), + "vertical-collapsed": isCollapsed() && isVerticalFlow(), + "drop-active": !!get(draggingData) && !get(isManualReorderDrag), + "drop-hover": get(isDraggedOver) + })); event("dragover", div, handleDragOver); event("dragleave", div, handleDragLeave); event("drop", div, handleDrop); @@ -19881,20 +21368,20 @@ function BoardCell($$anchor, $$props) { } // src/ui/board/board_matrix_vertical.svelte -var root8 = from_html(`
`, 1); -var root_110 = from_html(`
`); -var root_25 = from_html(`
`); -var root_34 = from_html(`
`); -var root_44 = from_html(`
`, 1); -var root_53 = from_html(`
`); -var $$css8 = { +var root12 = from_html(`
`, 1); +var root_111 = from_html(`
`); +var root_27 = from_html(`
`); +var root_35 = from_html(`
`); +var root_45 = from_html(`
`, 1); +var root_54 = from_html(`
`); +var $$css12 = { hash: "svelte-iq029y", code: ".matrix-vertical.svelte-iq029y {--vertical-row-header-width: clamp(220px, 24vw, 280px);padding-bottom:var(--size-4-4);}.matrix-vertical.ungrouped-grid.svelte-iq029y, .matrix-vertical.transposed-grid.svelte-iq029y {display:grid;column-gap:0;row-gap:0;align-items:stretch;min-width:max-content;border:var(--border-width) solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);box-shadow:var(--shadow-s);overflow:visible;}.matrix-vertical.ungrouped-grid.svelte-iq029y {grid-template-columns:var(--vertical-row-header-width) max-content;}.matrix-corner.svelte-iq029y,\n.group-header-cell.svelte-iq029y {position:sticky;top:0;z-index:5;min-height:64px;background:color-mix(in srgb, var(--background-secondary) 72%, var(--background-primary));border-right:var(--border-width) solid var(--background-modifier-border);border-bottom:var(--border-width) solid var(--background-modifier-border);box-shadow:inset 0 var(--border-width) 0 var(--background-modifier-border), inset var(--border-width) 0 0 var(--background-modifier-border);}.matrix-corner.svelte-iq029y {left:0;z-index:8;}.group-header-cell.svelte-iq029y {display:flex;align-items:center;min-width:var(--column-width, 300px);padding:var(--size-4-3) var(--size-4-4);overflow:clip;}.group-header-cell.svelte-iq029y .group-label:where(.svelte-iq029y) {position:sticky;left:calc(var(--vertical-row-header-width) + var(--size-4-4));display:inline-block;max-width:max-content;color:var(--text-normal);font-size:var(--font-ui-medium);font-weight:var(--font-medium);line-height:1.2;white-space:nowrap;}.row-header-wrapper.svelte-iq029y,\n.row-cell.svelte-iq029y {border-bottom:var(--border-width) solid var(--background-modifier-border);}.row-header-wrapper.svelte-iq029y {position:sticky;left:0;z-index:4;display:flex;align-items:stretch;min-height:96px;padding:var(--size-4-2) var(--size-4-3);background:color-mix(in srgb, var(--background-secondary) 72%, var(--background-primary));border-right:var(--border-width) solid var(--background-modifier-border);--column-header-x-padding-override: var(--size-4-3);--column-header-y-padding-override: var(--size-4-2);}.row-header-wrapper.collapsed.svelte-iq029y {min-height:64px;cursor:pointer;}.row-cell.svelte-iq029y {z-index:1;display:flex;align-self:stretch;min-height:96px;min-width:max-content;padding:var(--size-4-2) var(--size-4-4);background:color-mix(in srgb, var(--background-primary) 88%, var(--background-secondary));}.row-cell.collapsed.svelte-iq029y {display:none;}.cell-wrapper.svelte-iq029y {padding:var(--size-4-2) var(--size-4-4);border-bottom:var(--border-width) solid var(--background-modifier-border);}.cell-wrapper.grouped-cell.svelte-iq029y {z-index:1;display:flex;align-self:stretch;min-height:96px;min-width:var(--column-width, 300px);background:color-mix(in srgb, var(--background-primary) 88%, var(--background-secondary));border-right:var(--border-width) solid var(--background-modifier-border);}.cell-wrapper.grouped-cell.collapsed.svelte-iq029y {display:none;}" }; function Board_matrix_vertical($$anchor, $$props) { if (new.target) return createClassComponent({ component: Board_matrix_vertical, ...$$anchor }); push($$props, false); - append_styles($$anchor, $$css8); + append_styles($$anchor, $$css12); const tasksByPrimary = mutable_source(); const showSwimlaneHeaders = mutable_source(); const ungroupedSecondaryBucket = mutable_source(); @@ -19907,6 +21394,7 @@ function Board_matrix_vertical($$anchor, $$props) { let columnTagTableStore = prop($$props, "columnTagTableStore", 12); let columnColourTableStore = prop($$props, "columnColourTableStore", 12); let columnMatchTagTableStore = prop($$props, "columnMatchTagTableStore", 12); + let columnSubtitleTableStore = prop($$props, "columnSubtitleTableStore", 12); let showFilepath = prop($$props, "showFilepath", 12); let propertyDisplay = prop($$props, "propertyDisplay", 28, () => "none" /* None */); let propertySchemaOption = prop($$props, "propertySchemaOption", 28, () => "none" /* None */); @@ -19920,6 +21408,8 @@ function Board_matrix_vertical($$anchor, $$props) { let isManualOrder = prop($$props, "isManualOrder", 12, false); let manualOrder = prop($$props, "manualOrder", 28, () => ({})); let reorderEnabled = prop($$props, "reorderEnabled", 12, false); + let treatNestedTasksAsSubtasks = prop($$props, "treatNestedTasksAsSubtasks", 12, false); + let headerHeight = mutable_source(64); legacy_pre_effect(() => deep_read_state(matrix()), () => { set(tasksByPrimary, Object.fromEntries(matrix().primaryAxis.map((bucket) => [ bucket.id, @@ -19992,6 +21482,13 @@ function Board_matrix_vertical($$anchor, $$props) { columnMatchTagTableStore($$value); flushSync(); }, + get columnSubtitleTableStore() { + return columnSubtitleTableStore(); + }, + set columnSubtitleTableStore($$value) { + columnSubtitleTableStore($$value); + flushSync(); + }, get showFilepath() { return showFilepath(); }, @@ -20083,6 +21580,13 @@ function Board_matrix_vertical($$anchor, $$props) { reorderEnabled($$value); flushSync(); }, + get treatNestedTasksAsSubtasks() { + return treatNestedTasksAsSubtasks(); + }, + set treatNestedTasksAsSubtasks($$value) { + treatNestedTasksAsSubtasks($$value); + flushSync(); + }, $set: update_legacy_props, $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) }; @@ -20091,7 +21595,7 @@ function Board_matrix_vertical($$anchor, $$props) { var node = first_child(fragment); { var consequent = ($$anchor2) => { - var div = root_110(); + var div = root_111(); let styles; each( div, @@ -20099,7 +21603,7 @@ function Board_matrix_vertical($$anchor, $$props) { () => (deep_read_state(matrix()), untrack(() => matrix().primaryAxis)), (pBucket) => pBucket.id, ($$anchor3, pBucket, pIndex) => { - var fragment_1 = root8(); + var fragment_1 = root12(); var div_1 = first_child(fragment_1); let classes; let styles_1; @@ -20128,6 +21632,9 @@ function Board_matrix_vertical($$anchor, $$props) { get columnMatchTagTableStore() { return columnMatchTagTableStore(); }, + get columnSubtitleTableStore() { + return columnSubtitleTableStore(); + }, isVerticalFlow: true, get isCollapsed() { return get(pBucket), untrack(() => get(pBucket).collapsed); @@ -20196,6 +21703,9 @@ function Board_matrix_vertical($$anchor, $$props) { get excludedTags() { return excludedTags(); }, + get treatNestedTasksAsSubtasks() { + return treatNestedTasksAsSubtasks(); + }, isVerticalFlow: true, get targetTaskFile() { return targetTaskFile(); @@ -20248,11 +21758,14 @@ function Board_matrix_vertical($$anchor, $$props) { } ); reset(div); - template_effect(() => styles = set_style(div, "", styles, { "grid-template-rows": get(ungroupedGridTemplateRows) })); + template_effect(() => styles = set_style(div, "", styles, { + "grid-template-rows": get(ungroupedGridTemplateRows), + "--header-height": "0px" + })); append($$anchor2, div); }; var alternate = ($$anchor2) => { - var div_3 = root_53(); + var div_3 = root_54(); let styles_3; var div_4 = child(div_3); set_style(div_4, "", {}, { "grid-column": "1", "grid-row": "1" }); @@ -20263,7 +21776,7 @@ function Board_matrix_vertical($$anchor, $$props) { () => (deep_read_state(matrix()), untrack(() => matrix().secondaryAxis)), (sBucket) => sBucket.id, ($$anchor3, sBucket, sIndex) => { - var div_5 = root_25(); + var div_5 = root_27(); let styles_4; var span = child(div_5); var text2 = child(span, true); @@ -20284,7 +21797,7 @@ function Board_matrix_vertical($$anchor, $$props) { () => (deep_read_state(matrix()), untrack(() => matrix().primaryAxis)), (pBucket) => pBucket.id, ($$anchor3, pBucket, pIndex) => { - var fragment_2 = root_44(); + var fragment_2 = root_45(); var div_6 = first_child(fragment_2); let classes_2; let styles_5; @@ -20313,6 +21826,9 @@ function Board_matrix_vertical($$anchor, $$props) { get columnMatchTagTableStore() { return columnMatchTagTableStore(); }, + get columnSubtitleTableStore() { + return columnSubtitleTableStore(); + }, isVerticalFlow: true, get isCollapsed() { return get(pBucket), untrack(() => get(pBucket).collapsed); @@ -20334,7 +21850,7 @@ function Board_matrix_vertical($$anchor, $$props) { () => (deep_read_state(matrix()), untrack(() => matrix().secondaryAxis)), (sBucket) => sBucket.id, ($$anchor4, sBucket, sIndex) => { - var div_7 = root_34(); + var div_7 = root_35(); let classes_3; let styles_6; var node_7 = child(div_7); @@ -20388,6 +21904,9 @@ function Board_matrix_vertical($$anchor, $$props) { get excludedTags() { return excludedTags(); }, + get treatNestedTasksAsSubtasks() { + return treatNestedTasksAsSubtasks(); + }, isVerticalFlow: true, get targetTaskFile() { return targetTaskFile(); @@ -20445,10 +21964,15 @@ function Board_matrix_vertical($$anchor, $$props) { } ); reset(div_3); - template_effect(() => styles_3 = set_style(div_3, "", styles_3, { - "grid-template-columns": get(groupedGridTemplateColumns), - "grid-template-rows": get(groupedGridTemplateRows) - })); + template_effect(() => { + var _a5; + return styles_3 = set_style(div_3, "", styles_3, { + "grid-template-columns": get(groupedGridTemplateColumns), + "grid-template-rows": get(groupedGridTemplateRows), + "--header-height": `${(_a5 = get(headerHeight)) != null ? _a5 : ""}px` + }); + }); + bind_element_size(div_4, "clientHeight", ($$value) => set(headerHeight, $$value)); append($$anchor2, div_3); }; if_block(node, ($$render) => { @@ -20461,19 +21985,19 @@ function Board_matrix_vertical($$anchor, $$props) { } // src/ui/board/board_matrix_horizontal.svelte -var root9 = from_html(`
`); -var root_111 = from_html(`
`); -var root_26 = from_html(`
`); -var root_35 = from_html(` `, 1); -var root_45 = from_html(`
`); -var $$css9 = { +var root13 = from_html(`
`); +var root_112 = from_html(`
`); +var root_28 = from_html(`
`); +var root_36 = from_html(` `, 1); +var root_46 = from_html(`
`); +var $$css13 = { hash: "svelte-1j479gc", - code: ".matrix-horizontal.svelte-1j479gc {display:grid;column-gap:0;row-gap:0;align-items:stretch;min-width:max-content;padding-bottom:var(--size-4-4);border:var(--border-width) solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);box-shadow:var(--shadow-s);overflow:visible;}.matrix-corner.svelte-1j479gc,\n.header-wrapper.svelte-1j479gc {background:color-mix(in srgb, var(--background-secondary) 72%, var(--background-primary));border-bottom:var(--border-width) solid var(--background-modifier-border);border-right:var(--border-width) solid var(--background-modifier-border);min-height:64px;}.matrix-corner.svelte-1j479gc {position:sticky;left:0;top:0;z-index:7;}.header-wrapper.svelte-1j479gc {position:sticky;top:0;z-index:5;padding:var(--size-4-2) var(--size-4-3);--column-header-x-padding-override: var(--size-4-3);--column-header-y-padding-override: var(--size-4-2);display:flex;align-items:stretch;}.header-wrapper.collapsed.svelte-1j479gc {position:sticky;top:0;display:flex;flex-direction:column;align-self:start;height:100%;min-height:100%;padding:0 var(--size-2-3) var(--size-4-3);--column-header-x-padding-override: var(--size-2-3);--column-header-y-padding-override: 0px;cursor:pointer;z-index:6;}.swimlane-header-cell.svelte-1j479gc {position:sticky;left:0;z-index:3;display:flex;align-items:center;justify-content:center;min-height:188px;padding:var(--size-4-3) var(--size-2-2);background:color-mix(in srgb, var(--background-primary) 82%, var(--background-secondary));border-right:var(--border-width) solid var(--background-modifier-border);border-bottom:var(--border-width) solid var(--background-modifier-border);}.swimlane-header-cell.svelte-1j479gc .swimlane-label:where(.svelte-1j479gc) {color:var(--text-normal);font-size:var(--font-ui-medium);font-weight:var(--font-medium);line-height:1.2;writing-mode:vertical-rl;text-orientation:mixed;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-height:100%;}.cell-wrapper.svelte-1j479gc {z-index:1;min-height:188px;padding:var(--size-4-2) var(--size-4-4);display:flex;flex-direction:column;align-self:stretch;background:color-mix(in srgb, var(--background-primary) 88%, var(--background-secondary));border-right:var(--border-width) solid var(--background-modifier-border);border-bottom:var(--border-width) solid var(--background-modifier-border);}.cell-wrapper.collapsed.svelte-1j479gc {display:none;}" + code: ".matrix-horizontal.svelte-1j479gc {display:grid;column-gap:0;row-gap:0;align-items:stretch;min-width:max-content;padding-bottom:var(--size-4-4);border:var(--border-width) solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);box-shadow:var(--shadow-s);overflow:visible;}.matrix-corner.svelte-1j479gc,\n.header-wrapper.svelte-1j479gc {background:color-mix(in srgb, var(--background-secondary) 72%, var(--background-primary));border-bottom:var(--border-width) solid var(--background-modifier-border);border-right:var(--border-width) solid var(--background-modifier-border);min-height:64px;}.matrix-corner.svelte-1j479gc {position:sticky;left:0;top:0;z-index:7;}.header-wrapper.svelte-1j479gc {position:sticky;top:0;z-index:5;padding:var(--size-4-2) var(--size-4-3);--column-header-x-padding-override: var(--size-4-3);--column-header-y-padding-override: var(--size-4-2);display:flex;align-items:stretch;}.header-wrapper.collapsed.svelte-1j479gc {position:sticky;top:0;display:flex;flex-direction:column;align-self:start;height:100%;min-height:100%;padding:0 var(--size-2-3) var(--size-4-3);--column-header-x-padding-override: var(--size-2-3);--column-header-y-padding-override: 0px;cursor:pointer;z-index:6;}.swimlane-header-cell.svelte-1j479gc {position:sticky;left:0;z-index:3;display:flex;align-items:start;justify-content:center;min-height:188px;padding:var(--size-4-3) var(--size-2-2);background:color-mix(in srgb, var(--background-primary) 82%, var(--background-secondary));border-right:var(--border-width) solid var(--background-modifier-border);border-bottom:var(--border-width) solid var(--background-modifier-border);}.swimlane-header-cell.svelte-1j479gc .swimlane-label:where(.svelte-1j479gc) {position:sticky;top:calc(var(--header-height) + var(--size-4-3));color:var(--text-normal);font-size:var(--font-ui-medium);font-weight:var(--font-medium);line-height:1.2;writing-mode:vertical-rl;text-orientation:mixed;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-height:100%;}.cell-wrapper.svelte-1j479gc {z-index:1;min-height:188px;padding:var(--size-4-2) var(--size-4-4);display:flex;flex-direction:column;align-self:stretch;background:color-mix(in srgb, var(--background-primary) 88%, var(--background-secondary));border-right:var(--border-width) solid var(--background-modifier-border);border-bottom:var(--border-width) solid var(--background-modifier-border);}.cell-wrapper.collapsed.svelte-1j479gc {display:none;}" }; function Board_matrix_horizontal($$anchor, $$props) { if (new.target) return createClassComponent({ component: Board_matrix_horizontal, ...$$anchor }); push($$props, false); - append_styles($$anchor, $$css9); + append_styles($$anchor, $$css13); const tasksByPrimary = mutable_source(); const showSwimlaneHeaders = mutable_source(); const gridTemplateColumns = mutable_source(); @@ -20485,6 +22009,7 @@ function Board_matrix_horizontal($$anchor, $$props) { let columnTagTableStore = prop($$props, "columnTagTableStore", 12); let columnColourTableStore = prop($$props, "columnColourTableStore", 12); let columnMatchTagTableStore = prop($$props, "columnMatchTagTableStore", 12); + let columnSubtitleTableStore = prop($$props, "columnSubtitleTableStore", 12); let showFilepath = prop($$props, "showFilepath", 12); let propertyDisplay = prop($$props, "propertyDisplay", 28, () => "none" /* None */); let propertySchemaOption = prop($$props, "propertySchemaOption", 28, () => "none" /* None */); @@ -20499,6 +22024,8 @@ function Board_matrix_horizontal($$anchor, $$props) { let isManualOrder = prop($$props, "isManualOrder", 12, false); let manualOrder = prop($$props, "manualOrder", 28, () => ({})); let reorderEnabled = prop($$props, "reorderEnabled", 12, false); + let treatNestedTasksAsSubtasks = prop($$props, "treatNestedTasksAsSubtasks", 12, false); + let headerHeight = mutable_source(64); legacy_pre_effect(() => deep_read_state(matrix()), () => { set(tasksByPrimary, Object.fromEntries(matrix().primaryAxis.map((bucket) => [ bucket.id, @@ -20574,6 +22101,13 @@ function Board_matrix_horizontal($$anchor, $$props) { columnMatchTagTableStore($$value); flushSync(); }, + get columnSubtitleTableStore() { + return columnSubtitleTableStore(); + }, + set columnSubtitleTableStore($$value) { + columnSubtitleTableStore($$value); + flushSync(); + }, get showFilepath() { return showFilepath(); }, @@ -20672,17 +22206,25 @@ function Board_matrix_horizontal($$anchor, $$props) { reorderEnabled($$value); flushSync(); }, + get treatNestedTasksAsSubtasks() { + return treatNestedTasksAsSubtasks(); + }, + set treatNestedTasksAsSubtasks($$value) { + treatNestedTasksAsSubtasks($$value); + flushSync(); + }, $set: update_legacy_props, $on: ($$event_name, $$event_cb) => add_legacy_event_listener($$props, $$event_name, $$event_cb) }; init(); - var div = root_45(); + var div = root_46(); let styles; var node = child(div); { var consequent = ($$anchor2) => { - var div_1 = root9(); + var div_1 = root13(); set_style(div_1, "", {}, { "grid-column": "1", "grid-row": "1" }); + bind_element_size(div_1, "clientHeight", ($$value) => set(headerHeight, $$value)); append($$anchor2, div_1); }; if_block(node, ($$render) => { @@ -20696,7 +22238,7 @@ function Board_matrix_horizontal($$anchor, $$props) { () => (deep_read_state(matrix()), untrack(() => matrix().primaryAxis)), (pBucket) => pBucket.id, ($$anchor2, pBucket, index2) => { - var div_2 = root_111(); + var div_2 = root_112(); let classes; let styles_1; var node_2 = child(div_2); @@ -20724,6 +22266,9 @@ function Board_matrix_horizontal($$anchor, $$props) { get columnMatchTagTableStore() { return columnMatchTagTableStore(); }, + get columnSubtitleTableStore() { + return columnSubtitleTableStore(); + }, isVerticalFlow: false, get isCollapsed() { return get(pBucket), untrack(() => get(pBucket).collapsed); @@ -20759,11 +22304,11 @@ function Board_matrix_horizontal($$anchor, $$props) { () => (deep_read_state(matrix()), untrack(() => matrix().secondaryAxis)), (sBucket) => sBucket.id, ($$anchor2, sBucket, sIndex) => { - var fragment = root_35(); + var fragment = root_36(); var node_4 = first_child(fragment); { var consequent_1 = ($$anchor3) => { - var div_3 = root_26(); + var div_3 = root_28(); let styles_2; var span = child(div_3); var text2 = child(span, true); @@ -20787,7 +22332,7 @@ function Board_matrix_horizontal($$anchor, $$props) { () => (deep_read_state(matrix()), untrack(() => matrix().primaryAxis)), (pBucket) => pBucket.id, ($$anchor3, pBucket, pIndex) => { - var div_4 = root_111(); + var div_4 = root_112(); let classes_1; let styles_3; var node_6 = child(div_4); @@ -20841,6 +22386,9 @@ function Board_matrix_horizontal($$anchor, $$props) { get excludedTags() { return excludedTags(); }, + get treatNestedTasksAsSubtasks() { + return treatNestedTasksAsSubtasks(); + }, isVerticalFlow: false, get targetTaskFile() { return targetTaskFile(); @@ -20887,17 +22435,22 @@ function Board_matrix_horizontal($$anchor, $$props) { } ); reset(div); - template_effect(() => styles = set_style(div, "", styles, { - "grid-template-columns": get(gridTemplateColumns), - "grid-template-rows": get(gridTemplateRows) - })); + template_effect(() => { + var _a5; + return styles = set_style(div, "", styles, { + "grid-template-columns": get(gridTemplateColumns), + "grid-template-rows": get(gridTemplateRows), + "--header-height": `${(_a5 = get(headerHeight)) != null ? _a5 : ""}px`, + "--sticky-left-offset": get(showSwimlaneHeaders) ? "56px" : "0px" + }); + }); append($$anchor, div); return pop($$exports); } // src/ui/board/board_matrix.ts function deriveBoardMatrix(tasks, columns, settings) { - var _a5, _b3, _c2, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p; + var _a5, _b3, _c2, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q; const tasksByPrimary = { uncategorised: [], done: [] @@ -20983,7 +22536,8 @@ function deriveBoardMatrix(tasks, columns, settings) { groupSource, settings.excludedTags, (_l = settings.statusMarkerOrder) != null ? _l : "", - (_m = settings.doneStatusMarkers) != null ? _m : "" + (_m = settings.doneStatusMarkers) != null ? _m : "", + (_n = settings.groupDirection) != null ? _n : "asc" ); const assignTaskToBucket = createGroupAssigner(groupBuckets, groupSource, settings.excludedTags); const secondaryAxis = groupBuckets.map((bucket) => ({ @@ -21001,7 +22555,7 @@ function deriveBoardMatrix(tasks, columns, settings) { for (const primaryBucket of primaryAxis) { const pId = primaryBucket.id; cells[pId] = {}; - const cellTasksByPrimary = (_n = tasksByPrimary[pId]) != null ? _n : []; + const cellTasksByPrimary = (_o = tasksByPrimary[pId]) != null ? _o : []; const cellTasksBySecondary = /* @__PURE__ */ new Map(); for (const task of cellTasksByPrimary) { const sId = assignTaskToBucket(task); @@ -21015,8 +22569,8 @@ function deriveBoardMatrix(tasks, columns, settings) { } for (const groupBucket of groupBuckets) { const sId = groupBucket.id; - const cellTasks = (_o = cellTasksBySecondary.get(sId)) != null ? _o : []; - const orderedCellTasks = useManual ? computeDisplayOrder(cellTasks, (_p = manualOrder[sId]) == null ? void 0 : _p[pId]) : cellTasks; + const cellTasks = (_p = cellTasksBySecondary.get(sId)) != null ? _p : []; + const orderedCellTasks = useManual ? computeDisplayOrder(cellTasks, (_q = manualOrder[sId]) == null ? void 0 : _q[pId]) : cellTasks; cells[pId][sId] = { primaryId: pId, secondaryId: sId, @@ -22137,7 +23691,7 @@ var platform = { function observeMove(element2, onMove) { let io = null; let timeoutId; - const root18 = getDocumentElement(element2); + const root22 = getDocumentElement(element2); function cleanup() { var _io; clearTimeout(timeoutId); @@ -22165,8 +23719,8 @@ function observeMove(element2, onMove) { return; } const insetTop = floor(top); - const insetRight = floor(root18.clientWidth - (left + width)); - const insetBottom = floor(root18.clientHeight - (top + height)); + const insetRight = floor(root22.clientWidth - (left + width)); + const insetBottom = floor(root22.clientHeight - (top + height)); const insetLeft = floor(left); const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px"; const options2 = { @@ -22194,7 +23748,7 @@ function observeMove(element2, onMove) { io = new IntersectionObserver(handleObserve, { ...options2, // Handle