varq=Object.defineProperty;varte=Object.getOwnPropertyDescriptor;varie=Object.getOwnPropertyNames;varne=Object.prototype.hasOwnProperty;varre=(o,t)=>{for(vareint)q(o,e,{get:t[e],enumerable:!0})},se=(o,t,e,i)=>{if(t&&typeoft=="object"||typeoft=="function")for(letrofie(t))!ne.call(o,r)&&r!==e&&q(o,r,{get:()=>t[r],enumerable:!(i=te(t,r))||i.enumerable});returno};varae=o=>se(q({},"__esModule",{value:!0}),o);varle={};re(le,{default:()=>B});module.exports=ae(le);varp=require("obsidian");varv=require("obsidian"),S=classextendsv.Modal{constructor(e,i,r,n="",s){vard,c,l,h,g,y;super(e);this.defaultChannels=i;this.onSubmit=r;this.existing=s;this.title="";this.body="";this.year="";this.month="";this.day="";this.hour="";this.minute="";this.channels="";this.repeatFrequency="none";this.repeatInterval="1";leta=s?newDate(s.dueAt):newDate(Date.now()+60*60*1e3);this.title=(d=s==null?void0:s.title)!=null?d:n,this.body=(c=s==null?void0:s.body)!=null?c:n,this.channels=s?s.channels.join(", "):i.join(", "),this.repeatFrequency=(h=(l=s==null?void0:s.repeat)==null?void0:l.frequency)!=null?h:"none",this.repeatInterval=String((y=(g=s==null?void0:s.repeat)==null?void0:g.interval)!=null?y:1),this.year=String(a.getFullYear()),this.month=String(a.getMonth()+1).padStart(2,"0"),this.day=String(a.getDate()).padStart(2,"0"),this.hour=String(a.getHours()).padStart(2,"0"),this.minute=String(Math.ceil(a.getMinutes()/5)*5).padStart(2,"0"),this.minute==="60"&&(this.minute="00",this.hour=String((a.getHours()+1)%24).padStart(2,"0"))}onOpen(){let{contentEl:e}=this;e.empty(),e.createEl("h2",{text:this.existing?"Edit reminder":"Create reminder"}),this.renderReminderRow(e),newv.Setting(e).setName("Details").setDesc("Optional longer message.").addTextArea(i=>{i.setValue(this.body),i.inputEl.rows=3,i.onChange(r=>{this.body=r})}),newv.Setting(e).setName("Channels").setDesc("Comma separated provider IDs or types. Leave empty to use all enabled providers.").addText(i=>i.setValue(this.channels).onChange(r=>{this.channels=r})),newv.Setting(e).setName("Repeat").addDropdown(i=>i.addOption("none","None").addOption("daily","Daily").addOption("weekly","Weekly").addOption("monthly","Monthly").setValue(this.repeatFrequency).onChange(r=>{this.repeatFrequency=r})).addText(i=>i.setPlaceholder("Interval").setValue(this.repeatInterval).onChange(r=>{this.repeatInterval=r})),newv.Setting(e).addButton(i=>i.setButtonText(this.existing?"Save":"Create").setCta().onClick(async()=>{letr=this.getSelectedDate();if(!this.title.trim()||!r){newv.Notice("Title and valid due date are required.");return}awaitthis.onSubmit({title:this.title.trim(),body:this.body.trim(),dueAt:r.toISOString(),channels:this.channels.split(",").map(n=>n.trim()).filter(Boolean),repeat:{frequency:this.repeatFrequency,interval:Math.max(1,Number(this.repeatInterval)||1)}}),this.close()}))}renderReminderRow(e){leti=newv.Setting(e).setName("Reminder").setDesc("Text, date, and time.");i.addText(r=>{r.setPlaceholder("Reminder text"),r.setValue(this.title),r.onChange(n=>{this.title=n,(!this.body||this.body===this.title)&&(this.body=n)})}),i.addDropdown(r=>{for(letnofthis.range(newDate().getFullYear(),newDate().getFullYear()+3))r.addOption(String(n),String(n));r.setValue(this.year),r.onChange(n=>{this.year=n,this.ensureValidDay()})}),i.addDropdown(r=>{for(letnofthis.range(1,12)){lets=String(n).padStart(2,"0");r.addOption(s,s)}r.setValue(this.month),r.onChange(n=>{this.month=n,this.ensureValidDay()})}),i.addDropdown(r=>{for(letnofthis.range(1,31)){lets=String(n).padStart(2,"0");r.addOption(s,s)}r.setValue(this.day),r.onChange(n=>{this.day=n})}),i.addDropdown(r=>{for(letnofthis.range(0,23)){lets=String(n).padStart(2,"0");r.addOption(s,s)}r.setValue(this.hour),r.onChange(n=>{this.hour=n})}),i.addDropdown(r=>{for(letnofthis.range(0,55,5)){lets=String(n).padStart(2,"0");r.addOption(s,s)}r.setValue(this.minute),r.onChange(n=>{this.minute=n})})}getSelectedDate(){lete=newDate(`${this.year}-${this.month}-${this.day}T${this.hour}:${this.minute}:00`);returnNumber.isNaN(e.getTime()
${t.message}`,1e4)}asynctest(t){new_.Notice("Reminder Notifier test notification",5e3)}};varX=require("obsidian");functionG(o){lett=o.trim()||"https://ntfy.sh";return(/^https?:\/\//i.test(t)?t:`https://${t}`).replace(/\/+$/,"")}varF=class{constructor(){this.id="ntfy";this.name="ntfy"}asyncsend(t,e){varc;leti=G(f(e.config.serverUrl,"https://ntfy.sh")),r=f(e.config.topic).trim();if(!r)thrownewError("ntfy topic is required.");letn={Title:t.title,Priority:String((c=e.config.priority)!=null?c:ce(t.priority))},s=f(e.config.token).trim();s&&(n.Authorization=`Bearer ${s}`);leta=e.config.tags;Array.isArray(a)&&(n.Tags=a.join(","));letd=`${i}/${encodeURIComponent(r)}`;try{await(0,X.requestUrl)({url:d,method:"POST",headers:n,body:t.message,throw:!0})}catch(l){leth=linstanceofError?l.message:String(l);thrownewError(`ntfy send failed for ${i}/${r}: ${h}`)}}asynctest(t){awaitthis.send({title:"Obsidian Reminder Notifier",message:"Test notification",dueAt:newDate().toISOString()},t)}};functionce(o="normal"){returno==="high"?4:o==="low"?2:3}varQ=require("obsidian");varM=class{constructor(){this.id="telegram";this.name="Telegram"}asyncsend(t,e){leti=f(e.config.botToken),r=f(e.config.chatId);if(!i||!r)thrownewError("Telegram botToken and chatId are required.");letn=`*${t.title}*
${t.message}`;await(0,Q.requestUrl)({url:`https://api.telegram.org/bot${i}/sendMessage`,method:"POST",contentType:"application/json",body:JSON.stringify({chat_id:r,text:n,parse_mode:f(e.config.parseMode,"Markdown"),disable_web_page_preview:!0}),throw:!0})}asynctest(t){awaitthis.send({title:"Obsidian Reminder Notifier",message:"Test notification",dueAt:newDate().toISOString()},t)}};varZ=require("obsidian");varL=class{constructor(){this.id="webhook";this.name="Generic webhook"}asyncsend(t,e){vara,d;leti=f(e.config.url);if(!i)thrownewError("Webhook URL is required.");letr=f(e.config.method,"POST").toUpperCase();if(!["POST","PUT","PATCH"].includes(r))thrownewError("Webhook method must be POST, PUT, or PATCH.");letn=C((a=e.config.headers)!=null?a:{"Content-Type":"application/json"},t),s=C((d=e.config.bodyTemplate)!=null?d:{title:"{{title}}",message:"{{message}}",dueAt:"{{dueAt}}",sourceFile:"{{sourceFile}}"},t);await(0,Z.requestUrl)({url:i,method:r,headers:n,body:typeofs=="string"?s:JSON.stringify(s),throw:!0})}asynctest(t){awaitthis.send({title:"Obsidian Reminder Notifier",message:"Test notification",dueAt:newDate().toISOString()},t)}};functionee(){leto=[new$,newM,newF,newL,newV];returnnewMap(o.map(t=>[t.id,t]))}varB=classextendsp.Plugin{constructor(){super(...arguments);this.providers=ee()}asynconload(){if(this.store=newx(this),awaitthis.store.load(),this.scheduler=newO(this.app.vault,this.store,this.providers,()=>this.refreshReminderViews()),this.registerView(b,e=>newk(e,this)),this.addSettingTab(newE(this.app,this)),this.registerCommands(),this.registerRibbonActions(),this.registerContextMenus(),this.registerFileWatcher(),this.store.getSettings().scanVaultOnStartup){lete=awaitthis.scheduler.scanVault();e>0&&newp.Notice(`Reminder Notifier indexed ${e} reminders.`)}this.scheduler.start()}onunload(){vare;(e=this.scheduler)==null||e.stop()}restartScheduler(){this.scheduler.stop(),this.scheduler.start()}asynctestProvider(e){leti=this.providers.get(e.type);if(!i)thrownewError(`Unknown provider: ${e.type}`);awaiti.test(e)}asyncactivateReminderView(){lete=this.app.workspace.getLeavesOfType(b)[0];if(e){this.app.workspace.revealLeaf(e);return}leti=this.app.workspace.getRightLeaf(!1);i&&(awaiti.setViewState({type:b,active:!0}),this.app.workspace.revealLeaf(i))}refreshReminderViews(){for(leteofthis.app.workspace.getLeavesOfType(b)){leti=e.view;iinstanceofk&&i.refresh()}}registerCommands(){this.addCommand({id:"create-reminder",name:"Create reminder",callback:()=>{newS(this.app,this.store.getSettings().defaultChannels,asynce=>{awaitthis.store.add(e,this.store.getSettings().defaultChannels),this.refreshReminderViews(),newp.Notice("Reminder created.")}).open()}}),this.addCommand({id:"create-reminder-from-selection",name:"Create reminder from selected text",editorCallback:e=>{leti=e.getSelection();newS(this.app,this.store.getSettings().defaultChannels,asyncr=>{awaitthis.store.add(r,this.store.getSettings().defaultChannels),this.refreshReminderViews(),newp.Notice("Reminder created.")},i).open()}}),this.addCommand({id:"show-active-reminders",name:"Show active reminders",callback:()=>{this.activateReminderView()}}),this.addCommand({id:"show-all-reminders",name:"Show all reminders",callback:()=>{this.activateReminderView()}}),this.addCommand({id:"scan-current-note",name:"Scan current note for reminders",checkCallback:e=>{leti=this.app.workspace.getActiveFile();returni?(e||this.scanCurrentFile(i),!0):!1}}),this.addCommand({id:"scan-vault",name:"Scan vault for reminders",callback:async()=>{lete=awaitthis.scheduler.scanVault();newp.Notice(`Indexed ${e} reminders.`)}}),this.addCommand({id:"test-notification-providers",name:"Test notification providers",callback:async()=>{lete=this.store.getSettings().notificationProviders.filter(i=>i.enabled);for(letiofe)awaitthis.testProvider(i);newp.Notice(`Tested ${e.length} providers.`)}})}registerRibbonActions(){this.addRibbonIcon("bell-plus","Create reminder",()=>{newS(this.app,this.store.getSettings().defaultChannels,asynce=>{awa