- Rewrite folder-relative wikilinks (resolved from vault root) to unique basenames or full vault-root paths so they actually resolve in Obsidian - Fix malformed table links with spaces around the | alias separator - Plugin updates from Obsidian (any-block, omnisearch, quickadd, etc.)
48 lines
100 KiB
JavaScript
48 lines
100 KiB
JavaScript
/*
|
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
if you want to view the source, please visit the github repository of this plugin
|
|
*/
|
|
|
|
var F=Object.defineProperty;var Fe=Object.getOwnPropertyDescriptor;var Ve=Object.getOwnPropertyNames;var We=Object.prototype.hasOwnProperty;var Ge=(c,n,e)=>n in c?F(c,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):c[n]=e;var Ue=(c,n)=>{for(var e in n)F(c,e,{get:n[e],enumerable:!0})},Je=(c,n,e,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of Ve(n))!We.call(c,o)&&o!==e&&F(c,o,{get:()=>n[o],enumerable:!(t=Fe(n,o))||t.enumerable});return c};var Ke=c=>Je(F({},"__esModule",{value:!0}),c);var u=(c,n,e)=>Ge(c,typeof n!="symbol"?n+"":n,e);var st={};Ue(st,{default:()=>ee});module.exports=Ke(st);var f=require("obsidian");var re='<svg viewBox="0 0 100 100" class="add-admonition-command"><path fill="currentColor" stroke="currentColor" d="M37,16c-4.4,0-8.3,3.3-9.2,7.6l-11.6,52c-0.5,2.2,0,4.3,1.2,5.9c1.2,1.6,3.2,2.6,5.4,2.6H79c4.4,0,8.3-3.3,9.2-7.6 l11.6-52c0.5-2.2,0-4.3-1.2-5.9C97.4,17,95.4,16,93.2,16L37,16z M37,20h56.2c1.1,0,1.8,0.4,2.2,1c0.5,0.6,0.7,1.4,0.4,2.6l-1,4.4 H30.8l0.8-3.6C32.1,22.2,34.8,20,37,20z M29.9,32H94l-9.6,43.6C83.9,77.8,81.2,80,79,80H22.8c-1.1,0-1.8-0.4-2.2-1 c-0.5-0.6-0.7-1.4-0.4-2.6L29.9,32z M0,36v4h19.6l0.9-4L0,36z M36.7,38c-0.8,0.1-1.4,0.7-1.6,1.5l-3.5,14c-0.2,0.6,0,1.2,0.4,1.7 c0.4,0.5,1,0.8,1.6,0.8H81c0.9,0,1.7-0.6,1.9-1.5l3.5-14c0.2-0.6,0-1.3-0.4-1.8c-0.4-0.5-1-0.8-1.6-0.8H37.1c-0.1,0-0.1,0-0.2,0 C36.9,38,36.8,38,36.7,38L36.7,38z M38.7,42h43.2l-2.4,10H36.2L38.7,42z M0,52v4h16l0.9-4H0z M0,68v4h12.4l0.9-4H0z"></path><circle fill="white" transform="translate(50 50) scale(3 3)" cx="8" cy="8" r="8"/><path fill="green" transform="translate(50 50) scale(3 3)" d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v3h-3a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3v-3z"/></svg>',V="admonition-add-command",le='<svg viewBox="0 0 100 100" class="remove-admonition-command"><path fill="currentColor" stroke="currentColor" d="M37,16c-4.4,0-8.3,3.3-9.2,7.6l-11.6,52c-0.5,2.2,0,4.3,1.2,5.9c1.2,1.6,3.2,2.6,5.4,2.6H79c4.4,0,8.3-3.3,9.2-7.6 l11.6-52c0.5-2.2,0-4.3-1.2-5.9C97.4,17,95.4,16,93.2,16L37,16z M37,20h56.2c1.1,0,1.8,0.4,2.2,1c0.5,0.6,0.7,1.4,0.4,2.6l-1,4.4 H30.8l0.8-3.6C32.1,22.2,34.8,20,37,20z M29.9,32H94l-9.6,43.6C83.9,77.8,81.2,80,79,80H22.8c-1.1,0-1.8-0.4-2.2-1 c-0.5-0.6-0.7-1.4-0.4-2.6L29.9,32z M0,36v4h19.6l0.9-4L0,36z M36.7,38c-0.8,0.1-1.4,0.7-1.6,1.5l-3.5,14c-0.2,0.6,0,1.2,0.4,1.7 c0.4,0.5,1,0.8,1.6,0.8H81c0.9,0,1.7-0.6,1.9-1.5l3.5-14c0.2-0.6,0-1.3-0.4-1.8c-0.4-0.5-1-0.8-1.6-0.8H37.1c-0.1,0-0.1,0-0.2,0 C36.9,38,36.8,38,36.7,38L36.7,38z M38.7,42h43.2l-2.4,10H36.2L38.7,42z M0,52v4h16l0.9-4H0z M0,68v4h12.4l0.9-4H0z"></path><circle fill="white" transform="translate(50 50) scale(3 3)" cx="8" cy="8" r="8"/><path fill="#dc3545" transform="translate(50 50) scale(3 3)" d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM4.5 7.5a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1h-7z"/></svg>',W="admonition-remove-command",ce='<svg fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!-- Font Awesome Pro 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) --><path d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/></svg>',de="admonition-warning",pe='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --><path d="M304 48C304 74.51 282.5 96 256 96C229.5 96 208 74.51 208 48C208 21.49 229.5 0 256 0C282.5 0 304 21.49 304 48zM304 464C304 490.5 282.5 512 256 512C229.5 512 208 490.5 208 464C208 437.5 229.5 416 256 416C282.5 416 304 437.5 304 464zM0 256C0 229.5 21.49 208 48 208C74.51 208 96 229.5 96 256C96 282.5 74.51 304 48 304C21.49 304 0 282.5 0 256zM512 256C512 282.5 490.5 304 464 304C437.5 304 416 282.5 416 256C416 229.5 437.5 208 464 208C490.5 208 512 229.5 512 256zM74.98 437C56.23 418.3 56.23 387.9 74.98 369.1C93.73 350.4 124.1 350.4 142.9 369.1C161.6 387.9 161.6 418.3 142.9 437C124.1 455.8 93.73 455.8 74.98 437V437zM142.9 142.9C124.1 161.6 93.73 161.6 74.98 142.9C56.24 124.1 56.24 93.73 74.98 74.98C93.73 56.23 124.1 56.23 142.9 74.98C161.6 93.73 161.6 124.1 142.9 142.9zM369.1 369.1C387.9 350.4 418.3 350.4 437 369.1C455.8 387.9 455.8 418.3 437 437C418.3 455.8 387.9 455.8 369.1 437C350.4 418.3 350.4 387.9 369.1 369.1V369.1z"/></svg>',ue="admonition-spin",y=c=>({type:"obsidian",name:c}),me={note:{type:"note",icon:y("lucide-pencil"),color:"var(--callout-default)",command:!1,noTitle:!1},seealso:{type:"note",icon:y("lucide-pencil"),color:"var(--callout-default)",command:!1,noTitle:!1},abstract:{type:"abstract",icon:y("lucide-clipboard-list"),color:"var(--callout-summary)",command:!1,noTitle:!1},summary:{type:"abstract",icon:y("lucide-clipboard-list"),color:"var(--callout-summary)",command:!1,noTitle:!1},tldr:{type:"abstract",icon:y("lucide-clipboard-list"),color:"var(--callout-summary)",command:!1,noTitle:!1},info:{type:"info",icon:y("lucide-info"),color:"var(--callout-info)",command:!1,noTitle:!1},todo:{type:"todo",icon:y("lucide-check-circle-2"),color:"var(--callout-todo)",command:!1,noTitle:!1},tip:{type:"tip",icon:y("lucide-flame"),color:"var(--callout-tip)",command:!1,noTitle:!1},hint:{type:"tip",icon:y("lucide-flame"),color:"var(--callout-tip)",command:!1,noTitle:!1},important:{type:"tip",icon:y("lucide-flame"),color:"var(--callout-important)",command:!1,noTitle:!1},success:{type:"success",icon:y("lucide-check"),color:"var(--callout-success)",command:!1,noTitle:!1},check:{type:"success",icon:y("lucide-check"),color:"var(--callout-success)",command:!1,noTitle:!1},done:{type:"success",icon:y("lucide-check"),color:"var(--callout-success)",command:!1,noTitle:!1},question:{type:"question",icon:y("help-circle"),color:"var(--callout-question)",command:!1,noTitle:!1},help:{type:"question",icon:y("help-circle"),color:"var(--callout-question)",command:!1,noTitle:!1},faq:{type:"question",icon:y("help-circle"),color:"var(--callout-question)",command:!1,noTitle:!1},warning:{type:"warning",icon:y("lucide-alert-triangle"),color:"var(--callout-warning)",command:!1,noTitle:!1},caution:{type:"warning",icon:y("lucide-alert-triangle"),color:"var(--callout-warning)",command:!1,noTitle:!1},attention:{type:"warning",icon:y("lucide-alert-triangle"),color:"var(--callout-warning)",command:!1,noTitle:!1},failure:{type:"failure",icon:y("lucide-x"),color:"var(--callout-fail)",command:!1,noTitle:!1},fail:{type:"failure",icon:y("lucide-x"),color:"var(--callout-fail)",command:!1,noTitle:!1},missing:{type:"failure",icon:y("lucide-x"),color:"var(--callout-fail)",command:!1,noTitle:!1},danger:{type:"danger",icon:y("lucide-zap"),color:"var(--callout-error)",command:!1,noTitle:!1},error:{type:"danger",icon:y("lucide-zap"),color:"var(--callout-error)",command:!1,noTitle:!1},bug:{type:"bug",icon:y("lucide-bug"),color:"var(--callout-bug)",command:!1,noTitle:!1},example:{type:"example",icon:y("lucide-list"),color:"var(--callout-example)",command:!1,noTitle:!1},quote:{type:"quote",icon:y("quote-glyph"),color:"var(--callout-quote)",command:!1,noTitle:!1},cite:{type:"quote",icon:y("quote-glyph"),color:"var(--callout-quote)",command:!1,noTitle:!1}};var Qe="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla.";function G(c,n,e,t,o){c.empty();let i=n.getAdmonitionElement(e.type,t,n.isIconWithCss(e)?{}:e.icon,n.shouldInjectColor(e)?e.color:void 0,o);return i.createDiv("callout-content admonition-content").createEl("p",{text:Qe}),c.appendChild(i),i}var he=require("obsidian");function Ye(c,n){for(let e=0;e<n.length;e++)if(c.startsWith(n[e]))return e;return!1}function ge(c,n,e){let t=e.title??c[0].toUpperCase()+c.slice(1).toLowerCase(),o=["title:","collapse:","icon:","color:","metadata:"],i=["title","collapse","icon","color","metadata"],a=n.split(`
|
|
`),s=0,r={};for(let b=0;b<a.length;b++){let k=Ye(a[b],o);if(k===!1)break;let v=i[k];if(r[v]!==void 0)break;r[v]=a[b].slice(o[k].length).trim(),++s}let{title:m,collapse:d,icon:g,color:h,metadata:p}=r;if(h&&/^\d+,\s*\d+,\s*\d+$/.test(h)&&(h=`rgb(${h})`),h&&(h.startsWith("hsb")||h.startsWith("hsv"))){let[b,k,v]=h.slice(4,-1).split(",").map(C=>Number(C.replace("%","").trim())),[E,T,I]=Xe(b,k,v);h=`rgb(${E}, ${T}, ${I})`}let w=a.slice(s).join(`
|
|
`);return d!==void 0&&d!=="none"&&d!=="open"&&d!=="closed"&&(d="closed"),"title"in r||e.noTitle||(m=t),m&&m.trim()===""&&d!==void 0&&d!=="none"&&(m=t,new he.Notice("An admonition must have a title if it is collapsible.")),{title:m,collapse:d,content:w,icon:g,color:h,metadata:p}}function Xe(c,n,e){let t=c/360,o=n/100,i=e/100,a=0,s=0,r=0,m=Math.floor(t*6),d=t*6-m,g=i*(1-o),h=i*(1-d*o),p=i*(1-(1-d)*o);switch(m%6){case 0:a=i,s=p,r=g;break;case 1:a=h,s=i,r=g;break;case 2:a=g,s=i,r=p;break;case 3:a=g,s=h,r=i;break;case 4:a=p,s=g,r=i;break;case 5:a=i,s=g,r=h;break}return[Math.round(a*255),Math.round(s*255),Math.round(r*255)]}var D=require("obsidian");var z=class extends D.Component{constructor(e){super();u(this,"plugin",e);u(this,"style");u(this,"heights",["height","padding-top","padding-bottom","margin-top","margin-bottom"]);u(this,"heightMap",new WeakMap);u(this,"indexing",[]);this.style=activeDocument.head.createEl("style",{attr:{id:"ADMONITIONS_CUSTOM_STYLE_SHEET"}})}get sheet(){return this.style.sheet}onload(){activeDocument.head.appendChild(this.style);for(let e of Object.values(this.plugin.data.userAdmonitions))this.addAdmonition(e);this.setUseSnippet()}calloutProcessor(e,t){let o=e?.querySelector(".callout");if(!o)return;let i=o.dataset.callout,a=i?this.plugin.admonitions[i]:void 0;if(!a)return;let s=o.querySelector(".callout-title"),r=o.querySelector(".callout-content");if(!s||!r)return;let m=t.getSectionInfo(e);if(m){let{text:g,lineStart:h,lineEnd:p}=m,w=g.split(`
|
|
`)[h],[,b]=w.match(/> \[!.+\|(.*)]/)??[];if(b&&(o.dataset.calloutMetadata=b),r&&(a.copy??this.plugin.data.copyButton)){let k=r.createDiv("admonition-content-copy");(0,D.setIcon)(k,"copy"),k.addEventListener("click",()=>{navigator.clipboard.writeText(g.split(`
|
|
`).slice(h+1,p+1).join(`
|
|
`).replace(/^> /gm,"")).then(()=>{new D.Notice("Callout content copied to clipboard.")})})}}a.noTitle&&!o.dataset.calloutFold&&s.querySelector(".callout-title-inner")?.textContent?.toLowerCase()===a.type.toLowerCase()&&s.addClass("no-title"),!a.noTitle&&this.plugin.data.autoCollapse&&!o.dataset.calloutFold&&this.setCollapsible(o);let d=s?.querySelector(".callout-title-inner");if(d&&a.title){let g=d.textContent?.toLowerCase()??"";(g===i?.toLowerCase()||g==="")&&d.setText(a.title)}this.plugin.data.dropShadow&&o.addClass("drop-shadow")}setCollapsible(e){let t=e.querySelector(".callout-title"),o=e.querySelector(".callout-content");if(!o||!t)return;e.addClass("is-collapsible"),this.plugin.data.defaultCollapseType==="closed"?(e.dataset.calloutFold="-",e.addClass("is-collapsed")):e.dataset.calloutFold="+";let i=t.createDiv("callout-fold");(0,D.setIcon)(i,"chevron-down");let a=e.hasClass("is-collapsed");if(this.getComputedHeights(o),a){let s={};for(let r of this.heights)s[r]="0px";o.setCssStyles(s)}t.onclick=s=>{this.collapse(e,s)}}collapse(e,t){t?.preventDefault();let o=e.querySelector(".callout-content");if(!o)return;let i=s=>{o.removeEventListener("transitionend",i),o.style.removeProperty("transition")};o.addEventListener("transitionend",i),o.setCssStyles({transition:"all 100ms cubic-bezier(.02, .01, .47, 1)"});let a=e.hasClass("is-collapsed");if(!t||t.button===0){let s=this.getComputedHeights(o);for(let r of this.heights)o.style.setProperty(r,a?s[r]:"0px");e.toggleClass("is-collapsed",!a)}}getComputedHeights(e){if(this.heightMap.has(e))return this.heightMap.get(e);let t=getComputedStyle(e),o={};for(let i of this.heights)o[i]=t.getPropertyValue(i);return this.heightMap.set(e,o),o}generateCssString(){let e=[`/* This snippet was auto-generated by the Admonitions plugin */
|
|
|
|
`];for(let t of Array.from(this.sheet.cssRules))e.push(t.cssText);return e.join(`
|
|
|
|
`)}addAdmonition(e){if(!this.sheet)return;let t=e.type.toLowerCase();if(this.indexing.contains(t)){let s=this.indexing.indexOf(t);this.sheet.deleteRule(s),this.indexing.splice(s,1)}if(this.plugin.isIconWithCss(e)){this.updateSnippet();return}let o=this.plugin.shouldInjectColor(e)?`--callout-color: ${e.color};`:"",i="";if(e.icon?.name&&e.icon?.type&&(e.icon.type==="obsidian"?i=`--callout-icon: ${e.icon.name}; /* Icon name from the Obsidian Icon Set */`:i=`--callout-icon: "${(this.plugin.iconManager.getIconNode(e.icon)?.outerHTML??"").replace(/(width|height)=(\\?"|')\d+(\\?"|')/g,"").replace(/"/g,'\\"')}";`),!o&&!i){this.updateSnippet();return}let a=`.callout[data-callout="${t}"] {
|
|
${o}
|
|
${i}
|
|
}`;this.indexing=[...this.indexing.filter(s=>s!==t),t],this.sheet.insertRule(a,this.sheet.cssRules.length),this.updateSnippet()}removeAdmonition(e){if(!this.sheet||!this.indexing.contains(e.type))return;let t=this.indexing.indexOf(e.type);this.sheet.deleteRule(t),this.indexing.splice(t,1),this.updateSnippet()}unload(){this.style.detach()}get snippetPath(){return this.plugin.app.customCss.getSnippetPath(this.plugin.data.snippetPath)}setUseSnippet(){this.plugin.data.useSnippet?this.updateSnippet():(this.plugin.app.customCss.setCssEnabledStatus(this.plugin.data.snippetPath,!1),this.plugin.app.customCss.readSnippets(),this.plugin.data.snippetPath&&this.plugin.app.vault.adapter.remove(this.snippetPath).catch(()=>{}))}async updateSnippet(){if(!this.plugin.data.useSnippet)return;let e=this.snippetPath,t=e.substring(0,e.lastIndexOf("/"));await this.plugin.app.vault.adapter.exists(t)||await this.plugin.app.vault.adapter.mkdir(t),await this.plugin.app.vault.adapter.write(e,this.generateCssString()),this.plugin.app.customCss.setCssEnabledStatus(this.plugin.data.snippetPath,!0),this.plugin.app.customCss.readSnippets()}};var q=require("obsidian");var U={fas:["0","1","2","3","4","5","6","7","8","9","a","address-book","address-book","address-card","address-card","address-card","alarm-clock","align-center","align-justify","align-left","align-right","anchor","anchor-circle-check","anchor-circle-exclamation","anchor-circle-xmark","anchor-lock","angle-down","angle-left","angle-right","angle-up","angles-down","angles-down","angles-left","angles-left","angles-right","angles-right","angles-up","angles-up","ankh","apple-whole","apple-whole","aquarius","archway","aries","arrow-down","arrow-down-1-9","arrow-down-1-9","arrow-down-1-9","arrow-down-9-1","arrow-down-9-1","arrow-down-9-1","arrow-down-a-z","arrow-down-a-z","arrow-down-a-z","arrow-down-long","arrow-down-long","arrow-down-short-wide","arrow-down-short-wide","arrow-down-short-wide","arrow-down-up-across-line","arrow-down-up-lock","arrow-down-wide-short","arrow-down-wide-short","arrow-down-wide-short","arrow-down-z-a","arrow-down-z-a","arrow-down-z-a","arrow-left","arrow-left-long","arrow-left-long","arrow-pointer","arrow-pointer","arrow-right","arrow-right-arrow-left","arrow-right-arrow-left","arrow-right-from-bracket","arrow-right-from-bracket","arrow-right-long","arrow-right-long","arrow-right-to-bracket","arrow-right-to-bracket","arrow-right-to-city","arrow-rotate-left","arrow-rotate-left","arrow-rotate-left","arrow-rotate-left","arrow-rotate-left","arrow-rotate-right","arrow-rotate-right","arrow-rotate-right","arrow-rotate-right","arrow-trend-down","arrow-trend-up","arrow-turn-down","arrow-turn-down","arrow-turn-up","arrow-turn-up","arrow-up","arrow-up-1-9","arrow-up-1-9","arrow-up-9-1","arrow-up-9-1","arrow-up-a-z","arrow-up-a-z","arrow-up-from-bracket","arrow-up-from-ground-water","arrow-up-from-water-pump","arrow-up-long","arrow-up-long","arrow-up-right-dots","arrow-up-right-from-square","arrow-up-right-from-square","arrow-up-short-wide","arrow-up-short-wide","arrow-up-wide-short","arrow-up-wide-short","arrow-up-z-a","arrow-up-z-a","arrows-down-to-line","arrows-down-to-people","arrows-left-right","arrows-left-right","arrows-left-right-to-line","arrows-rotate","arrows-rotate","arrows-rotate","arrows-spin","arrows-split-up-and-left","arrows-to-circle","arrows-to-dot","arrows-to-eye","arrows-turn-right","arrows-turn-to-dots","arrows-up-down","arrows-up-down","arrows-up-down-left-right","arrows-up-down-left-right","arrows-up-to-line","asterisk","at","atom","audio-description","austral-sign","award","b","baby","baby-carriage","baby-carriage","backward","backward-fast","backward-fast","backward-step","backward-step","bacon","bacteria","bacterium","bag-shopping","bag-shopping","bahai","bahai","baht-sign","ban","ban","ban-smoking","ban-smoking","bandage","bandage","bangladeshi-taka-sign","barcode","bars","bars","bars-progress","bars-progress","bars-staggered","bars-staggered","bars-staggered","baseball","baseball","baseball-bat-ball","basket-shopping","basket-shopping","basketball","basketball","bath","bath","battery-empty","battery-empty","battery-full","battery-full","battery-full","battery-half","battery-half","battery-quarter","battery-quarter","battery-three-quarters","battery-three-quarters","bed","bed-pulse","bed-pulse","beer-mug-empty","beer-mug-empty","bell","bell-concierge","bell-concierge","bell-slash","bezier-curve","bicycle","binoculars","biohazard","bitcoin-sign","blender","blender-phone","blog","bold","bolt","bolt","bolt-lightning","bomb","bone","bong","book","book-atlas","book-atlas","book-bible","book-bible","book-bookmark","book-journal-whills","book-journal-whills","book-medical","book-open","book-open-reader","book-open-reader","book-quran","book-quran","book-skull","book-skull","book-tanakh","book-tanakh","bookmark","border-all","border-none","border-top-left","border-top-left","bore-hole","bottle-droplet","bottle-water","bowl-food","bowl-rice","bowling-ball","box","box-archive","box-archive","box-open","box-tissue","boxes-packing","boxes-stacked","boxes-stacked","boxes-stacked","braille","brain","brazilian-real-sign","bread-slice","bridge","bridge-circle-check","bridge-circle-exclamation","bridge-circle-xmark","bridge-lock","bridge-water","briefcase","briefcase-medical","broom","broom-ball","broom-ball","broom-ball","brush","bucket","bug","bug-slash","bugs","building","building-circle-arrow-right","building-circle-check","building-circle-exclamation","building-circle-xmark","building-columns","building-columns","building-columns","building-columns","building-columns","building-flag","building-lock","building-ngo","building-shield","building-un","building-user","building-wheat","bullhorn","bullseye","burger","burger","burst","bus","bus-side","bus-simple","bus-simple","business-time","business-time","c","cable-car","cable-car","cake-candles","cake-candles","cake-candles","calculator","calendar","calendar-check","calendar-day","calendar-days","calendar-days","calendar-minus","calendar-plus","calendar-week","calendar-xmark","calendar-xmark","camera","camera","camera-retro","camera-rotate","campground","cancer","candy-cane","cannabis","capricorn","capsules","car","car","car-battery","car-battery","car-burst","car-burst","car-on","car-rear","car-rear","car-side","car-tunnel","caravan","caret-down","caret-left","caret-right","caret-up","carrot","cart-arrow-down","cart-flatbed","cart-flatbed","cart-flatbed-suitcase","cart-flatbed-suitcase","cart-plus","cart-shopping","cart-shopping","cash-register","cat","cedi-sign","cent-sign","certificate","chair","chalkboard","chalkboard","chalkboard-user","chalkboard-user","champagne-glasses","champagne-glasses","charging-station","chart-area","chart-area","chart-bar","chart-bar","chart-column","chart-diagram","chart-gantt","chart-line","chart-line","chart-pie","chart-pie","chart-simple","check","check-double","check-to-slot","check-to-slot","cheese","chess","chess-bishop","chess-board","chess-king","chess-knight","chess-pawn","chess-queen","chess-rook","chevron-down","chevron-left","chevron-right","chevron-up","child","child-combatant","child-combatant","child-dress","child-reaching","children","church","circle","circle-arrow-down","circle-arrow-down","circle-arrow-left","circle-arrow-left","circle-arrow-right","circle-arrow-right","circle-arrow-up","circle-arrow-up","circle-check","circle-check","circle-chevron-down","circle-chevron-down","circle-chevron-left","circle-chevron-left","circle-chevron-right","circle-chevron-right","circle-chevron-up","circle-chevron-up","circle-dollar-to-slot","circle-dollar-to-slot","circle-dot","circle-dot","circle-down","circle-down","circle-exclamation","circle-exclamation","circle-h","circle-h","circle-half-stroke","circle-half-stroke","circle-info","circle-info","circle-left","circle-left","circle-minus","circle-minus","circle-nodes","circle-notch","circle-pause","circle-pause","circle-play","circle-play","circle-plus","circle-plus","circle-question","circle-question","circle-radiation","circle-radiation","circle-right","circle-right","circle-stop","circle-stop","circle-up","circle-up","circle-user","circle-user","circle-xmark","circle-xmark","circle-xmark","city","clapperboard","clipboard","clipboard-check","clipboard-list","clipboard-question","clipboard-user","clock","clock","clock-rotate-left","clock-rotate-left","clone","closed-captioning","closed-captioning-slash","cloud","cloud-arrow-down","cloud-arrow-down","cloud-arrow-down","cloud-arrow-up","cloud-arrow-up","cloud-arrow-up","cloud-bolt","cloud-bolt","cloud-meatball","cloud-moon","cloud-moon-rain","cloud-rain","cloud-showers-heavy","cloud-showers-water","cloud-sun","cloud-sun-rain","clover","code","code-branch","code-commit","code-compare","code-fork","code-merge","code-pull-request","coins","colon-sign","comment","comment-dollar","comment-dots","comment-dots","comment-medical","comment-nodes","comment-slash","comment-sms","comment-sms","comments","comments-dollar","compact-disc","compass","compass-drafting","compass-drafting","compress","computer","computer-mouse","computer-mouse","cookie","cookie-bite","copy","copyright","couch","cow","credit-card","credit-card","crop","crop-simple","crop-simple","cross","crosshairs","crow","crown","crutch","cruzeiro-sign","cube","cubes","cubes-stacked","d","database","delete-left","delete-left","democrat","desktop","desktop","dharmachakra","diagram-next","diagram-predecessor","diagram-project","diagram-project","diagram-successor","diamond","diamond-turn-right","diamond-turn-right","dice","dice-d20","dice-d6","dice-five","dice-four","dice-one","dice-six","dice-three","dice-two","disease","display","divide","dna","dog","dollar-sign","dollar-sign","dollar-sign","dolly","dolly","dong-sign","door-closed","door-open","dove","down-left-and-up-right-to-center","down-left-and-up-right-to-center","down-long","down-long","download","dragon","draw-polygon","draw-polygon","droplet","droplet","droplet-slash","droplet-slash","drum","drum-steelpan","drumstick-bite","dumbbell","dumpster","dumpster-fire","dungeon","e","ear-deaf","ear-deaf","ear-deaf","ear-deaf","ear-listen","ear-listen","earth-africa","earth-africa","earth-americas","earth-americas","earth-americas","earth-americas","earth-asia","earth-asia","earth-europe","earth-europe","earth-oceania","earth-oceania","egg","eject","elevator","ellipsis","ellipsis","ellipsis-vertical","ellipsis-vertical","envelope","envelope-circle-check","envelope-open","envelope-open-text","envelopes-bulk","envelopes-bulk","equals","eraser","ethernet","euro-sign","euro-sign","euro-sign","exclamation","expand","explosion","eye","eye-dropper","eye-dropper","eye-dropper","eye-low-vision","eye-low-vision","eye-slash","f","face-angry","face-angry","face-dizzy","face-dizzy","face-flushed","face-flushed","face-frown","face-frown","face-frown-open","face-frown-open","face-grimace","face-grimace","face-grin","face-grin","face-grin-beam","face-grin-beam","face-grin-beam-sweat","face-grin-beam-sweat","face-grin-hearts","face-grin-hearts","face-grin-squint","face-grin-squint","face-grin-squint-tears","face-grin-squint-tears","face-grin-stars","face-grin-stars","face-grin-tears","face-grin-tears","face-grin-tongue","face-grin-tongue","face-grin-tongue-squint","face-grin-tongue-squint","face-grin-tongue-wink","face-grin-tongue-wink","face-grin-wide","face-grin-wide","face-grin-wink","face-grin-wink","face-kiss","face-kiss","face-kiss-beam","face-kiss-beam","face-kiss-wink-heart","face-kiss-wink-heart","face-laugh","face-laugh","face-laugh-beam","face-laugh-beam","face-laugh-squint","face-laugh-squint","face-laugh-wink","face-laugh-wink","face-meh","face-meh","face-meh-blank","face-meh-blank","face-rolling-eyes","face-rolling-eyes","face-sad-cry","face-sad-cry","face-sad-tear","face-sad-tear","face-smile","face-smile","face-smile-beam","face-smile-beam","face-smile-wink","face-smile-wink","face-surprise","face-surprise","face-tired","face-tired","fan","faucet","faucet-drip","fax","feather","feather-pointed","feather-pointed","ferry","file","file-arrow-down","file-arrow-down","file-arrow-up","file-arrow-up","file-audio","file-circle-check","file-circle-exclamation","file-circle-minus","file-circle-plus","file-circle-question","file-circle-xmark","file-code","file-contract","file-csv","file-excel","file-export","file-export","file-fragment","file-half-dashed","file-image","file-import","file-import","file-invoice","file-invoice-dollar","file-lines","file-lines","file-lines","file-medical","file-pdf","file-pen","file-pen","file-powerpoint","file-prescription","file-shield","file-signature","file-video","file-waveform","file-waveform","file-word","file-zipper","file-zipper","fill","fill-drip","film","film","film","filter","filter-circle-dollar","filter-circle-dollar","filter-circle-xmark","fingerprint","fire","fire-burner","fire-extinguisher","fire-flame-curved","fire-flame-curved","fire-flame-simple","fire-flame-simple","fish","fish-fins","flag","flag-checkered","flag-usa","flask","flask-vial","floppy-disk","floppy-disk","florin-sign","folder","folder","folder-closed","folder-minus","folder-open","folder-plus","folder-tree","font","font-awesome","font-awesome","font-awesome","football","football","forward","forward-fast","forward-fast","forward-step","forward-step","franc-sign","frog","futbol","futbol","futbol","g","gamepad","gas-pump","gauge","gauge","gauge","gauge","gauge-high","gauge-high","gauge-high","gauge-simple","gauge-simple","gauge-simple","gauge-simple-high","gauge-simple-high","gauge-simple-high","gavel","gavel","gear","gear","gears","gears","gem","gemini","genderless","ghost","gift","gifts","glass-water","glass-water-droplet","glasses","globe","golf-ball-tee","golf-ball-tee","gopuram","graduation-cap","graduation-cap","greater-than","greater-than-equal","grip","grip","grip","grip-lines","grip-lines-vertical","grip-vertical","grip-vertical","group-arrows-rotate","guarani-sign","guitar","gun","h","hammer","hamsa","hand","hand","hand-back-fist","hand-back-fist","hand-dots","hand-dots","hand-fist","hand-fist","hand-holding","hand-holding-dollar","hand-holding-dollar","hand-holding-droplet","hand-holding-droplet","hand-holding-hand","hand-holding-heart","hand-holding-medical","hand-lizard","hand-middle-finger","hand-peace","hand-point-down","hand-point-left","hand-point-right","hand-point-up","hand-pointer","hand-scissors","hand-sparkles","hand-spock","handcuffs","hands","hands","hands","hands-asl-interpreting","hands-asl-interpreting","hands-asl-interpreting","hands-asl-interpreting","hands-bound","hands-bubbles","hands-bubbles","hands-clapping","hands-holding","hands-holding-child","hands-holding-circle","hands-praying","hands-praying","handshake","handshake","handshake","handshake-angle","handshake-angle","handshake-slash","handshake-slash","handshake-slash","hanukiah","hard-drive","hard-drive","hashtag","hat-cowboy","hat-cowboy-side","hat-wizard","head-side-cough","head-side-cough-slash","head-side-mask","head-side-virus","heading","heading","headphones","headphones","headphones","headset","heart","heart-circle-bolt","heart-circle-check","heart-circle-exclamation","heart-circle-minus","heart-circle-plus","heart-circle-xmark","heart-crack","heart-crack","heart-pulse","heart-pulse","helicopter","helicopter-symbol","helmet-safety","helmet-safety","helmet-safety","helmet-un","hexagon","hexagon-nodes","hexagon-nodes-bolt","highlighter","hill-avalanche","hill-rockslide","hippo","hockey-puck","holly-berry","horse","horse-head","hospital","hospital","hospital","hospital-user","hot-tub-person","hot-tub-person","hotdog","hotel","hourglass","hourglass","hourglass-end","hourglass-end","hourglass-half","hourglass-half","hourglass-start","hourglass-start","house","house","house","house","house-chimney","house-chimney","house-chimney-crack","house-chimney-crack","house-chimney-medical","house-chimney-medical","house-chimney-user","house-chimney-window","house-circle-check","house-circle-exclamation","house-circle-xmark","house-crack","house-fire","house-flag","house-flood-water","house-flood-water-circle-arrow-right","house-laptop","house-laptop","house-lock","house-medical","house-medical-circle-check","house-medical-circle-exclamation","house-medical-circle-xmark","house-medical-flag","house-signal","house-tsunami","house-user","house-user","hryvnia-sign","hryvnia-sign","hurricane","i","i-cursor","ice-cream","icicles","icons","icons","id-badge","id-card","id-card","id-card-clip","id-card-clip","igloo","image","image-portrait","image-portrait","images","inbox","indent","indian-rupee-sign","indian-rupee-sign","indian-rupee-sign","industry","infinity","info","italic","j","jar","jar-wheat","jedi","jet-fighter","jet-fighter","jet-fighter-up","joint","jug-detergent","k","kaaba","key","keyboard","khanda","kip-sign","kit-medical","kit-medical","kitchen-set","kiwi-bird","l","land-mine-on","landmark","landmark-dome","landmark-dome","landmark-flag","language","laptop","laptop-code","laptop-file","laptop-medical","lari-sign","layer-group","leaf","left-long","left-long","left-right","left-right","lemon","leo","less-than","less-than-equal","libra","life-ring","lightbulb","lines-leaning","link","link","link-slash","link-slash","link-slash","link-slash","lira-sign","list","list","list-check","list-check","list-ol","list-ol","list-ol","list-ul","list-ul","litecoin-sign","location-arrow","location-crosshairs","location-crosshairs","location-dot","location-dot","location-pin","location-pin","location-pin-lock","lock","lock-open","locust","lungs","lungs-virus","m","magnet","magnifying-glass","magnifying-glass","magnifying-glass-arrow-right","magnifying-glass-chart","magnifying-glass-dollar","magnifying-glass-dollar","magnifying-glass-location","magnifying-glass-location","magnifying-glass-minus","magnifying-glass-minus","magnifying-glass-plus","magnifying-glass-plus","manat-sign","map","map-location","map-location","map-location-dot","map-location-dot","map-pin","marker","mars","mars-and-venus","mars-and-venus-burst","mars-double","mars-stroke","mars-stroke-right","mars-stroke-right","mars-stroke-up","mars-stroke-up","martini-glass","martini-glass","martini-glass-citrus","martini-glass-citrus","martini-glass-empty","martini-glass-empty","mask","mask-face","mask-ventilator","masks-theater","masks-theater","mattress-pillow","maximize","maximize","medal","memory","menorah","mercury","message","message","meteor","microchip","microphone","microphone-lines","microphone-lines","microphone-lines-slash","microphone-lines-slash","microphone-slash","microscope","mill-sign","minimize","minimize","minus","minus","mitten","mobile","mobile","mobile","mobile-button","mobile-retro","mobile-screen","mobile-screen","mobile-screen-button","mobile-screen-button","mobile-vibrate","money-bill","money-bill-1","money-bill-1","money-bill-1-wave","money-bill-1-wave","money-bill-transfer","money-bill-trend-up","money-bill-wave","money-bill-wheat","money-bills","money-check","money-check-dollar","money-check-dollar","monument","moon","mortar-pestle","mosque","mosquito","mosquito-net","motorcycle","mound","mountain","mountain-city","mountain-sun","mug-hot","mug-saucer","mug-saucer","music","n","naira-sign","network-wired","neuter","newspaper","non-binary","not-equal","notdef","note-sticky","note-sticky","notes-medical","o","object-group","object-ungroup","octagon","oil-can","oil-well","om","otter","outdent","outdent","p","pager","paint-roller","paintbrush","paintbrush","palette","pallet","panorama","paper-plane","paperclip","parachute-box","paragraph","passport","paste","paste","pause","paw","peace","pen","pen-clip","pen-clip","pen-fancy","pen-nib","pen-ruler","pen-ruler","pen-to-square","pen-to-square","pencil","pencil","pentagon","people-arrows","people-arrows","people-carry-box","people-carry-box","people-group","people-line","people-pulling","people-robbery","people-roof","pepper-hot","percent","percent","person","person","person-arrow-down-to-line","person-arrow-up-from-line","person-biking","person-biking","person-booth","person-breastfeeding","person-burst","person-cane","person-chalkboard","person-circle-check","person-circle-exclamation","person-circle-minus","person-circle-plus","person-circle-question","person-circle-xmark","person-digging","person-digging","person-dots-from-line","person-dots-from-line","person-dress","person-dress","person-dress-burst","person-drowning","person-falling","person-falling-burst","person-half-dress","person-harassing","person-hiking","person-hiking","person-military-pointing","person-military-rifle","person-military-to-person","person-praying","person-praying","person-pregnant","person-rays","person-rifle","person-running","person-running","person-shelter","person-skating","person-skating","person-skiing","person-skiing","person-skiing-nordic","person-skiing-nordic","person-snowboarding","person-snowboarding","person-swimming","person-swimming","person-through-window","person-walking","person-walking","person-walking-arrow-loop-left","person-walking-arrow-right","person-walking-dashed-line-arrow-right","person-walking-luggage","person-walking-with-cane","person-walking-with-cane","peseta-sign","peso-sign","phone","phone-flip","phone-flip","phone-slash","phone-volume","phone-volume","photo-film","photo-film","picture-in-picture","piggy-bank","pills","pisces","pizza-slice","place-of-worship","plane","plane-arrival","plane-circle-check","plane-circle-exclamation","plane-circle-xmark","plane-departure","plane-lock","plane-slash","plane-up","plant-wilt","plate-wheat","play","plug","plug-circle-bolt","plug-circle-check","plug-circle-exclamation","plug-circle-minus","plug-circle-plus","plug-circle-xmark","plus","plus","plus-minus","podcast","poo","poo-storm","poo-storm","poop","power-off","prescription","prescription-bottle","prescription-bottle-medical","prescription-bottle-medical","print","pump-medical","pump-soap","puzzle-piece","q","qrcode","question","quote-left","quote-left","quote-right","quote-right","r","radiation","radio","rainbow","ranking-star","receipt","record-vinyl","rectangle-ad","rectangle-ad","rectangle-list","rectangle-list","rectangle-xmark","rectangle-xmark","rectangle-xmark","rectangle-xmark","recycle","registered","repeat","reply","reply","reply-all","reply-all","republican","restroom","retweet","ribbon","right-from-bracket","right-from-bracket","right-left","right-left","right-long","right-long","right-to-bracket","right-to-bracket","ring","road","road-barrier","road-bridge","road-circle-check","road-circle-exclamation","road-circle-xmark","road-lock","road-spikes","robot","rocket","rotate","rotate","rotate-left","rotate-left","rotate-left","rotate-left","rotate-right","rotate-right","rotate-right","route","rss","rss","ruble-sign","ruble-sign","ruble-sign","ruble-sign","rug","ruler","ruler-combined","ruler-horizontal","ruler-vertical","rupee-sign","rupee-sign","rupiah-sign","s","sack-dollar","sack-xmark","sagittarius","sailboat","satellite","satellite-dish","scale-balanced","scale-balanced","scale-unbalanced","scale-unbalanced","scale-unbalanced-flip","scale-unbalanced-flip","school","school-circle-check","school-circle-exclamation","school-circle-xmark","school-flag","school-lock","scissors","scissors","scorpio","screwdriver","screwdriver-wrench","screwdriver-wrench","scroll","scroll-torah","scroll-torah","sd-card","section","seedling","seedling","septagon","septagon","server","shapes","shapes","share","share","share-from-square","share-from-square","share-nodes","share-nodes","sheet-plastic","shekel-sign","shekel-sign","shekel-sign","shekel-sign","shekel-sign","shield","shield","shield-cat","shield-dog","shield-halved","shield-halved","shield-heart","shield-virus","ship","shirt","shirt","shirt","shoe-prints","shop","shop","shop-lock","shop-slash","shop-slash","shower","shrimp","shuffle","shuffle","shuttle-space","shuttle-space","sign-hanging","sign-hanging","signal","signal","signal","signature","signs-post","signs-post","sim-card","single-quote-left","single-quote-right","sink","sitemap","skull","skull-crossbones","slash","sleigh","sliders","sliders","smog","smoking","snowflake","snowman","snowplow","soap","socks","solar-panel","sort","sort","sort-down","sort-down","sort-up","sort-up","spa","spaghetti-monster-flying","spaghetti-monster-flying","spell-check","spider","spinner","spiral","splotch","spoon","spoon","spray-can","spray-can-sparkles","spray-can-sparkles","square","square-arrow-up-right","square-arrow-up-right","square-binary","square-caret-down","square-caret-down","square-caret-left","square-caret-left","square-caret-right","square-caret-right","square-caret-up","square-caret-up","square-check","square-check","square-envelope","square-envelope","square-full","square-h","square-h","square-minus","square-minus","square-nfi","square-parking","square-parking","square-pen","square-pen","square-pen","square-person-confined","square-phone","square-phone","square-phone-flip","square-phone-flip","square-plus","square-plus","square-poll-horizontal","square-poll-horizontal","square-poll-vertical","square-poll-vertical","square-root-variable","square-root-variable","square-rss","square-rss","square-share-nodes","square-share-nodes","square-up-right","square-up-right","square-virus","square-xmark","square-xmark","square-xmark","staff-snake","staff-snake","staff-snake","staff-snake","stairs","stamp","stapler","star","star-and-crescent","star-half","star-half-stroke","star-half-stroke","star-of-david","star-of-life","sterling-sign","sterling-sign","sterling-sign","stethoscope","stop","stopwatch","stopwatch-20","store","store-slash","street-view","strikethrough","stroopwafel","subscript","suitcase","suitcase-medical","suitcase-medical","suitcase-rolling","sun","sun-plant-wilt","superscript","swatchbook","synagogue","syringe","t","table","table-cells","table-cells","table-cells-column-lock","table-cells-large","table-cells-large","table-cells-row-lock","table-cells-row-unlock","table-columns","table-columns","table-list","table-list","table-tennis-paddle-ball","table-tennis-paddle-ball","table-tennis-paddle-ball","tablet","tablet","tablet-button","tablet-screen-button","tablet-screen-button","tablets","tachograph-digital","tachograph-digital","tag","tags","tape","tarp","tarp-droplet","taurus","taxi","taxi","teeth","teeth-open","temperature-arrow-down","temperature-arrow-down","temperature-arrow-up","temperature-arrow-up","temperature-empty","temperature-empty","temperature-empty","temperature-empty","temperature-full","temperature-full","temperature-full","temperature-full","temperature-half","temperature-half","temperature-half","temperature-half","temperature-high","temperature-low","temperature-quarter","temperature-quarter","temperature-quarter","temperature-quarter","temperature-three-quarters","temperature-three-quarters","temperature-three-quarters","temperature-three-quarters","tenge-sign","tenge-sign","tent","tent-arrow-down-to-line","tent-arrow-left-right","tent-arrow-turn-left","tent-arrows-down","tents","terminal","text-height","text-slash","text-slash","text-width","thermometer","thumbs-down","thumbs-up","thumbtack","thumbtack","thumbtack-slash","thumbtack-slash","ticket","ticket-simple","ticket-simple","timeline","toggle-off","toggle-on","toilet","toilet-paper","toilet-paper","toilet-paper","toilet-paper-slash","toilet-portable","toilets-portable","toolbox","tooth","torii-gate","tornado","tower-broadcast","tower-broadcast","tower-cell","tower-observation","tractor","trademark","traffic-light","trailer","train","train-subway","train-subway","train-tram","transgender","transgender","trash","trash-arrow-up","trash-arrow-up","trash-can","trash-can","trash-can-arrow-up","trash-can-arrow-up","tree","tree-city","triangle-exclamation","triangle-exclamation","triangle-exclamation","trophy","trowel","trowel-bricks","truck","truck-arrow-right","truck-droplet","truck-fast","truck-fast","truck-field","truck-field-un","truck-front","truck-medical","truck-medical","truck-monster","truck-moving","truck-pickup","truck-plane","truck-ramp-box","truck-ramp-box","tty","tty","turkish-lira-sign","turkish-lira-sign","turkish-lira-sign","turn-down","turn-down","turn-up","turn-up","tv","tv","tv","u","umbrella","umbrella-beach","underline","universal-access","unlock","unlock-keyhole","unlock-keyhole","up-down","up-down","up-down-left-right","up-down-left-right","up-long","up-long","up-right-and-down-left-from-center","up-right-and-down-left-from-center","up-right-from-square","up-right-from-square","upload","user","user","user","user-astronaut","user-check","user-clock","user-doctor","user-doctor","user-gear","user-gear","user-graduate","user-group","user-group","user-injured","user-lock","user-minus","user-ninja","user-nurse","user-pen","user-pen","user-plus","user-secret","user-shield","user-slash","user-slash","user-slash","user-tag","user-tie","user-xmark","user-xmark","users","users-between-lines","users-gear","users-gear","users-line","users-rays","users-rectangle","users-slash","users-viewfinder","utensils","utensils","v","van-shuttle","van-shuttle","vault","venus","venus-double","venus-mars","vest","vest-patches","vial","vial-circle-check","vial-virus","vials","video","video","video-slash","vihara","virgo","virus","virus-covid","virus-covid-slash","virus-slash","viruses","voicemail","volcano","volleyball","volleyball","volume","volume","volume-high","volume-high","volume-low","volume-low","volume-off","volume-xmark","volume-xmark","volume-xmark","vr-cardboard","w","walkie-talkie","wallet","wand-magic","wand-magic","wand-magic-sparkles","wand-magic-sparkles","wand-sparkles","warehouse","water","water-ladder","water-ladder","water-ladder","wave-square","web-awesome","weight-hanging","weight-scale","weight-scale","wheat-awn","wheat-awn","wheat-awn-circle-exclamation","wheelchair","wheelchair-move","wheelchair-move","whiskey-glass","whiskey-glass","wifi","wifi","wifi","wind","window-maximize","window-minimize","window-restore","wine-bottle","wine-glass","wine-glass-empty","wine-glass-empty","won-sign","won-sign","won-sign","worm","wrench","x","x-ray","xmark","xmark","xmark","xmark","xmark","xmarks-lines","y","yen-sign","yen-sign","yen-sign","yen-sign","yen-sign","yin-yang","z"],far:["address-book","address-book","address-card","address-card","address-card","bell","bell-slash","bookmark","building","calendar","calendar-check","calendar-days","calendar-days","calendar-minus","calendar-plus","calendar-xmark","calendar-xmark","chart-bar","chart-bar","chess-bishop","chess-king","chess-knight","chess-pawn","chess-queen","chess-rook","circle","circle-check","circle-check","circle-dot","circle-dot","circle-down","circle-down","circle-left","circle-left","circle-pause","circle-pause","circle-play","circle-play","circle-question","circle-question","circle-right","circle-right","circle-stop","circle-stop","circle-up","circle-up","circle-user","circle-user","circle-xmark","circle-xmark","circle-xmark","clipboard","clock","clock","clone","closed-captioning","comment","comment-dots","comment-dots","comments","compass","copy","copyright","credit-card","credit-card","envelope","envelope-open","eye","eye-slash","face-angry","face-angry","face-dizzy","face-dizzy","face-flushed","face-flushed","face-frown","face-frown","face-frown-open","face-frown-open","face-grimace","face-grimace","face-grin","face-grin","face-grin-beam","face-grin-beam","face-grin-beam-sweat","face-grin-beam-sweat","face-grin-hearts","face-grin-hearts","face-grin-squint","face-grin-squint","face-grin-squint-tears","face-grin-squint-tears","face-grin-stars","face-grin-stars","face-grin-tears","face-grin-tears","face-grin-tongue","face-grin-tongue","face-grin-tongue-squint","face-grin-tongue-squint","face-grin-tongue-wink","face-grin-tongue-wink","face-grin-wide","face-grin-wide","face-grin-wink","face-grin-wink","face-kiss","face-kiss","face-kiss-beam","face-kiss-beam","face-kiss-wink-heart","face-kiss-wink-heart","face-laugh","face-laugh","face-laugh-beam","face-laugh-beam","face-laugh-squint","face-laugh-squint","face-laugh-wink","face-laugh-wink","face-meh","face-meh","face-meh-blank","face-meh-blank","face-rolling-eyes","face-rolling-eyes","face-sad-cry","face-sad-cry","face-sad-tear","face-sad-tear","face-smile","face-smile","face-smile-beam","face-smile-beam","face-smile-wink","face-smile-wink","face-surprise","face-surprise","face-tired","face-tired","file","file-audio","file-code","file-excel","file-image","file-lines","file-lines","file-lines","file-pdf","file-powerpoint","file-video","file-word","file-zipper","file-zipper","flag","floppy-disk","floppy-disk","folder","folder","folder-closed","folder-open","font-awesome","font-awesome","font-awesome","futbol","futbol","futbol","gem","hand","hand","hand-back-fist","hand-back-fist","hand-lizard","hand-peace","hand-point-down","hand-point-left","hand-point-right","hand-point-up","hand-pointer","hand-scissors","hand-spock","handshake","hard-drive","hard-drive","heart","hospital","hospital","hospital","hourglass","hourglass","hourglass-half","hourglass-half","id-badge","id-card","id-card","image","images","keyboard","lemon","life-ring","lightbulb","map","message","message","money-bill-1","money-bill-1","moon","newspaper","note-sticky","note-sticky","object-group","object-ungroup","paper-plane","paste","paste","pen-to-square","pen-to-square","rectangle-list","rectangle-list","rectangle-xmark","rectangle-xmark","rectangle-xmark","rectangle-xmark","registered","share-from-square","share-from-square","snowflake","square","square-caret-down","square-caret-down","square-caret-left","square-caret-left","square-caret-right","square-caret-right","square-caret-up","square-caret-up","square-check","square-check","square-full","square-minus","square-minus","square-plus","square-plus","star","star-half","star-half-stroke","star-half-stroke","sun","thumbs-down","thumbs-up","trash-can","trash-can","user","window-maximize","window-minimize","window-restore"],fab:["42-group","42-group","500px","accessible-icon","accusoft","adn","adversal","affiliatetheme","airbnb","algolia","alipay","amazon","amazon-pay","amilia","android","angellist","angrycreative","angular","app-store","app-store-ios","apper","apple","apple-pay","arch-linux","artstation","asymmetrik","atlassian","audible","autoprefixer","avianex","aviato","aws","bandcamp","battle-net","behance","bilibili","bimobject","bitbucket","bitcoin","bity","black-tie","blackberry","blogger","blogger-b","bluesky","bluetooth","bluetooth-b","board-game-geek","board-game-geek","bootstrap","bots","brave","brave-reverse","btc","buffer","buromobelexperte","buy-n-large","buysellads","canadian-maple-leaf","cash-app","cc-amazon-pay","cc-amex","cc-apple-pay","cc-diners-club","cc-discover","cc-jcb","cc-mastercard","cc-paypal","cc-stripe","cc-visa","centercode","centos","chrome","chromecast","circle-zulip","claude","cloudflare","cloudscale","cloudsmith","cloudversify","cmplid","codepen","codiepie","confluence","connectdevelop","contao","cotton-bureau","cpanel","creative-commons","creative-commons-by","creative-commons-nc","creative-commons-nc-eu","creative-commons-nc-jp","creative-commons-nd","creative-commons-pd","creative-commons-pd-alt","creative-commons-remix","creative-commons-sa","creative-commons-sampling","creative-commons-sampling-plus","creative-commons-share","creative-commons-zero","critical-role","css","css3","css3-alt","cuttlefish","d-and-d","d-and-d-beyond","dailymotion","dart-lang","dashcube","debian","deezer","delicious","deploydog","deskpro","dev","deviantart","dhl","diaspora","digg","digital-ocean","discord","discourse","disqus","dochub","docker","draft2digital","dribbble","dropbox","drupal","duolingo","dyalog","earlybirds","ebay","edge","edge-legacy","elementor","eleventy","eleventy","ello","ember","empire","envira","erlang","ethereum","etsy","evernote","expeditedssl","facebook","facebook-f","facebook-messenger","fantasy-flight-games","fedex","fediverse","fedora","figma","files-pinwheel","firefox","firefox-browser","first-order","first-order-alt","firstdraft","flickr","flipboard","flutter","fly","font-awesome","font-awesome","font-awesome","fonticons","fonticons-fi","forgejo","fort-awesome","fort-awesome-alt","forumbee","foursquare","free-code-camp","freebsd","fulcrum","galactic-republic","galactic-senate","get-pocket","gg","gg-circle","git","git-alt","gitee","github","github-alt","gitkraken","gitlab","gitter","glide","glide-g","globaleaks","gofore","golang","goodreads","goodreads-g","google","google-drive","google-pay","google-play","google-plus","google-plus-g","google-scholar","google-wallet","gratipay","grav","gripfire","grunt","guilded","gulp","hacker-news","hackerrank","hashnode","hips","hire-a-helper","hive","hooli","hornbill","hotjar","houzz","html5","hubspot","hugging-face","ideal","imdb","instagram","instalod","intercom","internet-explorer","invision","ioxhost","itch-io","itunes","itunes-note","java","jedi-order","jenkins","jira","joget","joomla","js","jsfiddle","julia","jxl","kaggle","kakao-talk","keybase","keycdn","kickstarter","kickstarter","kickstarter-k","ko-fi","korvue","kubernetes","laravel","lastfm","leanpub","leetcode","less","letterboxd","line","linkedin","linkedin-in","linktree","linode","linux","lumon","lumon-drop","lyft","magento","mailchimp","mandalorian","markdown","mastodon","maxcdn","mdb","medapps","medium","medium","medrt","meetup","megaport","mendeley","meta","microblog","microsoft","mintbit","mix","mixcloud","mixer","mizuni","modx","monero","napster","neos","nfc-directional","nfc-symbol","nimblr","node","node-js","notion","npm","ns8","nutritionix","obsidian","octopus-deploy","odnoklassniki","odysee","old-republic","openai","opencart","openid","openstreetmap","opensuse","opera","optin-monster","orcid","osi","padlet","page4","pagelines","palfed","pandora","patreon","paypal","perbyte","periscope","phabricator","phoenix-framework","phoenix-squadron","php","pied-piper","pied-piper-alt","pied-piper-hat","pied-piper-pp","pinterest","pinterest-p","pix","pixelfed","pixiv","playstation","postgresql","product-hunt","pushed","python","qq","quinscape","quora","r-project","raspberry-pi","ravelry","react","reacteurope","readme","rebel","red-river","reddit","reddit-alien","redhat","renren","replyd","researchgate","resolving","rev","rocketchat","rockrms","rust","safari","salesforce","sass","scaleway","schlix","screenpal","scribd","searchengin","sellcast","sellsy","servicestack","shirtsinbulk","shoelace","shopify","shopware","signal-messenger","simplybuilt","sistrix","sith","sitrox","sketch","skyatlas","skype","slack","slack","slideshare","snapchat","snapchat","solana","soundcloud","sourcetree","space-awesome","speakap","speaker-deck","spotify","square-behance","square-behance","square-bluesky","square-deskpro","square-dribbble","square-dribbble","square-facebook","square-facebook","square-figma","square-font-awesome","square-font-awesome-stroke","square-font-awesome-stroke","square-git","square-git","square-github","square-github","square-gitlab","square-gitlab","square-google-plus","square-google-plus","square-hacker-news","square-hacker-news","square-instagram","square-instagram","square-js","square-js","square-lastfm","square-lastfm","square-letterboxd","square-linkedin","square-odnoklassniki","square-odnoklassniki","square-pied-piper","square-pied-piper","square-pinterest","square-pinterest","square-reddit","square-reddit","square-snapchat","square-snapchat","square-steam","square-steam","square-threads","square-tumblr","square-tumblr","square-twitter","square-twitter","square-upwork","square-viadeo","square-viadeo","square-vimeo","square-vimeo","square-web-awesome","square-web-awesome-stroke","square-whatsapp","square-whatsapp","square-x-twitter","square-xing","square-xing","square-youtube","square-youtube","squarespace","stack-exchange","stack-overflow","stackpath","staylinked","steam","steam-symbol","sticker-mule","strava","stripe","stripe-s","stubber","studiovinari","stumbleupon","stumbleupon-circle","superpowers","supple","supportnow","suse","svelte","swift","symfony","symfonycasts","tailwind-css","teamspeak","telegram","telegram","tencent-weibo","tex","the-red-yeti","themeco","themeisle","think-peaks","threads","threema","tidal","tiktok","tor-browser","trade-federation","trello","tumblr","twitch","twitter","typescript","typo3","uber","ubuntu","uikit","ultralytics","ultralytics-hub","ultralytics-yolo","umbraco","uncharted","uniregistry","unison","unity","unreal-engine","unsplash","untappd","ups","upwork","usb","usps","ussunnah","vaadin","venmo","venmo-v","viacoin","viadeo","viber","vim","vimeo","vimeo-v","vine","vk","vnv","vsco","vuejs","w3c","watchman-monitoring","waze","web-awesome","webflow","weebly","weibo","weixin","whatsapp","whmcs","wikipedia-w","windows","wirsindhandwerk","wirsindhandwerk","wix","wizards-of-the-coast","wodu","wolf-pack-battalion","wordpress","wordpress-simple","wpbeginner","wpexplorer","wpforms","wpressr","wpressr","x-twitter","xbox","xing","xmpp","y-combinator","yahoo","yammer","yandex","yandex-international","yarn","yelp","yoast","youtube","zhihu","zoom","zulip"]};var O={octicons:"Octicons",rpg:"RPG Awesome",fab:"Font Awesome Brands",fas:"Font Awesome Solid",far:"Font Awesome Regular"};function K(c){if(U.fas.includes(c))return"fas";if(U.far.includes(c))return"far";if(U.fab.includes(c))return"fab"}var J=class{constructor(n){u(this,"plugin",n);u(this,"DOWNLOADED",{});u(this,"iconDefinitions",[])}async load(){for(let n of this.plugin.data.icons)await this.plugin.app.vault.adapter.exists(this.localIconPath(n))?this.DOWNLOADED[n]=JSON.parse(await this.plugin.app.vault.adapter.read(`${this.plugin.app.plugins.getPluginFolder()}/obsidian-admonition/${n}.json`)):await this.downloadIcon(n);this.setIconDefinitions()}setIconDefinitions(){let n=[];for(let e of this.plugin.data.icons){if(!(e in this.DOWNLOADED))continue;let t=this.DOWNLOADED[e];n.push(...Object.keys(t).map(o=>({type:e,name:o})))}this.iconDefinitions=[...(0,q.getIconIds)().map(e=>({type:"obsidian",name:e})),...n]}iconPath(n){return`https://raw.githubusercontent.com/ebullient/obsidian-admonition/main/icons/${n}/icons.json`}localIconPath(n){return`${this.plugin.app.plugins.getPluginFolder()}/obsidian-admonition/${n}.json`}async downloadIcon(n){try{let t=(await(0,q.requestUrl)(this.iconPath(n))).json;this.plugin.data.icons.push(n),this.plugin.data.icons=[...new Set(this.plugin.data.icons)],await this.plugin.app.vault.adapter.write(this.localIconPath(n),JSON.stringify(t)),this.DOWNLOADED[n]=t,await this.plugin.saveSettings(),this.setIconDefinitions(),new q.Notice(`${O[n]} successfully downloaded.`)}catch(e){console.error(e),new q.Notice("Could not download icon pack")}}async removeIcon(n){await this.plugin.app.vault.adapter.remove(this.localIconPath(n)),delete this.DOWNLOADED[n],this.plugin.data.icons.remove(n),this.plugin.data.icons=[...new Set(this.plugin.data.icons)],await this.plugin.saveSettings(),this.setIconDefinitions()}getIconType(n){if((0,q.getIconIds)().includes(n))return"obsidian";for(let[e,t]of Object.entries(this.DOWNLOADED))if(n in t)return e}getIconModuleName(n){if(n.type&&n.type!=="image"){if(n.type==="obsidian")return"Obsidian Icon";if(n.type in O)return O[n.type]}}getIconNode(n){if(!n.name)return null;if(n.type==="image"){let o=new Image;return o.src=n.name,o}if(n.type==="obsidian"){let o=activeDocument.createElement("div");return(0,q.setIcon)(o,n.name),o}let e=n.type,t=e&&n.name?this.DOWNLOADED[e]?.[n.name]:void 0;return t?new DOMParser().parseFromString(t,"image/svg+xml").documentElement:null}};var S=require("obsidian");var He=require("obsidian");var fe={};var be={};var we={};var ye={};var te={"settings.title":"Admonition settings","heading.admonitions-callouts":"Admonitions & callouts","heading.icon-packs":"Icon packs","heading.additional-syntaxes":"Additional syntaxes","heading.advanced":"Advanced settings","export-css.name":"Export custom types as CSS","export-css.desc":"Export a CSS snippet for custom callout types.","export-json.name":"Export custom types as JSON","export-json.desc":"Choose custom types to export as a JSON file that you can then share with other users.","use-snippet.name":"Use CSS snippet for custom callouts","use-snippet.desc":"Instead of managing it internally, Admonitions will maintain a CSS snippet to enable your custom types for callouts. Required for correct rendering in popout windows.","import.name":"Import admonition(s)","import.desc":"Import admonitions from a JSON definition.","add-new.name":"Add new","add-new.desc":"Add a new admonition type. All custom admonitions will also be usable as callouts.","drop-shadow.name":"Add drop shadow","drop-shadow.desc":"A drop shadow will be added to admonitions.","collapsible.name":"Collapsible by default","collapsible.desc-prefix":"All admonitions & callouts will be collapsible by default. Use ","collapsible.desc-suffix":" to prevent.","collapse-type.name":"Default collapse type","collapse-type.desc":"Collapsible admonitions & callouts will be either opened or closed.","copy-button.name":"Add copy button","copy-button.desc":"Add a 'copy content' button to admonitions & callouts.","parse-titles.name":"Parse titles as Markdown","parse-titles.desc":"Admonition titles will be rendered as Markdown.","set-colors.name":"Set admonition colors","set-colors.desc":"Disable this setting to turn off admonition coloring by default. Can be overridden in the admonition definition.","set-colors.tooltip":"Randomize","hide-empty.name":"Hide empty admonitions","hide-empty.desc":"Any admonition that does not have content inside it will be hidden.","additional-icons.name":"Load additional icons","additional-icons.desc":"Load an additional icon pack. This requires an internet connection.","btn.load":"Load","btn.redownload":"Redownload","markdown-highlight.name":"Markdown syntax highlighting","markdown-highlight.desc":"Use Obsidian's Markdown syntax highlighter in admonition code blocks. This setting is experimental and could cause errors.","admonition-type.name":"Admonition type","admonition-title.name":"Admonition title","admonition-title.desc":"This will be the default title for this admonition type.","no-title.name":"No admonition title by default","no-title.desc-prefix":"The admonition will have no title unless ","no-title.desc-suffix":" is explicitly provided.","show-copy.name":"Show copy button","show-copy.desc":"A copy button will be added to the admonition & callout.","icon-with-css.name":"Enable admonition icon","admonition-icon.name":"Admonition icon","admonition-icon.desc":"Icon to display next to the title.","color.name":"Color","color.enabled":"Set the admonition color.","color.disabled-global":"Color injection is disabled globally. Enable 'Set admonition colors' in plugin settings to use this.","color.disabled-per-admonition":"Color is disabled for this admonition type. Style color with CSS.","modal.title.name":"Admonition title","modal.title.desc":"Leave blank to render without a title.","modal.collapsible.name":"Make collapsible","option.default":"Default","option.open":"Open","option.closed":"Closed","option.none":"None","export.title":"Export admonitions","export.selected":"Export selected","export.select-all":"Select all","export.deselect-all":"Deselect all","btn.add-additional":"Add additional","btn.register":"Register commands","btn.unregister":"Unregister commands","btn.edit":"Edit","btn.delete":"Delete","btn.save":"Save","btn.upload-image":"Upload image","btn.choose-files":"Choose files","btn.convert":"Convert","btn.download-all":"Download all","btn.select-download":"Select & download","btn.insert":"Insert","btn.cancel":"Cancel","error.type-empty":"Admonition type cannot be empty.","error.type-spaces":"Admonition type cannot include spaces.","error.type-css":"Types must be a valid CSS selector.","error.icon-invalid":"Invalid icon name.","error.icon-empty":"Icon cannot be empty.","error.image-parse":"There was an error parsing the image.","error.no-match":"No match found","error.admonition-type-missing":"No admonition type by that name exists.","error.export-none-selected":"At least one admonition must be chosen to export.","error.fix-before-save":"Fix errors before saving."};var ke={};var ve={};var xe={};var Ce={};var Ae={};var Ee={};var Te={};var Se={};var Me={};var qe={};var Ie={};var De={};var Oe={};var Pe={};var Ne={};var Le={};var ze={"heading.admonitions-callouts":"Admonitions & Callouts","add-new.name":"\u65B0\u589E","import.name":"\u5BFC\u5165 Admonition","import.desc":"\u4ECE JSON \u5B9A\u4E49\u5BFC\u5165 admonitions\u3002","collapsible.name":"\u9ED8\u8BA4\u6298\u53E0","collapsible.desc-prefix":"\u6240\u6709\u7684 admonitions \u9ED8\u8BA4\u53EF\u6298\u53E0\u3002\u4F7F\u7528 ","collapsible.desc-suffix":" \u6765\u963B\u6B62\u3002","collapse-type.name":"\u9ED8\u8BA4\u53EF\u6298\u53E0\u7C7B\u578B","collapse-type.desc":"\u53EF\u6298\u53E0\u7684 admonitions \u5C06\u662F\u6253\u5F00\u7684\u6216\u662F\u5173\u95ED\u7684\u3002","copy-button.name":"\u6DFB\u52A0\u590D\u5236\u6309\u94AE","copy-button.desc":"\u4E3A admonitions \u65B0\u589E\u4E00\u4E2A\u201C\u590D\u5236\u5185\u5BB9\u201D\u6309\u94AE\u3002","parse-titles.name":"\u5C06\u540D\u79F0\u8F6C\u53D8\u4E3A Markdown","parse-titles.desc":"Admonition \u540D\u79F0\u5C06\u4EE5 markdown \u5F62\u5F0F\u5448\u73B0\u3002","markdown-highlight.name":"Markdown \u8BED\u6CD5\u9AD8\u4EAE","markdown-highlight.desc":"\u5728 admonition \u4EE3\u7801\u5757\u4E2D\u4F7F\u7528 Obsidian \u7684 markdown \u8BED\u6CD5\u9AD8\u4EAE\u3002\u8BE5\u8BBE\u7F6E\u4E3A\u5B9E\u9A8C\u6027\u9009\u9879\uFF0C\u53EF\u80FD\u4F1A\u5F15\u53D1\u9519\u8BEF\u3002","admonition-type.name":"Admonition \u7C7B\u578B","admonition-title.name":"Admonition \u540D\u79F0","admonition-title.desc":"\u8FD9\u5C06\u4F1A\u6210\u4E3A\u8BE5\u7C7B\u578B admonition \u7684\u9ED8\u8BA4\u540D\u79F0\u3002","no-title.name":"\u65E0\u9ED8\u8BA4 Admonition \u540D\u79F0","no-title.desc-prefix":"\u8BE5 admonition \u5C06\u6CA1\u6709\u540D\u79F0\uFF0C\u9664\u975E ","no-title.desc-suffix":" \u662F\u660E\u786E\u89C4\u5B9A\u7684\u3002","show-copy.name":"\u663E\u793A\u590D\u5236\u6309\u94AE","show-copy.desc":"\u4E00\u4E2A\u590D\u5236\u6309\u94AE\u5C06\u88AB\u6DFB\u52A0\u81F3\u8BE5 admonition\u3002","admonition-icon.name":"Admonition \u56FE\u6807","color.name":"\u989C\u8272","btn.add-additional":"\u989D\u5916\u6DFB\u52A0","btn.register":"\u6CE8\u518C\u547D\u4EE4","btn.unregister":"\u6CE8\u9500\u547D\u4EE4","btn.edit":"\u7F16\u8F91","btn.delete":"\u5220\u9664","btn.save":"\u4FDD\u5B58","btn.upload-image":"\u4E0A\u4F20\u56FE\u50CF","error.type-empty":"Admonition \u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A\u3002","error.type-spaces":"Admonition \u7C7B\u578B\u4E0D\u80FD\u5305\u542B\u7A7A\u683C","error.type-css":"\u7C7B\u578B\u5FC5\u987B\u4E3A\u5408\u6CD5\u7684 CSS \u9009\u62E9\u5668\u3002","error.icon-invalid":"\u975E\u6CD5\u56FE\u6807\u540D\u79F0\u3002","error.icon-empty":"\u56FE\u6807\u4E0D\u80FD\u4E3A\u7A7A\u3002","error.image-parse":"\u4E0A\u4F20\u56FE\u50CF\u65F6\u51FA\u9519\u4E86\u3002"};var je={};var et={ar:fe,cs:be,da:we,de:ye,en:te,"en-gb":ke,es:ve,fr:xe,hi:Ce,id:Ae,it:Ee,ja:Te,ko:Se,nl:Me,nn:qe,pl:Ie,pt:De,"pt-br":Oe,ro:Pe,ru:Ne,tr:Le,"zh-cn":ze,"zh-tw":je},tt=et[He.moment.locale()];function l(c){return tt?.[c]||te[c]}var P=require("obsidian");var j=class extends P.AbstractInputSuggest{constructor(e,t,o){super(e,t.inputEl);u(this,"items",o);u(this,"renderNote");u(this,"renderFlair")}getSuggestions(e){let t=(0,P.prepareSimpleSearch)(e),o=[];for(let i of this.items){let a=t(this.getItemText(i));a&&o.push({item:i,match:a})}return o}renderSuggestion(e,t){t.addClass("mod-complex");let o=t.createDiv({cls:"suggestion-content"});if(!e?.item){o.setText(l("error.no-match")),o.parentElement?.addClass("is-selected");return}this.renderTitle(o.createDiv("suggestion-title"),e),this.renderNote?.(o.createDiv("suggestion-note"),e),this.renderFlair?.(t.createDiv("suggestion-aux").createDiv("suggestion-flair"),e)}renderMatches(e,t,o,i){(0,P.renderMatches)(e,t,o,i)}};var Q=class extends j{constructor(e,t,o){super(e.app,t,o);u(this,"plugin",e);u(this,"renderNote",(e,t)=>{e.setText(this.plugin.iconManager.getIconModuleName(t.item))});u(this,"renderFlair",(e,t)=>{let{item:o}=t;e.appendChild(this.plugin.iconManager.getIconNode(o)??activeDocument.createDiv())})}renderTitle(e,t){(0,S.renderMatches)(e,t.item.name||"note",t.match.matches)}getItemText(e){return e.name||"note"}},oe=class extends j{constructor(e,t,o){super(e.app,t,o);u(this,"plugin",e)}renderTitle(e,t){(0,S.renderMatches)(e,t.item.type,t.match.matches)}renderFlair(e,t){let{item:o}=t;e.appendChild(this.plugin.iconManager.getIconNode(o.icon)??activeDocument.createDiv()).setAttribute("color",`rgb(${o.color})`)}getItemText(e){return e.type}},H=class extends S.Modal{constructor(e){super(e.app);u(this,"plugin",e);u(this,"type");u(this,"title");u(this,"noTitle");u(this,"collapse",this.plugin.data.autoCollapse?this.plugin.data.defaultCollapseType:"default");u(this,"element");u(this,"admonitionEl");u(this,"insert");this.containerEl.addClass("insert-admonition-modal"),this.onOpen=()=>this.display(!0)}async display(e){let{contentEl:t}=this;t.empty(),new S.Setting(t).setName(l("admonition-type.name")).addText(r=>{r.setPlaceholder(l("admonition-type.name")).setValue(this.type);let m=new oe(this.plugin,r,this.plugin.admonitionArray),d=()=>{r.inputEl.value&&this.plugin.admonitions[r.inputEl.value]?(this.type=r.inputEl.value,this.title=this.plugin.admonitions[this.type].title,this.title?.length||(this.title=this.type[0].toUpperCase()+this.type.slice(1).toLowerCase()),i.setValue(this.title)):(new S.Notice(l("error.admonition-type-missing")),r.inputEl.value=""),this.buildAdmonition()};r.inputEl.onblur=d,m.onSelect(g=>{r.inputEl.value=g.item.type,d(),m.close()})});let i;new S.Setting(t).setName(l("modal.title.name")).setDesc(l("modal.title.desc")).addText(r=>{i=r,r.setValue(this.title),r.onChange(m=>{if(this.title=m,m.length===0?this.noTitle=!0:this.noTitle=!1,this.element){let d=this.plugin.admonitions[this.type],g=this.plugin.getAdmonitionElement(this.type,this.title,this.plugin.isIconWithCss(d)?{}:d.icon,this.plugin.shouldInjectColor(d)?d.color:null,this.collapse);g.createDiv({cls:"admonition-content",text:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla."}),this.element.replaceWith(g),this.element=g}})}),new S.Setting(t).setName(l("modal.collapsible.name")).addDropdown(r=>{r.addOption("default",l("option.default")),r.addOption("open",l("option.open")),r.addOption("closed",l("option.closed")),r.addOption("none",l("option.none")),r.setValue(this.collapse),r.onChange(m=>{this.collapse=m,this.buildAdmonition()})}),this.admonitionEl=this.contentEl.createDiv(),this.buildAdmonition(),new S.Setting(t).addButton(r=>r.setButtonText(l("btn.insert")).setCta().onClick(()=>{this.insert=!0,this.close()})).addExtraButton(r=>{r.setIcon("cross").setTooltip(l("btn.cancel")).onClick(()=>this.close()),r.extraSettingsEl.setAttr("tabindex",0),r.extraSettingsEl.onkeydown=m=>{m.key==="Enter"&&this.close()}})}buildAdmonition(){if(this.type&&this.plugin.admonitions[this.type]){let e=this.plugin.admonitions[this.type],t=this.collapse==="default"?this.plugin.data.autoCollapse?this.plugin.data.defaultCollapseType:"none":this.collapse;this.element=G(this.admonitionEl,this.plugin,e,this.title,t)}}};var A=require("obsidian");var x=require("obsidian");var ot=(c=>n=>{try{c.querySelector(n)}catch{return!1}return!0})(createFragment());function $e(c,n){let e=[],t={success:!0,messages:e},o=n.iconWithCss===!0,i=N(n.type,c);if(i.success===!1)return i;if(!o){let s=n.icon?.name,r=N(s??"",c);if(r.success===!1)return r;c.iconManager.getIconNode(n.icon)||e.push("No installed icon found by the name "+(s??"")+". Perhaps you need to install a new icon pack?")}if(n.title&&typeof n.title!="string")return{success:!1,failed:"title",message:"Admonition titles can only be strings."};(typeof n.color!="string"||!/(?:(?:2(?:[0-4]\d|5[0-5])|\d{1,2}|1\d\d)\s*,\s*){2}\s*(?:2(?:[0-4]\d|5[0-5])|\d{1,2}|1\d\d)/.test(n.color))&&(console.warn("No color provided for the import of "+n.type+". Adding a random color."),n.color=`${Math.floor(Math.random()*255)}, ${Math.floor(Math.random()*255)}, ${Math.floor(Math.random()*255)}`);let a=["command","injectColor","iconWithCss","noTitle","copy"];for(let s of a)if(s in n&&typeof JSON.parse(JSON.stringify(n[s]))!="boolean")return{success:!1,failed:"booleans",message:`The "${s}" property must be a boolean if present.`};return t}function _e(c,n,e,t){let o=N(n,c,t);return o.success===!1?o:ie(e,c)}function N(c,n,e){if(!c.length)return{success:!1,message:l("error.type-empty"),failed:"type"};if(c.includes(" "))return{success:!1,message:l("error.type-spaces"),failed:"type"};if(!ot(c))return{success:!1,message:l("error.type-css"),failed:"type"};let t=c.toLowerCase();return t!==e&&t in n.data.userAdmonitions?{success:!1,message:"That Admonition type already exists.",failed:"type"}:{success:!0}}function ie(c,n){return c.type==="image"?{success:!0}:c.name?n.iconManager.getIconType(c.name)?{success:!0}:{success:!1,message:l("error.icon-invalid"),failed:"icon"}:{success:!1,message:l("error.icon-empty"),failed:"icon"}}var $=class c extends x.Modal{constructor(e,t){super(e.app);u(this,"plugin",e);u(this,"color","#7d7d7d");u(this,"editing",!1);u(this,"error",!1);u(this,"icon",{});u(this,"iconWithCss",!1);u(this,"noTitle",!1);u(this,"saved",!1);u(this,"type");u(this,"originalType");u(this,"title");u(this,"injectColor");u(this,"copy");u(this,"admonitionPreviewParent");u(this,"admonitionPreview");t?(this.color=t.color??"#7d7d7d",this.copy=t.copy??this.plugin.data.copyButton,this.editing=!0,this.icon=t.icon??{},this.iconWithCss=this.plugin.isIconWithCss(t),this.injectColor=this.plugin.shouldInjectColor(t),this.noTitle=t.noTitle??!1,this.originalType=t.type,this.title=t.title,this.type=t.type):(this.copy=this.plugin.data.copyButton,this.injectColor=this.plugin.data.injectColor)}setAdmonitionElement(e,t){this.admonitionPreviewParent=e,this.admonitionPreview=G(e,this.plugin,{type:this.type,icon:this.icon,color:this.color,iconWithCss:this.iconWithCss,injectColor:this.injectColor},t[0].toUpperCase()+t.slice(1).toLowerCase())}async display(){this.containerEl.addClass("admonition-settings-modal"),this.titleEl.setText(`${this.editing?"Edit":"Add"} Admonition`);let{contentEl:e}=this;e.empty();let t=e.createDiv(),o=this.title??this.type??"...",i=e.createDiv();this.setAdmonitionElement(i,o[0].toUpperCase()+o.slice(1).toLowerCase());let a,s=new x.Setting(t).setName(l("admonition-type.name")).addText(p=>{a=p,a.setValue(this.type??"").onChange(w=>{let b=N(w,this.plugin,this.originalType);if(b.success===!1){c.setValidationError(p.inputEl,b.message);return}c.removeValidationError(p.inputEl),this.type=w,this.title||this.setAdmonitionElement(i,this.type?.[0].toUpperCase()+this.type?.slice(1).toLowerCase())})});s.controlEl.addClass("admonition-type-setting"),s.descEl.createSpan({text:"This is used to create the admonition (e.g., "}),s.descEl.createEl("code",{text:"note"}),s.descEl.createSpan({text:" or "}),s.descEl.createEl("code",{text:"abstract"}),s.descEl.createSpan({text:")"}),new x.Setting(t).setName(l("admonition-title.name")).setDesc(l("admonition-title.desc")).addText(p=>{p.setValue(this.title??"").onChange(w=>{if(!w.length){this.title="",this.setAdmonitionElement(i,this.type?.[0].toUpperCase()+o.slice(1).toLowerCase());return}this.title=w,this.setAdmonitionElement(i,this.title)})}),new x.Setting(t).setName(l("no-title.name")).setDesc(createFragment(p=>{p.createSpan({text:l("no-title.desc-prefix")}),p.createEl("code",{text:"title"}),p.createSpan({text:l("no-title.desc-suffix")})})).addToggle(p=>{p.setValue(this.noTitle).onChange(w=>this.noTitle=w)}),new x.Setting(t).setName(l("show-copy.name")).setDesc(l("show-copy.desc")).addToggle(p=>{p.setValue(this.copy).onChange(w=>this.copy=w)});let r=createEl("input",{attr:{type:"file",name:"image",accept:"image/*"}}),m;new x.Setting(t).setName(l("admonition-icon.name")).setDesc(l("admonition-icon.desc")).addText(p=>{m=p,p.setDisabled(this.iconWithCss),this.icon.type!=="image"&&p.setValue(this.icon?.name??"");let w=async()=>{if(this.iconWithCss){c.removeValidationError(p.inputEl);return}let k=p.inputEl.value,v=ie({name:k},this.plugin);if(v.success===!1){c.setValidationError(p.inputEl,v.message);return}c.removeValidationError(p.inputEl);let E=this.plugin.iconManager.getIconType(k);this.icon={name:k,type:E},this.admonitionPreview?.querySelector(".admonition-title-icon")?.replaceChildren((0,x.sanitizeHTMLToDom)(this.plugin.iconManager.getIconNode(this.icon)?.outerHTML??""))},b=new Q(this.plugin,p,this.plugin.iconManager.iconDefinitions);b.onSelect(k=>{p.inputEl.value=k.item?.name??"",w(),b.close()}),p.inputEl.onblur=w}).addButton(p=>{p.setButtonText(l("btn.upload-image")).setIcon("image-file"),p.buttonEl.addClass("admonition-file-upload"),p.buttonEl.appendChild(r),p.setDisabled(this.iconWithCss),p.onClick(()=>r.click())}).addToggle(p=>{p.setTooltip(l("icon-with-css.name")).setValue(!this.iconWithCss).onChange(w=>{this.iconWithCss=!w,this.display()})}),r.onchange=async()=>{let{files:p}=r;if(!p?.length)return;let w=p[0],b=new FileReader;b.onloadend=k=>{let v=new Image;v.onload=()=>{try{let T=activeDocument.createEl("canvas"),I=24,C=v.width,M=v.height;C>M?C>I&&(M*=I/C,C=I):M>I&&(C*=I/M,M=I),T.width=C,T.height=M;let se=T.getContext("2d");se&&se.drawImage(v,0,0,C,M),this.icon={name:T.toDataURL("image/png"),type:"image"},this.display()}catch{new x.Notice(l("error.image-parse"))}};let E=k.target?.result;typeof E=="string"&&(v.src=E)},b.readAsDataURL(w),r.value=""};let d=t.createDiv("admonition-color-settings");this.createColor(d);let g=e.createDiv(),h=new x.Setting(g);h.addButton(p=>(p.setTooltip(l("btn.save")).setIcon("checkmark").onClick(async()=>{let w={...this.icon};m.inputEl.value?.length&&(w.name=m.inputEl.value);let b=this.iconWithCss?N(a.inputEl.value,this.plugin,this.originalType):_e(this.plugin,a.inputEl.value,w,this.originalType);if(b.success===!1){c.setValidationError(b.failed==="type"?a.inputEl:m.inputEl,b.message),new x.Notice(l("error.fix-before-save"));return}this.saved=!0,this.close()}),p)),h.addExtraButton(p=>(p.setIcon("cross").setTooltip(l("btn.cancel")).onClick(()=>{this.saved=!1,this.close()}),p))}createColor(e){e.empty();let t=this.injectColor&&this.plugin.data.injectColor,o=this.plugin.data.injectColor?l("color.enabled"):l("color.disabled-global");new x.Setting(e).setName(l("color.name")).setDesc(o).addText(i=>{i.inputEl.setAttribute("type","color"),t||i.inputEl.setAttribute("disabled","true"),i.setValue(nt(this.color)).onChange(a=>{let s=it(a);s&&(this.color=`rgb(${s.r}, ${s.g}, ${s.b})`,t&&this.admonitionPreview?.setAttribute("style",`--callout-color: ${this.color};`))})}).addToggle(i=>i.setValue(this.injectColor).setTooltip(`${this.injectColor?"Disable":"Enable"} Admonition Color`).setDisabled(!this.plugin.data.injectColor).onChange(a=>{this.injectColor=a,a?this.admonitionPreview?.setAttribute("style",`--callout-color: ${this.color};`):this.admonitionPreview?.removeAttribute("style"),this.createColor(e)}))}onOpen(){this.display()}static setValidationError(e,t){if(e.addClass("is-invalid"),!!e.parentElement&&t){e.parentElement.addClasses(["has-invalid-message","unset-align-items"]),e.parentElement.parentElement?.addClass(".unset-align-items");let o=e.parentElement.querySelector(".invalid-feedback");o||(o=e.parentElement.createDiv({cls:"invalid-feedback"})),o.setText(t)}}static removeValidationError(e){if(e.removeClass("is-invalid"),!e.parentElement)return;e.parentElement.removeClasses(["has-invalid-message","unset-align-items"]),e.parentElement.parentElement?.removeClass(".unset-align-items");let t=e.parentElement.querySelector(".invalid-feedback");t&&e.parentElement.removeChild(t)}};function it(c){let n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(c);return n?{r:Number.parseInt(n[1],16),g:Number.parseInt(n[2],16),b:Number.parseInt(n[3],16)}:null}function ne(c){let n=c.toString(16);return n.length===1?`0${n}`:n}function nt(c){let n=/rgba?\(\s*(\d+),\s*(\d+),\s*(\d+)/i.exec(c)??/^(\d+),\s?(\d+),\s?(\d+)/i.exec(c);return n?.length?`#${ne(Number(n[1]))}${ne(Number(n[2]))}${ne(Number(n[3]))}`:""}var _=require("obsidian");async function Re(c,n,e={cta:"Yes",secondary:"No"}){return new Promise((t,o)=>{try{let i=new ae(c,n,e);i.onClose=()=>{t(i.confirmed)},i.open()}catch(i){o(i instanceof Error?i:new Error(String(i)))}})}var ae=class extends _.Modal{constructor(e,t,o){super(e);u(this,"text",t);u(this,"buttons",o);u(this,"confirmed",!1)}async display(){this.contentEl.empty(),this.contentEl.addClass("confirm-modal"),this.contentEl.createEl("p",{text:this.text});let e=this.contentEl.createDiv("fantasy-calendar-confirm-buttons");new _.ButtonComponent(e).setButtonText(this.buttons.cta).setCta().onClick(()=>{this.confirmed=!0,this.close()}),new _.ButtonComponent(e).setButtonText(this.buttons.secondary).onClick(()=>{this.close()})}onOpen(){this.display()}};var L=require("obsidian");var R=class extends L.Modal{constructor(e){super(e.app);u(this,"plugin",e);u(this,"admonitionDefinitions",Object.values(this.plugin.data.userAdmonitions));u(this,"admonitionNames",Object.keys(this.plugin.data.userAdmonitions));u(this,"selectedAdmonitions",[...this.admonitionNames]);u(this,"export",!1)}onOpen(){this.titleEl.setText(l("export.title")),this.containerEl.addClasses(["admonition-settings","admonition-modal","admonition-export-modal"]),new L.Setting(this.contentEl).addButton(t=>t.setButtonText(l("export.selected")).onClick(()=>{this.export=!0,this.close()}));let e;new L.Setting(this.contentEl).addButton(t=>t.setButtonText(l("export.select-all")).setCta().onClick(()=>{this.selectedAdmonitions=[...this.admonitionNames],this.generateToggles(e)})).addButton(t=>t.setButtonText(l("export.deselect-all")).onClick(()=>{this.selectedAdmonitions=[],this.generateToggles(e)})),e=this.contentEl.createDiv("additional"),this.generateToggles(e)}generateToggles(e){e.empty();for(let t of this.admonitionNames)new L.Setting(e).setName(t).addToggle(o=>{o.setValue(this.selectedAdmonitions.includes(t)).onChange(i=>{i?this.selectedAdmonitions.push(t):this.selectedAdmonitions.remove(t)})})}};var B=class extends A.PluginSettingTab{constructor(e,t){super(e,t);u(this,"plugin",t);this.containerEl.addClass("admonition-settings")}getControlValue(e){return this.plugin.data[e]}async setControlValue(e,t){this.plugin.data[e]=t,await this.plugin.saveSettings()}getSettingDefinitions(){return[{type:"group",heading:"Display and behavior",items:this.behaviorItems()},{type:"group",heading:"CSS",items:this.cssItems()},{type:"group",heading:"Import & export",items:this.importExportItems()},this.customTypesList(),{type:"group",heading:"Icon packs",items:this.iconPackItems()},{type:"group",heading:"Advanced",items:this.advancedItems()},this.coffeeItem()]}behaviorItems(){return[{name:l("drop-shadow.name"),desc:l("drop-shadow.desc"),control:{type:"toggle",key:"dropShadow"}},{name:l("copy-button.name"),desc:l("copy-button.desc"),render:(e,t)=>{e.addToggle(o=>o.setValue(this.plugin.data.copyButton).onChange(async i=>{this.plugin.data.copyButton=i,i||activeDocument.querySelectorAll(".admonition-content-copy").forEach(a=>{a.detach()}),await this.plugin.saveSettings()}))}},{name:l("hide-empty.name"),desc:l("hide-empty.desc"),render:(e,t)=>{e.addToggle(o=>o.setValue(this.plugin.data.hideEmpty).onChange(async i=>{this.plugin.data.hideEmpty=i,await this.plugin.saveSettings(),this.update()}))}},{name:l("collapse-type.name"),desc:l("collapse-type.desc"),visible:()=>this.plugin.data.autoCollapse,control:{type:"dropdown",key:"defaultCollapseType",options:{open:"Open",closed:"Closed"}}},{name:l("collapsible.name"),desc:createFragment(e=>{e.createSpan({text:l("collapsible.desc-prefix")}),e.createEl("code",{text:"collapse: none"}),e.createSpan({text:l("collapsible.desc-suffix")})}),render:(e,t)=>{e.addToggle(o=>o.setValue(this.plugin.data.autoCollapse).onChange(async i=>{this.plugin.data.autoCollapse=i,await this.plugin.saveSettings(),this.refreshDomState()}))}},{name:l("parse-titles.name"),desc:l("parse-titles.desc"),control:{type:"toggle",key:"parseTitles"}}]}cssItems(){return[{name:l("use-snippet.name"),desc:l("use-snippet.desc"),render:(e,t)=>{e.addToggle(o=>o.setValue(this.plugin.data.useSnippet).onChange(async i=>{this.plugin.data.useSnippet=i,await this.plugin.saveSettings(),this.plugin.calloutManager.setUseSnippet()}))}},{name:l("set-colors.name"),desc:l("set-colors.desc"),render:(e,t)=>{e.addToggle(o=>o.setValue(this.plugin.data.injectColor).onChange(async i=>{this.plugin.data.injectColor=i,await this.plugin.saveSettings(),this.update()}))}}]}importExportItems(){let e=[];return A.Platform.isDesktop&&e.push({name:l("export-css.name"),desc:l("export-css.desc"),render:(t,o)=>{t.addButton(i=>i.setIcon("download").setDisabled(!Object.keys(this.plugin.data.userAdmonitions).length).onClick(()=>{let a=new Blob([this.plugin.calloutManager.generateCssString()],{type:"text/css"});createEl("a",{attr:{download:"custom_callouts.css",href:URL.createObjectURL(a)}}).click()}))}}),e.push({name:l("export-json.name"),desc:l("export-json.desc"),render:(t,o)=>{t.addButton(i=>i.setButtonText(l("btn.download-all")).setCta().onClick(()=>{let a=Object.values(this.plugin.data.userAdmonitions);this.download(a)})).addButton(i=>i.setButtonText(l("btn.select-download")).onClick(()=>{let a=new R(this.plugin);a.onClose=()=>{if(!a.export)return;let s=Object.values(this.plugin.data.userAdmonitions);this.download(s.filter(r=>a.selectedAdmonitions.includes(r.type)))},a.open()}))}}),e.push({name:l("import.name"),desc:l("import.desc"),render:(t,o)=>{let i=createEl("input",{attr:{type:"file",name:"merge",accept:".json",multiple:!0,style:"display: none;"}});i.onchange=async()=>{let{files:a}=i;if(a?.length){try{let s=[];for(let d of Array.from(a))s.push(JSON.parse(await d.text()));let r=s.flat().filter(d=>typeof d=="object"),m=new Set;for(let d of r)d.icon?d.icon.type==="font-awesome"&&d.icon.name?(d.icon.type=K(d.icon.name)??"fas",m.add(d.icon.type)):d.icon.type&&d.icon.type!=="obsidian"&&d.icon.type!=="image"&&m.add(d.icon.type):(d.icon={name:"pencil",type:"fas"},m.add("fas"));for(let d of m)if(!this.plugin.data.icons.includes(d))try{await this.plugin.downloadIcon(d)}catch{}for(let d of r){let g=$e(this.plugin,d);if(g.success===!1){new A.Notice(createFragment(h=>{h.createSpan({text:`There was an issue importing the ${d.type} admonition:`}),h.createEl("br"),h.createSpan({text:g.message})}));continue}g.messages?.length&&new A.Notice(createFragment(h=>{h.createSpan({text:`There was an issue importing the ${d.type} admonition:`});for(let p of g.messages??[])h.createEl("br"),h.createSpan({text:p})})),await this.plugin.addAdmonition(d)}this.update()}catch(s){new A.Notice(`There was an error while importing the admonition${a.length===1?"":"s"}.`),console.error(s)}i.value=""}},t.addButton(a=>{a.setButtonText(l("btn.choose-files")),a.buttonEl.appendChild(i),a.onClick(()=>i.click())}).addExtraButton(a=>a.setIcon("info").onClick(()=>{let s=new A.Modal(this.plugin.app);s.onOpen=()=>{s.contentEl.createSpan({text:"Import one or more admonition definitions as a JSON array. An admonition definition should look as follows at minimum:"}),s.contentEl.createEl("br");let r=new A.TextAreaComponent(s.contentEl.createDiv()).setDisabled(!0).setValue(JSON.stringify({type:"embed-affliction",color:"149, 214, 148",icon:{name:"head-side-cough",type:"fas"}},null,4));r.inputEl.setAttribute("style",`height: ${r.inputEl.scrollHeight}px; resize: none;`),s.contentEl.createEl("br"),s.contentEl.createSpan({text:"See the plugin ReadMe for more information."})},s.open()}))}}),e}customTypesList(){let e=Object.values(this.plugin.data.userAdmonitions);return{type:"list",heading:"Custom types",emptyState:"No custom admonition types defined.",addItem:{name:l("btn.add-additional"),action:()=>{let t=new $(this.plugin);t.onClose=()=>{if(!t.saved||!t.type)return;let o={type:t.type,color:t.color,icon:t.icon,command:!1,title:t.title,iconWithCss:t.iconWithCss,injectColor:t.injectColor,noTitle:t.noTitle,copy:t.copy};this.plugin.addAdmonition(o),this.update()},t.open()}},onDelete:t=>{let o=e[t];this.plugin.removeAdmonition(o),this.update()},items:e.map(t=>({name:t.type,searchable:!1,render:(o,i)=>{let a=this.plugin.getAdmonitionElement(t.type,t.type[0].toUpperCase()+t.type.slice(1).toLowerCase(),this.plugin.isIconWithCss(t)?{}:t.icon,this.plugin.shouldInjectColor(t)?t.color:void 0);o.infoEl.replaceWith(a),t.command?o.addExtraButton(s=>{s.setIcon(W.toString()).setTooltip(l("btn.unregister")).onClick(async()=>{this.plugin.unregisterCommandsFor(t),await this.plugin.saveSettings(),this.update()})}):o.addExtraButton(s=>{s.setIcon(V.toString()).setTooltip(l("btn.register")).onClick(async()=>{this.plugin.registerCommandsFor(t),await this.plugin.saveSettings(),this.update()})}),o.addExtraButton(s=>{s.setIcon("pencil").setTooltip(l("btn.edit")).onClick(()=>{let r=new $(this.plugin,t);r.onClose=()=>{if(!r.saved||!r.type)return;let m=t.command,d={type:r.type,color:r.color,icon:r.icon,command:m,title:r.title,iconWithCss:r.iconWithCss,injectColor:r.injectColor,noTitle:r.noTitle,copy:r.copy};if(d.type!==t.type){this.plugin.unregisterType(t);let g=Object.entries(this.plugin.data.userAdmonitions);this.plugin.data.userAdmonitions=Object.fromEntries(g.map(([h,p])=>h===t.type?[d.type,d]:[h,p]))}else this.plugin.data.userAdmonitions[d.type]=d;this.plugin.registerType(d.type),this.plugin.calloutManager.addAdmonition(d),this.plugin.saveSettings(),this.update()},r.open()})})}}))}}iconPackItems(){let e,t=Object.entries(O).filter(([i])=>!this.plugin.data.icons.includes(i)),o=[{name:l("additional-icons.name"),desc:l("additional-icons.desc"),render:(i,a)=>{i.addDropdown(s=>{if(!t.length){s.setDisabled(!0);return}for(let[r,m]of t)s.addOption(r,m);s.onChange(r=>{e=r}),e=s.getValue()}).addExtraButton(s=>{s.setIcon("plus-with-circle").setTooltip(l("btn.load")).onClick(async()=>{e?.length&&(await this.plugin.downloadIcon(e),this.update())}),t.length||s.setDisabled(!0)})}}];for(let i of this.plugin.data.icons)o.push({name:O[i],searchable:!1,render:(a,s)=>{a.addExtraButton(r=>{r.setIcon("reset").setTooltip(l("btn.redownload")).onClick(async()=>{await this.plugin.removeIcon(i),await this.plugin.downloadIcon(i),this.update()})}).addExtraButton(r=>{r.setIcon("trash").onClick(async()=>{Object.values(this.plugin.data.userAdmonitions).find(m=>m.icon?.type===i)&&!await Re(this.plugin.app,"You have Admonitions using icons from this pack. Are you sure you want to remove it?")||(await this.plugin.removeIcon(i),this.update())})})}});return o}advancedItems(){return[{name:l("markdown-highlight.name"),desc:l("markdown-highlight.desc"),render:(e,t)=>{e.addToggle(o=>{o.setValue(this.plugin.data.syntaxHighlight),o.onChange(async i=>{this.plugin.data.syntaxHighlight=i,i?this.plugin.turnOnSyntaxHighlighting():this.plugin.turnOffSyntaxHighlighting(),await this.plugin.saveSettings()})})}}]}coffeeItem(){return{name:"",render:e=>{e.descEl.addClass("admonition-mcp-coffee"),e.descEl.createEl("a",{href:"https://www.buymeacoffee.com/ebullient"}).createEl("img",{attr:{src:"https://img.buymeacoffee.com/button-api/?text=Buy me a coffee&emoji=\u2615&slug=ebullient&button_colour=8e6787&font_colour=ebebeb&font_family=Inter&outline_colour=392a37&coffee_colour=ecc986"}})}}}download(e){if(!e.length){new A.Notice(l("error.export-none-selected"));return}let t=createEl("a"),o=new Blob([JSON.stringify(e)],{type:"json"}),i=URL.createObjectURL(o);t.href=i,t.download="admonitions.json",t.click(),URL.revokeObjectURL(i)}};var Be=require("obsidian");var Y=class extends Be.EditorSuggest{constructor(e){super(e.app);u(this,"plugin",e)}getSuggestions(e){return e.query?.length?Object.entries(this.plugin.admonitions).filter(t=>t[0].toLowerCase().contains(e.query.toLowerCase())):Object.entries(this.plugin.admonitions)}renderSuggestion([e,t],o){o.addClasses(["admonition-suggester-item","mod-complex"]),t.color&&o.style.setProperty("--callout-color",t.color),o.createSpan({text:e});let i=o.createDiv("suggestion-aux").createDiv({cls:"suggestion-flair",attr:{style:"color: var(--callout-color)"}});if(t.icon){let a=this.plugin.iconManager.getIconNode(t.icon);a?.instanceOf(HTMLDivElement)&&a.childElementCount===1?a=a.firstElementChild:a!==null&&(a.removeClass("svg-inline--fa"),a.addClass("svg-icon")),i.appendChild(a??activeDocument.createDiv())}}onTrigger(e,t){let o=t.getLine(e.line),i=this.testAndReturnQuery(o,e);if(!i)return null;let[,a,s]=i;return Object.keys(this.plugin.admonitions).find(r=>r.toLowerCase()===s.toLowerCase())?null:{end:e,start:{ch:i.index+a.length,line:e.line},query:s}}},X=class extends Y{selectSuggestion([n],e){if(!this.context)return;let{editor:t,query:o,start:i,end:a}=this.context,s=t.getLine(a.line).slice(a.ch),[,r]=s.match(/^(\] ?)/)??[];t.replaceRange(`${n}] `,i,{...a,ch:i.ch+o.length+(r?.length??0)},"admonitions"),t.setCursor(i.line,i.ch+n.length+2),this.close()}testAndReturnQuery(n,e){if(/> ?\[!\w+\]/.test(n.slice(0,e.ch)))return null;let t=n.match(/(> ?\[!)(\w*)\]?/);return t||null}},Z=class extends Y{selectSuggestion([n],e){if(!this.context)return;let{editor:t,start:o,end:i}=this.context;t.replaceRange(`${n}`,o,i,"admonitions"),t.setCursor(o.line,o.ch+n.length),this.close()}testAndReturnQuery(n,e){if(!/```ad-\w*/.test(n))return null;let t=n.match(/(```ad-)(\w*)/);return t||null}};var at={userAdmonitions:{},syntaxHighlight:!1,copyButton:!1,version:"",autoCollapse:!1,defaultCollapseType:"open",injectColor:!0,parseTitles:!0,dropShadow:!0,hideEmpty:!1,icons:[],rpgDownloadedOnce:!1,useSnippet:!1,snippetPath:`custom-admonitions.${[...Array(6).keys()].map(()=>(16*Math.random()|0).toString(16)).join("")}`},ee=class extends f.Plugin{constructor(){super(...arguments);u(this,"data");u(this,"postprocessors",new Map);u(this,"iconManager",new J(this));u(this,"calloutManager")}get types(){return Object.keys(this.admonitions)}get admonitionArray(){return Object.keys(this.admonitions).map(e=>({...this.admonitions[e],type:e}))}isIconWithCss(e){return e.iconWithCss===!0}shouldInjectColor(e){return e.color?e.injectColor!==void 0?e.injectColor:this.data.injectColor:!1}async onload(){console.debug("Obsidian Admonition loaded"),this.postprocessors=new Map,await this.loadSettings(),await this.iconManager.load(),this.app.workspace.onLayoutReady(()=>{this.calloutManager=new z(this),this.addChild(this.calloutManager),this.registerEditorSuggest(new Z(this)),this.registerEditorSuggest(new X(this)),this.registerMarkdownPostProcessor(this.calloutManager.calloutProcessor.bind(this.calloutManager)),Object.keys(this.admonitions).forEach(e=>{this.registerType(e)}),this.addSettingTab(new B(this.app,this)),(0,f.addIcon)(V,re),(0,f.addIcon)(W,le),(0,f.addIcon)(de,ce),(0,f.addIcon)(ue,pe),this.addCommand({id:"collapse-admonitions",name:"Collapse all",checkCallback:e=>{if(e)return!!this.app.workspace.getActiveViewOfType(f.MarkdownView);let t=this.app.workspace.getActiveViewOfType(f.MarkdownView);if(!t||!(t instanceof f.MarkdownView))return;let o=t.contentEl.querySelectorAll(".callout.is-collapsible:not(.is-collapsed)");for(let i=0;i<o.length;i++){let a=o[i];this.calloutManager.collapse(a)}}}),this.addCommand({id:"open-admonitions",name:"Open all",checkCallback:e=>{if(e)return!!this.app.workspace.getActiveViewOfType(f.MarkdownView);let t=this.app.workspace.getActiveViewOfType(f.MarkdownView);if(!t||!(t instanceof f.MarkdownView))return;let o=t.contentEl.querySelectorAll(".callout.is-collapsible.is-collapsed");for(let i=0;i<o.length;i++){let a=o[i];this.calloutManager.collapse(a)}}}),this.addCommand({id:"insert-admonition",name:"Insert code block",editorCallback:(e,t)=>{let o=new H(this);o.onClose=()=>{if(!o.insert)return;let i="",a="";o.title.length&&o.title.toLowerCase()!==o.type.toLowerCase()&&(i=`title: ${o.title}
|
|
`),o.collapse!=="default"&&(a=`collapse: ${o.collapse}
|
|
`),e.replaceSelection(`\`\`\`ad-${o.type}
|
|
${i}${a}
|
|
${e.getSelection()}
|
|
\`\`\`
|
|
`);let s=e.getCursor();e.setCursor(s.line-3)},o.open()}}),this.addCommand({id:"insert-callout",name:"Insert callout",editorCallback:(e,t)=>{let o=new H(this);o.onClose=()=>{if(!o.insert)return;let i="",a="";if(o.collapse!=="default")switch(o.collapse){case"open":a="+";break;case"closed":a="-";break;case"none":a="";break}o.title.length&&o.title.toLowerCase()!==o.type.toLowerCase()&&(i=` ${o.title}`);let s=e.getSelection();e.replaceSelection(`> [!${o.type}]${a}${i}
|
|
> ${s.split(`
|
|
`).join(`
|
|
> `)}
|
|
`)},o.open()}})})}async downloadIcon(e){await this.iconManager.downloadIcon(e)}async removeIcon(e){await this.iconManager.removeIcon(e)}async postprocessor(e,t,o,i){if(this.admonitions[e])try{let a=typeof i=="string"?i:i?.sourcePath??this.app.workspace.getActiveFile()?.path??"",{title:s,collapse:r,content:m,icon:d,color:g,metadata:h}=ge(e,t,this.admonitions[e]);this.data.autoCollapse&&!r?r=this.data.defaultCollapseType??"open":r&&r.trim()==="none"&&(r="");let p=this.admonitions[e],w=d?this.iconManager.iconDefinitions.find(({name:E})=>d===E):null,b=this.getAdmonitionElement(e,s,w??(this.isIconWithCss(p)?{}:p.icon),g??(this.shouldInjectColor(p)?p.color:null),r,a,h);this.renderAdmonitionContent(b,e,m,i,a,t),r&&r!=="none"&&this.calloutManager.setCollapsible(b);let k=o.parentElement;k&&k.addClass("admonition-parent",`admonition-${e}-parent`),o.replaceWith(b);let v=this.app.workspace.getActiveViewOfType(f.MarkdownView);if(v?.editor?.cm?.state?.field(f.editorLivePreviewField)){let E=v.editor.cm;b.onClickEvent(T=>{if(T.defaultPrevented||T.detail>1||T.shiftKey)return;let C=T.target.closest("input, button, select, textarea, a[href], label, [contenteditable='true'], [tabindex]:not([tabindex='-1'])");if(!(C&&C!==b&&b.contains(C)))try{window.setTimeout(()=>{try{let M=E.posAtDOM(b);E.focus(),E.dispatch({selection:{head:M,anchor:M}})}catch{}},10)}catch{}})}return b}catch(a){console.error(a);let s=createEl("pre");s.createEl("code",{attr:{style:"color: var(--text-error) !important"}}).createSpan({text:`There was an error rendering the admonition:
|
|
|
|
`+t}),o.replaceWith(s)}}getAdmonitionElement(e,t,o,i,a,s,r){let m=createDiv({cls:`callout admonition admonition-${e} admonition-plugin ${t?.trim().length?"":"no-title"}`,attr:{style:i?`--callout-color: ${i};`:"","data-callout":e,"data-callout-fold":"","data-callout-metadata":r??""}}),d=m.createDiv({cls:`callout-title admonition-title ${t?.trim().length?"":"no-title"}`});if(t?.trim().length){let g=d.createDiv("callout-icon admonition-title-icon");o?.name&&o.type&&g.appendChild(this.iconManager.getIconNode(o)??createDiv());let h=new f.MarkdownRenderChild(d),p=d.createDiv("callout-title-inner admonition-title-content");f.MarkdownRenderer.render(this.app,t,p,s??"",h),p.firstElementChild?.instanceOf(HTMLParagraphElement)&&p.setChildrenInPlace(Array.from(p.firstElementChild.childNodes))}return a&&(m.addClass("is-collapsible"),a==="closed"&&m.addClass("is-collapsed")),this.data.dropShadow||m.addClass("no-drop"),m}renderAdmonitionContent(e,t,o,i,a,s){let r=new f.MarkdownRenderChild(e);if(r.containerEl=e,i&&typeof i!="string"&&i.addChild(r),o?.trim().length){let m=this.getAdmonitionContentElement(t,e,o);if(/^`{3,}mermaid/m.test(o)){let g=!e.hasAttribute("open");e.instanceOf(HTMLDetailsElement)&&e.setAttribute("open","open"),window.setTimeout(()=>{f.MarkdownRenderer.render(this.app,o,m,a,r),e.instanceOf(HTMLDetailsElement)&&g&&e.removeAttribute("open")},0)}else f.MarkdownRenderer.render(this.app,o,m,a,r);(!o.length||m.textContent.trim()==="")&&this.data.hideEmpty&&e.addClass("no-content");let d=m.querySelectorAll(".task-list-item-checkbox");if(d?.length){let g=s.split(`
|
|
`),h=0;d.forEach(p=>{let w=g.slice(h).findIndex(b=>/^[ \t>]*- \[.\]/.test(b));w!==-1&&(p.dataset.line=`${w+h+1}`,h=w+h+1)})}}}getAdmonitionContentElement(e,t,o){let i=t.createDiv("callout-content admonition-content");if(this.admonitions[e].copy??this.data.copyButton){let a=i.createDiv("admonition-content-copy");(0,f.setIcon)(a,"copy"),a.addEventListener("click",()=>{navigator.clipboard.writeText(o.trim()).then(()=>{new f.Notice("Admonition content copied to clipboard.")})})}return i}registerType(e){this.data.syntaxHighlight&&this.turnOnSyntaxHighlighting([e]);let t=e[0].toUpperCase()+e.slice(1);this.postprocessors.has(e)&&(f.MarkdownPreviewRenderer.unregisterCodeBlockPostProcessor(`ad-${e}`),t!==e&&f.MarkdownPreviewRenderer.unregisterCodeBlockPostProcessor(`ad-${t}`)),this.postprocessors.set(e,this.registerMarkdownCodeBlockProcessor(`ad-${e}`,(i,a,s)=>this.postprocessor(e,i,a,s))),t!==e&&this.registerMarkdownCodeBlockProcessor(`ad-${t}`,(i,a,s)=>this.postprocessor(e,i,a,s));let o=this.admonitions[e];o.command&&this.registerCommandsFor(o)}get admonitions(){return{...me,...this.data.userAdmonitions}}async addAdmonition(e){e.type=e.type.toLowerCase(),this.data.userAdmonitions={...this.data.userAdmonitions,[e.type]:e},this.registerType(e.type),this.calloutManager.addAdmonition(e),await this.saveSettings()}registerCommandsFor(e){e.command=!0,this.addCommand({id:`insert-${e.type}-callout`,name:`Insert ${e.type} Callout`,editorCheckCallback:(t,o,i)=>{if(t)return e.command;if(e.command)try{let a=o.getSelection();o.replaceSelection(`> [!${e.type}]
|
|
> ${a.split(`
|
|
`).join(`
|
|
> `)}
|
|
`);let s=o.getCursor();o.setCursor(s.line-2)}catch{new f.Notice("There was an issue inserting the admonition.")}}}),this.addCommand({id:`insert-${e.type}`,name:`Insert ${e.type}`,editorCheckCallback:(t,o,i)=>{if(t)return e.command;if(e.command)try{o.replaceSelection(`\`\`\`ad-${e.type}
|
|
|
|
${o.getSelection()}
|
|
|
|
\`\`\`
|
|
`);let a=o.getCursor();o.setCursor(a.line-2)}catch{new f.Notice("There was an issue inserting the admonition.")}}}),this.addCommand({id:`insert-${e.type}-with-title`,name:`Insert ${e.type} With Title`,editorCheckCallback:(t,o,i)=>{if(t)return e.command;if(e.command)try{let a=e.title??"";o.replaceSelection(`\`\`\`ad-${e.type}
|
|
title: ${a}
|
|
|
|
${o.getSelection()}
|
|
|
|
\`\`\`
|
|
`);let s=o.getCursor();o.setCursor(s.line-3)}catch{new f.Notice("There was an issue inserting the admonition.")}}})}unregisterType(e){this.data.syntaxHighlight&&this.turnOffSyntaxHighlighting([e.type]),e.command&&this.unregisterCommandsFor(e);let t=this.postprocessors.get(e.type);t&&(f.MarkdownPreviewRenderer.unregisterPostProcessor(t),f.MarkdownPreviewRenderer.unregisterCodeBlockPostProcessor(`ad-${e.type}`),this.postprocessors.delete(e.type))}async removeAdmonition(e){this.data.userAdmonitions[e.type]&&delete this.data.userAdmonitions[e.type],this.unregisterType(e),this.calloutManager.removeAdmonition(e),await this.saveSettings()}unregisterCommandsFor(e){e.command=!1,this.removeCommand(`insert-${e.type}-callout`),this.removeCommand(`insert-${e.type}`),this.removeCommand(`insert-${e.type}-with-title`)}async saveSettings(){this.data.version=this.manifest.version;let e={...this.data};delete e.msDocConverted,await this.saveData(e)}async loadSettings(){let e=await this.loadData();if(this.data=Object.assign({},at,e),this.data.userAdmonitions){if(!this.data.version||Number(this.data.version.split(".")[0])<5)for(let t in this.data.userAdmonitions)Object.hasOwn(this.data.userAdmonitions[t],"type")||(this.data.userAdmonitions[t]={...this.data.userAdmonitions[t],icon:{type:"font-awesome",name:this.data.userAdmonitions[t].icon}});for(let t of Object.keys(this.data.userAdmonitions)){let o=this.data.userAdmonitions[t];o.color&&/^\d+,\s*\d+,\s*\d+$/.test(o.color)&&(o.color=`rgb(${o.color})`)}}if(!this.data.rpgDownloadedOnce&&this.data.userAdmonitions&&Object.values(this.data.userAdmonitions).some(t=>t.icon?.type==="rpg")&&!this.data.icons.includes("rpg"))try{await this.downloadIcon("rpg"),this.data.rpgDownloadedOnce=!0}catch{}if(this.data.useFontAwesome&&this.data.userAdmonitions){let t=new Set;for(let o of Object.values(this.data.userAdmonitions)){if(o.icon?.type!=="font-awesome"||!o.icon.name)continue;let i=K(o.icon.name);i&&(o.icon.type=i,t.add(i))}for(let o of t)if(!this.data.icons.includes(o))try{await this.downloadIcon(o)}catch{}this.data.useFontAwesome=!1}if(this.data.userAdmonitions)for(let t of Object.keys(this.data.userAdmonitions)){let o=t.toLowerCase();o!==t&&(this.data.userAdmonitions[o]={...this.data.userAdmonitions[t],type:o},delete this.data.userAdmonitions[t])}await this.saveSettings()}turnOnSyntaxHighlighting(e=Object.keys(this.admonitions)){this.data.syntaxHighlight&&(e.forEach(t=>{let o=`${t}`.match(/^([\w+#-]*)[^\n`]*$/);if(!o)return;let[,i]=o;window.CodeMirror.defineMode(`ad-${i}`,(a,s)=>window.CodeMirror.getMode({},"hypermd"))}),this.app.workspace.onLayoutReady(()=>this.app.workspace.iterateCodeMirrors(t=>t.setOption("mode",t.getOption("mode")))))}turnOffSyntaxHighlighting(e=Object.keys(this.admonitions)){e.forEach(t=>{Object.hasOwn(window.CodeMirror.modes,`ad-${t}`)&&delete window.CodeMirror.modes[`ad-${t}`]}),this.app.workspace.onLayoutReady(()=>this.app.workspace.iterateCodeMirrors(t=>t.setOption("mode",t.getOption("mode"))))}onunload(){console.debug("Obsidian Admonition unloaded"),this.postprocessors.clear(),this.turnOffSyntaxHighlighting()}};
|
|
|
|
/* nosourcemap */ |