nimbi-cms 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/nimbi-cms.cjs.js +38 -38
- package/dist/nimbi-cms.css +1 -1
- package/dist/nimbi-cms.es.js +2589 -2505
- package/dist/nimbi-cms.js +38 -38
- package/package.json +1 -1
package/dist/nimbi-cms.cjs.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const Nt={onPageLoad:[],onNavBuild:[],transformHtml:[]};function dn(e,t){if(!Object.prototype.hasOwnProperty.call(Nt,e))throw new Error('Unknown hook "'+e+'"');if(typeof t!="function")throw new TypeError("hook callback must be a function");Nt[e].push(t)}function pa(e){dn("onPageLoad",e)}function ga(e){dn("onNavBuild",e)}function fa(e){dn("transformHtml",e)}async function In(e,t){const n=Nt[e]||[];for(const i of n)try{await i(t)}catch(r){console.warn("[nimbi-cms] runHooks callback failed",r)}}function ma(){Object.keys(Nt).forEach(e=>{Nt[e].length=0})}function Zr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var En,xr;function ba(){if(xr)return En;xr=1;function e(b){return b instanceof Map?b.clear=b.delete=b.set=function(){throw new Error("map is read-only")}:b instanceof Set&&(b.add=b.clear=b.delete=function(){throw new Error("set is read-only")}),Object.freeze(b),Object.getOwnPropertyNames(b).forEach(x=>{const M=b[x],J=typeof M;(J==="object"||J==="function")&&!Object.isFrozen(M)&&e(M)}),b}class t{constructor(x){x.data===void 0&&(x.data={}),this.data=x.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function n(b){return b.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function i(b,...x){const M=Object.create(null);for(const J in b)M[J]=b[J];return x.forEach(function(J){for(const Se in J)M[Se]=J[Se]}),M}const r="</span>",a=b=>!!b.scope,s=(b,{prefix:x})=>{if(b.startsWith("language:"))return b.replace("language:","language-");if(b.includes(".")){const M=b.split(".");return[`${x}${M.shift()}`,...M.map((J,Se)=>`${J}${"_".repeat(Se+1)}`)].join(" ")}return`${x}${b}`};class c{constructor(x,M){this.buffer="",this.classPrefix=M.classPrefix,x.walk(this)}addText(x){this.buffer+=n(x)}openNode(x){if(!a(x))return;const M=s(x.scope,{prefix:this.classPrefix});this.span(M)}closeNode(x){a(x)&&(this.buffer+=r)}value(){return this.buffer}span(x){this.buffer+=`<span class="${x}">`}}const o=(b={})=>{const x={children:[]};return Object.assign(x,b),x};class l{constructor(){this.rootNode=o(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(x){this.top.children.push(x)}openNode(x){const M=o({scope:x});this.add(M),this.stack.push(M)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(x){return this.constructor._walk(x,this.rootNode)}static _walk(x,M){return typeof M=="string"?x.addText(M):M.children&&(x.openNode(M),M.children.forEach(J=>this._walk(x,J)),x.closeNode(M)),x}static _collapse(x){typeof x!="string"&&x.children&&(x.children.every(M=>typeof M=="string")?x.children=[x.children.join("")]:x.children.forEach(M=>{l._collapse(M)}))}}class u extends l{constructor(x){super(),this.options=x}addText(x){x!==""&&this.add(x)}startScope(x){this.openNode(x)}endScope(){this.closeNode()}__addSublanguage(x,M){const J=x.root;M&&(J.scope=`language:${M}`),this.add(J)}toHTML(){return new c(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function p(b){return b?typeof b=="string"?b:b.source:null}function m(b){return g("(?=",b,")")}function h(b){return g("(?:",b,")*")}function d(b){return g("(?:",b,")?")}function g(...b){return b.map(M=>p(M)).join("")}function f(b){const x=b[b.length-1];return typeof x=="object"&&x.constructor===Object?(b.splice(b.length-1,1),x):{}}function w(...b){return"("+(f(b).capture?"":"?:")+b.map(J=>p(J)).join("|")+")"}function y(b){return new RegExp(b.toString()+"|").exec("").length-1}function k(b,x){const M=b&&b.exec(x);return M&&M.index===0}const L=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function R(b,{joinWith:x}){let M=0;return b.map(J=>{M+=1;const Se=M;let ve=p(J),O="";for(;ve.length>0;){const N=L.exec(ve);if(!N){O+=ve;break}O+=ve.substring(0,N.index),ve=ve.substring(N.index+N[0].length),N[0][0]==="\\"&&N[1]?O+="\\"+String(Number(N[1])+Se):(O+=N[0],N[0]==="("&&M++)}return O}).map(J=>`(${J})`).join(x)}const I=/\b\B/,U="[a-zA-Z]\\w*",z="[a-zA-Z_]\\w*",K="\\b\\d+(\\.\\d+)?",oe="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",E="\\b(0b[01]+)",j="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",be=(b={})=>{const x=/^#![ ]*\//;return b.binary&&(b.begin=g(x,/.*\b/,b.binary,/\b.*/)),i({scope:"meta",begin:x,end:/$/,relevance:0,"on:begin":(M,J)=>{M.index!==0&&J.ignoreMatch()}},b)},V={begin:"\\\\[\\s\\S]",relevance:0},H={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[V]},v={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[V]},F={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},Z=function(b,x,M={}){const J=i({scope:"comment",begin:b,end:x,contains:[]},M);J.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const Se=w("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return J.contains.push({begin:g(/[ ]+/,"(",Se,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),J},ge=Z("//","$"),A=Z("/\\*","\\*/"),S=Z("#","$"),P={scope:"number",begin:K,relevance:0},C={scope:"number",begin:oe,relevance:0},B={scope:"number",begin:E,relevance:0},_={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[V,{begin:/\[/,end:/\]/,relevance:0,contains:[V]}]},q={scope:"title",begin:U,relevance:0},ue={scope:"title",begin:z,relevance:0},fe={begin:"\\.\\s*"+z,relevance:0};var ne=Object.freeze({__proto__:null,APOS_STRING_MODE:H,BACKSLASH_ESCAPE:V,BINARY_NUMBER_MODE:B,BINARY_NUMBER_RE:E,COMMENT:Z,C_BLOCK_COMMENT_MODE:A,C_LINE_COMMENT_MODE:ge,C_NUMBER_MODE:C,C_NUMBER_RE:oe,END_SAME_AS_BEGIN:function(b){return Object.assign(b,{"on:begin":(x,M)=>{M.data._beginMatch=x[1]},"on:end":(x,M)=>{M.data._beginMatch!==x[1]&&M.ignoreMatch()}})},HASH_COMMENT_MODE:S,IDENT_RE:U,MATCH_NOTHING_RE:I,METHOD_GUARD:fe,NUMBER_MODE:P,NUMBER_RE:K,PHRASAL_WORDS_MODE:F,QUOTE_STRING_MODE:v,REGEXP_MODE:_,RE_STARTERS_RE:j,SHEBANG:be,TITLE_MODE:q,UNDERSCORE_IDENT_RE:z,UNDERSCORE_TITLE_MODE:ue});function le(b,x){b.input[b.index-1]==="."&&x.ignoreMatch()}function X(b,x){b.className!==void 0&&(b.scope=b.className,delete b.className)}function ke(b,x){x&&b.beginKeywords&&(b.begin="\\b("+b.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",b.__beforeBegin=le,b.keywords=b.keywords||b.beginKeywords,delete b.beginKeywords,b.relevance===void 0&&(b.relevance=0))}function Ve(b,x){Array.isArray(b.illegal)&&(b.illegal=w(...b.illegal))}function wn(b,x){if(b.match){if(b.begin||b.end)throw new Error("begin & end are not supported with match");b.begin=b.match,delete b.match}}function Pi(b,x){b.relevance===void 0&&(b.relevance=1)}const Ii=(b,x)=>{if(!b.beforeMatch)return;if(b.starts)throw new Error("beforeMatch cannot be used with starts");const M=Object.assign({},b);Object.keys(b).forEach(J=>{delete b[J]}),b.keywords=M.keywords,b.begin=g(M.beforeMatch,m(M.begin)),b.starts={relevance:0,contains:[Object.assign(M,{endsParent:!0})]},b.relevance=0,delete M.beforeMatch},Ni=["of","and","for","in","not","or","if","then","parent","list","value"],Bi="keyword";function sr(b,x,M=Bi){const J=Object.create(null);return typeof b=="string"?Se(M,b.split(" ")):Array.isArray(b)?Se(M,b):Object.keys(b).forEach(function(ve){Object.assign(J,sr(b[ve],x,ve))}),J;function Se(ve,O){x&&(O=O.map(N=>N.toLowerCase())),O.forEach(function(N){const Y=N.split("|");J[Y[0]]=[ve,Oi(Y[0],Y[1])]})}}function Oi(b,x){return x?Number(x):qi(b)?0:1}function qi(b){return Ni.includes(b.toLowerCase())}const or={},at=b=>{console.error(b)},lr=(b,...x)=>{console.log(`WARN: ${b}`,...x)},dt=(b,x)=>{or[`${b}/${x}`]||(console.log(`Deprecated as of ${b}. ${x}`),or[`${b}/${x}`]=!0)},Ft=new Error;function cr(b,x,{key:M}){let J=0;const Se=b[M],ve={},O={};for(let N=1;N<=x.length;N++)O[N+J]=Se[N],ve[N+J]=!0,J+=y(x[N-1]);b[M]=O,b[M]._emit=ve,b[M]._multi=!0}function Di(b){if(Array.isArray(b.begin)){if(b.skip||b.excludeBegin||b.returnBegin)throw at("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Ft;if(typeof b.beginScope!="object"||b.beginScope===null)throw at("beginScope must be object"),Ft;cr(b,b.begin,{key:"beginScope"}),b.begin=R(b.begin,{joinWith:""})}}function Hi(b){if(Array.isArray(b.end)){if(b.skip||b.excludeEnd||b.returnEnd)throw at("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Ft;if(typeof b.endScope!="object"||b.endScope===null)throw at("endScope must be object"),Ft;cr(b,b.end,{key:"endScope"}),b.end=R(b.end,{joinWith:""})}}function ji(b){b.scope&&typeof b.scope=="object"&&b.scope!==null&&(b.beginScope=b.scope,delete b.scope)}function Ui(b){ji(b),typeof b.beginScope=="string"&&(b.beginScope={_wrap:b.beginScope}),typeof b.endScope=="string"&&(b.endScope={_wrap:b.endScope}),Di(b),Hi(b)}function Wi(b){function x(O,N){return new RegExp(p(O),"m"+(b.case_insensitive?"i":"")+(b.unicodeRegex?"u":"")+(N?"g":""))}class M{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(N,Y){Y.position=this.position++,this.matchIndexes[this.matchAt]=Y,this.regexes.push([Y,N]),this.matchAt+=y(N)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const N=this.regexes.map(Y=>Y[1]);this.matcherRe=x(R(N,{joinWith:"|"}),!0),this.lastIndex=0}exec(N){this.matcherRe.lastIndex=this.lastIndex;const Y=this.matcherRe.exec(N);if(!Y)return null;const Te=Y.findIndex((_t,kn)=>kn>0&&_t!==void 0),Ae=this.matchIndexes[Te];return Y.splice(0,Te),Object.assign(Y,Ae)}}class J{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(N){if(this.multiRegexes[N])return this.multiRegexes[N];const Y=new M;return this.rules.slice(N).forEach(([Te,Ae])=>Y.addRule(Te,Ae)),Y.compile(),this.multiRegexes[N]=Y,Y}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(N,Y){this.rules.push([N,Y]),Y.type==="begin"&&this.count++}exec(N){const Y=this.getMatcher(this.regexIndex);Y.lastIndex=this.lastIndex;let Te=Y.exec(N);if(this.resumingScanAtSamePosition()&&!(Te&&Te.index===this.lastIndex)){const Ae=this.getMatcher(0);Ae.lastIndex=this.lastIndex+1,Te=Ae.exec(N)}return Te&&(this.regexIndex+=Te.position+1,this.regexIndex===this.count&&this.considerAll()),Te}}function Se(O){const N=new J;return O.contains.forEach(Y=>N.addRule(Y.begin,{rule:Y,type:"begin"})),O.terminatorEnd&&N.addRule(O.terminatorEnd,{type:"end"}),O.illegal&&N.addRule(O.illegal,{type:"illegal"}),N}function ve(O,N){const Y=O;if(O.isCompiled)return Y;[X,wn,Ui,Ii].forEach(Ae=>Ae(O,N)),b.compilerExtensions.forEach(Ae=>Ae(O,N)),O.__beforeBegin=null,[ke,Ve,Pi].forEach(Ae=>Ae(O,N)),O.isCompiled=!0;let Te=null;return typeof O.keywords=="object"&&O.keywords.$pattern&&(O.keywords=Object.assign({},O.keywords),Te=O.keywords.$pattern,delete O.keywords.$pattern),Te=Te||/\w+/,O.keywords&&(O.keywords=sr(O.keywords,b.case_insensitive)),Y.keywordPatternRe=x(Te,!0),N&&(O.begin||(O.begin=/\B|\b/),Y.beginRe=x(Y.begin),!O.end&&!O.endsWithParent&&(O.end=/\B|\b/),O.end&&(Y.endRe=x(Y.end)),Y.terminatorEnd=p(Y.end)||"",O.endsWithParent&&N.terminatorEnd&&(Y.terminatorEnd+=(O.end?"|":"")+N.terminatorEnd)),O.illegal&&(Y.illegalRe=x(O.illegal)),O.contains||(O.contains=[]),O.contains=[].concat(...O.contains.map(function(Ae){return Fi(Ae==="self"?O:Ae)})),O.contains.forEach(function(Ae){ve(Ae,Y)}),O.starts&&ve(O.starts,N),Y.matcher=Se(Y),Y}if(b.compilerExtensions||(b.compilerExtensions=[]),b.contains&&b.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return b.classNameAliases=i(b.classNameAliases||{}),ve(b)}function ur(b){return b?b.endsWithParent||ur(b.starts):!1}function Fi(b){return b.variants&&!b.cachedVariants&&(b.cachedVariants=b.variants.map(function(x){return i(b,{variants:null},x)})),b.cachedVariants?b.cachedVariants:ur(b)?i(b,{starts:b.starts?i(b.starts):null}):Object.isFrozen(b)?i(b):b}var Zi="11.11.1";class Gi extends Error{constructor(x,M){super(x),this.name="HTMLInjectionError",this.html=M}}const yn=n,hr=i,dr=Symbol("nomatch"),Qi=7,pr=function(b){const x=Object.create(null),M=Object.create(null),J=[];let Se=!0;const ve="Could not find the language '{}', did you forget to load/include a language module?",O={disableAutodetect:!0,name:"Plain text",contains:[]};let N={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:u};function Y(T){return N.noHighlightRe.test(T)}function Te(T){let W=T.className+" ";W+=T.parentNode?T.parentNode.className:"";const ce=N.languageDetectRe.exec(W);if(ce){const we=Je(ce[1]);return we||(lr(ve.replace("{}",ce[1])),lr("Falling back to no-highlight mode for this block.",T)),we?ce[1]:"no-highlight"}return W.split(/\s+/).find(we=>Y(we)||Je(we))}function Ae(T,W,ce){let we="",Ee="";typeof W=="object"?(we=T,ce=W.ignoreIllegals,Ee=W.language):(dt("10.7.0","highlight(lang, code, ...args) has been deprecated."),dt("10.7.0",`Please use highlight(code, options) instead.
|
|
2
|
-
https://github.com/highlightjs/highlight.js/issues/2277`),
|
|
3
|
-
`,1;if(vn>1e5&&vn>D.index*3)throw new Error("potential infinite loop, way more iterations than matches");return ye+=ie,ie.length}const We=Je(T);if(!We)throw at(ve.replace("{}",T)),new Error('Unknown language: "'+T+'"');const ua=Wi(We);let Sn="",ee=we||ua;const _r={},Me=new N.__emitter(N);ca();let ye="",Kt=0,st=0,vn=0,An=!1;try{if(We.__emitTokens)We.__emitTokens(W,Me);else{for(ee.matcher.considerAll();;){vn++,An?An=!1:ee.matcher.considerAll(),ee.matcher.lastIndex=st;const $=ee.matcher.exec(W);if(!$)break;const D=W.substring(st,$.index),ie=kr(D,$);st=$.index+ie}kr(W.substring(st))}return Me.finalize(),Sn=Me.toHTML(),{language:T,value:Sn,relevance:Kt,illegal:!1,_emitter:Me,_top:ee}}catch($){if($.message&&$.message.includes("Illegal"))return{language:T,value:yn(W),illegal:!0,relevance:0,_illegalBy:{message:$.message,index:st,context:W.slice(st-100,st+100),mode:$.mode,resultSoFar:Sn},_emitter:Me};if(Se)return{language:T,value:yn(W),illegal:!1,relevance:0,errorRaised:$,_emitter:Me,_top:ee};throw $}}function kn(T){const W={value:yn(T),illegal:!1,relevance:0,_top:O,_emitter:new N.__emitter(N)};return W._emitter.addText(T),W}function _n(T,W){W=W||N.languages||Object.keys(x);const ce=kn(T),we=W.filter(Je).filter(mr).map(Ne=>_t(Ne,T,!1));we.unshift(ce);const Ee=we.sort((Ne,Ue)=>{if(Ne.relevance!==Ue.relevance)return Ue.relevance-Ne.relevance;if(Ne.language&&Ue.language){if(Je(Ne.language).supersetOf===Ue.language)return 1;if(Je(Ue.language).supersetOf===Ne.language)return-1}return 0}),[je,et]=Ee,Qt=je;return Qt.secondBest=et,Qt}function Xi(T,W,ce){const we=W&&M[W]||ce;T.classList.add("hljs"),T.classList.add(`language-${we}`)}function xn(T){let W=null;const ce=Te(T);if(Y(ce))return;if(Gt("before:highlightElement",{el:T,language:ce}),T.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",T);return}if(T.children.length>0&&(N.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(T)),N.throwUnescapedHTML))throw new Gi("One of your code blocks includes unescaped HTML.",T.innerHTML);W=T;const we=W.textContent,Ee=ce?Ae(we,{language:ce,ignoreIllegals:!0}):_n(we);T.innerHTML=Ee.value,T.dataset.highlighted="yes",Xi(T,ce,Ee.language),T.result={language:Ee.language,re:Ee.relevance,relevance:Ee.relevance},Ee.secondBest&&(T.secondBest={language:Ee.secondBest.language,relevance:Ee.secondBest.relevance}),Gt("after:highlightElement",{el:T,result:Ee,text:we})}function Ki(T){N=hr(N,T)}const Yi=()=>{Zt(),dt("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function Vi(){Zt(),dt("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let gr=!1;function Zt(){function T(){Zt()}if(document.readyState==="loading"){gr||window.addEventListener("DOMContentLoaded",T,!1),gr=!0;return}document.querySelectorAll(N.cssSelector).forEach(xn)}function Ji(T,W){let ce=null;try{ce=W(b)}catch(we){if(at("Language definition for '{}' could not be registered.".replace("{}",T)),Se)at(we);else throw we;ce=O}ce.name||(ce.name=T),x[T]=ce,ce.rawDefinition=W.bind(null,b),ce.aliases&&fr(ce.aliases,{languageName:T})}function ea(T){delete x[T];for(const W of Object.keys(M))M[W]===T&&delete M[W]}function ta(){return Object.keys(x)}function Je(T){return T=(T||"").toLowerCase(),x[T]||x[M[T]]}function fr(T,{languageName:W}){typeof T=="string"&&(T=[T]),T.forEach(ce=>{M[ce.toLowerCase()]=W})}function mr(T){const W=Je(T);return W&&!W.disableAutodetect}function na(T){T["before:highlightBlock"]&&!T["before:highlightElement"]&&(T["before:highlightElement"]=W=>{T["before:highlightBlock"](Object.assign({block:W.el},W))}),T["after:highlightBlock"]&&!T["after:highlightElement"]&&(T["after:highlightElement"]=W=>{T["after:highlightBlock"](Object.assign({block:W.el},W))})}function ra(T){na(T),J.push(T)}function ia(T){const W=J.indexOf(T);W!==-1&&J.splice(W,1)}function Gt(T,W){const ce=T;J.forEach(function(we){we[ce]&&we[ce](W)})}function aa(T){return dt("10.7.0","highlightBlock will be removed entirely in v12.0"),dt("10.7.0","Please use highlightElement now."),xn(T)}Object.assign(b,{highlight:Ae,highlightAuto:_n,highlightAll:Zt,highlightElement:xn,highlightBlock:aa,configure:Ki,initHighlighting:Yi,initHighlightingOnLoad:Vi,registerLanguage:Ji,unregisterLanguage:ea,listLanguages:ta,getLanguage:Je,registerAliases:fr,autoDetection:mr,inherit:hr,addPlugin:ra,removePlugin:ia}),b.debugMode=function(){Se=!1},b.safeMode=function(){Se=!0},b.versionString=Zi,b.regex={concat:g,lookahead:m,either:w,optional:d,anyNumberOfTimes:h};for(const T in ne)typeof ne[T]=="object"&&e(ne[T]);return Object.assign(b,ne),b},pt=pr({});return pt.newInstance=()=>pr({}),En=pt,pt.HighlightJS=pt,pt.default=pt,En}var wa=ba();const de=Zr(wa),ya="11.11.1",ae=new Map,ka="https://raw.githubusercontent.com/highlightjs/highlight.js/main/SUPPORTED_LANGUAGES.md",Be={shell:"bash",sh:"bash",zsh:"bash",js:"javascript",ts:"typescript",py:"python",csharp:"cs","c#":"cs"};Be.html="xml";Be.xhtml="xml";Be.markup="xml";const Wn=new Set(["magic","undefined"]);let nt=null;const Ln=new Map,_a=300*1e3;async function Fn(e=ka){if(e)return nt||(nt=(async()=>{try{const t=await fetch(e);if(!t.ok)return;const i=(await t.text()).split(/\r?\n/);let r=-1;for(let l=0;l<i.length;l++)if(/\|\s*Language\s*\|/i.test(i[l])){r=l;break}if(r===-1)return;const a=i[r].replace(/^\||\|$/g,"").split("|").map(l=>l.trim().toLowerCase());let s=a.findIndex(l=>/alias|aliases|equivalent|alt|alternates?/i.test(l));s===-1&&(s=1);let c=a.findIndex(l=>/file|filename|module|module name|module-name|short|slug/i.test(l));if(c===-1){const l=a.findIndex(u=>/language/i.test(u));c=l!==-1?l:0}let o=[];for(let l=r+1;l<i.length;l++){const u=i[l].trim();if(!u||!u.startsWith("|"))break;const p=u.replace(/^\||\|$/g,"").split("|").map(f=>f.trim());if(p.every(f=>/^-+$/.test(f)))continue;const m=p;if(!m.length)continue;const d=(m[c]||m[0]||"").toString().trim().toLowerCase();if(!d||/^-+$/.test(d))continue;ae.set(d,d);const g=m[s]||"";if(g){const f=String(g).split(",").map(w=>w.replace(/`/g,"").trim()).filter(Boolean);if(f.length){const y=f[0].toLowerCase().replace(/^[:]+/,"").replace(/[^a-z0-9_-]+/ig,"");y&&/[a-z0-9]/i.test(y)&&(ae.set(y,y),o.push(y))}}}try{const l=[];for(const u of o){const p=String(u||"").replace(/^[:]+/,"").replace(/[^a-z0-9_-]+/ig,"");p&&/[a-z0-9]/i.test(p)?l.push(p):ae.delete(u)}o=l}catch(l){console.warn("[codeblocksManager] cleanup aliases failed",l)}try{let l=0;for(const u of Array.from(ae.keys())){if(!u||/^-+$/.test(u)||!/[a-z0-9]/i.test(u)){ae.delete(u),l++;continue}if(/^[:]+/.test(u)){const p=u.replace(/^[:]+/,"");if(p&&/[a-z0-9]/i.test(p)){const m=ae.get(u);ae.delete(u),ae.set(p,m)}else ae.delete(u),l++}}for(const[u,p]of Array.from(ae.entries()))(!p||/^-+$/.test(p)||!/[a-z0-9]/i.test(p))&&(ae.delete(u),l++);try{const u=":---------------------";ae.has(u)&&(ae.delete(u),l++)}catch(u){console.warn("[codeblocksManager] remove sep key failed",u)}try{const u=Array.from(ae.keys()).sort()}catch(u){console.warn("[codeblocksManager] compute supported keys failed",u)}}catch(l){console.warn("[codeblocksManager] ignored error",l)}}catch(t){console.warn("[codeblocksManager] loadSupportedLanguages failed",t)}})(),nt)}const xt=new Set;async function yt(e,t){if(nt||(async()=>{try{await Fn()}catch(r){console.warn("[codeblocksManager] loadSupportedLanguages (IIFE) failed",r)}})(),nt)try{await nt}catch{}if(e=e==null?"":String(e),e=e.trim(),!e)return!1;const n=e.toLowerCase();if(Wn.has(n))return!1;if(ae.size&&!ae.has(n)){const r=Be;if(!r[n]&&!r[e])return!1}if(xt.has(e))return!0;const i=Be;try{const r=(t||e||"").toString().replace(/\.js$/i,"").trim(),a=(i[e]||e||"").toString(),s=(i[r]||r||"").toString();let c=Array.from(new Set([a,s,r,e,i[r],i[e]].filter(Boolean))).map(u=>String(u).toLowerCase()).filter(u=>u&&u!=="undefined");ae.size&&(c=c.filter(u=>{if(ae.has(u))return!0;const p=Be[u];return!!(p&&ae.has(p))}));let o=null,l=null;for(const u of c)try{const p=Date.now();let m=Ln.get(u);if(m&&m.ok===!1&&p-(m.ts||0)>=_a&&(Ln.delete(u),m=void 0),m){if(m.module)o=m.module;else if(m.promise)try{o=await m.promise}catch{o=null}}else{const h={promise:null,module:null,ok:null,ts:0};Ln.set(u,h),h.promise=(async()=>{try{try{try{return await import(`highlight.js/lib/languages/${u}.js`)}catch{return await import(`highlight.js/lib/languages/${u}`)}}catch{try{const g=`https://cdn.jsdelivr.net/npm/highlight.js/es/languages/${u}.js`;return await new Function("u","return import(u)")(g)}catch{try{const f=`https://cdn.jsdelivr.net/npm/highlight.js/lib/languages/${u}.js`;return await new Function("u","return import(u)")(f)}catch{return null}}}}catch{return null}})();try{o=await h.promise,h.module=o,h.ok=!!o,h.ts=Date.now()}catch{h.module=null,h.ok=!1,h.ts=Date.now(),o=null}}if(o){const h=o.default||o;try{const d=ae.size&&ae.get(e)||u||e;return de.registerLanguage(d,h),xt.add(d),d!==e&&(de.registerLanguage(e,h),xt.add(e)),!0}catch(d){l=d}}else try{if(ae.has(u)||ae.has(e)){const h=()=>({});try{de.registerLanguage(u,h),xt.add(u)}catch{}try{u!==e&&(de.registerLanguage(e,h),xt.add(e))}catch{}return!0}}catch{}}catch(p){l=p}if(l)throw l;return!1}catch{return!1}}let Yt=null;function Gr(e=document){nt||(async()=>{try{await Fn()}catch(a){console.warn("[codeblocksManager] loadSupportedLanguages (observer) failed",a)}})();const t=Be,i=Yt||(typeof IntersectionObserver>"u"?null:(Yt=new IntersectionObserver((a,s)=>{a.forEach(c=>{if(!c.isIntersecting)return;const o=c.target;try{s.unobserve(o)}catch(l){console.warn("[codeblocksManager] observer unobserve failed",l)}(async()=>{try{const l=o.getAttribute&&o.getAttribute("class")||o.className||"",u=l.match(/language-([a-zA-Z0-9_+-]+)/)||l.match(/lang(?:uage)?-?([a-zA-Z0-9_+-]+)/);if(u&&u[1]){const p=(u[1]||"").toLowerCase(),m=t[p]||p,h=ae.size&&(ae.get(m)||ae.get(String(m).toLowerCase()))||m;try{await yt(h)}catch(d){console.warn("[codeblocksManager] registerLanguage failed",d)}try{try{const d=o.textContent||o.innerText||"";d!=null&&(o.textContent=d)}catch{}try{o&&o.dataset&&o.dataset.highlighted&&delete o.dataset.highlighted}catch{}de.highlightElement(o)}catch(d){console.warn("[codeblocksManager] hljs.highlightElement failed",d)}}else try{const p=o.textContent||"";try{if(de&&typeof de.getLanguage=="function"&&de.getLanguage("plaintext")){const m=de.highlight(p,{language:"plaintext"});m&&m.value&&(o.innerHTML=m.value)}}catch{try{de.highlightElement(o)}catch(h){console.warn("[codeblocksManager] fallback highlightElement failed",h)}}}catch(p){console.warn("[codeblocksManager] auto-detect plaintext failed",p)}}catch(l){console.warn("[codeblocksManager] observer entry processing failed",l)}})()})},{root:null,rootMargin:"300px",threshold:.1}),Yt)),r=e&&e.querySelectorAll?e.querySelectorAll("pre code"):[];if(!i){r.forEach(async a=>{try{const s=a.getAttribute&&a.getAttribute("class")||a.className||"",c=s.match(/language-([a-zA-Z0-9_+-]+)/)||s.match(/lang(?:uage)?-?([a-zA-Z0-9_+-]+)/);if(c&&c[1]){const o=(c[1]||"").toLowerCase(),l=t[o]||o,u=ae.size&&(ae.get(l)||ae.get(String(l).toLowerCase()))||l;try{await yt(u)}catch(p){console.warn("[codeblocksManager] registerLanguage failed (no observer)",p)}}try{try{const o=a.textContent||a.innerText||"";o!=null&&(a.textContent=o)}catch{}try{a&&a.dataset&&a.dataset.highlighted&&delete a.dataset.highlighted}catch{}de.highlightElement(a)}catch(o){console.warn("[codeblocksManager] hljs.highlightElement failed (no observer)",o)}}catch(s){console.warn("[codeblocksManager] loadSupportedLanguages fallback ignored error",s)}});return}r.forEach(a=>{try{i.observe(a)}catch(s){console.warn("[codeblocksManager] observe failed",s)}})}function xa(e,{useCdn:t=!0}={}){const n=document.querySelector("link[data-hl-theme]"),i=n&&n.getAttribute?n.getAttribute("data-hl-theme"):null,r=e==null?"default":String(e),a=r&&String(r).toLowerCase()||"";if(a==="default"||a==="monokai"){try{n&&n.parentNode&&n.parentNode.removeChild(n)}catch{}return}if(i&&i.toLowerCase()===a)return;if(!t){console.warn("Requested highlight theme not bundled; set useCdn=true to load theme from CDN");return}const s=a,c=`https://cdn.jsdelivr.net/npm/highlight.js@${ya}/styles/${s}.css`,o=document.createElement("link");o.rel="stylesheet",o.href=c,o.setAttribute("data-hl-theme",s),o.addEventListener("load",()=>{try{n&&n.parentNode&&n.parentNode.removeChild(n)}catch{}}),document.head.appendChild(o)}let lt="light";function Sa(e,t={}){if(document.querySelector(`link[href="${e}"]`))return;const n=document.createElement("link");if(n.rel="stylesheet",n.href=e,Object.entries(t).forEach(([i,r])=>n.setAttribute(i,r)),document.head.appendChild(n),t["data-bulmaswatch-theme"])try{if(n.getAttribute("data-bulmaswatch-observer"))return;let i=Number(n.getAttribute("data-bulmaswatch-move-count")||0),r=!1;const a=new MutationObserver(()=>{try{if(r)return;const c=n.parentNode;if(!c||c.lastElementChild===n)return;if(i>=1e3){n.setAttribute("data-bulmaswatch-move-stopped","1");return}r=!0;try{c.appendChild(n)}catch{}i+=1,n.setAttribute("data-bulmaswatch-move-count",String(i)),r=!1}catch{}});try{a.observe(document.head,{childList:!0}),n.setAttribute("data-bulmaswatch-observer","1"),n.setAttribute("data-bulmaswatch-move-count",String(i))}catch{}const s=document.head;s&&s.lastElementChild!==n&&s.appendChild(n)}catch{}}function Sr(){try{const e=Array.from(document.querySelectorAll("link[data-bulmaswatch-theme]"));for(const t of e)t&&t.parentNode&&t.parentNode.removeChild(t)}catch{}try{const e=Array.from(document.querySelectorAll("style[data-bulma-override]"));for(const t of e)t&&t.parentNode&&t.parentNode.removeChild(t)}catch{}}async function Qr(e="none",t="/"){if(typeof window<"u"&&window.__nimbiCMSDebug)try{console.debug("[bulmaManager] ensureBulma called",{bulmaCustomize:e,pageDir:t})}catch{}if(!e)return;if(e==="none"){try{const a=[location&&location.protocol&&location.protocol==="file:"?"https://unpkg.com/bulma/css/bulma.min.css":"//unpkg.com/bulma/css/bulma.min.css","https://unpkg.com/bulma/css/bulma.min.css"];let s=!1;for(const c of a)try{if(document.querySelector(`link[href="${c}"]`)){s=!0;break}}catch{}if(!s){const c=a[0],o=document.createElement("link");o.rel="stylesheet",o.href=c,o.setAttribute("data-bulma-base","1");const l=document.querySelector('link[href*="/dist/nimbi-cms.css"], link[href*="dist/nimbi-cms.css"]');l&&l.parentNode?l.parentNode.insertBefore(o,l):document.head.appendChild(o)}}catch{}try{const a=Array.from(document.querySelectorAll("link[data-bulmaswatch-theme]"));for(const s of a)s&&s.parentNode&&s.parentNode.removeChild(s)}catch{}try{const a=Array.from(document.querySelectorAll("style[data-bulma-override]"));for(const s of a)s&&s.parentNode&&s.parentNode.removeChild(s)}catch{}return}const i=[t+"bulma.css","/bulma.css"],r=Array.from(new Set(i));if(e==="local"){if(Sr(),document.querySelector("style[data-bulma-override]"))return;for(const a of r)try{const s=await fetch(a,{method:"GET"});if(s.ok){const c=await s.text(),o=document.createElement("style");o.setAttribute("data-bulma-override",a),o.appendChild(document.createTextNode(`
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const Ot={onPageLoad:[],onNavBuild:[],transformHtml:[]};function pn(e,t){if(!Object.prototype.hasOwnProperty.call(Ot,e))throw new Error('Unknown hook "'+e+'"');if(typeof t!="function")throw new TypeError("hook callback must be a function");Ot[e].push(t)}function pa(e){pn("onPageLoad",e)}function ga(e){pn("onNavBuild",e)}function fa(e){pn("transformHtml",e)}async function Nn(e,t){const n=Ot[e]||[];for(const i of n)try{await i(t)}catch(r){console.warn("[nimbi-cms] runHooks callback failed",r)}}function ma(){Object.keys(Ot).forEach(e=>{Ot[e].length=0})}function Gr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ln,Sr;function ba(){if(Sr)return Ln;Sr=1;function e(b){return b instanceof Map?b.clear=b.delete=b.set=function(){throw new Error("map is read-only")}:b instanceof Set&&(b.add=b.clear=b.delete=function(){throw new Error("set is read-only")}),Object.freeze(b),Object.getOwnPropertyNames(b).forEach(_=>{const M=b[_],ee=typeof M;(ee==="object"||ee==="function")&&!Object.isFrozen(M)&&e(M)}),b}class t{constructor(_){_.data===void 0&&(_.data={}),this.data=_.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function n(b){return b.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function i(b,..._){const M=Object.create(null);for(const ee in b)M[ee]=b[ee];return _.forEach(function(ee){for(const ve in ee)M[ve]=ee[ve]}),M}const r="</span>",a=b=>!!b.scope,s=(b,{prefix:_})=>{if(b.startsWith("language:"))return b.replace("language:","language-");if(b.includes(".")){const M=b.split(".");return[`${_}${M.shift()}`,...M.map((ee,ve)=>`${ee}${"_".repeat(ve+1)}`)].join(" ")}return`${_}${b}`};class u{constructor(_,M){this.buffer="",this.classPrefix=M.classPrefix,_.walk(this)}addText(_){this.buffer+=n(_)}openNode(_){if(!a(_))return;const M=s(_.scope,{prefix:this.classPrefix});this.span(M)}closeNode(_){a(_)&&(this.buffer+=r)}value(){return this.buffer}span(_){this.buffer+=`<span class="${_}">`}}const o=(b={})=>{const _={children:[]};return Object.assign(_,b),_};class l{constructor(){this.rootNode=o(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(_){this.top.children.push(_)}openNode(_){const M=o({scope:_});this.add(M),this.stack.push(M)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(_){return this.constructor._walk(_,this.rootNode)}static _walk(_,M){return typeof M=="string"?_.addText(M):M.children&&(_.openNode(M),M.children.forEach(ee=>this._walk(_,ee)),_.closeNode(M)),_}static _collapse(_){typeof _!="string"&&_.children&&(_.children.every(M=>typeof M=="string")?_.children=[_.children.join("")]:_.children.forEach(M=>{l._collapse(M)}))}}class c extends l{constructor(_){super(),this.options=_}addText(_){_!==""&&this.add(_)}startScope(_){this.openNode(_)}endScope(){this.closeNode()}__addSublanguage(_,M){const ee=_.root;M&&(ee.scope=`language:${M}`),this.add(ee)}toHTML(){return new u(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function f(b){return b?typeof b=="string"?b:b.source:null}function m(b){return p("(?=",b,")")}function h(b){return p("(?:",b,")*")}function d(b){return p("(?:",b,")?")}function p(...b){return b.map(M=>f(M)).join("")}function g(b){const _=b[b.length-1];return typeof _=="object"&&_.constructor===Object?(b.splice(b.length-1,1),_):{}}function w(...b){return"("+(g(b).capture?"":"?:")+b.map(ee=>f(ee)).join("|")+")"}function y(b){return new RegExp(b.toString()+"|").exec("").length-1}function k(b,_){const M=b&&b.exec(_);return M&&M.index===0}const v=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function $(b,{joinWith:_}){let M=0;return b.map(ee=>{M+=1;const ve=M;let Ae=f(ee),q="";for(;Ae.length>0;){const B=v.exec(Ae);if(!B){q+=Ae;break}q+=Ae.substring(0,B.index),Ae=Ae.substring(B.index+B[0].length),B[0][0]==="\\"&&B[1]?q+="\\"+String(Number(B[1])+ve):(q+=B[0],B[0]==="("&&M++)}return q}).map(ee=>`(${ee})`).join(_)}const N=/\b\B/,U="[a-zA-Z]\\w*",z="[a-zA-Z_]\\w*",K="\\b\\d+(\\.\\d+)?",le="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",L="\\b(0b[01]+)",j="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",ye=(b={})=>{const _=/^#![ ]*\//;return b.binary&&(b.begin=p(_,/.*\b/,b.binary,/\b.*/)),i({scope:"meta",begin:_,end:/$/,relevance:0,"on:begin":(M,ee)=>{M.index!==0&&ee.ignoreMatch()}},b)},V={begin:"\\\\[\\s\\S]",relevance:0},H={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[V]},S={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[V]},F={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},Z=function(b,_,M={}){const ee=i({scope:"comment",begin:b,end:_,contains:[]},M);ee.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const ve=w("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return ee.contains.push({begin:p(/[ ]+/,"(",ve,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),ee},pe=Z("//","$"),x=Z("/\\*","\\*/"),A=Z("#","$"),I={scope:"number",begin:K,relevance:0},R={scope:"number",begin:le,relevance:0},O={scope:"number",begin:L,relevance:0},C={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[V,{begin:/\[/,end:/\]/,relevance:0,contains:[V]}]},X={scope:"title",begin:U,relevance:0},E={scope:"title",begin:z,relevance:0},ue={begin:"\\.\\s*"+z,relevance:0};var ie=Object.freeze({__proto__:null,APOS_STRING_MODE:H,BACKSLASH_ESCAPE:V,BINARY_NUMBER_MODE:O,BINARY_NUMBER_RE:L,COMMENT:Z,C_BLOCK_COMMENT_MODE:x,C_LINE_COMMENT_MODE:pe,C_NUMBER_MODE:R,C_NUMBER_RE:le,END_SAME_AS_BEGIN:function(b){return Object.assign(b,{"on:begin":(_,M)=>{M.data._beginMatch=_[1]},"on:end":(_,M)=>{M.data._beginMatch!==_[1]&&M.ignoreMatch()}})},HASH_COMMENT_MODE:A,IDENT_RE:U,MATCH_NOTHING_RE:N,METHOD_GUARD:ue,NUMBER_MODE:I,NUMBER_RE:K,PHRASAL_WORDS_MODE:F,QUOTE_STRING_MODE:S,REGEXP_MODE:C,RE_STARTERS_RE:j,SHEBANG:ye,TITLE_MODE:X,UNDERSCORE_IDENT_RE:z,UNDERSCORE_TITLE_MODE:E});function me(b,_){b.input[b.index-1]==="."&&_.ignoreMatch()}function oe(b,_){b.className!==void 0&&(b.scope=b.className,delete b.className)}function ge(b,_){_&&b.beginKeywords&&(b.begin="\\b("+b.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",b.__beforeBegin=me,b.keywords=b.keywords||b.beginKeywords,delete b.beginKeywords,b.relevance===void 0&&(b.relevance=0))}function we(b,_){Array.isArray(b.illegal)&&(b.illegal=w(...b.illegal))}function We(b,_){if(b.match){if(b.begin||b.end)throw new Error("begin & end are not supported with match");b.begin=b.match,delete b.match}}function yn(b,_){b.relevance===void 0&&(b.relevance=1)}const Ii=(b,_)=>{if(!b.beforeMatch)return;if(b.starts)throw new Error("beforeMatch cannot be used with starts");const M=Object.assign({},b);Object.keys(b).forEach(ee=>{delete b[ee]}),b.keywords=M.keywords,b.begin=p(M.beforeMatch,m(M.begin)),b.starts={relevance:0,contains:[Object.assign(M,{endsParent:!0})]},b.relevance=0,delete M.beforeMatch},Ni=["of","and","for","in","not","or","if","then","parent","list","value"],Bi="keyword";function or(b,_,M=Bi){const ee=Object.create(null);return typeof b=="string"?ve(M,b.split(" ")):Array.isArray(b)?ve(M,b):Object.keys(b).forEach(function(Ae){Object.assign(ee,or(b[Ae],_,Ae))}),ee;function ve(Ae,q){_&&(q=q.map(B=>B.toLowerCase())),q.forEach(function(B){const Y=B.split("|");ee[Y[0]]=[Ae,Oi(Y[0],Y[1])]})}}function Oi(b,_){return _?Number(_):qi(b)?0:1}function qi(b){return Ni.includes(b.toLowerCase())}const lr={},st=b=>{console.error(b)},cr=(b,..._)=>{console.log(`WARN: ${b}`,..._)},gt=(b,_)=>{lr[`${b}/${_}`]||(console.log(`Deprecated as of ${b}. ${_}`),lr[`${b}/${_}`]=!0)},Zt=new Error;function ur(b,_,{key:M}){let ee=0;const ve=b[M],Ae={},q={};for(let B=1;B<=_.length;B++)q[B+ee]=ve[B],Ae[B+ee]=!0,ee+=y(_[B-1]);b[M]=q,b[M]._emit=Ae,b[M]._multi=!0}function Di(b){if(Array.isArray(b.begin)){if(b.skip||b.excludeBegin||b.returnBegin)throw st("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Zt;if(typeof b.beginScope!="object"||b.beginScope===null)throw st("beginScope must be object"),Zt;ur(b,b.begin,{key:"beginScope"}),b.begin=$(b.begin,{joinWith:""})}}function Hi(b){if(Array.isArray(b.end)){if(b.skip||b.excludeEnd||b.returnEnd)throw st("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Zt;if(typeof b.endScope!="object"||b.endScope===null)throw st("endScope must be object"),Zt;ur(b,b.end,{key:"endScope"}),b.end=$(b.end,{joinWith:""})}}function ji(b){b.scope&&typeof b.scope=="object"&&b.scope!==null&&(b.beginScope=b.scope,delete b.scope)}function Ui(b){ji(b),typeof b.beginScope=="string"&&(b.beginScope={_wrap:b.beginScope}),typeof b.endScope=="string"&&(b.endScope={_wrap:b.endScope}),Di(b),Hi(b)}function Wi(b){function _(q,B){return new RegExp(f(q),"m"+(b.case_insensitive?"i":"")+(b.unicodeRegex?"u":"")+(B?"g":""))}class M{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(B,Y){Y.position=this.position++,this.matchIndexes[this.matchAt]=Y,this.regexes.push([Y,B]),this.matchAt+=y(B)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const B=this.regexes.map(Y=>Y[1]);this.matcherRe=_($(B,{joinWith:"|"}),!0),this.lastIndex=0}exec(B){this.matcherRe.lastIndex=this.lastIndex;const Y=this.matcherRe.exec(B);if(!Y)return null;const Ce=Y.findIndex((St,_n)=>_n>0&&St!==void 0),Ee=this.matchIndexes[Ce];return Y.splice(0,Ce),Object.assign(Y,Ee)}}class ee{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(B){if(this.multiRegexes[B])return this.multiRegexes[B];const Y=new M;return this.rules.slice(B).forEach(([Ce,Ee])=>Y.addRule(Ce,Ee)),Y.compile(),this.multiRegexes[B]=Y,Y}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(B,Y){this.rules.push([B,Y]),Y.type==="begin"&&this.count++}exec(B){const Y=this.getMatcher(this.regexIndex);Y.lastIndex=this.lastIndex;let Ce=Y.exec(B);if(this.resumingScanAtSamePosition()&&!(Ce&&Ce.index===this.lastIndex)){const Ee=this.getMatcher(0);Ee.lastIndex=this.lastIndex+1,Ce=Ee.exec(B)}return Ce&&(this.regexIndex+=Ce.position+1,this.regexIndex===this.count&&this.considerAll()),Ce}}function ve(q){const B=new ee;return q.contains.forEach(Y=>B.addRule(Y.begin,{rule:Y,type:"begin"})),q.terminatorEnd&&B.addRule(q.terminatorEnd,{type:"end"}),q.illegal&&B.addRule(q.illegal,{type:"illegal"}),B}function Ae(q,B){const Y=q;if(q.isCompiled)return Y;[oe,We,Ui,Ii].forEach(Ee=>Ee(q,B)),b.compilerExtensions.forEach(Ee=>Ee(q,B)),q.__beforeBegin=null,[ge,we,yn].forEach(Ee=>Ee(q,B)),q.isCompiled=!0;let Ce=null;return typeof q.keywords=="object"&&q.keywords.$pattern&&(q.keywords=Object.assign({},q.keywords),Ce=q.keywords.$pattern,delete q.keywords.$pattern),Ce=Ce||/\w+/,q.keywords&&(q.keywords=or(q.keywords,b.case_insensitive)),Y.keywordPatternRe=_(Ce,!0),B&&(q.begin||(q.begin=/\B|\b/),Y.beginRe=_(Y.begin),!q.end&&!q.endsWithParent&&(q.end=/\B|\b/),q.end&&(Y.endRe=_(Y.end)),Y.terminatorEnd=f(Y.end)||"",q.endsWithParent&&B.terminatorEnd&&(Y.terminatorEnd+=(q.end?"|":"")+B.terminatorEnd)),q.illegal&&(Y.illegalRe=_(q.illegal)),q.contains||(q.contains=[]),q.contains=[].concat(...q.contains.map(function(Ee){return Fi(Ee==="self"?q:Ee)})),q.contains.forEach(function(Ee){Ae(Ee,Y)}),q.starts&&Ae(q.starts,B),Y.matcher=ve(Y),Y}if(b.compilerExtensions||(b.compilerExtensions=[]),b.contains&&b.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return b.classNameAliases=i(b.classNameAliases||{}),Ae(b)}function hr(b){return b?b.endsWithParent||hr(b.starts):!1}function Fi(b){return b.variants&&!b.cachedVariants&&(b.cachedVariants=b.variants.map(function(_){return i(b,{variants:null},_)})),b.cachedVariants?b.cachedVariants:hr(b)?i(b,{starts:b.starts?i(b.starts):null}):Object.isFrozen(b)?i(b):b}var Zi="11.11.1";class Gi extends Error{constructor(_,M){super(_),this.name="HTMLInjectionError",this.html=M}}const kn=n,dr=i,pr=Symbol("nomatch"),Qi=7,gr=function(b){const _=Object.create(null),M=Object.create(null),ee=[];let ve=!0;const Ae="Could not find the language '{}', did you forget to load/include a language module?",q={disableAutodetect:!0,name:"Plain text",contains:[]};let B={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:c};function Y(T){return B.noHighlightRe.test(T)}function Ce(T){let W=T.className+" ";W+=T.parentNode?T.parentNode.className:"";const ce=B.languageDetectRe.exec(W);if(ce){const ke=et(ce[1]);return ke||(cr(Ae.replace("{}",ce[1])),cr("Falling back to no-highlight mode for this block.",T)),ke?ce[1]:"no-highlight"}return W.split(/\s+/).find(ke=>Y(ke)||et(ke))}function Ee(T,W,ce){let ke="",Le="";typeof W=="object"?(ke=T,ce=W.ignoreIllegals,Le=W.language):(gt("10.7.0","highlight(lang, code, ...args) has been deprecated."),gt("10.7.0",`Please use highlight(code, options) instead.
|
|
2
|
+
https://github.com/highlightjs/highlight.js/issues/2277`),Le=T,ke=W),ce===void 0&&(ce=!0);const Ue={code:ke,language:Le};Qt("before:highlight",Ue);const tt=Ue.result?Ue.result:St(Ue.language,Ue.code,ce);return tt.code=Ue.code,Qt("after:highlight",tt),tt}function St(T,W,ce,ke){const Le=Object.create(null);function Ue(P,D){return P.keywords[D]}function tt(){if(!te.keywords){Re.addText(_e);return}let P=0;te.keywordPatternRe.lastIndex=0;let D=te.keywordPatternRe.exec(_e),re="";for(;D;){re+=_e.substring(P,D.index);const be=Ze.case_insensitive?D[0].toLowerCase():D[0],$e=Ue(te,be);if($e){const[Ye,ha]=$e;if(Re.addText(re),re="",Le[be]=(Le[be]||0)+1,Le[be]<=Qi&&(Yt+=ha),Ye.startsWith("_"))re+=D[0];else{const da=Ze.classNameAliases[Ye]||Ye;Fe(D[0],da)}}else re+=D[0];P=te.keywordPatternRe.lastIndex,D=te.keywordPatternRe.exec(_e)}re+=_e.substring(P),Re.addText(re)}function Xt(){if(_e==="")return;let P=null;if(typeof te.subLanguage=="string"){if(!_[te.subLanguage]){Re.addText(_e);return}P=St(te.subLanguage,_e,!0,xr[te.subLanguage]),xr[te.subLanguage]=P._top}else P=xn(_e,te.subLanguage.length?te.subLanguage:null);te.relevance>0&&(Yt+=P.relevance),Re.__addSublanguage(P._emitter,P.language)}function Be(){te.subLanguage!=null?Xt():tt(),_e=""}function Fe(P,D){P!==""&&(Re.startScope(D),Re.addText(P),Re.endScope())}function wr(P,D){let re=1;const be=D.length-1;for(;re<=be;){if(!P._emit[re]){re++;continue}const $e=Ze.classNameAliases[P[re]]||P[re],Ye=D[re];$e?Fe(Ye,$e):(_e=Ye,tt(),_e=""),re++}}function yr(P,D){return P.scope&&typeof P.scope=="string"&&Re.openNode(Ze.classNameAliases[P.scope]||P.scope),P.beginScope&&(P.beginScope._wrap?(Fe(_e,Ze.classNameAliases[P.beginScope._wrap]||P.beginScope._wrap),_e=""):P.beginScope._multi&&(wr(P.beginScope,D),_e="")),te=Object.create(P,{parent:{value:te}}),te}function kr(P,D,re){let be=k(P.endRe,re);if(be){if(P["on:end"]){const $e=new t(P);P["on:end"](D,$e),$e.isMatchIgnored&&(be=!1)}if(be){for(;P.endsParent&&P.parent;)P=P.parent;return P}}if(P.endsWithParent)return kr(P.parent,D,re)}function sa(P){return te.matcher.regexIndex===0?(_e+=P[0],1):(En=!0,0)}function oa(P){const D=P[0],re=P.rule,be=new t(re),$e=[re.__beforeBegin,re["on:begin"]];for(const Ye of $e)if(Ye&&(Ye(P,be),be.isMatchIgnored))return sa(D);return re.skip?_e+=D:(re.excludeBegin&&(_e+=D),Be(),!re.returnBegin&&!re.excludeBegin&&(_e=D)),yr(re,P),re.returnBegin?0:D.length}function la(P){const D=P[0],re=W.substring(P.index),be=kr(te,P,re);if(!be)return pr;const $e=te;te.endScope&&te.endScope._wrap?(Be(),Fe(D,te.endScope._wrap)):te.endScope&&te.endScope._multi?(Be(),wr(te.endScope,P)):$e.skip?_e+=D:($e.returnEnd||$e.excludeEnd||(_e+=D),Be(),$e.excludeEnd&&(_e=D));do te.scope&&Re.closeNode(),!te.skip&&!te.subLanguage&&(Yt+=te.relevance),te=te.parent;while(te!==be.parent);return be.starts&&yr(be.starts,P),$e.returnEnd?0:D.length}function ca(){const P=[];for(let D=te;D!==Ze;D=D.parent)D.scope&&P.unshift(D.scope);P.forEach(D=>Re.openNode(D))}let Kt={};function _r(P,D){const re=D&&D[0];if(_e+=P,re==null)return Be(),0;if(Kt.type==="begin"&&D.type==="end"&&Kt.index===D.index&&re===""){if(_e+=W.slice(D.index,D.index+1),!ve){const be=new Error(`0 width match regex (${T})`);throw be.languageName=T,be.badRule=Kt.rule,be}return 1}if(Kt=D,D.type==="begin")return oa(D);if(D.type==="illegal"&&!ce){const be=new Error('Illegal lexeme "'+re+'" for mode "'+(te.scope||"<unnamed>")+'"');throw be.mode=te,be}else if(D.type==="end"){const be=la(D);if(be!==pr)return be}if(D.type==="illegal"&&re==="")return _e+=`
|
|
3
|
+
`,1;if(An>1e5&&An>D.index*3)throw new Error("potential infinite loop, way more iterations than matches");return _e+=re,re.length}const Ze=et(T);if(!Ze)throw st(Ae.replace("{}",T)),new Error('Unknown language: "'+T+'"');const ua=Wi(Ze);let vn="",te=ke||ua;const xr={},Re=new B.__emitter(B);ca();let _e="",Yt=0,ot=0,An=0,En=!1;try{if(Ze.__emitTokens)Ze.__emitTokens(W,Re);else{for(te.matcher.considerAll();;){An++,En?En=!1:te.matcher.considerAll(),te.matcher.lastIndex=ot;const P=te.matcher.exec(W);if(!P)break;const D=W.substring(ot,P.index),re=_r(D,P);ot=P.index+re}_r(W.substring(ot))}return Re.finalize(),vn=Re.toHTML(),{language:T,value:vn,relevance:Yt,illegal:!1,_emitter:Re,_top:te}}catch(P){if(P.message&&P.message.includes("Illegal"))return{language:T,value:kn(W),illegal:!0,relevance:0,_illegalBy:{message:P.message,index:ot,context:W.slice(ot-100,ot+100),mode:P.mode,resultSoFar:vn},_emitter:Re};if(ve)return{language:T,value:kn(W),illegal:!1,relevance:0,errorRaised:P,_emitter:Re,_top:te};throw P}}function _n(T){const W={value:kn(T),illegal:!1,relevance:0,_top:q,_emitter:new B.__emitter(B)};return W._emitter.addText(T),W}function xn(T,W){W=W||B.languages||Object.keys(_);const ce=_n(T),ke=W.filter(et).filter(br).map(Be=>St(Be,T,!1));ke.unshift(ce);const Le=ke.sort((Be,Fe)=>{if(Be.relevance!==Fe.relevance)return Fe.relevance-Be.relevance;if(Be.language&&Fe.language){if(et(Be.language).supersetOf===Fe.language)return 1;if(et(Fe.language).supersetOf===Be.language)return-1}return 0}),[Ue,tt]=Le,Xt=Ue;return Xt.secondBest=tt,Xt}function Xi(T,W,ce){const ke=W&&M[W]||ce;T.classList.add("hljs"),T.classList.add(`language-${ke}`)}function Sn(T){let W=null;const ce=Ce(T);if(Y(ce))return;if(Qt("before:highlightElement",{el:T,language:ce}),T.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",T);return}if(T.children.length>0&&(B.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(T)),B.throwUnescapedHTML))throw new Gi("One of your code blocks includes unescaped HTML.",T.innerHTML);W=T;const ke=W.textContent,Le=ce?Ee(ke,{language:ce,ignoreIllegals:!0}):xn(ke);T.innerHTML=Le.value,T.dataset.highlighted="yes",Xi(T,ce,Le.language),T.result={language:Le.language,re:Le.relevance,relevance:Le.relevance},Le.secondBest&&(T.secondBest={language:Le.secondBest.language,relevance:Le.secondBest.relevance}),Qt("after:highlightElement",{el:T,result:Le,text:ke})}function Ki(T){B=dr(B,T)}const Yi=()=>{Gt(),gt("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function Vi(){Gt(),gt("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let fr=!1;function Gt(){function T(){Gt()}if(document.readyState==="loading"){fr||window.addEventListener("DOMContentLoaded",T,!1),fr=!0;return}document.querySelectorAll(B.cssSelector).forEach(Sn)}function Ji(T,W){let ce=null;try{ce=W(b)}catch(ke){if(st("Language definition for '{}' could not be registered.".replace("{}",T)),ve)st(ke);else throw ke;ce=q}ce.name||(ce.name=T),_[T]=ce,ce.rawDefinition=W.bind(null,b),ce.aliases&&mr(ce.aliases,{languageName:T})}function ea(T){delete _[T];for(const W of Object.keys(M))M[W]===T&&delete M[W]}function ta(){return Object.keys(_)}function et(T){return T=(T||"").toLowerCase(),_[T]||_[M[T]]}function mr(T,{languageName:W}){typeof T=="string"&&(T=[T]),T.forEach(ce=>{M[ce.toLowerCase()]=W})}function br(T){const W=et(T);return W&&!W.disableAutodetect}function na(T){T["before:highlightBlock"]&&!T["before:highlightElement"]&&(T["before:highlightElement"]=W=>{T["before:highlightBlock"](Object.assign({block:W.el},W))}),T["after:highlightBlock"]&&!T["after:highlightElement"]&&(T["after:highlightElement"]=W=>{T["after:highlightBlock"](Object.assign({block:W.el},W))})}function ra(T){na(T),ee.push(T)}function ia(T){const W=ee.indexOf(T);W!==-1&&ee.splice(W,1)}function Qt(T,W){const ce=T;ee.forEach(function(ke){ke[ce]&&ke[ce](W)})}function aa(T){return gt("10.7.0","highlightBlock will be removed entirely in v12.0"),gt("10.7.0","Please use highlightElement now."),Sn(T)}Object.assign(b,{highlight:Ee,highlightAuto:xn,highlightAll:Gt,highlightElement:Sn,highlightBlock:aa,configure:Ki,initHighlighting:Yi,initHighlightingOnLoad:Vi,registerLanguage:Ji,unregisterLanguage:ea,listLanguages:ta,getLanguage:et,registerAliases:mr,autoDetection:br,inherit:dr,addPlugin:ra,removePlugin:ia}),b.debugMode=function(){ve=!1},b.safeMode=function(){ve=!0},b.versionString=Zi,b.regex={concat:p,lookahead:m,either:w,optional:d,anyNumberOfTimes:h};for(const T in ie)typeof ie[T]=="object"&&e(ie[T]);return Object.assign(b,ie),b},ft=gr({});return ft.newInstance=()=>gr({}),Ln=ft,ft.HighlightJS=ft,ft.default=ft,Ln}var wa=ba();const de=Gr(wa),ya="11.11.1",ae=new Map,ka="https://raw.githubusercontent.com/highlightjs/highlight.js/main/SUPPORTED_LANGUAGES.md",Oe={shell:"bash",sh:"bash",zsh:"bash",js:"javascript",ts:"typescript",py:"python",csharp:"cs","c#":"cs"};Oe.html="xml";Oe.xhtml="xml";Oe.markup="xml";const Fn=new Set(["magic","undefined"]);let rt=null;const Tn=new Map,_a=300*1e3;async function Zn(e=ka){if(e)return rt||(rt=(async()=>{try{const t=await fetch(e);if(!t.ok)return;const i=(await t.text()).split(/\r?\n/);let r=-1;for(let l=0;l<i.length;l++)if(/\|\s*Language\s*\|/i.test(i[l])){r=l;break}if(r===-1)return;const a=i[r].replace(/^\||\|$/g,"").split("|").map(l=>l.trim().toLowerCase());let s=a.findIndex(l=>/alias|aliases|equivalent|alt|alternates?/i.test(l));s===-1&&(s=1);let u=a.findIndex(l=>/file|filename|module|module name|module-name|short|slug/i.test(l));if(u===-1){const l=a.findIndex(c=>/language/i.test(c));u=l!==-1?l:0}let o=[];for(let l=r+1;l<i.length;l++){const c=i[l].trim();if(!c||!c.startsWith("|"))break;const f=c.replace(/^\||\|$/g,"").split("|").map(g=>g.trim());if(f.every(g=>/^-+$/.test(g)))continue;const m=f;if(!m.length)continue;const d=(m[u]||m[0]||"").toString().trim().toLowerCase();if(!d||/^-+$/.test(d))continue;ae.set(d,d);const p=m[s]||"";if(p){const g=String(p).split(",").map(w=>w.replace(/`/g,"").trim()).filter(Boolean);if(g.length){const y=g[0].toLowerCase().replace(/^[:]+/,"").replace(/[^a-z0-9_-]+/ig,"");y&&/[a-z0-9]/i.test(y)&&(ae.set(y,y),o.push(y))}}}try{const l=[];for(const c of o){const f=String(c||"").replace(/^[:]+/,"").replace(/[^a-z0-9_-]+/ig,"");f&&/[a-z0-9]/i.test(f)?l.push(f):ae.delete(c)}o=l}catch(l){console.warn("[codeblocksManager] cleanup aliases failed",l)}try{let l=0;for(const c of Array.from(ae.keys())){if(!c||/^-+$/.test(c)||!/[a-z0-9]/i.test(c)){ae.delete(c),l++;continue}if(/^[:]+/.test(c)){const f=c.replace(/^[:]+/,"");if(f&&/[a-z0-9]/i.test(f)){const m=ae.get(c);ae.delete(c),ae.set(f,m)}else ae.delete(c),l++}}for(const[c,f]of Array.from(ae.entries()))(!f||/^-+$/.test(f)||!/[a-z0-9]/i.test(f))&&(ae.delete(c),l++);try{const c=":---------------------";ae.has(c)&&(ae.delete(c),l++)}catch(c){console.warn("[codeblocksManager] remove sep key failed",c)}try{const c=Array.from(ae.keys()).sort()}catch(c){console.warn("[codeblocksManager] compute supported keys failed",c)}}catch(l){console.warn("[codeblocksManager] ignored error",l)}}catch(t){console.warn("[codeblocksManager] loadSupportedLanguages failed",t)}})(),rt)}const vt=new Set;async function _t(e,t){if(rt||(async()=>{try{await Zn()}catch(r){console.warn("[codeblocksManager] loadSupportedLanguages (IIFE) failed",r)}})(),rt)try{await rt}catch{}if(e=e==null?"":String(e),e=e.trim(),!e)return!1;const n=e.toLowerCase();if(Fn.has(n))return!1;if(ae.size&&!ae.has(n)){const r=Oe;if(!r[n]&&!r[e])return!1}if(vt.has(e))return!0;const i=Oe;try{const r=(t||e||"").toString().replace(/\.js$/i,"").trim(),a=(i[e]||e||"").toString(),s=(i[r]||r||"").toString();let u=Array.from(new Set([a,s,r,e,i[r],i[e]].filter(Boolean))).map(c=>String(c).toLowerCase()).filter(c=>c&&c!=="undefined");ae.size&&(u=u.filter(c=>{if(ae.has(c))return!0;const f=Oe[c];return!!(f&&ae.has(f))}));let o=null,l=null;for(const c of u)try{const f=Date.now();let m=Tn.get(c);if(m&&m.ok===!1&&f-(m.ts||0)>=_a&&(Tn.delete(c),m=void 0),m){if(m.module)o=m.module;else if(m.promise)try{o=await m.promise}catch{o=null}}else{const h={promise:null,module:null,ok:null,ts:0};Tn.set(c,h),h.promise=(async()=>{try{try{try{return await import(`highlight.js/lib/languages/${c}.js`)}catch{return await import(`highlight.js/lib/languages/${c}`)}}catch{try{const p=`https://cdn.jsdelivr.net/npm/highlight.js/es/languages/${c}.js`;return await new Function("u","return import(u)")(p)}catch{try{const g=`https://cdn.jsdelivr.net/npm/highlight.js/lib/languages/${c}.js`;return await new Function("u","return import(u)")(g)}catch{return null}}}}catch{return null}})();try{o=await h.promise,h.module=o,h.ok=!!o,h.ts=Date.now()}catch{h.module=null,h.ok=!1,h.ts=Date.now(),o=null}}if(o){const h=o.default||o;try{const d=ae.size&&ae.get(e)||c||e;return de.registerLanguage(d,h),vt.add(d),d!==e&&(de.registerLanguage(e,h),vt.add(e)),!0}catch(d){l=d}}else try{if(ae.has(c)||ae.has(e)){const h=()=>({});try{de.registerLanguage(c,h),vt.add(c)}catch{}try{c!==e&&(de.registerLanguage(e,h),vt.add(e))}catch{}return!0}}catch{}}catch(f){l=f}if(l)throw l;return!1}catch{return!1}}let Vt=null;function Qr(e=document){rt||(async()=>{try{await Zn()}catch(a){console.warn("[codeblocksManager] loadSupportedLanguages (observer) failed",a)}})();const t=Oe,i=Vt||(typeof IntersectionObserver>"u"?null:(Vt=new IntersectionObserver((a,s)=>{a.forEach(u=>{if(!u.isIntersecting)return;const o=u.target;try{s.unobserve(o)}catch(l){console.warn("[codeblocksManager] observer unobserve failed",l)}(async()=>{try{const l=o.getAttribute&&o.getAttribute("class")||o.className||"",c=l.match(/language-([a-zA-Z0-9_+-]+)/)||l.match(/lang(?:uage)?-?([a-zA-Z0-9_+-]+)/);if(c&&c[1]){const f=(c[1]||"").toLowerCase(),m=t[f]||f,h=ae.size&&(ae.get(m)||ae.get(String(m).toLowerCase()))||m;try{await _t(h)}catch(d){console.warn("[codeblocksManager] registerLanguage failed",d)}try{try{const d=o.textContent||o.innerText||"";d!=null&&(o.textContent=d)}catch{}try{o&&o.dataset&&o.dataset.highlighted&&delete o.dataset.highlighted}catch{}de.highlightElement(o)}catch(d){console.warn("[codeblocksManager] hljs.highlightElement failed",d)}}else try{const f=o.textContent||"";try{if(de&&typeof de.getLanguage=="function"&&de.getLanguage("plaintext")){const m=de.highlight(f,{language:"plaintext"});m&&m.value&&(o.innerHTML=m.value)}}catch{try{de.highlightElement(o)}catch(h){console.warn("[codeblocksManager] fallback highlightElement failed",h)}}}catch(f){console.warn("[codeblocksManager] auto-detect plaintext failed",f)}}catch(l){console.warn("[codeblocksManager] observer entry processing failed",l)}})()})},{root:null,rootMargin:"300px",threshold:.1}),Vt)),r=e&&e.querySelectorAll?e.querySelectorAll("pre code"):[];if(!i){r.forEach(async a=>{try{const s=a.getAttribute&&a.getAttribute("class")||a.className||"",u=s.match(/language-([a-zA-Z0-9_+-]+)/)||s.match(/lang(?:uage)?-?([a-zA-Z0-9_+-]+)/);if(u&&u[1]){const o=(u[1]||"").toLowerCase(),l=t[o]||o,c=ae.size&&(ae.get(l)||ae.get(String(l).toLowerCase()))||l;try{await _t(c)}catch(f){console.warn("[codeblocksManager] registerLanguage failed (no observer)",f)}}try{try{const o=a.textContent||a.innerText||"";o!=null&&(a.textContent=o)}catch{}try{a&&a.dataset&&a.dataset.highlighted&&delete a.dataset.highlighted}catch{}de.highlightElement(a)}catch(o){console.warn("[codeblocksManager] hljs.highlightElement failed (no observer)",o)}}catch(s){console.warn("[codeblocksManager] loadSupportedLanguages fallback ignored error",s)}});return}r.forEach(a=>{try{i.observe(a)}catch(s){console.warn("[codeblocksManager] observe failed",s)}})}function xa(e,{useCdn:t=!0}={}){const n=document.querySelector("link[data-hl-theme]"),i=n&&n.getAttribute?n.getAttribute("data-hl-theme"):null,r=e==null?"default":String(e),a=r&&String(r).toLowerCase()||"";if(a==="default"||a==="monokai"){try{n&&n.parentNode&&n.parentNode.removeChild(n)}catch{}return}if(i&&i.toLowerCase()===a)return;if(!t){console.warn("Requested highlight theme not bundled; set useCdn=true to load theme from CDN");return}const s=a,u=`https://cdn.jsdelivr.net/npm/highlight.js@${ya}/styles/${s}.css`,o=document.createElement("link");o.rel="stylesheet",o.href=u,o.setAttribute("data-hl-theme",s),o.addEventListener("load",()=>{try{n&&n.parentNode&&n.parentNode.removeChild(n)}catch{}}),document.head.appendChild(o)}let ct="light";function Sa(e,t={}){if(document.querySelector(`link[href="${e}"]`))return;const n=document.createElement("link");if(n.rel="stylesheet",n.href=e,Object.entries(t).forEach(([i,r])=>n.setAttribute(i,r)),document.head.appendChild(n),t["data-bulmaswatch-theme"])try{if(n.getAttribute("data-bulmaswatch-observer"))return;let i=Number(n.getAttribute("data-bulmaswatch-move-count")||0),r=!1;const a=new MutationObserver(()=>{try{if(r)return;const u=n.parentNode;if(!u||u.lastElementChild===n)return;if(i>=1e3){n.setAttribute("data-bulmaswatch-move-stopped","1");return}r=!0;try{u.appendChild(n)}catch{}i+=1,n.setAttribute("data-bulmaswatch-move-count",String(i)),r=!1}catch{}});try{a.observe(document.head,{childList:!0}),n.setAttribute("data-bulmaswatch-observer","1"),n.setAttribute("data-bulmaswatch-move-count",String(i))}catch{}const s=document.head;s&&s.lastElementChild!==n&&s.appendChild(n)}catch{}}function vr(){try{const e=Array.from(document.querySelectorAll("link[data-bulmaswatch-theme]"));for(const t of e)t&&t.parentNode&&t.parentNode.removeChild(t)}catch{}try{const e=Array.from(document.querySelectorAll("style[data-bulma-override]"));for(const t of e)t&&t.parentNode&&t.parentNode.removeChild(t)}catch{}}async function Xr(e="none",t="/"){if(typeof window<"u"&&window.__nimbiCMSDebug)try{console.debug("[bulmaManager] ensureBulma called",{bulmaCustomize:e,pageDir:t})}catch{}if(!e)return;if(e==="none"){try{const a=[location&&location.protocol&&location.protocol==="file:"?"https://unpkg.com/bulma/css/bulma.min.css":"//unpkg.com/bulma/css/bulma.min.css","https://unpkg.com/bulma/css/bulma.min.css"];let s=!1;for(const u of a)try{if(document.querySelector(`link[href="${u}"]`)){s=!0;break}}catch{}if(!s){const u=a[0],o=document.createElement("link");o.rel="stylesheet",o.href=u,o.setAttribute("data-bulma-base","1");const l=document.querySelector('link[href*="/dist/nimbi-cms.css"], link[href*="dist/nimbi-cms.css"]');l&&l.parentNode?l.parentNode.insertBefore(o,l):document.head.appendChild(o)}}catch{}try{const a=Array.from(document.querySelectorAll("link[data-bulmaswatch-theme]"));for(const s of a)s&&s.parentNode&&s.parentNode.removeChild(s)}catch{}try{const a=Array.from(document.querySelectorAll("style[data-bulma-override]"));for(const s of a)s&&s.parentNode&&s.parentNode.removeChild(s)}catch{}return}const i=[t+"bulma.css","/bulma.css"],r=Array.from(new Set(i));if(e==="local"){if(vr(),document.querySelector("style[data-bulma-override]"))return;for(const a of r)try{const s=await fetch(a,{method:"GET"});if(s.ok){const u=await s.text(),o=document.createElement("style");o.setAttribute("data-bulma-override",a),o.appendChild(document.createTextNode(`
|
|
4
4
|
/* bulma override: ${a} */
|
|
5
|
-
`+
|
|
5
|
+
`+u)),document.head.appendChild(o);return}}catch(s){console.warn("[bulmaManager] fetch local bulma candidate failed",s)}return}try{const a=String(e).trim();if(!a)return;vr();const s=`https://unpkg.com/bulmaswatch/${encodeURIComponent(a)}/bulmaswatch.min.css`;Sa(s,{"data-bulmaswatch-theme":a})}catch(a){console.warn("[bulmaManager] ensureBulma failed",a)}}function Kr(e){ct=e==="dark"?"dark":e==="system"?"system":"light";try{const t=Array.from(document.querySelectorAll(".nimbi-mount"));if(t.length>0)for(const n of t)ct==="dark"?n.setAttribute("data-theme","dark"):ct==="light"?n.setAttribute("data-theme","light"):n.removeAttribute("data-theme");else{const n=document.documentElement;ct==="dark"?n.setAttribute("data-theme","dark"):ct==="light"?n.setAttribute("data-theme","light"):n.removeAttribute("data-theme")}}catch{}}function va(e){const t=document.documentElement;for(const[n,i]of Object.entries(e||{}))try{t.style.setProperty(`--${n}`,i)}catch(r){console.warn("[bulmaManager] setThemeVars failed for",n,r)}}function Yr(e){if(!e||!(e instanceof HTMLElement))return()=>{};const t=e.closest&&e.closest(".nimbi-mount")||null;try{t&&(ct==="dark"?t.setAttribute("data-theme","dark"):ct==="light"?t.setAttribute("data-theme","light"):t.removeAttribute("data-theme"))}catch{}return()=>{}}const Vr={en:{navigation:"Navigation",onThisPage:"On this page",home:"Home",scrollToTop:"Scroll to top",readingTime:"{minutes} min read",searchPlaceholder:"Search…",imagePreviewTitle:"Image preview",imagePreviewFit:"Fit to screen",imagePreviewOriginal:"Original size",imagePreviewZoomOut:"Zoom out",imagePreviewZoomIn:"Zoom in",imagePreviewClose:"Close"},es:{navigation:"Navegación",onThisPage:"En esta página",home:"Inicio",scrollToTop:"Ir arriba",readingTime:"{minutes} min de lectura",searchPlaceholder:"Buscar…",imagePreviewTitle:"Previsualización de imagen",imagePreviewFit:"Ajustar a la pantalla",imagePreviewOriginal:"Tamaño original",imagePreviewZoomOut:"Alejar",imagePreviewZoomIn:"Acercar",imagePreviewClose:"Cerrar"},de:{navigation:"Navigation",onThisPage:"Auf dieser Seite",home:"Startseite",scrollToTop:"Nach oben",readingTime:"{minutes} min Lesezeit",searchPlaceholder:"Suchen…",imagePreviewTitle:"Bildvorschau",imagePreviewFit:"An Bildschirm anpassen",imagePreviewOriginal:"Originalgröße",imagePreviewZoomOut:"Verkleinern",imagePreviewZoomIn:"Vergrößern",imagePreviewClose:"Schließen"},fr:{navigation:"Navigation",onThisPage:"Sur cette page",home:"Accueil",scrollToTop:"Aller en haut",readingTime:"{minutes} min de lecture",searchPlaceholder:"Rechercher…",imagePreviewTitle:"Aperçu de l’image",imagePreviewFit:"Ajuster à l’écran",imagePreviewOriginal:"Taille originale",imagePreviewZoomOut:"Dézoomer",imagePreviewZoomIn:"Zoomer",imagePreviewClose:"Fermer"},pt:{navigation:"Navegação",onThisPage:"Nesta página",home:"Início",scrollToTop:"Ir para o topo",readingTime:"{minutes} min de leitura",searchPlaceholder:"Procurar…",imagePreviewTitle:"Visualização da imagem",imagePreviewFit:"Ajustar à tela",imagePreviewOriginal:"Tamanho original",imagePreviewZoomOut:"Diminuir",imagePreviewZoomIn:"Aumentar",imagePreviewClose:"Fechar"}},yt=JSON.parse(JSON.stringify(Vr));let an="en";if(typeof navigator<"u"){const e=navigator.language||navigator.languages&&navigator.languages[0]||"en";an=String(e).split("-")[0].toLowerCase()}Vr[an]||(an="en");let it=an;function mt(e,t={}){const n=yt[it]||yt.en;let i=n&&n[e]?n[e]:yt.en[e]||"";for(const r of Object.keys(t))i=i.replace(new RegExp(`{${r}}`,"g"),String(t[r]));return i}async function Gn(e,t){if(!e)return;let n=e;try{/^https?:\/\//.test(e)||(n=new URL(e,location.origin+t).toString());const i=await fetch(n);if(!i.ok)return;const r=await i.json();for(const a of Object.keys(r||{}))yt[a]=Object.assign({},yt[a]||{},r[a])}catch{}}function Qn(e){const t=String(e).split("-")[0].toLowerCase();it=yt[t]?t:"en"}const Aa=Object.freeze(Object.defineProperty({__proto__:null,get currentLang(){return it},loadL10nFile:Gn,setLang:Qn,t:mt},Symbol.toStringTag,{value:"Module"})),Ea=`import { buildSearchIndex, crawlForSlug } from '../slugManager.js'
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Worker entrypoint for slug-related background tasks.
|
|
@@ -68,53 +68,53 @@ export async function handleSlugWorkerMessage(msg) {
|
|
|
68
68
|
return { id: msg && msg.id, error: String(e) }
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
-
`;function La(e,t="worker"){let n=null;const i=typeof globalThis<"u"&&typeof globalThis.__nimbiCMSDebug<"u"?!!globalThis.__nimbiCMSDebug:!1;function r(...l){try{i&&console&&typeof console.warn=="function"&&console.warn(...l)}catch{}}function a(){if(!n)try{const l=e();n=l||null,l&&l.addEventListener("error",()=>{try{n===l&&(n=null,l.terminate&&l.terminate())}catch(u){r("["+t+"] worker termination failed",u)}})}catch(l){n=null,r("["+t+"] worker init failed",l)}return n}function s(){try{n&&(n.terminate&&n.terminate(),n=null)}catch(l){r("["+t+"] worker termination failed",l)}}function c(l,u=1e4){return new Promise((p,m)=>{const h=a();if(!h)return m(new Error("worker unavailable"));const d=String(Math.random()),g=Object.assign({},l,{id:d});let f=null;const w=()=>{f&&clearTimeout(f),h.removeEventListener("message",y),h.removeEventListener("error",k)},y=L=>{const R=L.data||{};R.id===d&&(w(),R.error?m(new Error(R.error)):p(R.result))},k=L=>{w(),r("["+t+"] worker error event",L);try{n===h&&(n=null,h.terminate&&h.terminate())}catch(R){r("["+t+"] worker termination failed",R)}m(new Error(L&&L.message||"worker error"))};f=setTimeout(()=>{w(),r("["+t+"] worker timed out");try{n===h&&(n=null,h.terminate&&h.terminate())}catch(L){r("["+t+"] worker termination on timeout failed",L)}m(new Error("worker timeout"))},u),h.addEventListener("message",y),h.addEventListener("error",k);try{h.postMessage(g)}catch(L){w(),m(L)}})}return{get:a,send:c,terminate:s}}function Vr(e,t="worker-pool",n=2){const i=new Array(n).fill(null);let r=0;const a=typeof globalThis<"u"&&typeof globalThis.__nimbiCMSDebug<"u"?!!globalThis.__nimbiCMSDebug:!1;function s(...g){try{a&&console&&typeof console.warn=="function"&&console.warn(...g)}catch{}}function c(g){if(!i[g])try{const f=e();i[g]=f||null,f&&f.addEventListener("error",()=>{try{i[g]===f&&(i[g]=null,f.terminate&&f.terminate())}catch(w){s("["+t+"] worker termination failed",w)}})}catch(f){i[g]=null,s("["+t+"] worker init failed",f)}return i[g]}const o=new Array(n).fill(0),l=new Array(n).fill(null),u=30*1e3;function p(g){try{o[g]=Date.now(),l[g]&&(clearTimeout(l[g]),l[g]=null),l[g]=setTimeout(()=>{try{i[g]&&(i[g].terminate&&i[g].terminate(),i[g]=null)}catch(f){s("["+t+"] idle termination failed",f)}l[g]=null},u)}catch{}}function m(){for(let g=0;g<i.length;g++){const f=c(g);if(f)return f}return null}function h(){for(let g=0;g<i.length;g++)try{i[g]&&(i[g].terminate&&i[g].terminate(),i[g]=null)}catch(f){s("["+t+"] worker termination failed",f)}}function d(g,f=1e4){return new Promise((w,y)=>{const k=r++%i.length,L=R=>{const I=(k+R)%i.length,U=c(I);if(!U)return R+1<i.length?L(R+1):y(new Error("worker pool unavailable"));const z=String(Math.random()),K=Object.assign({},g,{id:z});let oe=null;const E=()=>{oe&&clearTimeout(oe),U.removeEventListener("message",j),U.removeEventListener("error",be)},j=V=>{const H=V.data||{};H.id===z&&(E(),H.error?y(new Error(H.error)):w(H.result))},be=V=>{E(),s("["+t+"] worker error event",V);try{i[I]===U&&(i[I]=null,U.terminate&&U.terminate())}catch(H){s("["+t+"] worker termination failed",H)}y(new Error(V&&V.message||"worker error"))};oe=setTimeout(()=>{E(),s("["+t+"] worker timed out");try{i[I]===U&&(i[I]=null,U.terminate&&U.terminate())}catch(V){s("["+t+"] worker termination on timeout failed",V)}y(new Error("worker timeout"))},f),U.addEventListener("message",j),U.addEventListener("error",be);try{p(I),U.postMessage(K)}catch(V){E(),y(V)}};L(0)})}return{get:m,send:d,terminate:h}}function Lt(e){try{if(typeof Blob<"u"&&typeof URL<"u"&&e)try{Lt._blobUrlCache||(Lt._blobUrlCache=new Map);const t=Lt._blobUrlCache;let n=t.get(e);if(!n){const i=new Blob([e],{type:"application/javascript"});n=URL.createObjectURL(i),t.set(e,n)}return new Worker(n,{type:"module"})}catch(t){try{typeof globalThis<"u"&&globalThis.__nimbiCMSDebug&&console&&typeof console.warn=="function"&&console.warn("[worker-manager] createWorkerFromRaw failed",t)}catch{}}}catch(t){try{typeof globalThis<"u"&&globalThis.__nimbiCMSDebug&&console&&typeof console.warn=="function"&&console.warn("[worker-manager] createWorkerFromRaw failed",t)}catch{}}return null}const Ge=new Set;function Qn(e){Ta(),Ge.clear();for(const t of Oe)t&&Ge.add(t);vr(re),vr(G),Qn._refreshed=!0}function vr(e){if(!(!e||typeof e.values!="function"))for(const t of e.values())t&&Ge.add(t)}function Ar(e){if(!e||typeof e.set!="function")return;const t=e.set;e.set=function(n,i){return i&&Ge.add(i),t.call(this,n,i)}}let Er=!1;function Ta(){Er||(Ar(re),Ar(G),Er=!0)}function Jr(e){return!e||typeof e!="string"?!1:/^(https?:)?\/\//.test(e)||e.startsWith("mailto:")||e.startsWith("tel:")}function xe(e){return String(e||"").replace(/^[.\/]+/,"")}function Dt(e){return String(e||"").replace(/\/+$/,"")}function Bt(e){return Dt(e)+"/"}function Ca(e){try{if(!e||typeof document>"u"||!document.head||e.startsWith("data:")||document.head.querySelector(`link[rel="preload"][as="image"][href="${e}"]`))return;const n=document.createElement("link");n.rel="preload",n.as="image",n.href=e,document.head.appendChild(n)}catch(t){console.warn("[helpers] preloadImage failed",t)}}function Vt(e,t=0,n=!1){try{if(typeof window>"u"||!e||!e.querySelectorAll)return;const i=Array.from(e.querySelectorAll("img"));if(!i.length)return;const r=e,a=r&&r.getBoundingClientRect?r.getBoundingClientRect():null,s=0,c=typeof window<"u"&&(window.innerHeight||document.documentElement.clientHeight)||0,o=a?Math.max(s,a.top):s,u=(a?Math.min(c,a.bottom):c)+Number(t||0);let p=0;r&&(p=r.clientHeight||(a?a.height:0)),p||(p=c-s);let m=.6;try{const f=r&&window.getComputedStyle?window.getComputedStyle(r):null,w=f&&f.getPropertyValue("--nimbi-image-max-height-ratio"),y=w?parseFloat(w):NaN;!Number.isNaN(y)&&y>0&&y<=1&&(m=y)}catch(f){console.warn("[helpers] read CSS ratio failed",f)}const h=Math.max(200,Math.floor(p*m));let d=!1,g=null;if(i.forEach(f=>{try{const w=f.getAttribute?f.getAttribute("loading"):void 0;w!=="eager"&&f.setAttribute&&f.setAttribute("loading","lazy");const y=f.getBoundingClientRect?f.getBoundingClientRect():null,k=f.src||f.getAttribute&&f.getAttribute("src"),L=y&&y.height>1?y.height:h,R=y?y.top:0,I=R+L;y&&L>0&&R<=u&&I>=o&&(f.setAttribute?(f.setAttribute("loading","eager"),f.setAttribute("fetchpriority","high"),f.setAttribute("data-eager-by-nimbi","1")):(f.loading="eager",f.fetchPriority="high"),Ca(k),d=!0),!g&&y&&y.top<=u&&(g={img:f,src:k,rect:y,beforeLoading:w})}catch(w){console.warn("[helpers] setEagerForAboveFoldImages per-image failed",w)}}),!d&&g){const{img:f,src:w,rect:y,beforeLoading:k}=g;try{f.setAttribute?(f.setAttribute("loading","eager"),f.setAttribute("fetchpriority","high"),f.setAttribute("data-eager-by-nimbi","1")):(f.loading="eager",f.fetchPriority="high")}catch(L){console.warn("[helpers] setEagerForAboveFoldImages fallback failed",L)}}}catch(i){console.warn("[helpers] setEagerForAboveFoldImages failed",i)}}function _e(e,t=null,n){try{const i=typeof n=="string"?n:typeof window<"u"&&window.location?window.location.search:"",r=new URLSearchParams(i.startsWith("?")?i.slice(1):i),a=String(e||"");r.delete("page");const s=new URLSearchParams;s.set("page",a);for(const[l,u]of r.entries())s.append(l,u);const c=s.toString();let o=c?`?${c}`:"";return t&&(o+=`#${encodeURIComponent(t)}`),o||`?page=${encodeURIComponent(a)}`}catch{const r=`?page=${encodeURIComponent(String(e||""))}`;return t?`${r}#${encodeURIComponent(t)}`:r}}function an(e){try{const t=e();return t&&typeof t.then=="function"?t.catch(n=>{console.warn("[helpers] safe swallowed error",n)}):t}catch(t){console.warn("[helpers] safe swallowed error",t)}}try{typeof globalThis<"u"&&!globalThis.safe&&(globalThis.safe=an)}catch(e){console.warn("[helpers] global attach failed",e)}function Ma(e){try{if(!e&&e!==0)return"";const t=String(e),n={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "};return t.replace(/&(#x?[0-9a-fA-F]+|[a-zA-Z]+);/g,(i,r)=>{if(!r)return i;if(r[0]==="#")try{return r[1]==="x"||r[1]==="X"?String.fromCharCode(parseInt(r.slice(2),16)):String.fromCharCode(parseInt(r.slice(1),10))}catch{return i}return n[r]!==void 0?n[r]:i})}catch{return String(e||"")}}const re=new Map;let Pe=[],Xn=!1;function Ra(e){Xn=!!e}function ei(e){Pe=Array.isArray(e)?e.slice():[]}function za(){return Pe}const ti=typeof navigator<"u"&&navigator.hardwareConcurrency?Math.max(1,Math.floor(navigator.hardwareConcurrency/2)):2,ni=Vr(()=>Lt(Ea),"slugManager",ti);function $a(){return ni.get()}function ri(e){return ni.send(e,5e3)}async function Pa(e,t=1,n=void 0){const i=await Promise.resolve().then(()=>wt);if(!(i.initSlugWorker&&i.initSlugWorker()))throw new Error("slug worker required but unavailable");return await ri({type:"buildSearchIndex",contentBase:e,indexDepth:t,noIndexing:n})}async function Ia(e,t,n){const i=await Promise.resolve().then(()=>wt);if(!(i.initSlugWorker&&i.initSlugWorker()))throw new Error("slug worker required but unavailable");return ri({type:"crawlForSlug",slug:e,base:t,maxQueue:n})}function tt(e,t){if(e)if(Pe&&Pe.length){const i=t.split("/")[0],r=Pe.includes(i);let a=re.get(e);(!a||typeof a=="string")&&(a={default:typeof a=="string"?a:void 0,langs:{}}),r?a.langs[i]=t:a.default=t,re.set(e,a)}else re.set(e,t)}const pn=new Set;function Na(e){typeof e=="function"&&pn.add(e)}function Ba(e){typeof e=="function"&&pn.delete(e)}const G=new Map;let Nn={},Oe=[],kt="_404.md",ft="_home.md";function Bn(e){e!=null&&(kt=String(e||""))}function Oa(e){e!=null&&(ft=String(e||""))}function qa(e){Nn=e||{}}const Tt=new Map,sn=new Set;function Da(){Tt.clear(),sn.clear()}function Ha(e){if(!e||e.length===0)return"";let t=e[0];for(let i=1;i<e.length;i++){const r=e[i];let a=0;const s=Math.min(t.length,r.length);for(;a<s&&t[a]===r[a];)a++;t=t.slice(0,a)}const n=t.lastIndexOf("/");return n===-1?t:t.slice(0,n+1)}function on(e){re.clear(),G.clear(),Oe=[],Pe=Pe||[];const t=Object.keys(Nn||{});if(!t.length)return;let n="";try{if(e){try{/^[a-z][a-z0-9+.-]*:/i.test(String(e))?n=new URL(String(e)).pathname:n=String(e||"")}catch(i){n=String(e||""),console.warn("[slugManager] parse contentBase failed",i)}n=Bt(n)}}catch(i){n="",console.warn("[slugManager] setContentBase prefix derivation failed",i)}n||(n=Ha(t));for(const i of t){let r=i;n&&i.startsWith(n)?r=xe(i.slice(n.length)):r=xe(i),Oe.push(r);try{Qn()}catch(s){console.warn("[slugManager] refreshIndexPaths failed",s)}const a=Nn[i];if(typeof a=="string"){const s=(a||"").match(/^#\s+(.+)$/m);if(s&&s[1]){const c=pe(s[1].trim());if(c)try{let o=c;if((!Pe||!Pe.length)&&(o=ii(o,new Set(re.keys()))),Pe&&Pe.length){const u=r.split("/")[0],p=Pe.includes(u);let m=re.get(o);(!m||typeof m=="string")&&(m={default:typeof m=="string"?m:void 0,langs:{}}),p?m.langs[u]=r:m.default=r,re.set(o,m)}else re.set(o,r);G.set(r,o)}catch(o){console.warn("[slugManager] set slug mapping failed",o)}}}}}try{on()}catch(e){console.warn("[slugManager] initial setContentBase failed",e)}function pe(e){let n=String(e||"").toLowerCase().replace(/[^a-z0-9\- ]/g,"").replace(/ /g,"-");return n=n.replace(/(?:-?)(?:md|html)$/,""),n=n.replace(/-+/g,"-"),n=n.replace(/^-|-$/g,""),n.length>80&&(n=n.slice(0,80).replace(/-+$/g,"")),n}function ii(e,t){if(!t.has(e))return e;let n=2,i=`${e}-${n}`;for(;t.has(i);)n+=1,i=`${e}-${n}`;return i}function ja(e){return Ht(e,void 0)}function Ht(e,t){if(!e)return!1;if(e.startsWith("//"))return!0;if(/^[a-z][a-z0-9+.-]*:/i.test(e)){if(t&&typeof t=="string")try{const n=new URL(e),i=new URL(t);return n.origin!==i.origin?!0:!n.pathname.startsWith(i.pathname)}catch{return!0}return!0}if(e.startsWith("/")&&t&&typeof t=="string")try{const n=new URL(e,t),i=new URL(t);return n.origin!==i.origin?!0:!n.pathname.startsWith(i.pathname)}catch{return!0}return!1}function en(e){return e==null?e:String(e).replace(/\\([\\`*_{}\[\]()#+\-.!])/g,(t,n)=>n)}function jt(e){if(!e||!re.has(e))return null;const t=re.get(e);if(!t)return null;if(typeof t=="string")return t;if(Pe&&Pe.length&&rt&&t.langs&&t.langs[rt])return t.langs[rt];if(t.default)return t.default;if(t.langs){const n=Object.keys(t.langs);if(n.length)return t.langs[n[0]]}return null}const Ct=new Map;function Ua(){Ct.clear()}let Ce=async function(e,t){if(!e)throw new Error("path required");try{const a=(String(e||"").match(/([^\/]+)\.md(?:$|[?#])/)||[])[1];if(a&&re.has(a)){const s=jt(a)||re.get(a);s&&s!==e&&(e=s)}}catch(a){console.warn("[slugManager] slug mapping normalization failed",a)}const n=t==null?"":Dt(String(t));let i="";try{if(n)if(/^[a-z][a-z0-9+.-]*:/i.test(n))i=n.replace(/\/$/,"")+"/"+e.replace(/^\//,"");else if(n.startsWith("/"))i=n.replace(/\/$/,"")+"/"+e.replace(/^\//,"");else{const a=typeof location<"u"&&location.origin?location.origin:"http://localhost",s=n.startsWith("/")?n:"/"+n;i=a+s.replace(/\/$/,"")+"/"+e.replace(/^\//,"")}else i=(typeof location<"u"&&location.origin?location.origin:"http://localhost")+"/"+e.replace(/^\//,"")}catch{i="/"+e.replace(/^\//,"")}if(Ct.has(i))return Ct.get(i);const r=(async()=>{const a=await fetch(i);if(!a||typeof a.ok!="boolean"||!a.ok){if(a&&a.status===404)try{const p=`${n}/${kt}`,m=await globalThis.fetch(p);if(m&&typeof m.ok=="boolean"&&m.ok)return{raw:await m.text(),status:404}}catch(p){console.warn("[slugManager] fetching fallback 404 failed",p)}let u="";try{a&&typeof a.clone=="function"?u=await a.clone().text():a&&typeof a.text=="function"?u=await a.text():u=""}catch(p){u="",console.warn("[slugManager] reading error body failed",p)}throw console.error("fetchMarkdown failed:",{url:i,status:a?a.status:void 0,statusText:a?a.statusText:void 0,body:u.slice(0,200)}),new Error("failed to fetch md")}const s=await a.text(),c=s.trim().slice(0,128).toLowerCase(),o=/^(?:<!doctype|<html|<title|<h1)/.test(c),l=o||String(e||"").toLowerCase().endsWith(".html");if(o&&String(e||"").toLowerCase().endsWith(".md")){try{const u=`${n}/${kt}`,p=await globalThis.fetch(u);if(p.ok)return{raw:await p.text(),status:404}}catch(u){console.warn("[slugManager] fetching fallback 404 failed",u)}throw console.error("fetchMarkdown: server returned HTML for .md request",i),new Error("failed to fetch md")}return l?{raw:s,isHtml:!0}:{raw:s}})();return Ct.set(i,r),r};function Wa(e){typeof e=="function"&&(Ce=e)}const tn=new Map;function Fa(e){if(!e||typeof e!="string")return"";let t=e.replace(/```[\s\S]*?```/g,"");return t=t.replace(/<pre[\s\S]*?<\/pre>/gi,""),t=t.replace(/<code[\s\S]*?<\/code>/gi,""),t=t.replace(/<!--([\s\S]*?)-->/g,""),t=t.replace(/^ {4,}.*$/gm,""),t=t.replace(/`[^`]*`/g,""),t}let Ke=[],St=null;async function ai(e,t=1,n=void 0){const i=Array.isArray(n)?Array.from(new Set((n||[]).map(r=>xe(String(r||""))))):[];try{const r=xe(String(kt||""));r&&!i.includes(r)&&i.push(r)}catch{}if(Ke&&Ke.length&&t===1&&!Ke.some(a=>{try{return i.includes(xe(String(a.path||"")))}catch{return!1}}))return Ke;if(St)return St;St=(async()=>{let r=Array.isArray(n)?Array.from(new Set((n||[]).map(l=>xe(String(l||""))))):[];try{const l=xe(String(kt||""));l&&!r.includes(l)&&r.push(l)}catch{}const a=l=>{if(!r||!r.length)return!1;for(const u of r)if(u&&(l===u||l.startsWith(u+"/")))return!0;return!1};let s=[];if(Oe&&Oe.length&&(s=Array.from(Oe)),!s.length)for(const l of re.values())l&&s.push(l);try{const l=await ui(e);l&&l.length&&(s=s.concat(l))}catch(l){console.warn("[slugManager] crawlAllMarkdown during buildSearchIndex failed",l)}try{const l=new Set(s),u=[...s],p=Math.max(1,ti),m=async()=>{for(;!(l.size>Ut);){const d=u.shift();if(!d)break;try{const g=await Ce(d,e);if(g&&g.raw){if(g.status===404)continue;let f=g.raw;const w=[],y=String(d||"").replace(/^.*\//,"");if(/^readme(?:\.md)?$/i.test(y)&&Xn&&(!d||!d.includes("/")))continue;const k=Fa(f),L=/\[[^\]]+\]\(([^)]+)\)/g;let R;for(;R=L.exec(k);)w.push(R[1]);const I=/<a\s+[^>]*href=["']([^"']+)["'][^>]*>/gi;for(;R=I.exec(k);)w.push(R[1]);const U=d&&d.includes("/")?d.substring(0,d.lastIndexOf("/")+1):"";for(let z of w)try{if(Ht(z,e)||z.startsWith("..")||z.indexOf("/../")!==-1||(U&&!z.startsWith("./")&&!z.startsWith("/")&&!z.startsWith("../")&&(z=U+z),z=xe(z),!/\.(md|html?)(?:$|[?#])/i.test(z))||(z=z.split(/[?#]/)[0],a(z)))continue;l.has(z)||(l.add(z),u.push(z),s.push(z))}catch(K){console.warn("[slugManager] href processing failed",z,K)}}}catch(g){console.warn("[slugManager] discovery fetch failed for",d,g)}}},h=[];for(let d=0;d<p;d++)h.push(m());await Promise.all(h)}catch(l){console.warn("[slugManager] discovery loop failed",l)}const c=new Set;s=s.filter(l=>!l||c.has(l)||a(l)?!1:(c.add(l),!0));const o=[];for(const l of s)if(/\.(?:md|html?)(?:$|[?#])/i.test(l))try{const u=await Ce(l,e);if(u&&u.raw){if(u.status===404)continue;let p="",m="";if(u.isHtml)try{const g=new DOMParser().parseFromString(u.raw,"text/html"),f=g.querySelector("title")||g.querySelector("h1");f&&f.textContent&&(p=f.textContent.trim());const w=g.querySelector("p");if(w&&w.textContent&&(m=w.textContent.trim()),t>=2)try{const y=g.querySelector("h1"),k=y&&y.textContent?y.textContent.trim():p||"",L=(()=>{try{if(G.has(l))return G.get(l)}catch{}return pe(p||l)})(),R=Array.from(g.querySelectorAll("h2"));for(const I of R)try{const U=(I.textContent||"").trim();if(!U)continue;const z=I.id?I.id:pe(U),K=L?`${L}::${z}`:`${pe(l)}::${z}`;let oe="",E=I.nextElementSibling;for(;E&&E.tagName&&E.tagName.toLowerCase()==="script";)E=E.nextElementSibling;E&&E.textContent&&(oe=String(E.textContent).trim()),o.push({slug:K,title:U,excerpt:oe,path:l,parentTitle:k})}catch(U){console.warn("[slugManager] indexing H2 failed",U)}if(t===3)try{const I=Array.from(g.querySelectorAll("h3"));for(const U of I)try{const z=(U.textContent||"").trim();if(!z)continue;const K=U.id?U.id:pe(z),oe=L?`${L}::${K}`:`${pe(l)}::${K}`;let E="",j=U.nextElementSibling;for(;j&&j.tagName&&j.tagName.toLowerCase()==="script";)j=j.nextElementSibling;j&&j.textContent&&(E=String(j.textContent).trim()),o.push({slug:oe,title:z,excerpt:E,path:l,parentTitle:k})}catch(z){console.warn("[slugManager] indexing H3 failed",z)}}catch(I){console.warn("[slugManager] collect H3s failed",I)}}catch(y){console.warn("[slugManager] collect H2s failed",y)}}catch(d){console.warn("[slugManager] parsing HTML for index failed",d)}else{const d=u.raw,g=d.match(/^#\s+(.+)$/m);p=g?g[1].trim():"";try{p=en(p)}catch{}const f=d.split(/\r?\n\s*\r?\n/);if(f.length>1)for(let w=1;w<f.length;w++){const y=f[w].trim();if(y&&!/^#/.test(y)){m=y.replace(/\r?\n/g," ");break}}if(t>=2){let w="",y="";try{const k=(d.match(/^#\s+(.+)$/m)||[])[1];w=k?k.trim():"",y=(function(){try{if(G.has(l))return G.get(l)}catch{}return pe(p||l)})();const L=/^##\s+(.+)$/gm;let R;for(;R=L.exec(d);)try{const I=(R[1]||"").trim(),U=en(I);if(!I)continue;const z=pe(I),K=y?`${y}::${z}`:`${pe(l)}::${z}`,E=d.slice(L.lastIndex).match(/^(?:\r?\n)*([^\r\n][^\r\n]*(?:\r?\n[^\r\n].*)*)/),j=E&&E[1]?String(E[1]).trim().split(/\r?\n/).join(" ").slice(0,300):"";o.push({slug:K,title:U,excerpt:j,path:l,parentTitle:w})}catch(I){console.warn("[slugManager] indexing markdown H2 failed",I)}}catch(k){console.warn("[slugManager] collect markdown H2s failed",k)}if(t===3)try{const k=/^###\s+(.+)$/gm;let L;for(;L=k.exec(d);)try{const R=(L[1]||"").trim(),I=en(R);if(!R)continue;const U=pe(R),z=y?`${y}::${U}`:`${pe(l)}::${U}`,oe=d.slice(k.lastIndex).match(/^(?:\r?\n)*([^\r\n][^\r\n]*(?:\r?\n[^\r\n].*)*)/),E=oe&&oe[1]?String(oe[1]).trim().split(/\r?\n/).join(" ").slice(0,300):"";o.push({slug:z,title:I,excerpt:E,path:l,parentTitle:w})}catch(R){console.warn("[slugManager] indexing markdown H3 failed",R)}}catch(k){console.warn("[slugManager] collect markdown H3s failed",k)}}}let h="";try{G.has(l)&&(h=G.get(l))}catch(d){console.warn("[slugManager] mdToSlug access failed",d)}h||(h=pe(p||l)),o.push({slug:h,title:p,excerpt:m,path:l})}}catch(u){console.warn("[slugManager] buildSearchIndex: entry fetch failed",u)}try{Ke=o.filter(u=>{try{return!a(String(u.path||""))}catch{return!0}})}catch(l){console.warn("[slugManager] filtering index by excludes failed",l),Ke=o}return Ke})();try{await St}catch(r){console.warn("[slugManager] awaiting _indexPromise failed",r)}return St=null,Ke}const si=1e3;let Ut=si;function Za(e){typeof e=="number"&&e>=0&&(Ut=e)}const oi=new DOMParser,li="a[href]";let ci=async function(e,t,n=Ut){if(tn.has(e))return tn.get(e);let i=null;const r=new Set,a=[""];for(;a.length&&!i&&!(a.length>n);){const s=a.shift();if(r.has(s))continue;r.add(s);let c=t;c.endsWith("/")||(c+="/"),c+=s;try{let o;try{o=await globalThis.fetch(c)}catch(m){console.warn("[slugManager] crawlAllMarkdown: fetch failed",{url:c,error:m});continue}if(!o||!o.ok){o&&!o.ok&&console.warn("[slugManager] crawlAllMarkdown: directory fetch non-ok",{url:c,status:o.status});continue}const l=await o.text(),p=oi.parseFromString(l,"text/html").querySelectorAll(li);for(const m of p)try{let h=m.getAttribute("href")||"";if(!h||Ht(h,t)||h.startsWith("..")||h.indexOf("/../")!==-1)continue;if(h.endsWith("/")){const d=s+h;r.has(d)||a.push(d);continue}if(h.toLowerCase().endsWith(".md")){const d=xe(s+h);try{if(G.has(d))continue;for(const g of re.values());}catch(g){console.warn("[slugManager] slug map access failed",g)}try{const g=await Ce(d,t);if(g&&g.raw){const f=(g.raw||"").match(/^#\s+(.+)$/m);if(f&&f[1]&&pe(f[1].trim())===e){i=d;break}}}catch(g){console.warn("[slugManager] crawlForSlug: fetchMarkdown failed",g)}}}catch(h){console.warn("[slugManager] crawlForSlug: link iteration failed",h)}}catch(o){console.warn("[slugManager] crawlForSlug: directory fetch failed",o)}}return tn.set(e,i),i};async function ui(e,t=Ut){const n=new Set,i=new Set,r=[""];for(;r.length&&!(r.length>t);){const a=r.shift();if(i.has(a))continue;i.add(a);let s=e;s.endsWith("/")||(s+="/"),s+=a;try{let c;try{c=await globalThis.fetch(s)}catch(p){console.warn("[slugManager] crawlAllMarkdown: fetch failed",{url:s,error:p});continue}if(!c||!c.ok){c&&!c.ok&&console.warn("[slugManager] crawlAllMarkdown: directory fetch non-ok",{url:s,status:c.status});continue}const o=await c.text(),u=oi.parseFromString(o,"text/html").querySelectorAll(li);for(const p of u)try{let m=p.getAttribute("href")||"";if(!m||Ht(m,e)||m.startsWith("..")||m.indexOf("/../")!==-1)continue;if(m.endsWith("/")){const d=a+m;i.has(d)||r.push(d);continue}const h=(a+m).replace(/^\/+/,"");/\.(md|html?)$/i.test(h)&&n.add(h)}catch(m){console.warn("[slugManager] crawlAllMarkdown: link iteration failed",m)}}catch(c){console.warn("[slugManager] crawlAllMarkdown: directory fetch failed",c)}}return Array.from(n)}async function hi(e,t,n){if(e&&typeof e=="string"&&(e=xe(e),e=Dt(e)),re.has(e))return jt(e)||re.get(e);for(const r of pn)try{const a=await r(e,t);if(a)return tt(e,a),G.set(a,e),a}catch(a){console.warn("[slugManager] slug resolver failed",a)}if(Oe&&Oe.length){if(Tt.has(e)){const r=Tt.get(e);return re.set(e,r),G.set(r,e),r}for(const r of Oe)if(!sn.has(r))try{const a=await Ce(r,t);if(a&&a.raw){const s=(a.raw||"").match(/^#\s+(.+)$/m);if(s&&s[1]){const c=pe(s[1].trim());if(sn.add(r),c&&Tt.set(c,r),c===e)return tt(e,r),G.set(r,e),r}}}catch(a){console.warn("[slugManager] manifest title fetch failed",a)}}try{const r=await ai(t);if(r&&r.length){const a=r.find(s=>s.slug===e);if(a)return tt(e,a.path),G.set(a.path,e),a.path}}catch(r){console.warn("[slugManager] buildSearchIndex lookup failed",r)}try{const r=await ci(e,t,n);if(r)return tt(e,r),G.set(r,e),r}catch(r){console.warn("[slugManager] crawlForSlug lookup failed",r)}const i=[`${e}.html`,`${e}.md`];for(const r of i)try{const a=await Ce(r,t);if(a&&a.raw)return tt(e,r),G.set(r,e),r}catch(a){console.warn("[slugManager] candidate fetch failed",a)}if(Oe&&Oe.length)for(const r of Oe)try{const a=r.replace(/^.*\//,"").replace(/\.(md|html?)$/i,"");if(pe(a)===e)return tt(e,r),G.set(r,e),r}catch(a){console.warn("[slugManager] build-time filename match failed",a)}try{const r=[];ft&&typeof ft=="string"&&ft.trim()&&r.push(ft),r.includes("_home.md")||r.push("_home.md");for(const a of r)try{const s=await Ce(a,t);if(s&&s.raw){const c=(s.raw||"").match(/^#\s+(.+)$/m);if(c&&c[1]&&pe(c[1].trim())===e)return tt(e,a),G.set(a,e),a}}catch{}}catch(r){console.warn("[slugManager] home page fetch failed",r)}return null}const wt=Object.freeze(Object.defineProperty({__proto__:null,CRAWL_MAX_QUEUE:si,_setAllMd:qa,_storeSlugMapping:tt,addSlugResolver:Na,get allMarkdownPaths(){return Oe},get availableLanguages(){return Pe},buildSearchIndex:ai,buildSearchIndexWorker:Pa,clearFetchCache:Ua,clearListCaches:Da,crawlAllMarkdown:ui,crawlCache:tn,crawlForSlug:ci,crawlForSlugWorker:Ia,get defaultCrawlMaxQueue(){return Ut},ensureSlug:hi,fetchCache:Ct,get fetchMarkdown(){return Ce},getLanguages:za,get homePage(){return ft},initSlugWorker:$a,isExternalLink:ja,isExternalLinkWithBase:Ht,listPathsFetched:sn,listSlugCache:Tt,mdToSlug:G,get notFoundPage(){return kt},removeSlugResolver:Ba,resolveSlugPath:jt,get searchIndex(){return Ke},setContentBase:on,setDefaultCrawlMaxQueue:Za,setFetchMarkdown:Wa,setHomePage:Oa,setLanguages:ei,setNotFoundPage:Bn,setSkipRootReadme:Ra,get skipRootReadme(){return Xn},slugResolvers:pn,slugToMd:re,slugify:pe,unescapeMarkdown:en,uniqueSlug:ii},Symbol.toStringTag,{value:"Module"}));let di=100;function Lr(e){di=e}let Mt=300*1e3;function Tr(e){Mt=e}const He=new Map;function Ga(e){if(!He.has(e))return;const t=He.get(e),n=Date.now();if(t.ts+Mt<n){He.delete(e);return}return He.delete(e),He.set(e,t),t.value}function Qa(e,t){if(Cr(),Cr(),He.delete(e),He.set(e,{value:t,ts:Date.now()}),He.size>di){const n=He.keys().next().value;n!==void 0&&He.delete(n)}}function Cr(){if(!Mt||Mt<=0)return;const e=Date.now();for(const[t,n]of He.entries())n.ts+Mt<e&&He.delete(t)}async function Xa(e,t){const n=new Set(Ge),i=document.querySelectorAll(".nimbi-site-navbar a, .navbar a, .nimbi-nav a");for(const r of Array.from(i||[])){const a=r.getAttribute("href")||"";if(a)try{const s=new URL(a,location.href);if(s.origin!==location.origin)continue;const c=(s.hash||s.pathname).match(/([^#?]+\.md)(?:$|[?#])/)||(s.pathname||"").match(/([^#?]+\.md)(?:$|[?#])/);if(c){let p=xe(c[1]);p&&n.add(p);continue}const o=(r.textContent||"").trim(),l=(s.pathname||"").replace(/^.*\//,"");if(o&&pe(o)===e||l&&pe(l.replace(/\.(html?|md)$/i,""))===e)return s.toString();if(/\.(html?)$/i.test(s.pathname)){let p=s.pathname.replace(/^\//,"");n.add(p);continue}const u=s.pathname||"";if(u){const p=new URL(t),m=Bt(p.pathname);if(u.indexOf(m)!==-1){let h=u.startsWith(m)?u.slice(m.length):u;h=xe(h),h&&n.add(h)}}}catch(s){console.warn("[router] malformed URL while discovering index candidates",s)}}for(const r of n)try{if(!r||!String(r).includes(".md"))continue;const a=await Ce(r,t);if(!a||!a.raw)continue;const s=(a.raw||"").match(/^#\s+(.+)$/m);if(s){const c=(s[1]||"").trim();if(c&&pe(c)===e)return r}}catch(a){console.warn("[router] fetchMarkdown during index discovery failed",a)}return null}function Ka(e){const t=[];if(String(e).includes(".md")||String(e).includes(".html"))/index\.html$/i.test(e)||t.push(e);else try{const n=decodeURIComponent(String(e||""));if(re.has(n)){const i=jt(n)||re.get(n);i&&(/\.(md|html?)$/i.test(i)?/index\.html$/i.test(i)||t.push(i):(t.push(i),t.push(i+".html")))}else{if(Ge&&Ge.size)for(const i of Ge){const r=i.replace(/^.*\//,"").replace(/\.(md|html?)$/i,"");if(pe(r)===n&&!/index\.html$/i.test(i)){t.push(i);break}}!t.length&&n&&!/\.(md|html?)$/i.test(n)&&(t.push(n+".html"),t.push(n+".md"))}}catch(n){console.warn("[router] buildPageCandidates failed during slug handling",n)}return t}async function Ya(e,t){const n=e||"",i=location.hash?decodeURIComponent(location.hash.replace(/^#/,"")):null;let r=e||"",a=null;if(r&&String(r).includes("::")){const d=String(r).split("::",2);r=d[0],a=d[1]||null}const c=`${e}|||${typeof Aa<"u"&&rt?rt:""}`,o=Ga(c);if(o)r=o.resolved,a=o.anchor||a;else{if(!String(r).includes(".md")&&!String(r).includes(".html")){let d=decodeURIComponent(String(r||""));if(d&&typeof d=="string"&&(d=xe(d),d=Dt(d)),re.has(d))r=jt(d)||re.get(d);else{let g=await Xa(d,t);if(g)r=g;else if(Qn._refreshed&&Ge&&Ge.size||typeof t=="string"&&/^[a-z][a-z0-9+.-]*:\/\//i.test(t)){const f=await hi(d,t);f&&(r=f)}}}Qa(c,{resolved:r,anchor:a})}!a&&i&&(a=i);try{if(r&&(r.startsWith("http://")||r.startsWith("https://")||r.startsWith("/"))){const d=r.startsWith("/")?new URL(r,location.origin).toString():r;try{const g=await fetch(d);if(g&&g.ok){const f=await g.text(),w=g&&g.headers&&typeof g.headers.get=="function"&&g.headers.get("content-type")||"",y=(f||"").toLowerCase();if(w&&w.indexOf&&w.indexOf("text/html")!==-1||y.indexOf("<!doctype")!==-1||y.indexOf("<html")!==-1)return{data:{raw:f,isHtml:!0},pagePath:d.replace(/^\//,""),anchor:a}}}catch{}}}catch{}const l=Ka(r),u=String(n||"").includes(".md")||String(n||"").includes(".html");if(u&&l.length===0&&(String(r).includes(".md")||String(r).includes(".html"))&&l.push(r),l.length===0&&(String(r).includes(".md")||String(r).includes(".html"))&&l.push(r),l.length===1&&/index\.html$/i.test(l[0])&&!u&&!re.has(r)&&!re.has(decodeURIComponent(String(r||"")))&&!String(r||"").includes("/"))throw new Error("Unknown slug: index.html fallback prevented");let p=null,m=null,h=null;for(const d of l)if(d)try{const g=xe(d);p=await Ce(g,t),m=g;break}catch(g){h=g;try{console.warn("[router] candidate fetch failed",{candidate:d,contentBase:t,err:g&&g.message||g})}catch{}}if(!p){try{console.error("[router] fetchPageData: no page data for",{originalRaw:n,resolved:r,pageCandidates:l,contentBase:t,fetchError:h&&(h.message||String(h))||null})}catch{}try{if(u&&String(n||"").toLowerCase().includes(".html"))try{const d=new URL(String(n||""),location.href).toString();console.warn("[router] attempting absolute HTML fetch fallback",d);const g=await fetch(d);if(g&&g.ok){const f=await g.text(),w=g&&g.headers&&typeof g.headers.get=="function"&&g.headers.get("content-type")||"",y=(f||"").toLowerCase(),k=w&&w.indexOf&&w.indexOf("text/html")!==-1||y.indexOf("<!doctype")!==-1||y.indexOf("<html")!==-1;if(k||console.warn("[router] absolute fetch returned non-HTML",{abs:d,contentType:w,snippet:y.slice(0,200)}),k){const L=(f||"").toLowerCase();if(/<title>\s*index of\b/i.test(f)||/<h1>\s*index of\b/i.test(f)||L.indexOf("parent directory")!==-1||/<title>\s*directory listing/i.test(f)||/<h1>\s*directory listing/i.test(f))try{console.warn("[router] absolute fetch returned directory listing; treating as not found",{abs:d})}catch{}else try{const I=d,U=new URL(".",I).toString();try{const K=typeof DOMParser<"u"?new DOMParser:null;if(K){const oe=K.parseFromString(f||"","text/html"),E=(H,v)=>{try{const F=v.getAttribute(H)||"";if(!F||/^(https?:)?\/\//i.test(F)||F.startsWith("/")||F.startsWith("#"))return;try{const Z=new URL(F,I).toString();v.setAttribute(H,Z)}catch(Z){console.warn("[router] rewrite attribute failed",H,Z)}}catch(F){console.warn("[router] rewrite helper failed",F)}},j=oe.querySelectorAll("[src],[href],[srcset],[xlink:href],[poster]"),be=[];for(const H of Array.from(j||[]))try{const v=H.tagName?H.tagName.toLowerCase():"";if(v==="a")continue;if(H.hasAttribute("src")){const F=H.getAttribute("src");E("src",H);const Z=H.getAttribute("src");F!==Z&&be.push({attr:"src",tag:v,before:F,after:Z})}if(H.hasAttribute("href")&&v==="link"){const F=H.getAttribute("href");E("href",H);const Z=H.getAttribute("href");F!==Z&&be.push({attr:"href",tag:v,before:F,after:Z})}if(H.hasAttribute("href")&&v!=="link"){const F=H.getAttribute("href");E("href",H);const Z=H.getAttribute("href");F!==Z&&be.push({attr:"href",tag:v,before:F,after:Z})}if(H.hasAttribute("xlink:href")){const F=H.getAttribute("xlink:href");E("xlink:href",H);const Z=H.getAttribute("xlink:href");F!==Z&&be.push({attr:"xlink:href",tag:v,before:F,after:Z})}if(H.hasAttribute("poster")){const F=H.getAttribute("poster");E("poster",H);const Z=H.getAttribute("poster");F!==Z&&be.push({attr:"poster",tag:v,before:F,after:Z})}if(H.hasAttribute("srcset")){const ge=(H.getAttribute("srcset")||"").split(",").map(A=>A.trim()).filter(Boolean).map(A=>{const[S,P]=A.split(/\s+/,2);if(!S||/^(https?:)?\/\//i.test(S)||S.startsWith("/"))return A;try{const C=new URL(S,I).toString();return P?`${C} ${P}`:C}catch{return A}}).join(", ");H.setAttribute("srcset",ge)}}catch{}const V=oe.documentElement&&oe.documentElement.outerHTML?oe.documentElement.outerHTML:f;try{be&&be.length&&console.warn("[router] rewritten asset refs",{abs:d,rewritten:be})}catch{}return{data:{raw:V,isHtml:!0},pagePath:String(n||""),anchor:a}}}catch{}let z=f;return/<base\s+[^>]*>/i.test(f)||(/<head[^>]*>/i.test(f)?z=f.replace(/(<head[^>]*>)/i,`$1<base href="${U}">`):z=`<base href="${U}">`+f),{data:{raw:z,isHtml:!0},pagePath:String(n||""),anchor:a}}catch{return{data:{raw:f,isHtml:!0},pagePath:String(n||""),anchor:a}}}}}catch(d){console.warn("[router] absolute HTML fetch fallback failed",d)}}catch{}try{const d=decodeURIComponent(String(r||""));if(d&&!/\.(md|html?)$/i.test(d)){const g=[`/assets/${d}.html`,`/assets/${d}/index.html`];for(const f of g)try{const w=await fetch(f,{method:"GET"});if(w&&w.ok)return{data:{raw:await w.text(),isHtml:!0},pagePath:f.replace(/^\//,""),anchor:a}}catch{}}}catch(d){console.warn("[router] assets fallback failed",d)}throw new Error("no page data")}return{data:p,pagePath:m,anchor:a}}function gn(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var it=gn();function pi(e){it=e}var ct={exec:()=>null};function he(e,t=""){let n=typeof e=="string"?e:e.source,i={replace:(r,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(Ie.caret,"$1"),n=n.replace(r,s),i},getRegex:()=>new RegExp(n,t)};return i}var Va=(()=>{try{return!!new RegExp("(?<=1)(?<!1)")}catch{return!1}})(),Ie={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}>`)},Ja=/^(?:[ \t]*(?:\n|$))+/,es=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,ts=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Wt=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,ns=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Kn=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,gi=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,fi=he(gi).replace(/bull/g,Kn).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),rs=he(gi).replace(/bull/g,Kn).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Yn=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,is=/^[^\n]+/,Vn=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,as=he(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Vn).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),ss=he(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Kn).getRegex(),fn="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Jn=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,os=he("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",Jn).replace("tag",fn).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),mi=he(Yn).replace("hr",Wt).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",fn).getRegex(),ls=he(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",mi).getRegex(),er={blockquote:ls,code:es,def:as,fences:ts,heading:ns,hr:Wt,html:os,lheading:fi,list:ss,newline:Ja,paragraph:mi,table:ct,text:is},Mr=he("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Wt).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",fn).getRegex(),cs={...er,lheading:rs,table:Mr,paragraph:he(Yn).replace("hr",Wt).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Mr).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",fn).getRegex()},us={...er,html:he(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",Jn).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:ct,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:he(Yn).replace("hr",Wt).replace("heading",` *#{1,6} *[^
|
|
72
|
-
]`).replace("lheading",
|
|
73
|
-
`).map(a=>{let s=a.match(n.other.beginningSpace);if(s===null)return a;let[
|
|
74
|
-
`)}var
|
|
75
|
-
`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],i=qs(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:i}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let i=
|
|
76
|
-
`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=
|
|
71
|
+
`;function La(e,t="worker"){let n=null;const i=typeof globalThis<"u"&&typeof globalThis.__nimbiCMSDebug<"u"?!!globalThis.__nimbiCMSDebug:!1;function r(...l){try{i&&console&&typeof console.warn=="function"&&console.warn(...l)}catch{}}function a(){if(!n)try{const l=e();n=l||null,l&&l.addEventListener("error",()=>{try{n===l&&(n=null,l.terminate&&l.terminate())}catch(c){r("["+t+"] worker termination failed",c)}})}catch(l){n=null,r("["+t+"] worker init failed",l)}return n}function s(){try{n&&(n.terminate&&n.terminate(),n=null)}catch(l){r("["+t+"] worker termination failed",l)}}function u(l,c=1e4){return new Promise((f,m)=>{const h=a();if(!h)return m(new Error("worker unavailable"));const d=String(Math.random()),p=Object.assign({},l,{id:d});let g=null;const w=()=>{g&&clearTimeout(g),h.removeEventListener("message",y),h.removeEventListener("error",k)},y=v=>{const $=v.data||{};$.id===d&&(w(),$.error?m(new Error($.error)):f($.result))},k=v=>{w(),r("["+t+"] worker error event",v);try{n===h&&(n=null,h.terminate&&h.terminate())}catch($){r("["+t+"] worker termination failed",$)}m(new Error(v&&v.message||"worker error"))};g=setTimeout(()=>{w(),r("["+t+"] worker timed out");try{n===h&&(n=null,h.terminate&&h.terminate())}catch(v){r("["+t+"] worker termination on timeout failed",v)}m(new Error("worker timeout"))},c),h.addEventListener("message",y),h.addEventListener("error",k);try{h.postMessage(p)}catch(v){w(),m(v)}})}return{get:a,send:u,terminate:s}}function Jr(e,t="worker-pool",n=2){const i=new Array(n).fill(null);let r=0;const a=typeof globalThis<"u"&&typeof globalThis.__nimbiCMSDebug<"u"?!!globalThis.__nimbiCMSDebug:!1;function s(...p){try{a&&console&&typeof console.warn=="function"&&console.warn(...p)}catch{}}function u(p){if(!i[p])try{const g=e();i[p]=g||null,g&&g.addEventListener("error",()=>{try{i[p]===g&&(i[p]=null,g.terminate&&g.terminate())}catch(w){s("["+t+"] worker termination failed",w)}})}catch(g){i[p]=null,s("["+t+"] worker init failed",g)}return i[p]}const o=new Array(n).fill(0),l=new Array(n).fill(null),c=30*1e3;function f(p){try{o[p]=Date.now(),l[p]&&(clearTimeout(l[p]),l[p]=null),l[p]=setTimeout(()=>{try{i[p]&&(i[p].terminate&&i[p].terminate(),i[p]=null)}catch(g){s("["+t+"] idle termination failed",g)}l[p]=null},c)}catch{}}function m(){for(let p=0;p<i.length;p++){const g=u(p);if(g)return g}return null}function h(){for(let p=0;p<i.length;p++)try{i[p]&&(i[p].terminate&&i[p].terminate(),i[p]=null)}catch(g){s("["+t+"] worker termination failed",g)}}function d(p,g=1e4){return new Promise((w,y)=>{const k=r++%i.length,v=$=>{const N=(k+$)%i.length,U=u(N);if(!U)return $+1<i.length?v($+1):y(new Error("worker pool unavailable"));const z=String(Math.random()),K=Object.assign({},p,{id:z});let le=null;const L=()=>{le&&clearTimeout(le),U.removeEventListener("message",j),U.removeEventListener("error",ye)},j=V=>{const H=V.data||{};H.id===z&&(L(),H.error?y(new Error(H.error)):w(H.result))},ye=V=>{L(),s("["+t+"] worker error event",V);try{i[N]===U&&(i[N]=null,U.terminate&&U.terminate())}catch(H){s("["+t+"] worker termination failed",H)}y(new Error(V&&V.message||"worker error"))};le=setTimeout(()=>{L(),s("["+t+"] worker timed out");try{i[N]===U&&(i[N]=null,U.terminate&&U.terminate())}catch(V){s("["+t+"] worker termination on timeout failed",V)}y(new Error("worker timeout"))},g),U.addEventListener("message",j),U.addEventListener("error",ye);try{f(N),U.postMessage(K)}catch(V){L(),y(V)}};v(0)})}return{get:m,send:d,terminate:h}}function Ct(e){try{if(typeof Blob<"u"&&typeof URL<"u"&&e)try{Ct._blobUrlCache||(Ct._blobUrlCache=new Map);const t=Ct._blobUrlCache;let n=t.get(e);if(!n){const i=new Blob([e],{type:"application/javascript"});n=URL.createObjectURL(i),t.set(e,n)}return new Worker(n,{type:"module"})}catch(t){try{typeof globalThis<"u"&&globalThis.__nimbiCMSDebug&&console&&typeof console.warn=="function"&&console.warn("[worker-manager] createWorkerFromRaw failed",t)}catch{}}}catch(t){try{typeof globalThis<"u"&&globalThis.__nimbiCMSDebug&&console&&typeof console.warn=="function"&&console.warn("[worker-manager] createWorkerFromRaw failed",t)}catch{}}return null}const Xe=new Set;function Xn(e){Ta(),Xe.clear();for(const t of qe)t&&Xe.add(t);Ar(ne),Ar(G),Xn._refreshed=!0}function Ar(e){if(!(!e||typeof e.values!="function"))for(const t of e.values())t&&Xe.add(t)}function Er(e){if(!e||typeof e.set!="function")return;const t=e.set;e.set=function(n,i){return i&&Xe.add(i),t.call(this,n,i)}}let Lr=!1;function Ta(){Lr||(Er(ne),Er(G),Lr=!0)}function ei(e){return!e||typeof e!="string"?!1:/^(https?:)?\/\//.test(e)||e.startsWith("mailto:")||e.startsWith("tel:")}function xe(e){return String(e||"").replace(/^[.\/]+/,"")}function Ht(e){return String(e||"").replace(/\/+$/,"")}function dt(e){return Ht(e)+"/"}function Ca(e){try{if(!e||typeof document>"u"||!document.head||e.startsWith("data:")||document.head.querySelector(`link[rel="preload"][as="image"][href="${e}"]`))return;const n=document.createElement("link");n.rel="preload",n.as="image",n.href=e,document.head.appendChild(n)}catch(t){console.warn("[helpers] preloadImage failed",t)}}function Jt(e,t=0,n=!1){try{if(typeof window>"u"||!e||!e.querySelectorAll)return;const i=Array.from(e.querySelectorAll("img"));if(!i.length)return;const r=e,a=r&&r.getBoundingClientRect?r.getBoundingClientRect():null,s=0,u=typeof window<"u"&&(window.innerHeight||document.documentElement.clientHeight)||0,o=a?Math.max(s,a.top):s,c=(a?Math.min(u,a.bottom):u)+Number(t||0);let f=0;r&&(f=r.clientHeight||(a?a.height:0)),f||(f=u-s);let m=.6;try{const g=r&&window.getComputedStyle?window.getComputedStyle(r):null,w=g&&g.getPropertyValue("--nimbi-image-max-height-ratio"),y=w?parseFloat(w):NaN;!Number.isNaN(y)&&y>0&&y<=1&&(m=y)}catch(g){console.warn("[helpers] read CSS ratio failed",g)}const h=Math.max(200,Math.floor(f*m));let d=!1,p=null;if(i.forEach(g=>{try{const w=g.getAttribute?g.getAttribute("loading"):void 0;w!=="eager"&&g.setAttribute&&g.setAttribute("loading","lazy");const y=g.getBoundingClientRect?g.getBoundingClientRect():null,k=g.src||g.getAttribute&&g.getAttribute("src"),v=y&&y.height>1?y.height:h,$=y?y.top:0,N=$+v;y&&v>0&&$<=c&&N>=o&&(g.setAttribute?(g.setAttribute("loading","eager"),g.setAttribute("fetchpriority","high"),g.setAttribute("data-eager-by-nimbi","1")):(g.loading="eager",g.fetchPriority="high"),Ca(k),d=!0),!p&&y&&y.top<=c&&(p={img:g,src:k,rect:y,beforeLoading:w})}catch(w){console.warn("[helpers] setEagerForAboveFoldImages per-image failed",w)}}),!d&&p){const{img:g,src:w,rect:y,beforeLoading:k}=p;try{g.setAttribute?(g.setAttribute("loading","eager"),g.setAttribute("fetchpriority","high"),g.setAttribute("data-eager-by-nimbi","1")):(g.loading="eager",g.fetchPriority="high")}catch(v){console.warn("[helpers] setEagerForAboveFoldImages fallback failed",v)}}}catch(i){console.warn("[helpers] setEagerForAboveFoldImages failed",i)}}function Se(e,t=null,n){try{const i=typeof n=="string"?n:typeof window<"u"&&window.location?window.location.search:"",r=new URLSearchParams(i.startsWith("?")?i.slice(1):i),a=String(e||"");r.delete("page");const s=new URLSearchParams;s.set("page",a);for(const[l,c]of r.entries())s.append(l,c);const u=s.toString();let o=u?`?${u}`:"";return t&&(o+=`#${encodeURIComponent(t)}`),o||`?page=${encodeURIComponent(a)}`}catch{const r=`?page=${encodeURIComponent(String(e||""))}`;return t?`${r}#${encodeURIComponent(t)}`:r}}function sn(e){try{const t=e();return t&&typeof t.then=="function"?t.catch(n=>{console.warn("[helpers] safe swallowed error",n)}):t}catch(t){console.warn("[helpers] safe swallowed error",t)}}try{typeof globalThis<"u"&&!globalThis.safe&&(globalThis.safe=sn)}catch(e){console.warn("[helpers] global attach failed",e)}function Ma(e){try{if(!e&&e!==0)return"";const t=String(e),n={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "};return t.replace(/&(#x?[0-9a-fA-F]+|[a-zA-Z]+);/g,(i,r)=>{if(!r)return i;if(r[0]==="#")try{return r[1]==="x"||r[1]==="X"?String.fromCharCode(parseInt(r.slice(2),16)):String.fromCharCode(parseInt(r.slice(1),10))}catch{return i}return n[r]!==void 0?n[r]:i})}catch{return String(e||"")}}const ne=new Map;let Ie=[],Kn=!1;function Ra(e){Kn=!!e}function ti(e){Ie=Array.isArray(e)?e.slice():[]}function $a(){return Ie}const ni=typeof navigator<"u"&&navigator.hardwareConcurrency?Math.max(1,Math.floor(navigator.hardwareConcurrency/2)):2,ri=Jr(()=>Ct(Ea),"slugManager",ni);function za(){return ri.get()}function ii(e){return ri.send(e,5e3)}async function Pa(e,t=1,n=void 0){const i=await Promise.resolve().then(()=>kt);if(!(i.initSlugWorker&&i.initSlugWorker()))throw new Error("slug worker required but unavailable");return await ii({type:"buildSearchIndex",contentBase:e,indexDepth:t,noIndexing:n})}async function Ia(e,t,n){const i=await Promise.resolve().then(()=>kt);if(!(i.initSlugWorker&&i.initSlugWorker()))throw new Error("slug worker required but unavailable");return ii({type:"crawlForSlug",slug:e,base:t,maxQueue:n})}function nt(e,t){if(e)if(Ie&&Ie.length){const i=t.split("/")[0],r=Ie.includes(i);let a=ne.get(e);(!a||typeof a=="string")&&(a={default:typeof a=="string"?a:void 0,langs:{}}),r?a.langs[i]=t:a.default=t,ne.set(e,a)}else ne.set(e,t)}const gn=new Set;function Na(e){typeof e=="function"&&gn.add(e)}function Ba(e){typeof e=="function"&&gn.delete(e)}const G=new Map;let Bn={},qe=[],xt="_404.md",bt="_home.md";function On(e){e!=null&&(xt=String(e||""))}function Oa(e){e!=null&&(bt=String(e||""))}function qa(e){Bn=e||{}}const Mt=new Map,on=new Set;function Da(){Mt.clear(),on.clear()}function Ha(e){if(!e||e.length===0)return"";let t=e[0];for(let i=1;i<e.length;i++){const r=e[i];let a=0;const s=Math.min(t.length,r.length);for(;a<s&&t[a]===r[a];)a++;t=t.slice(0,a)}const n=t.lastIndexOf("/");return n===-1?t:t.slice(0,n+1)}function ln(e){ne.clear(),G.clear(),qe=[],Ie=Ie||[];const t=Object.keys(Bn||{});if(!t.length)return;let n="";try{if(e){try{/^[a-z][a-z0-9+.-]*:/i.test(String(e))?n=new URL(String(e)).pathname:n=String(e||"")}catch(i){n=String(e||""),console.warn("[slugManager] parse contentBase failed",i)}n=dt(n)}}catch(i){n="",console.warn("[slugManager] setContentBase prefix derivation failed",i)}n||(n=Ha(t));for(const i of t){let r=i;n&&i.startsWith(n)?r=xe(i.slice(n.length)):r=xe(i),qe.push(r);try{Xn()}catch(s){console.warn("[slugManager] refreshIndexPaths failed",s)}const a=Bn[i];if(typeof a=="string"){const s=(a||"").match(/^#\s+(.+)$/m);if(s&&s[1]){const u=fe(s[1].trim());if(u)try{let o=u;if((!Ie||!Ie.length)&&(o=ai(o,new Set(ne.keys()))),Ie&&Ie.length){const c=r.split("/")[0],f=Ie.includes(c);let m=ne.get(o);(!m||typeof m=="string")&&(m={default:typeof m=="string"?m:void 0,langs:{}}),f?m.langs[c]=r:m.default=r,ne.set(o,m)}else ne.set(o,r);G.set(r,o)}catch(o){console.warn("[slugManager] set slug mapping failed",o)}}}}}try{ln()}catch(e){console.warn("[slugManager] initial setContentBase failed",e)}function fe(e){let n=String(e||"").toLowerCase().replace(/[^a-z0-9\- ]/g,"").replace(/ /g,"-");return n=n.replace(/(?:-?)(?:md|html)$/,""),n=n.replace(/-+/g,"-"),n=n.replace(/^-|-$/g,""),n.length>80&&(n=n.slice(0,80).replace(/-+$/g,"")),n}function ai(e,t){if(!t.has(e))return e;let n=2,i=`${e}-${n}`;for(;t.has(i);)n+=1,i=`${e}-${n}`;return i}function ja(e){return jt(e,void 0)}function jt(e,t){if(!e)return!1;if(e.startsWith("//"))return!0;if(/^[a-z][a-z0-9+.-]*:/i.test(e)){if(t&&typeof t=="string")try{const n=new URL(e),i=new URL(t);return n.origin!==i.origin?!0:!n.pathname.startsWith(i.pathname)}catch{return!0}return!0}if(e.startsWith("/")&&t&&typeof t=="string")try{const n=new URL(e,t),i=new URL(t);return n.origin!==i.origin?!0:!n.pathname.startsWith(i.pathname)}catch{return!0}return!1}function tn(e){return e==null?e:String(e).replace(/\\([\\`*_{}\[\]()#+\-.!])/g,(t,n)=>n)}function Ut(e){if(!e||!ne.has(e))return null;const t=ne.get(e);if(!t)return null;if(typeof t=="string")return t;if(Ie&&Ie.length&&it&&t.langs&&t.langs[it])return t.langs[it];if(t.default)return t.default;if(t.langs){const n=Object.keys(t.langs);if(n.length)return t.langs[n[0]]}return null}const Rt=new Map;function Ua(){Rt.clear()}let Me=async function(e,t){if(!e)throw new Error("path required");try{const a=(String(e||"").match(/([^\/]+)\.md(?:$|[?#])/)||[])[1];if(a&&ne.has(a)){const s=Ut(a)||ne.get(a);s&&s!==e&&(e=s)}}catch(a){console.warn("[slugManager] slug mapping normalization failed",a)}const n=t==null?"":Ht(String(t));let i="";try{const a=typeof location<"u"&&location.origin?location.origin:"http://localhost";if(n&&n.startsWith("/")&&!/^[a-z][a-z0-9+.-]*:/i.test(n))i=n.replace(/\/$/,"")+"/"+e.replace(/^\//,"");else{let s=a+"/";n&&(/^[a-z][a-z0-9+.-]*:/i.test(n)?s=n.replace(/\/$/,"")+"/":n.startsWith("/")?s=a+n.replace(/\/$/,"")+"/":s=a+"/"+n.replace(/\/$/,"")+"/"),i=new URL(e.replace(/^\//,""),s).toString()}}catch{i=(typeof location<"u"&&location.origin?location.origin:"http://localhost")+"/"+e.replace(/^\//,"")}if(Rt.has(i))return Rt.get(i);const r=(async()=>{const a=await fetch(i);if(!a||typeof a.ok!="boolean"||!a.ok){if(a&&a.status===404)try{const f=`${n}/${xt}`,m=await globalThis.fetch(f);if(m&&typeof m.ok=="boolean"&&m.ok)return{raw:await m.text(),status:404}}catch(f){console.warn("[slugManager] fetching fallback 404 failed",f)}let c="";try{a&&typeof a.clone=="function"?c=await a.clone().text():a&&typeof a.text=="function"?c=await a.text():c=""}catch(f){c="",console.warn("[slugManager] reading error body failed",f)}throw console.error("fetchMarkdown failed:",{url:i,status:a?a.status:void 0,statusText:a?a.statusText:void 0,body:c.slice(0,200)}),new Error("failed to fetch md")}const s=await a.text(),u=s.trim().slice(0,128).toLowerCase(),o=/^(?:<!doctype|<html|<title|<h1)/.test(u),l=o||String(e||"").toLowerCase().endsWith(".html");if(o&&String(e||"").toLowerCase().endsWith(".md")){try{const c=`${n}/${xt}`,f=await globalThis.fetch(c);if(f.ok)return{raw:await f.text(),status:404}}catch(c){console.warn("[slugManager] fetching fallback 404 failed",c)}throw console.error("fetchMarkdown: server returned HTML for .md request",i),new Error("failed to fetch md")}return l?{raw:s,isHtml:!0}:{raw:s}})();return Rt.set(i,r),r};function Wa(e){typeof e=="function"&&(Me=e)}const nn=new Map;function Fa(e){if(!e||typeof e!="string")return"";let t=e.replace(/```[\s\S]*?```/g,"");return t=t.replace(/<pre[\s\S]*?<\/pre>/gi,""),t=t.replace(/<code[\s\S]*?<\/code>/gi,""),t=t.replace(/<!--([\s\S]*?)-->/g,""),t=t.replace(/^ {4,}.*$/gm,""),t=t.replace(/`[^`]*`/g,""),t}let Ve=[],At=null;async function si(e,t=1,n=void 0){const i=Array.isArray(n)?Array.from(new Set((n||[]).map(r=>xe(String(r||""))))):[];try{const r=xe(String(xt||""));r&&!i.includes(r)&&i.push(r)}catch{}if(Ve&&Ve.length&&t===1&&!Ve.some(a=>{try{return i.includes(xe(String(a.path||"")))}catch{return!1}}))return Ve;if(At)return At;At=(async()=>{let r=Array.isArray(n)?Array.from(new Set((n||[]).map(l=>xe(String(l||""))))):[];try{const l=xe(String(xt||""));l&&!r.includes(l)&&r.push(l)}catch{}const a=l=>{if(!r||!r.length)return!1;for(const c of r)if(c&&(l===c||l.startsWith(c+"/")))return!0;return!1};let s=[];if(qe&&qe.length&&(s=Array.from(qe)),!s.length)for(const l of ne.values())l&&s.push(l);try{const l=await hi(e);l&&l.length&&(s=s.concat(l))}catch(l){console.warn("[slugManager] crawlAllMarkdown during buildSearchIndex failed",l)}try{const l=new Set(s),c=[...s],f=Math.max(1,ni),m=async()=>{for(;!(l.size>Wt);){const d=c.shift();if(!d)break;try{const p=await Me(d,e);if(p&&p.raw){if(p.status===404)continue;let g=p.raw;const w=[],y=String(d||"").replace(/^.*\//,"");if(/^readme(?:\.md)?$/i.test(y)&&Kn&&(!d||!d.includes("/")))continue;const k=Fa(g),v=/\[[^\]]+\]\(([^)]+)\)/g;let $;for(;$=v.exec(k);)w.push($[1]);const N=/<a\s+[^>]*href=["']([^"']+)["'][^>]*>/gi;for(;$=N.exec(k);)w.push($[1]);const U=d&&d.includes("/")?d.substring(0,d.lastIndexOf("/")+1):"";for(let z of w)try{if(jt(z,e)||z.startsWith("..")||z.indexOf("/../")!==-1||(U&&!z.startsWith("./")&&!z.startsWith("/")&&!z.startsWith("../")&&(z=U+z),z=xe(z),!/\.(md|html?)(?:$|[?#])/i.test(z))||(z=z.split(/[?#]/)[0],a(z)))continue;l.has(z)||(l.add(z),c.push(z),s.push(z))}catch(K){console.warn("[slugManager] href processing failed",z,K)}}}catch(p){console.warn("[slugManager] discovery fetch failed for",d,p)}}},h=[];for(let d=0;d<f;d++)h.push(m());await Promise.all(h)}catch(l){console.warn("[slugManager] discovery loop failed",l)}const u=new Set;s=s.filter(l=>!l||u.has(l)||a(l)?!1:(u.add(l),!0));const o=[];for(const l of s)if(/\.(?:md|html?)(?:$|[?#])/i.test(l))try{const c=await Me(l,e);if(c&&c.raw){if(c.status===404)continue;let f="",m="";if(c.isHtml)try{const p=new DOMParser().parseFromString(c.raw,"text/html"),g=p.querySelector("title")||p.querySelector("h1");g&&g.textContent&&(f=g.textContent.trim());const w=p.querySelector("p");if(w&&w.textContent&&(m=w.textContent.trim()),t>=2)try{const y=p.querySelector("h1"),k=y&&y.textContent?y.textContent.trim():f||"",v=(()=>{try{if(G.has(l))return G.get(l)}catch{}return fe(f||l)})(),$=Array.from(p.querySelectorAll("h2"));for(const N of $)try{const U=(N.textContent||"").trim();if(!U)continue;const z=N.id?N.id:fe(U),K=v?`${v}::${z}`:`${fe(l)}::${z}`;let le="",L=N.nextElementSibling;for(;L&&L.tagName&&L.tagName.toLowerCase()==="script";)L=L.nextElementSibling;L&&L.textContent&&(le=String(L.textContent).trim()),o.push({slug:K,title:U,excerpt:le,path:l,parentTitle:k})}catch(U){console.warn("[slugManager] indexing H2 failed",U)}if(t===3)try{const N=Array.from(p.querySelectorAll("h3"));for(const U of N)try{const z=(U.textContent||"").trim();if(!z)continue;const K=U.id?U.id:fe(z),le=v?`${v}::${K}`:`${fe(l)}::${K}`;let L="",j=U.nextElementSibling;for(;j&&j.tagName&&j.tagName.toLowerCase()==="script";)j=j.nextElementSibling;j&&j.textContent&&(L=String(j.textContent).trim()),o.push({slug:le,title:z,excerpt:L,path:l,parentTitle:k})}catch(z){console.warn("[slugManager] indexing H3 failed",z)}}catch(N){console.warn("[slugManager] collect H3s failed",N)}}catch(y){console.warn("[slugManager] collect H2s failed",y)}}catch(d){console.warn("[slugManager] parsing HTML for index failed",d)}else{const d=c.raw,p=d.match(/^#\s+(.+)$/m);f=p?p[1].trim():"";try{f=tn(f)}catch{}const g=d.split(/\r?\n\s*\r?\n/);if(g.length>1)for(let w=1;w<g.length;w++){const y=g[w].trim();if(y&&!/^#/.test(y)){m=y.replace(/\r?\n/g," ");break}}if(t>=2){let w="",y="";try{const k=(d.match(/^#\s+(.+)$/m)||[])[1];w=k?k.trim():"",y=(function(){try{if(G.has(l))return G.get(l)}catch{}return fe(f||l)})();const v=/^##\s+(.+)$/gm;let $;for(;$=v.exec(d);)try{const N=($[1]||"").trim(),U=tn(N);if(!N)continue;const z=fe(N),K=y?`${y}::${z}`:`${fe(l)}::${z}`,L=d.slice(v.lastIndex).match(/^(?:\r?\n)*([^\r\n][^\r\n]*(?:\r?\n[^\r\n].*)*)/),j=L&&L[1]?String(L[1]).trim().split(/\r?\n/).join(" ").slice(0,300):"";o.push({slug:K,title:U,excerpt:j,path:l,parentTitle:w})}catch(N){console.warn("[slugManager] indexing markdown H2 failed",N)}}catch(k){console.warn("[slugManager] collect markdown H2s failed",k)}if(t===3)try{const k=/^###\s+(.+)$/gm;let v;for(;v=k.exec(d);)try{const $=(v[1]||"").trim(),N=tn($);if(!$)continue;const U=fe($),z=y?`${y}::${U}`:`${fe(l)}::${U}`,le=d.slice(k.lastIndex).match(/^(?:\r?\n)*([^\r\n][^\r\n]*(?:\r?\n[^\r\n].*)*)/),L=le&&le[1]?String(le[1]).trim().split(/\r?\n/).join(" ").slice(0,300):"";o.push({slug:z,title:N,excerpt:L,path:l,parentTitle:w})}catch($){console.warn("[slugManager] indexing markdown H3 failed",$)}}catch(k){console.warn("[slugManager] collect markdown H3s failed",k)}}}let h="";try{G.has(l)&&(h=G.get(l))}catch(d){console.warn("[slugManager] mdToSlug access failed",d)}h||(h=fe(f||l)),o.push({slug:h,title:f,excerpt:m,path:l})}}catch(c){console.warn("[slugManager] buildSearchIndex: entry fetch failed",c)}try{Ve=o.filter(c=>{try{return!a(String(c.path||""))}catch{return!0}})}catch(l){console.warn("[slugManager] filtering index by excludes failed",l),Ve=o}return Ve})();try{await At}catch(r){console.warn("[slugManager] awaiting _indexPromise failed",r)}return At=null,Ve}const oi=1e3;let Wt=oi;function Za(e){typeof e=="number"&&e>=0&&(Wt=e)}const li=new DOMParser,ci="a[href]";let ui=async function(e,t,n=Wt){if(nn.has(e))return nn.get(e);let i=null;const r=new Set,a=[""],s=typeof location<"u"&&location.origin?location.origin:"http://localhost";let u=s+"/";try{t&&(/^[a-z][a-z0-9+.-]*:/i.test(String(t))?u=String(t).replace(/\/$/,"")+"/":String(t).startsWith("/")?u=s+String(t).replace(/\/$/,"")+"/":u=s+"/"+String(t).replace(/\/$/,"")+"/")}catch{u=s+"/"}for(;a.length&&!i&&!(a.length>n);){const o=a.shift();if(r.has(o))continue;r.add(o);let l="";try{l=new URL(o||"",u).toString()}catch{l=(String(t||"")||s)+"/"+String(o||"").replace(/^\//,"")}try{let c;try{c=await globalThis.fetch(l)}catch(p){console.warn("[slugManager] crawlAllMarkdown: fetch failed",{url:l,error:p});continue}if(!c||!c.ok){c&&!c.ok&&console.warn("[slugManager] crawlAllMarkdown: directory fetch non-ok",{url:l,status:c.status});continue}const f=await c.text(),h=li.parseFromString(f,"text/html").querySelectorAll(ci),d=l;for(const p of h)try{let g=p.getAttribute("href")||"";if(!g||jt(g,t)||g.startsWith("..")||g.indexOf("/../")!==-1)continue;if(g.endsWith("/")){try{const w=new URL(g,d),y=new URL(u).pathname,k=w.pathname.startsWith(y)?w.pathname.slice(y.length):w.pathname.replace(/^\//,""),v=dt(xe(k));r.has(v)||a.push(v)}catch{const y=xe(o+g);r.has(y)||a.push(y)}continue}if(g.toLowerCase().endsWith(".md")){let w="";try{const y=new URL(g,d),k=new URL(u).pathname;w=y.pathname.startsWith(k)?y.pathname.slice(k.length):y.pathname.replace(/^\//,"")}catch{w=(o+g).replace(/^\//,"")}w=xe(w);try{if(G.has(w))continue;for(const y of ne.values());}catch(y){console.warn("[slugManager] slug map access failed",y)}try{const y=await Me(w,t);if(y&&y.raw){const k=(y.raw||"").match(/^#\s+(.+)$/m);if(k&&k[1]&&fe(k[1].trim())===e){i=w;break}}}catch(y){console.warn("[slugManager] crawlForSlug: fetchMarkdown failed",y)}}}catch(g){console.warn("[slugManager] crawlForSlug: link iteration failed",g)}}catch(c){console.warn("[slugManager] crawlForSlug: directory fetch failed",c)}}return nn.set(e,i),i};async function hi(e,t=Wt){const n=new Set,i=new Set,r=[""],a=typeof location<"u"&&location.origin?location.origin:"http://localhost";let s=a+"/";try{e&&(/^[a-z][a-z0-9+.-]*:/i.test(String(e))?s=String(e).replace(/\/$/,"")+"/":String(e).startsWith("/")?s=a+String(e).replace(/\/$/,"")+"/":s=a+"/"+String(e).replace(/\/$/,"")+"/")}catch{s=a+"/"}for(;r.length&&!(r.length>t);){const u=r.shift();if(i.has(u))continue;i.add(u);let o="";try{o=new URL(u||"",s).toString()}catch{o=(String(e||"")||a)+"/"+String(u||"").replace(/^\//,"")}try{let l;try{l=await globalThis.fetch(o)}catch(d){console.warn("[slugManager] crawlAllMarkdown: fetch failed",{url:o,error:d});continue}if(!l||!l.ok){l&&!l.ok&&console.warn("[slugManager] crawlAllMarkdown: directory fetch non-ok",{url:o,status:l.status});continue}const c=await l.text(),m=li.parseFromString(c,"text/html").querySelectorAll(ci),h=o;for(const d of m)try{let p=d.getAttribute("href")||"";if(!p||jt(p,e)||p.startsWith("..")||p.indexOf("/../")!==-1)continue;if(p.endsWith("/")){try{const w=new URL(p,h),y=new URL(s).pathname,k=w.pathname.startsWith(y)?w.pathname.slice(y.length):w.pathname.replace(/^\//,""),v=dt(xe(k));i.has(v)||r.push(v)}catch{const y=u+p;i.has(y)||r.push(y)}continue}let g="";try{const w=new URL(p,h),y=new URL(s).pathname;g=w.pathname.startsWith(y)?w.pathname.slice(y.length):w.pathname.replace(/^\//,"")}catch{g=(u+p).replace(/^\//,"")}g=xe(g),/\.(md|html?)$/i.test(g)&&n.add(g)}catch(p){console.warn("[slugManager] crawlAllMarkdown: link iteration failed",p)}}catch(l){console.warn("[slugManager] crawlAllMarkdown: directory fetch failed",l)}}return Array.from(n)}async function di(e,t,n){if(e&&typeof e=="string"&&(e=xe(e),e=Ht(e)),ne.has(e))return Ut(e)||ne.get(e);for(const r of gn)try{const a=await r(e,t);if(a)return nt(e,a),G.set(a,e),a}catch(a){console.warn("[slugManager] slug resolver failed",a)}if(qe&&qe.length){if(Mt.has(e)){const r=Mt.get(e);return ne.set(e,r),G.set(r,e),r}for(const r of qe)if(!on.has(r))try{const a=await Me(r,t);if(a&&a.raw){const s=(a.raw||"").match(/^#\s+(.+)$/m);if(s&&s[1]){const u=fe(s[1].trim());if(on.add(r),u&&Mt.set(u,r),u===e)return nt(e,r),G.set(r,e),r}}}catch(a){console.warn("[slugManager] manifest title fetch failed",a)}}try{const r=await si(t);if(r&&r.length){const a=r.find(s=>s.slug===e);if(a)return nt(e,a.path),G.set(a.path,e),a.path}}catch(r){console.warn("[slugManager] buildSearchIndex lookup failed",r)}try{const r=await ui(e,t,n);if(r)return nt(e,r),G.set(r,e),r}catch(r){console.warn("[slugManager] crawlForSlug lookup failed",r)}const i=[`${e}.html`,`${e}.md`];for(const r of i)try{const a=await Me(r,t);if(a&&a.raw)return nt(e,r),G.set(r,e),r}catch(a){console.warn("[slugManager] candidate fetch failed",a)}if(qe&&qe.length)for(const r of qe)try{const a=r.replace(/^.*\//,"").replace(/\.(md|html?)$/i,"");if(fe(a)===e)return nt(e,r),G.set(r,e),r}catch(a){console.warn("[slugManager] build-time filename match failed",a)}try{const r=[];bt&&typeof bt=="string"&&bt.trim()&&r.push(bt),r.includes("_home.md")||r.push("_home.md");for(const a of r)try{const s=await Me(a,t);if(s&&s.raw){const u=(s.raw||"").match(/^#\s+(.+)$/m);if(u&&u[1]&&fe(u[1].trim())===e)return nt(e,a),G.set(a,e),a}}catch{}}catch(r){console.warn("[slugManager] home page fetch failed",r)}return null}const kt=Object.freeze(Object.defineProperty({__proto__:null,CRAWL_MAX_QUEUE:oi,_setAllMd:qa,_storeSlugMapping:nt,addSlugResolver:Na,get allMarkdownPaths(){return qe},get availableLanguages(){return Ie},buildSearchIndex:si,buildSearchIndexWorker:Pa,clearFetchCache:Ua,clearListCaches:Da,crawlAllMarkdown:hi,crawlCache:nn,crawlForSlug:ui,crawlForSlugWorker:Ia,get defaultCrawlMaxQueue(){return Wt},ensureSlug:di,fetchCache:Rt,get fetchMarkdown(){return Me},getLanguages:$a,get homePage(){return bt},initSlugWorker:za,isExternalLink:ja,isExternalLinkWithBase:jt,listPathsFetched:on,listSlugCache:Mt,mdToSlug:G,get notFoundPage(){return xt},removeSlugResolver:Ba,resolveSlugPath:Ut,get searchIndex(){return Ve},setContentBase:ln,setDefaultCrawlMaxQueue:Za,setFetchMarkdown:Wa,setHomePage:Oa,setLanguages:ti,setNotFoundPage:On,setSkipRootReadme:Ra,get skipRootReadme(){return Kn},slugResolvers:gn,slugToMd:ne,slugify:fe,unescapeMarkdown:tn,uniqueSlug:ai},Symbol.toStringTag,{value:"Module"}));let pi=100;function Tr(e){pi=e}let $t=300*1e3;function Cr(e){$t=e}const je=new Map;function Ga(e){if(!je.has(e))return;const t=je.get(e),n=Date.now();if(t.ts+$t<n){je.delete(e);return}return je.delete(e),je.set(e,t),t.value}function Qa(e,t){if(Mr(),Mr(),je.delete(e),je.set(e,{value:t,ts:Date.now()}),je.size>pi){const n=je.keys().next().value;n!==void 0&&je.delete(n)}}function Mr(){if(!$t||$t<=0)return;const e=Date.now();for(const[t,n]of je.entries())n.ts+$t<e&&je.delete(t)}async function Xa(e,t){const n=new Set(Xe),i=document.querySelectorAll(".nimbi-site-navbar a, .navbar a, .nimbi-nav a");for(const r of Array.from(i||[])){const a=r.getAttribute("href")||"";if(a)try{const s=new URL(a,location.href);if(s.origin!==location.origin)continue;const u=(s.hash||s.pathname).match(/([^#?]+\.md)(?:$|[?#])/)||(s.pathname||"").match(/([^#?]+\.md)(?:$|[?#])/);if(u){let f=xe(u[1]);f&&n.add(f);continue}const o=(r.textContent||"").trim(),l=(s.pathname||"").replace(/^.*\//,"");if(o&&fe(o)===e||l&&fe(l.replace(/\.(html?|md)$/i,""))===e)return s.toString();if(/\.(html?)$/i.test(s.pathname)){let f=s.pathname.replace(/^\//,"");n.add(f);continue}const c=s.pathname||"";if(c){const f=new URL(t),m=dt(f.pathname);if(c.indexOf(m)!==-1){let h=c.startsWith(m)?c.slice(m.length):c;h=xe(h),h&&n.add(h)}}}catch(s){console.warn("[router] malformed URL while discovering index candidates",s)}}for(const r of n)try{if(!r||!String(r).includes(".md"))continue;const a=await Me(r,t);if(!a||!a.raw)continue;const s=(a.raw||"").match(/^#\s+(.+)$/m);if(s){const u=(s[1]||"").trim();if(u&&fe(u)===e)return r}}catch(a){console.warn("[router] fetchMarkdown during index discovery failed",a)}return null}function Ka(e){const t=[];if(String(e).includes(".md")||String(e).includes(".html"))/index\.html$/i.test(e)||t.push(e);else try{const n=decodeURIComponent(String(e||""));if(ne.has(n)){const i=Ut(n)||ne.get(n);i&&(/\.(md|html?)$/i.test(i)?/index\.html$/i.test(i)||t.push(i):(t.push(i),t.push(i+".html")))}else{if(Xe&&Xe.size)for(const i of Xe){const r=i.replace(/^.*\//,"").replace(/\.(md|html?)$/i,"");if(fe(r)===n&&!/index\.html$/i.test(i)){t.push(i);break}}!t.length&&n&&!/\.(md|html?)$/i.test(n)&&(t.push(n+".html"),t.push(n+".md"))}}catch(n){console.warn("[router] buildPageCandidates failed during slug handling",n)}return t}async function Ya(e,t){const n=e||"",i=location.hash?decodeURIComponent(location.hash.replace(/^#/,"")):null;let r=e||"",a=null;if(r&&String(r).includes("::")){const d=String(r).split("::",2);r=d[0],a=d[1]||null}const u=`${e}|||${typeof Aa<"u"&&it?it:""}`,o=Ga(u);if(o)r=o.resolved,a=o.anchor||a;else{if(!String(r).includes(".md")&&!String(r).includes(".html")){let d=decodeURIComponent(String(r||""));if(d&&typeof d=="string"&&(d=xe(d),d=Ht(d)),ne.has(d))r=Ut(d)||ne.get(d);else{let p=await Xa(d,t);if(p)r=p;else if(Xn._refreshed&&Xe&&Xe.size||typeof t=="string"&&/^[a-z][a-z0-9+.-]*:\/\//i.test(t)){const g=await di(d,t);g&&(r=g)}}}Qa(u,{resolved:r,anchor:a})}!a&&i&&(a=i);try{if(r&&(r.startsWith("http://")||r.startsWith("https://")||r.startsWith("/"))){const d=r.startsWith("/")?new URL(r,location.origin).toString():r;try{const p=await fetch(d);if(p&&p.ok){const g=await p.text(),w=p&&p.headers&&typeof p.headers.get=="function"&&p.headers.get("content-type")||"",y=(g||"").toLowerCase();if(w&&w.indexOf&&w.indexOf("text/html")!==-1||y.indexOf("<!doctype")!==-1||y.indexOf("<html")!==-1)return{data:{raw:g,isHtml:!0},pagePath:d.replace(/^\//,""),anchor:a}}}catch{}}}catch{}const l=Ka(r),c=String(n||"").includes(".md")||String(n||"").includes(".html");if(c&&l.length===0&&(String(r).includes(".md")||String(r).includes(".html"))&&l.push(r),l.length===0&&(String(r).includes(".md")||String(r).includes(".html"))&&l.push(r),l.length===1&&/index\.html$/i.test(l[0])&&!c&&!ne.has(r)&&!ne.has(decodeURIComponent(String(r||"")))&&!String(r||"").includes("/"))throw new Error("Unknown slug: index.html fallback prevented");let f=null,m=null,h=null;for(const d of l)if(d)try{const p=xe(d);f=await Me(p,t),m=p;break}catch(p){h=p;try{console.warn("[router] candidate fetch failed",{candidate:d,contentBase:t,err:p&&p.message||p})}catch{}}if(!f){try{console.error("[router] fetchPageData: no page data for",{originalRaw:n,resolved:r,pageCandidates:l,contentBase:t,fetchError:h&&(h.message||String(h))||null})}catch{}try{if(c&&String(n||"").toLowerCase().includes(".html"))try{const d=new URL(String(n||""),location.href).toString();console.warn("[router] attempting absolute HTML fetch fallback",d);const p=await fetch(d);if(p&&p.ok){const g=await p.text(),w=p&&p.headers&&typeof p.headers.get=="function"&&p.headers.get("content-type")||"",y=(g||"").toLowerCase(),k=w&&w.indexOf&&w.indexOf("text/html")!==-1||y.indexOf("<!doctype")!==-1||y.indexOf("<html")!==-1;if(k||console.warn("[router] absolute fetch returned non-HTML",{abs:d,contentType:w,snippet:y.slice(0,200)}),k){const v=(g||"").toLowerCase();if(/<title>\s*index of\b/i.test(g)||/<h1>\s*index of\b/i.test(g)||v.indexOf("parent directory")!==-1||/<title>\s*directory listing/i.test(g)||/<h1>\s*directory listing/i.test(g))try{console.warn("[router] absolute fetch returned directory listing; treating as not found",{abs:d})}catch{}else try{const N=d,U=new URL(".",N).toString();try{const K=typeof DOMParser<"u"?new DOMParser:null;if(K){const le=K.parseFromString(g||"","text/html"),L=(H,S)=>{try{const F=S.getAttribute(H)||"";if(!F||/^(https?:)?\/\//i.test(F)||F.startsWith("/")||F.startsWith("#"))return;try{const Z=new URL(F,N).toString();S.setAttribute(H,Z)}catch(Z){console.warn("[router] rewrite attribute failed",H,Z)}}catch(F){console.warn("[router] rewrite helper failed",F)}},j=le.querySelectorAll("[src],[href],[srcset],[xlink:href],[poster]"),ye=[];for(const H of Array.from(j||[]))try{const S=H.tagName?H.tagName.toLowerCase():"";if(S==="a")continue;if(H.hasAttribute("src")){const F=H.getAttribute("src");L("src",H);const Z=H.getAttribute("src");F!==Z&&ye.push({attr:"src",tag:S,before:F,after:Z})}if(H.hasAttribute("href")&&S==="link"){const F=H.getAttribute("href");L("href",H);const Z=H.getAttribute("href");F!==Z&&ye.push({attr:"href",tag:S,before:F,after:Z})}if(H.hasAttribute("href")&&S!=="link"){const F=H.getAttribute("href");L("href",H);const Z=H.getAttribute("href");F!==Z&&ye.push({attr:"href",tag:S,before:F,after:Z})}if(H.hasAttribute("xlink:href")){const F=H.getAttribute("xlink:href");L("xlink:href",H);const Z=H.getAttribute("xlink:href");F!==Z&&ye.push({attr:"xlink:href",tag:S,before:F,after:Z})}if(H.hasAttribute("poster")){const F=H.getAttribute("poster");L("poster",H);const Z=H.getAttribute("poster");F!==Z&&ye.push({attr:"poster",tag:S,before:F,after:Z})}if(H.hasAttribute("srcset")){const pe=(H.getAttribute("srcset")||"").split(",").map(x=>x.trim()).filter(Boolean).map(x=>{const[A,I]=x.split(/\s+/,2);if(!A||/^(https?:)?\/\//i.test(A)||A.startsWith("/"))return x;try{const R=new URL(A,N).toString();return I?`${R} ${I}`:R}catch{return x}}).join(", ");H.setAttribute("srcset",pe)}}catch{}const V=le.documentElement&&le.documentElement.outerHTML?le.documentElement.outerHTML:g;try{ye&&ye.length&&console.warn("[router] rewritten asset refs",{abs:d,rewritten:ye})}catch{}return{data:{raw:V,isHtml:!0},pagePath:String(n||""),anchor:a}}}catch{}let z=g;return/<base\s+[^>]*>/i.test(g)||(/<head[^>]*>/i.test(g)?z=g.replace(/(<head[^>]*>)/i,`$1<base href="${U}">`):z=`<base href="${U}">`+g),{data:{raw:z,isHtml:!0},pagePath:String(n||""),anchor:a}}catch{return{data:{raw:g,isHtml:!0},pagePath:String(n||""),anchor:a}}}}}catch(d){console.warn("[router] absolute HTML fetch fallback failed",d)}}catch{}try{const d=decodeURIComponent(String(r||""));if(d&&!/\.(md|html?)$/i.test(d)){const p=[`/assets/${d}.html`,`/assets/${d}/index.html`];for(const g of p)try{const w=await fetch(g,{method:"GET"});if(w&&w.ok)return{data:{raw:await w.text(),isHtml:!0},pagePath:g.replace(/^\//,""),anchor:a}}catch{}}}catch(d){console.warn("[router] assets fallback failed",d)}throw new Error("no page data")}return{data:f,pagePath:m,anchor:a}}function fn(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var at=fn();function gi(e){at=e}var ut={exec:()=>null};function he(e,t=""){let n=typeof e=="string"?e:e.source,i={replace:(r,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(Ne.caret,"$1"),n=n.replace(r,s),i},getRegex:()=>new RegExp(n,t)};return i}var Va=(()=>{try{return!!new RegExp("(?<=1)(?<!1)")}catch{return!1}})(),Ne={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}>`)},Ja=/^(?:[ \t]*(?:\n|$))+/,es=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,ts=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Ft=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,ns=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Yn=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,fi=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,mi=he(fi).replace(/bull/g,Yn).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),rs=he(fi).replace(/bull/g,Yn).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Vn=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,is=/^[^\n]+/,Jn=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,as=he(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Jn).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),ss=he(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Yn).getRegex(),mn="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",er=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,os=he("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",er).replace("tag",mn).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),bi=he(Vn).replace("hr",Ft).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",mn).getRegex(),ls=he(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",bi).getRegex(),tr={blockquote:ls,code:es,def:as,fences:ts,heading:ns,hr:Ft,html:os,lheading:mi,list:ss,newline:Ja,paragraph:bi,table:ut,text:is},Rr=he("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Ft).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",mn).getRegex(),cs={...tr,lheading:rs,table:Rr,paragraph:he(Vn).replace("hr",Ft).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Rr).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",mn).getRegex()},us={...tr,html:he(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",er).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:ut,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:he(Vn).replace("hr",Ft).replace("heading",` *#{1,6} *[^
|
|
72
|
+
]`).replace("lheading",mi).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},hs=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,ds=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,wi=/^( {2,}|\\)\n(?!\s*$)/,ps=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,bn=/[\p{P}\p{S}]/u,nr=/[\s\p{P}\p{S}]/u,yi=/[^\s\p{P}\p{S}]/u,gs=he(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,nr).getRegex(),ki=/(?!~)[\p{P}\p{S}]/u,fs=/(?!~)[\s\p{P}\p{S}]/u,ms=/(?:[^\s\p{P}\p{S}]|~)/u,_i=/(?![*_])[\p{P}\p{S}]/u,bs=/(?![*_])[\s\p{P}\p{S}]/u,ws=/(?:[^\s\p{P}\p{S}]|[*_])/u,ys=he(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Va?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),xi=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,ks=he(xi,"u").replace(/punct/g,bn).getRegex(),_s=he(xi,"u").replace(/punct/g,ki).getRegex(),Si="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",xs=he(Si,"gu").replace(/notPunctSpace/g,yi).replace(/punctSpace/g,nr).replace(/punct/g,bn).getRegex(),Ss=he(Si,"gu").replace(/notPunctSpace/g,ms).replace(/punctSpace/g,fs).replace(/punct/g,ki).getRegex(),vs=he("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,yi).replace(/punctSpace/g,nr).replace(/punct/g,bn).getRegex(),As=he(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,_i).getRegex(),Es="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",Ls=he(Es,"gu").replace(/notPunctSpace/g,ws).replace(/punctSpace/g,bs).replace(/punct/g,_i).getRegex(),Ts=he(/\\(punct)/,"gu").replace(/punct/g,bn).getRegex(),Cs=he(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Ms=he(er).replace("(?:-->|$)","-->").getRegex(),Rs=he("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",Ms).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),cn=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/,$s=he(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",cn).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),vi=he(/^!?\[(label)\]\[(ref)\]/).replace("label",cn).replace("ref",Jn).getRegex(),Ai=he(/^!?\[(ref)\](?:\[\])?/).replace("ref",Jn).getRegex(),zs=he("reflink|nolink(?!\\()","g").replace("reflink",vi).replace("nolink",Ai).getRegex(),$r=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,rr={_backpedal:ut,anyPunctuation:Ts,autolink:Cs,blockSkip:ys,br:wi,code:ds,del:ut,delLDelim:ut,delRDelim:ut,emStrongLDelim:ks,emStrongRDelimAst:xs,emStrongRDelimUnd:vs,escape:hs,link:$s,nolink:Ai,punctuation:gs,reflink:vi,reflinkSearch:zs,tag:Rs,text:ps,url:ut},Ps={...rr,link:he(/^!?\[(label)\]\((.*?)\)/).replace("label",cn).getRegex(),reflink:he(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",cn).getRegex()},qn={...rr,emStrongRDelimAst:Ss,emStrongLDelim:_s,delLDelim:As,delRDelim:Ls,url:he(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",$r).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:he(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",$r).getRegex()},Is={...qn,br:he(wi).replace("{2,}","*").getRegex(),text:he(qn.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},en={normal:tr,gfm:cs,pedantic:us},Et={normal:rr,gfm:qn,breaks:Is,pedantic:Ps},Ns={"&":"&","<":"<",">":">",'"':""","'":"'"},zr=e=>Ns[e];function Ge(e,t){if(t){if(Ne.escapeTest.test(e))return e.replace(Ne.escapeReplace,zr)}else if(Ne.escapeTestNoEncode.test(e))return e.replace(Ne.escapeReplaceNoEncode,zr);return e}function Pr(e){try{e=encodeURI(e).replace(Ne.percentDecode,"%")}catch{return null}return e}function Ir(e,t){let n=e.replace(Ne.findPipe,(a,s,u)=>{let o=!1,l=s;for(;--l>=0&&u[l]==="\\";)o=!o;return o?"|":" |"}),i=n.split(Ne.splitPipe),r=0;if(i[0].trim()||i.shift(),i.length>0&&!i.at(-1)?.trim()&&i.pop(),t)if(i.length>t)i.splice(t);else for(;i.length<t;)i.push("");for(;r<i.length;r++)i[r]=i[r].trim().replace(Ne.slashPipe,"|");return i}function Lt(e,t,n){let i=e.length;if(i===0)return"";let r=0;for(;r<i&&e.charAt(i-r-1)===t;)r++;return e.slice(0,i-r)}function Bs(e,t){if(e.indexOf(t[1])===-1)return-1;let n=0;for(let i=0;i<e.length;i++)if(e[i]==="\\")i++;else if(e[i]===t[0])n++;else if(e[i]===t[1]&&(n--,n<0))return i;return n>0?-2:-1}function Os(e,t=0){let n=t,i="";for(let r of e)if(r===" "){let a=4-n%4;i+=" ".repeat(a),n+=a}else i+=r,n++;return i}function Nr(e,t,n,i,r){let a=t.href,s=t.title||null,u=e[1].replace(r.other.outputLinkReplace,"$1");i.state.inLink=!0;let o={type:e[0].charAt(0)==="!"?"image":"link",raw:n,href:a,title:s,text:u,tokens:i.inlineTokens(u)};return i.state.inLink=!1,o}function qs(e,t,n){let i=e.match(n.other.indentCodeCompensation);if(i===null)return t;let r=i[1];return t.split(`
|
|
73
|
+
`).map(a=>{let s=a.match(n.other.beginningSpace);if(s===null)return a;let[u]=s;return u.length>=r.length?a.slice(r.length):a}).join(`
|
|
74
|
+
`)}var qt=class{options;rules;lexer;constructor(e){this.options=e||at}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:Lt(n,`
|
|
75
|
+
`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],i=qs(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:i}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let i=Lt(n,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(n=i.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:Lt(t[0],`
|
|
76
|
+
`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=Lt(t[0],`
|
|
77
77
|
`).split(`
|
|
78
|
-
`),i="",r="",a=[];for(;n.length>0;){let s=!1,
|
|
79
|
-
`),
|
|
78
|
+
`),i="",r="",a=[];for(;n.length>0;){let s=!1,u=[],o;for(o=0;o<n.length;o++)if(this.rules.other.blockquoteStart.test(n[o]))u.push(n[o]),s=!0;else if(!s)u.push(n[o]);else break;n=n.slice(o);let l=u.join(`
|
|
79
|
+
`),c=l.replace(this.rules.other.blockquoteSetextReplace,`
|
|
80
80
|
$1`).replace(this.rules.other.blockquoteSetextReplace2,"");i=i?`${i}
|
|
81
81
|
${l}`:l,r=r?`${r}
|
|
82
|
-
${
|
|
82
|
+
${c}`:c;let f=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,a,!0),this.lexer.state.top=f,n.length===0)break;let m=a.at(-1);if(m?.type==="code")break;if(m?.type==="blockquote"){let h=m,d=h.raw+`
|
|
83
83
|
`+n.join(`
|
|
84
|
-
`),
|
|
84
|
+
`),p=this.blockquote(d);a[a.length-1]=p,i=i.substring(0,i.length-h.raw.length)+p.raw,r=r.substring(0,r.length-h.text.length)+p.text;break}else if(m?.type==="list"){let h=m,d=h.raw+`
|
|
85
85
|
`+n.join(`
|
|
86
|
-
`),
|
|
87
|
-
`);continue}}return{type:"blockquote",raw:i,tokens:a,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),i=n.length>1,r={type:"list",raw:"",ordered:i,start:i?+n.slice(0,-1):"",loose:!1,items:[]};n=i?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=i?n:"[*+-]");let a=this.rules.other.listItemRegex(n),s=!1;for(;e;){let o=!1,l="",
|
|
86
|
+
`),p=this.list(d);a[a.length-1]=p,i=i.substring(0,i.length-m.raw.length)+p.raw,r=r.substring(0,r.length-h.raw.length)+p.raw,n=d.substring(a.at(-1).raw.length).split(`
|
|
87
|
+
`);continue}}return{type:"blockquote",raw:i,tokens:a,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),i=n.length>1,r={type:"list",raw:"",ordered:i,start:i?+n.slice(0,-1):"",loose:!1,items:[]};n=i?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=i?n:"[*+-]");let a=this.rules.other.listItemRegex(n),s=!1;for(;e;){let o=!1,l="",c="";if(!(t=a.exec(e))||this.rules.block.hr.test(e))break;l=t[0],e=e.substring(l.length);let f=Os(t[2].split(`
|
|
88
88
|
`,1)[0],t[1].length),m=e.split(`
|
|
89
|
-
`,1)[0],h=!
|
|
90
|
-
`,e=e.substring(m.length+1),o=!0),!o){let
|
|
91
|
-
`,1)[0],
|
|
92
|
-
`+
|
|
93
|
-
`+m}h=!m.trim(),l
|
|
94
|
-
`,e=e.substring(
|
|
95
|
-
`):[],a={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===i.length){for(let s of i)this.rules.other.tableAlignRight.test(s)?a.align.push("right"):this.rules.other.tableAlignCenter.test(s)?a.align.push("center"):this.rules.other.tableAlignLeft.test(s)?a.align.push("left"):a.align.push(null);for(let s=0;s<n.length;s++)a.header.push({text:n[s],tokens:this.lexer.inline(n[s]),header:!0,align:a.align[s]});for(let s of r)a.rows.push(
|
|
96
|
-
`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let a=
|
|
97
|
-
`),this.blockTokens(t,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){let i=this.inlineQueue[n];this.inlineTokens(i.src,i.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(t,n=[],i=!1){for(this.options.pedantic&&(t=t.replace(
|
|
89
|
+
`,1)[0],h=!f.trim(),d=0;if(this.options.pedantic?(d=2,c=f.trimStart()):h?d=t[1].length+1:(d=f.search(this.rules.other.nonSpaceChar),d=d>4?1:d,c=f.slice(d),d+=t[1].length),h&&this.rules.other.blankLine.test(m)&&(l+=m+`
|
|
90
|
+
`,e=e.substring(m.length+1),o=!0),!o){let p=this.rules.other.nextBulletRegex(d),g=this.rules.other.hrRegex(d),w=this.rules.other.fencesBeginRegex(d),y=this.rules.other.headingBeginRegex(d),k=this.rules.other.htmlBeginRegex(d),v=this.rules.other.blockquoteBeginRegex(d);for(;e;){let $=e.split(`
|
|
91
|
+
`,1)[0],N;if(m=$,this.options.pedantic?(m=m.replace(this.rules.other.listReplaceNesting," "),N=m):N=m.replace(this.rules.other.tabCharGlobal," "),w.test(m)||y.test(m)||k.test(m)||v.test(m)||p.test(m)||g.test(m))break;if(N.search(this.rules.other.nonSpaceChar)>=d||!m.trim())c+=`
|
|
92
|
+
`+N.slice(d);else{if(h||f.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||w.test(f)||y.test(f)||g.test(f))break;c+=`
|
|
93
|
+
`+m}h=!m.trim(),l+=$+`
|
|
94
|
+
`,e=e.substring($.length+1),f=N.slice(d)}}r.loose||(s?r.loose=!0:this.rules.other.doubleBlankLine.test(l)&&(s=!0)),r.items.push({type:"list_item",raw:l,task:!!this.options.gfm&&this.rules.other.listIsTask.test(c),loose:!1,text:c,tokens:[]}),r.raw+=l}let u=r.items.at(-1);if(u)u.raw=u.raw.trimEnd(),u.text=u.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let o of r.items){if(this.lexer.state.top=!1,o.tokens=this.lexer.blockTokens(o.text,[]),o.task){if(o.text=o.text.replace(this.rules.other.listReplaceTask,""),o.tokens[0]?.type==="text"||o.tokens[0]?.type==="paragraph"){o.tokens[0].raw=o.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),o.tokens[0].text=o.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let c=this.lexer.inlineQueue.length-1;c>=0;c--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[c].src)){this.lexer.inlineQueue[c].src=this.lexer.inlineQueue[c].src.replace(this.rules.other.listReplaceTask,"");break}}let l=this.rules.other.listTaskCheckbox.exec(o.raw);if(l){let c={type:"checkbox",raw:l[0]+" ",checked:l[0]!=="[ ]"};o.checked=c.checked,r.loose?o.tokens[0]&&["paragraph","text"].includes(o.tokens[0].type)&&"tokens"in o.tokens[0]&&o.tokens[0].tokens?(o.tokens[0].raw=c.raw+o.tokens[0].raw,o.tokens[0].text=c.raw+o.tokens[0].text,o.tokens[0].tokens.unshift(c)):o.tokens.unshift({type:"paragraph",raw:c.raw,text:c.raw,tokens:[c]}):o.tokens.unshift(c)}}if(!r.loose){let l=o.tokens.filter(f=>f.type==="space"),c=l.length>0&&l.some(f=>this.rules.other.anyLine.test(f.raw));r.loose=c}}if(r.loose)for(let o of r.items){o.loose=!0;for(let l of o.tokens)l.type==="text"&&(l.type="paragraph")}return r}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:"html",block:!0,raw:t[0],pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),i=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:n,raw:t[0],href:i,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=Ir(t[1]),i=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split(`
|
|
95
|
+
`):[],a={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===i.length){for(let s of i)this.rules.other.tableAlignRight.test(s)?a.align.push("right"):this.rules.other.tableAlignCenter.test(s)?a.align.push("center"):this.rules.other.tableAlignLeft.test(s)?a.align.push("left"):a.align.push(null);for(let s=0;s<n.length;s++)a.header.push({text:n[s],tokens:this.lexer.inline(n[s]),header:!0,align:a.align[s]});for(let s of r)a.rows.push(Ir(s,a.header.length).map((u,o)=>({text:u,tokens:this.lexer.inline(u),header:!1,align:a.align[o]})));return a}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`
|
|
96
|
+
`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let a=Lt(n.slice(0,-1),"\\");if((n.length-a.length)%2===0)return}else{let a=Bs(t[2],"()");if(a===-2)return;if(a>-1){let s=(t[0].indexOf("!")===0?5:4)+t[1].length+a;t[2]=t[2].substring(0,a),t[0]=t[0].substring(0,s).trim(),t[3]=""}}let i=t[2],r="";if(this.options.pedantic){let a=this.rules.other.pedanticHrefTitle.exec(i);a&&(i=a[1],r=a[3])}else r=t[3]?t[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?i=i.slice(1):i=i.slice(1,-1)),Nr(t,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let i=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=t[i.toLowerCase()];if(!r){let a=n[0].charAt(0);return{type:"text",raw:a,text:a}}return Nr(n,r,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let i=this.rules.inline.emStrongLDelim.exec(e);if(!(!i||i[3]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(i[1]||i[2])||!n||this.rules.inline.punctuation.exec(n))){let r=[...i[0]].length-1,a,s,u=r,o=0,l=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(l.lastIndex=0,t=t.slice(-1*e.length+r);(i=l.exec(t))!=null;){if(a=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!a)continue;if(s=[...a].length,i[3]||i[4]){u+=s;continue}else if((i[5]||i[6])&&r%3&&!((r+s)%3)){o+=s;continue}if(u-=s,u>0)continue;s=Math.min(s,s+u+o);let c=[...i[0]][0].length,f=e.slice(0,r+i.index+c+s);if(Math.min(r,s)%2){let h=f.slice(1,-1);return{type:"em",raw:f,text:h,tokens:this.lexer.inlineTokens(h)}}let m=f.slice(2,-2);return{type:"strong",raw:f,text:m,tokens:this.lexer.inlineTokens(m)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return i&&r&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,n=""){let i=this.rules.inline.delLDelim.exec(e);if(i&&(!i[1]||!n||this.rules.inline.punctuation.exec(n))){let r=[...i[0]].length-1,a,s,u=r,o=this.rules.inline.delRDelim;for(o.lastIndex=0,t=t.slice(-1*e.length+r);(i=o.exec(t))!=null;){if(a=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!a||(s=[...a].length,s!==r))continue;if(i[3]||i[4]){u+=s;continue}if(u-=s,u>0)continue;s=Math.min(s,s+u);let l=[...i[0]][0].length,c=e.slice(0,r+i.index+l+s),f=c.slice(r,-r);return{type:"del",raw:c,text:f,tokens:this.lexer.inlineTokens(f)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,i;return t[2]==="@"?(n=t[1],i="mailto:"+n):(n=t[1],i=n),{type:"link",raw:t[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,i;if(t[2]==="@")n=t[0],i="mailto:"+n;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(r!==t[0]);n=t[0],t[1]==="www."?i="http://"+t[0]:i=t[0]}return{type:"link",raw:t[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}},De=class Dn{tokens;options;state;inlineQueue;tokenizer;constructor(t){this.tokens=[],this.tokens.links=Object.create(null),this.options=t||at,this.options.tokenizer=this.options.tokenizer||new qt,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:Ne,block:en.normal,inline:Et.normal};this.options.pedantic?(n.block=en.pedantic,n.inline=Et.pedantic):this.options.gfm&&(n.block=en.gfm,this.options.breaks?n.inline=Et.breaks:n.inline=Et.gfm),this.tokenizer.rules=n}static get rules(){return{block:en,inline:Et}}static lex(t,n){return new Dn(n).lex(t)}static lexInline(t,n){return new Dn(n).inlineTokens(t)}lex(t){t=t.replace(Ne.carriageReturn,`
|
|
97
|
+
`),this.blockTokens(t,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){let i=this.inlineQueue[n];this.inlineTokens(i.src,i.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(t,n=[],i=!1){for(this.options.pedantic&&(t=t.replace(Ne.tabCharGlobal," ").replace(Ne.spaceLine,""));t;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},t,n))?(t=t.substring(r.raw.length),n.push(r),!0):!1))continue;if(r=this.tokenizer.space(t)){t=t.substring(r.raw.length);let s=n.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`
|
|
98
98
|
`:n.push(r);continue}if(r=this.tokenizer.code(t)){t=t.substring(r.raw.length);let s=n.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(`
|
|
99
99
|
`)?"":`
|
|
100
100
|
`)+r.raw,s.text+=`
|
|
101
101
|
`+r.text,this.inlineQueue.at(-1).src=s.text):n.push(r);continue}if(r=this.tokenizer.fences(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.heading(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.hr(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.blockquote(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.list(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.html(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.def(t)){t=t.substring(r.raw.length);let s=n.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(`
|
|
102
102
|
`)?"":`
|
|
103
103
|
`)+r.raw,s.text+=`
|
|
104
|
-
`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},n.push(r));continue}if(r=this.tokenizer.table(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.lheading(t)){t=t.substring(r.raw.length),n.push(r);continue}let a=t;if(this.options.extensions?.startBlock){let s=1/0,
|
|
104
|
+
`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},n.push(r));continue}if(r=this.tokenizer.table(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.lheading(t)){t=t.substring(r.raw.length),n.push(r);continue}let a=t;if(this.options.extensions?.startBlock){let s=1/0,u=t.slice(1),o;this.options.extensions.startBlock.forEach(l=>{o=l.call({lexer:this},u),typeof o=="number"&&o>=0&&(s=Math.min(s,o))}),s<1/0&&s>=0&&(a=t.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(a))){let s=n.at(-1);i&&s?.type==="paragraph"?(s.raw+=(s.raw.endsWith(`
|
|
105
105
|
`)?"":`
|
|
106
106
|
`)+r.raw,s.text+=`
|
|
107
107
|
`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):n.push(r),i=a.length!==t.length,t=t.substring(r.raw.length);continue}if(r=this.tokenizer.text(t)){t=t.substring(r.raw.length);let s=n.at(-1);s?.type==="text"?(s.raw+=(s.raw.endsWith(`
|
|
108
108
|
`)?"":`
|
|
109
109
|
`)+r.raw,s.text+=`
|
|
110
|
-
`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):n.push(r);continue}if(t){let s="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}inlineTokens(t,n=[]){let i=t,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(i))!=null;)o.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(i=i.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(i))!=null;)i=i.slice(0,r.index)+"++"+i.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let a;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(i))!=null;)a=r[2]?r[2].length:0,i=i.slice(0,r.index+a)+"["+"a".repeat(r[0].length-a-2)+"]"+i.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);i=this.options.hooks?.emStrongMask?.call({lexer:this},i)??i;let s=!1,
|
|
111
|
-
`;return i?'<pre><code class="language-'+
|
|
112
|
-
`:"<pre><code>"+(n?r:
|
|
110
|
+
`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):n.push(r);continue}if(t){let s="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}inlineTokens(t,n=[]){let i=t,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(i))!=null;)o.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(i=i.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(i))!=null;)i=i.slice(0,r.index)+"++"+i.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let a;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(i))!=null;)a=r[2]?r[2].length:0,i=i.slice(0,r.index+a)+"["+"a".repeat(r[0].length-a-2)+"]"+i.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);i=this.options.hooks?.emStrongMask?.call({lexer:this},i)??i;let s=!1,u="";for(;t;){s||(u=""),s=!1;let o;if(this.options.extensions?.inline?.some(c=>(o=c.call({lexer:this},t,n))?(t=t.substring(o.raw.length),n.push(o),!0):!1))continue;if(o=this.tokenizer.escape(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.tag(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.link(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(o.raw.length);let c=n.at(-1);o.type==="text"&&c?.type==="text"?(c.raw+=o.raw,c.text+=o.text):n.push(o);continue}if(o=this.tokenizer.emStrong(t,i,u)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.codespan(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.br(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.del(t,i,u)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.autolink(t)){t=t.substring(o.raw.length),n.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(t))){t=t.substring(o.raw.length),n.push(o);continue}let l=t;if(this.options.extensions?.startInline){let c=1/0,f=t.slice(1),m;this.options.extensions.startInline.forEach(h=>{m=h.call({lexer:this},f),typeof m=="number"&&m>=0&&(c=Math.min(c,m))}),c<1/0&&c>=0&&(l=t.substring(0,c+1))}if(o=this.tokenizer.inlineText(l)){t=t.substring(o.raw.length),o.raw.slice(-1)!=="_"&&(u=o.raw.slice(-1)),s=!0;let c=n.at(-1);c?.type==="text"?(c.raw+=o.raw,c.text+=o.text):n.push(o);continue}if(t){let c="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(c);break}else throw new Error(c)}}return n}},Dt=class{options;parser;constructor(e){this.options=e||at}space(e){return""}code({text:e,lang:t,escaped:n}){let i=(t||"").match(Ne.notSpaceStart)?.[0],r=e.replace(Ne.endingNewline,"")+`
|
|
111
|
+
`;return i?'<pre><code class="language-'+Ge(i)+'">'+(n?r:Ge(r,!0))+`</code></pre>
|
|
112
|
+
`:"<pre><code>"+(n?r:Ge(r,!0))+`</code></pre>
|
|
113
113
|
`}blockquote({tokens:e}){return`<blockquote>
|
|
114
114
|
${this.parser.parse(e)}</blockquote>
|
|
115
115
|
`}html({text:e}){return e}def(e){return""}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>
|
|
116
116
|
`}hr(e){return`<hr>
|
|
117
|
-
`}list(e){let t=e.ordered,n=e.start,i="";for(let s=0;s<e.items.length;s++){let
|
|
117
|
+
`}list(e){let t=e.ordered,n=e.start,i="";for(let s=0;s<e.items.length;s++){let u=e.items[s];i+=this.listitem(u)}let r=t?"ol":"ul",a=t&&n!==1?' start="'+n+'"':"";return"<"+r+a+`>
|
|
118
118
|
`+i+"</"+r+`>
|
|
119
119
|
`}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>
|
|
120
120
|
`}checkbox({checked:e}){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"> '}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>
|
|
@@ -125,8 +125,8 @@ ${this.parser.parse(e)}</blockquote>
|
|
|
125
125
|
`}tablerow({text:e}){return`<tr>
|
|
126
126
|
${e}</tr>
|
|
127
127
|
`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
|
|
128
|
-
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${
|
|
129
|
-
Please report this to https://github.com/markedjs/marked.`,e){let i="<p>An error occurred:</p><pre>"+
|
|
128
|
+
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${Ge(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let i=this.parser.parseInline(n),r=Pr(e);if(r===null)return i;e=r;let a='<a href="'+e+'"';return t&&(a+=' title="'+Ge(t)+'"'),a+=">"+i+"</a>",a}image({href:e,title:t,text:n,tokens:i}){i&&(n=this.parser.parseInline(i,this.parser.textRenderer));let r=Pr(e);if(r===null)return Ge(n);e=r;let a=`<img src="${e}" alt="${Ge(n)}"`;return t&&(a+=` title="${Ge(t)}"`),a+=">",a}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:Ge(e.text)}},wn=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}checkbox({raw:e}){return e}},He=class Hn{options;renderer;textRenderer;constructor(t){this.options=t||at,this.options.renderer=this.options.renderer||new Dt,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new wn}static parse(t,n){return new Hn(n).parse(t)}static parseInline(t,n){return new Hn(n).parseInline(t)}parse(t){let n="";for(let i=0;i<t.length;i++){let r=t[i];if(this.options.extensions?.renderers?.[r.type]){let s=r,u=this.options.extensions.renderers[s.type].call({parser:this},s);if(u!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(s.type)){n+=u||"";continue}}let a=r;switch(a.type){case"space":{n+=this.renderer.space(a);break}case"hr":{n+=this.renderer.hr(a);break}case"heading":{n+=this.renderer.heading(a);break}case"code":{n+=this.renderer.code(a);break}case"table":{n+=this.renderer.table(a);break}case"blockquote":{n+=this.renderer.blockquote(a);break}case"list":{n+=this.renderer.list(a);break}case"checkbox":{n+=this.renderer.checkbox(a);break}case"html":{n+=this.renderer.html(a);break}case"def":{n+=this.renderer.def(a);break}case"paragraph":{n+=this.renderer.paragraph(a);break}case"text":{n+=this.renderer.text(a);break}default:{let s='Token with "'+a.type+'" type was not found.';if(this.options.silent)return console.error(s),"";throw new Error(s)}}}return n}parseInline(t,n=this.renderer){let i="";for(let r=0;r<t.length;r++){let a=t[r];if(this.options.extensions?.renderers?.[a.type]){let u=this.options.extensions.renderers[a.type].call({parser:this},a);if(u!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(a.type)){i+=u||"";continue}}let s=a;switch(s.type){case"escape":{i+=n.text(s);break}case"html":{i+=n.html(s);break}case"link":{i+=n.link(s);break}case"image":{i+=n.image(s);break}case"checkbox":{i+=n.checkbox(s);break}case"strong":{i+=n.strong(s);break}case"em":{i+=n.em(s);break}case"codespan":{i+=n.codespan(s);break}case"br":{i+=n.br(s);break}case"del":{i+=n.del(s);break}case"text":{i+=n.text(s);break}default:{let u='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(u),"";throw new Error(u)}}}return i}},wt=class{options;block;constructor(e){this.options=e||at}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?De.lex:De.lexInline}provideParser(){return this.block?He.parse:He.parseInline}},Ei=class{defaults=fn();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=He;Renderer=Dt;TextRenderer=wn;Lexer=De;Tokenizer=qt;Hooks=wt;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let i of e)switch(n=n.concat(t.call(this,i)),i.type){case"table":{let r=i;for(let a of r.header)n=n.concat(this.walkTokens(a.tokens,t));for(let a of r.rows)for(let s of a)n=n.concat(this.walkTokens(s.tokens,t));break}case"list":{let r=i;n=n.concat(this.walkTokens(r.items,t));break}default:{let r=i;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(a=>{let s=r[a].flat(1/0);n=n.concat(this.walkTokens(s,t))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let a=t.renderers[r.name];a?t.renderers[r.name]=function(...s){let u=r.renderer.apply(this,s);return u===!1&&(u=a.apply(this,s)),u}:t.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let a=t[r.level];a?a.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level==="block"?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level==="inline"&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),i.extensions=t),n.renderer){let r=this.defaults.renderer||new Dt(this.defaults);for(let a in n.renderer){if(!(a in r))throw new Error(`renderer '${a}' does not exist`);if(["options","parser"].includes(a))continue;let s=a,u=n.renderer[s],o=r[s];r[s]=(...l)=>{let c=u.apply(r,l);return c===!1&&(c=o.apply(r,l)),c||""}}i.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new qt(this.defaults);for(let a in n.tokenizer){if(!(a in r))throw new Error(`tokenizer '${a}' does not exist`);if(["options","rules","lexer"].includes(a))continue;let s=a,u=n.tokenizer[s],o=r[s];r[s]=(...l)=>{let c=u.apply(r,l);return c===!1&&(c=o.apply(r,l)),c}}i.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new wt;for(let a in n.hooks){if(!(a in r))throw new Error(`hook '${a}' does not exist`);if(["options","block"].includes(a))continue;let s=a,u=n.hooks[s],o=r[s];wt.passThroughHooks.has(a)?r[s]=l=>{if(this.defaults.async&&wt.passThroughHooksRespectAsync.has(a))return(async()=>{let f=await u.call(r,l);return o.call(r,f)})();let c=u.call(r,l);return o.call(r,c)}:r[s]=(...l)=>{if(this.defaults.async)return(async()=>{let f=await u.apply(r,l);return f===!1&&(f=await o.apply(r,l)),f})();let c=u.apply(r,l);return c===!1&&(c=o.apply(r,l)),c}}i.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,a=n.walkTokens;i.walkTokens=function(s){let u=[];return u.push(a.call(this,s)),r&&(u=u.concat(r.call(this,s))),u}}this.defaults={...this.defaults,...i}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return De.lex(e,t??this.defaults)}parser(e,t){return He.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let i={...n},r={...this.defaults,...i},a=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(r.hooks&&(r.hooks.options=r,r.hooks.block=e),r.async)return(async()=>{let s=r.hooks?await r.hooks.preprocess(t):t,u=await(r.hooks?await r.hooks.provideLexer():e?De.lex:De.lexInline)(s,r),o=r.hooks?await r.hooks.processAllTokens(u):u;r.walkTokens&&await Promise.all(this.walkTokens(o,r.walkTokens));let l=await(r.hooks?await r.hooks.provideParser():e?He.parse:He.parseInline)(o,r);return r.hooks?await r.hooks.postprocess(l):l})().catch(a);try{r.hooks&&(t=r.hooks.preprocess(t));let s=(r.hooks?r.hooks.provideLexer():e?De.lex:De.lexInline)(t,r);r.hooks&&(s=r.hooks.processAllTokens(s)),r.walkTokens&&this.walkTokens(s,r.walkTokens);let u=(r.hooks?r.hooks.provideParser():e?He.parse:He.parseInline)(s,r);return r.hooks&&(u=r.hooks.postprocess(u)),u}catch(s){return a(s)}}}onError(e,t){return n=>{if(n.message+=`
|
|
129
|
+
Please report this to https://github.com/markedjs/marked.`,e){let i="<p>An error occurred:</p><pre>"+Ge(n.message+"",!0)+"</pre>";return t?Promise.resolve(i):i}if(t)return Promise.reject(n);throw n}}},pt=new Ei;function se(e,t){return pt.parse(e,t)}se.options=se.setOptions=function(e){return pt.setOptions(e),se.defaults=pt.defaults,gi(se.defaults),se};se.getDefaults=fn;se.defaults=at;se.use=function(...e){return pt.use(...e),se.defaults=pt.defaults,gi(se.defaults),se};se.walkTokens=function(e,t){return pt.walkTokens(e,t)};se.parseInline=pt.parseInline;se.Parser=He;se.parser=He.parse;se.Renderer=Dt;se.TextRenderer=wn;se.Lexer=De;se.lexer=De.lex;se.Tokenizer=qt;se.Hooks=wt;se.parse=se;var Ds=se.options,Hs=se.setOptions,js=se.use,Us=se.walkTokens,Ws=se.parseInline,Fs=se,Zs=He.parse,Gs=De.lex;const Br=Object.freeze(Object.defineProperty({__proto__:null,Hooks:wt,Lexer:De,Marked:Ei,Parser:He,Renderer:Dt,TextRenderer:wn,Tokenizer:qt,get defaults(){return at},getDefaults:fn,lexer:Gs,marked:se,options:Ds,parse:Fs,parseInline:Ws,parser:Zs,setOptions:Hs,use:js,walkTokens:Us},Symbol.toStringTag,{value:"Module"})),Li=`function O() {
|
|
130
130
|
return { async: !1, breaks: !1, extensions: null, gfm: !0, hooks: null, pedantic: !1, renderer: null, silent: !1, tokenizer: null, walkTokens: null };
|
|
131
131
|
}
|
|
132
132
|
var $ = O();
|
|
@@ -1398,8 +1398,8 @@ onmessage = async (s) => {
|
|
|
1398
1398
|
postMessage({ id: e.id, error: String(r) });
|
|
1399
1399
|
}
|
|
1400
1400
|
};
|
|
1401
|
-
`,
|
|
1402
|
-
---`,3);if(t!==-1){const n=e.slice(3,t+0).trim(),i=e.slice(t+4).trimStart(),r={};return n.split(/\r?\n/).forEach(a=>{const s=a.match(/^([^:]+):\s*(.*)$/);s&&(r[s[1].trim()]=s[2].trim())}),{content:i,data:r}}}return{content:e,data:{}}}function Li(e){try{if(!e&&e!==0)return"";const t=String(e),n={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "};return t.replace(/&(#x?[0-9a-fA-F]+|[a-zA-Z]+);/g,(i,r)=>{if(!r)return i;if(r[0]==="#")try{return r[1]==="x"||r[1]==="X"?String.fromCharCode(parseInt(r.slice(2),16)):String.fromCharCode(parseInt(r.slice(1),10))}catch{return i}return n[r]!==void 0?n[r]:i})}catch{return String(e||"")}}const Rt=Nr&&(se||Nr)||void 0;let $e=null;const Xs="https://cdn.jsdelivr.net/npm/highlight.js";async function un(){if($e)return $e;try{try{const e=await import(Xs+"/lib/core.js");$e=e.default||e}catch{$e=null}}catch{$e=null}return $e}Rt&&typeof Rt.setOptions=="function"&&Rt.setOptions({gfm:!0,headerIds:!0,mangle:!1,highlighted:(e,t)=>{try{return $e&&t&&typeof $e.getLanguage=="function"&&$e.getLanguage(t)?$e.highlight(e,{language:t}).value:$e&&typeof $e.getLanguage=="function"&&$e.getLanguage("plaintext")?$e.highlight(e,{language:"plaintext"}).value:e}catch{return e}}});onmessage=async e=>{const t=e.data||{};try{if(t.type==="register"){const{name:u,url:p}=t;try{if(!await un()){postMessage({type:"register-error",name:u,error:"hljs unavailable"});return}const h=await import(p),d=h.default||h;$e.registerLanguage(u,d),postMessage({type:"registered",name:u})}catch(m){postMessage({type:"register-error",name:u,error:String(m)})}return}if(t.type==="detect"){const u=t.md||"",p=t.supported||[],m=new Set,h=/```\s*([a-zA-Z0-9_\-+]+)?/g;let d;for(;d=h.exec(u);)if(d[1]){const g=String(d[1]).toLowerCase();if(!g)continue;if(g.length>=5&&g.length<=30&&/^[a-z][a-z0-9_\-+]*$/.test(g)&&m.add(g),new Set(["bash","sh","zsh","javascript","js","python","py","php","java","c","cpp","rust","go","ruby","perl","r","scala","swift","kotlin","cs","csharp","html","css","json","xml","yaml","yml","dockerfile","docker"]).has(g)&&m.add(g),p&&p.length)try{p.indexOf(g)!==-1&&m.add(g)}catch{}}postMessage({id:t.id,result:Array.from(m)});return}const{id:n,md:i}=t,{content:r,data:a}=cn(i||"");await un().catch(()=>{});let s=Rt.parse(r);const c=[],o=new Map,l=u=>{try{return String(u||"").toLowerCase().trim().replace(/[^a-z0-9\-\s]+/g,"").replace(/\s+/g,"-")}catch{return"heading"}};s=s.replace(/<h([1-6])([^>]*)>([\s\S]*?)<\/h\1>/g,(u,p,m,h)=>{const d=Number(p);let g=h.replace(/<[^>]+>/g,"").trim();try{g=Li(g)}catch{}let f=null;const w=(m||"").match(/\sid="([^"]+)"/);w&&(f=w[1]);const y=f||l(g)||"heading",L=(o.get(y)||0)+1;o.set(y,L);const R=L===1?y:y+"-"+L;c.push({level:d,text:g,id:R});const I={1:"is-size-3-mobile is-size-2-tablet is-size-1-desktop",2:"is-size-4-mobile is-size-3-tablet is-size-2-desktop",3:"is-size-5-mobile is-size-4-tablet is-size-3-desktop",4:"is-size-6-mobile is-size-5-tablet is-size-4-desktop",5:"is-size-6-mobile is-size-6-tablet is-size-5-desktop",6:"is-size-6-mobile is-size-6-tablet is-size-6-desktop"},U=d<=2?"has-text-weight-bold":d<=4?"has-text-weight-semibold":"has-text-weight-normal",z=(I[d]+" "+U).trim(),oe=((m||"").replace(/\s*(id|class)="[^"]*"/g,"")+` id="${R}" class="${z}"`).trim();return`<h${d} ${oe}>${h}</h${d}>`}),s=s.replace(/<img([^>]*)>/g,(u,p)=>/\bloading=/.test(p)?`<img${p}>`:/\bdata-want-lazy=/.test(p)?`<img${p}>`:`<img${p} loading="lazy">`),postMessage({id:n,result:{html:s,meta:a||{},toc:c}})}catch(n){postMessage({id:t.id,error:String(n)})}};async function Ks(e){try{if(e&&e.type==="register"){const{name:o,url:l}=e;try{if(!await un())return{type:"register-error",name:o,error:"hljs unavailable"};const p=await import(l),m=p.default||p;return $e.registerLanguage(o,m),{type:"registered",name:o}}catch(u){return{type:"register-error",name:o,error:String(u)}}}if(e&&e.type==="detect"){const o=e.md||"",l=e.supported||[],u=new Set,p=/``\`\s*([a-zA-Z0-9_\-+]+)?/g;let m;for(;m=p.exec(o);)if(m[1]){const h=String(m[1]).toLowerCase();if(!h)continue;if(h.length>=5&&h.length<=30&&/^[a-z][a-z0-9_\-+]*$/.test(h)&&u.add(h),new Set(["bash","sh","zsh","javascript","js","python","py","php","java","c","cpp","rust","go","ruby","perl","r","scala","swift","kotlin","cs","csharp","html","css","json","xml","yaml","yml","dockerfile","docker"]).has(h)&&u.add(h),l&&l.length)try{l.indexOf(h)!==-1&&u.add(h)}catch{}}return{id:e.id,result:Array.from(u)}}const t=e&&e.id,{content:n,data:i}=cn(e&&e.md||"");await un().catch(()=>{});let r=Rt.parse(n);const a=[],s=new Map,c=o=>{try{return String(o||"").toLowerCase().trim().replace(/[^a-z0-9\-\s]+/g,"").replace(/\s+/g,"-")}catch{return"heading"}};return r=r.replace(/<h([1-6])([^>]*)>([\s\S]*?)<\/h\1>/g,(o,l,u,p)=>{const m=Number(l);let h=p.replace(/<[^>]+>/g,"").trim();try{h=Li(h)}catch{}let d=null;const g=(u||"").match(/\sid="([^"]+)"/);g&&(d=g[1]);const f=d||c(h)||"heading",y=(s.get(f)||0)+1;s.set(f,y);const k=y===1?f:f+"-"+y;a.push({level:m,text:h,id:k});const L={1:"is-size-3-mobile is-size-2-tablet is-size-1-desktop",2:"is-size-4-mobile is-size-3-tablet is-size-2-desktop",3:"is-size-5-mobile is-size-4-tablet is-size-3-desktop",4:"is-size-6-mobile is-size-5-tablet is-size-4-desktop",5:"is-size-6-mobile is-size-6-tablet is-size-5-desktop",6:"is-size-6-mobile is-size-6-tablet is-size-6-desktop"},R=m<=2?"has-text-weight-bold":m<=4?"has-text-weight-semibold":"has-text-weight-normal",I=(L[m]+" "+R).trim(),z=((u||"").replace(/\s*(id|class)="[^"]*"/g,"")+` id="${k}" class="${I}"`).trim();return`<h${m} ${z}>${p}</h${m}>`}),r=r.replace(/<img([^>]*)>/g,(o,l)=>/\bloading=/.test(l)?`<img${l}>`:/\bdata-want-lazy=/.test(l)?`<img${l}>`:`<img${l} loading="lazy">`),{id:t,result:{html:r,meta:i||{},toc:a}}}catch(t){return{id:e&&e.id,error:String(t)}}}const Tn={100:"💯",1234:"🔢",grinning:"😀",grimacing:"😬",grin:"😁",joy:"😂",rofl:"🤣",partying:"🥳",smiley:"😃",smile:"😄",sweat_smile:"😅",laughing:"😆",innocent:"😇",wink:"😉",blush:"😊",slightly_smiling_face:"🙂",upside_down_face:"🙃",relaxed:"☺️",yum:"😋",relieved:"😌",heart_eyes:"😍",smiling_face_with_three_hearts:"🥰",kissing_heart:"😘",kissing:"😗",kissing_smiling_eyes:"😙",kissing_closed_eyes:"😚",stuck_out_tongue_winking_eye:"😜",zany:"🤪",raised_eyebrow:"🤨",monocle:"🧐",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue:"😛",money_mouth_face:"🤑",nerd_face:"🤓",sunglasses:"😎",star_struck:"🤩",clown_face:"🤡",cowboy_hat_face:"🤠",hugs:"🤗",smirk:"😏",no_mouth:"😶",neutral_face:"😐",expressionless:"😑",unamused:"😒",roll_eyes:"🙄",thinking:"🤔",lying_face:"🤥",hand_over_mouth:"🤭",shushing:"🤫",symbols_over_mouth:"🤬",exploding_head:"🤯",flushed:"😳",disappointed:"😞",worried:"😟",angry:"😠",rage:"😡",pensive:"😔",confused:"😕",slightly_frowning_face:"🙁",frowning_face:"☹",persevere:"😣",confounded:"😖",tired_face:"😫",weary:"😩",pleading:"🥺",triumph:"😤",open_mouth:"😮",scream:"😱",fearful:"😨",cold_sweat:"😰",hushed:"😯",frowning:"😦",anguished:"😧",cry:"😢",disappointed_relieved:"😥",drooling_face:"🤤",sleepy:"😪",sweat:"😓",hot:"🥵",cold:"🥶",sob:"😭",dizzy_face:"😵",astonished:"😲",zipper_mouth_face:"🤐",nauseated_face:"🤢",sneezing_face:"🤧",vomiting:"🤮",mask:"😷",face_with_thermometer:"🤒",face_with_head_bandage:"🤕",woozy:"🥴",sleeping:"😴",zzz:"💤",poop:"💩",smiling_imp:"😈",imp:"👿",japanese_ogre:"👹",japanese_goblin:"👺",skull:"💀",ghost:"👻",alien:"👽",robot:"🤖",smiley_cat:"😺",smile_cat:"😸",joy_cat:"😹",heart_eyes_cat:"😻",smirk_cat:"😼",kissing_cat:"😽",scream_cat:"🙀",crying_cat_face:"😿",pouting_cat:"😾",palms_up:"🤲",raised_hands:"🙌",clap:"👏",wave:"👋",call_me_hand:"🤙","+1":"👍","-1":"👎",facepunch:"👊",fist:"✊",fist_left:"🤛",fist_right:"🤜",v:"✌",ok_hand:"👌",raised_hand:"✋",raised_back_of_hand:"🤚",open_hands:"👐",muscle:"💪",pray:"🙏",foot:"🦶",leg:"🦵",handshake:"🤝",point_up:"☝",point_up_2:"👆",point_down:"👇",point_left:"👈",point_right:"👉",fu:"🖕",raised_hand_with_fingers_splayed:"🖐",love_you:"🤟",metal:"🤘",crossed_fingers:"🤞",vulcan_salute:"🖖",writing_hand:"✍",selfie:"🤳",nail_care:"💅",lips:"👄",tooth:"🦷",tongue:"👅",ear:"👂",nose:"👃",eye:"👁",eyes:"👀",brain:"🧠",bust_in_silhouette:"👤",busts_in_silhouette:"👥",speaking_head:"🗣",baby:"👶",child:"🧒",boy:"👦",girl:"👧",adult:"🧑",man:"👨",woman:"👩",blonde_woman:"👱♀️",blonde_man:"👱",bearded_person:"🧔",older_adult:"🧓",older_man:"👴",older_woman:"👵",man_with_gua_pi_mao:"👲",woman_with_headscarf:"🧕",woman_with_turban:"👳♀️",man_with_turban:"👳",policewoman:"👮♀️",policeman:"👮",construction_worker_woman:"👷♀️",construction_worker_man:"👷",guardswoman:"💂♀️",guardsman:"💂",female_detective:"🕵️♀️",male_detective:"🕵",woman_health_worker:"👩⚕️",man_health_worker:"👨⚕️",woman_farmer:"👩🌾",man_farmer:"👨🌾",woman_cook:"👩🍳",man_cook:"👨🍳",woman_student:"👩🎓",man_student:"👨🎓",woman_singer:"👩🎤",man_singer:"👨🎤",woman_teacher:"👩🏫",man_teacher:"👨🏫",woman_factory_worker:"👩🏭",man_factory_worker:"👨🏭",woman_technologist:"👩💻",man_technologist:"👨💻",woman_office_worker:"👩💼",man_office_worker:"👨💼",woman_mechanic:"👩🔧",man_mechanic:"👨🔧",woman_scientist:"👩🔬",man_scientist:"👨🔬",woman_artist:"👩🎨",man_artist:"👨🎨",woman_firefighter:"👩🚒",man_firefighter:"👨🚒",woman_pilot:"👩✈️",man_pilot:"👨✈️",woman_astronaut:"👩🚀",man_astronaut:"👨🚀",woman_judge:"👩⚖️",man_judge:"👨⚖️",woman_superhero:"🦸♀️",man_superhero:"🦸♂️",woman_supervillain:"🦹♀️",man_supervillain:"🦹♂️",mrs_claus:"🤶",santa:"🎅",sorceress:"🧙♀️",wizard:"🧙♂️",woman_elf:"🧝♀️",man_elf:"🧝♂️",woman_vampire:"🧛♀️",man_vampire:"🧛♂️",woman_zombie:"🧟♀️",man_zombie:"🧟♂️",woman_genie:"🧞♀️",man_genie:"🧞♂️",mermaid:"🧜♀️",merman:"🧜♂️",woman_fairy:"🧚♀️",man_fairy:"🧚♂️",angel:"👼",pregnant_woman:"🤰",breastfeeding:"🤱",princess:"👸",prince:"🤴",bride_with_veil:"👰",man_in_tuxedo:"🤵",running_woman:"🏃♀️",running_man:"🏃",walking_woman:"🚶♀️",walking_man:"🚶",dancer:"💃",man_dancing:"🕺",dancing_women:"👯",dancing_men:"👯♂️",couple:"👫",two_men_holding_hands:"👬",two_women_holding_hands:"👭",bowing_woman:"🙇♀️",bowing_man:"🙇",man_facepalming:"🤦♂️",woman_facepalming:"🤦♀️",woman_shrugging:"🤷",man_shrugging:"🤷♂️",tipping_hand_woman:"💁",tipping_hand_man:"💁♂️",no_good_woman:"🙅",no_good_man:"🙅♂️",ok_woman:"🙆",ok_man:"🙆♂️",raising_hand_woman:"🙋",raising_hand_man:"🙋♂️",pouting_woman:"🙎",pouting_man:"🙎♂️",frowning_woman:"🙍",frowning_man:"🙍♂️",haircut_woman:"💇",haircut_man:"💇♂️",massage_woman:"💆",massage_man:"💆♂️",woman_in_steamy_room:"🧖♀️",man_in_steamy_room:"🧖♂️",couple_with_heart_woman_man:"💑",couple_with_heart_woman_woman:"👩❤️👩",couple_with_heart_man_man:"👨❤️👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩❤️💋👩",couplekiss_man_man:"👨❤️💋👨",family_man_woman_boy:"👪",family_man_woman_girl:"👨👩👧",family_man_woman_girl_boy:"👨👩👧👦",family_man_woman_boy_boy:"👨👩👦👦",family_man_woman_girl_girl:"👨👩👧👧",family_woman_woman_boy:"👩👩👦",family_woman_woman_girl:"👩👩👧",family_woman_woman_girl_boy:"👩👩👧👦",family_woman_woman_boy_boy:"👩👩👦👦",family_woman_woman_girl_girl:"👩👩👧👧",family_man_man_boy:"👨👨👦",family_man_man_girl:"👨👨👧",family_man_man_girl_boy:"👨👨👧👦",family_man_man_boy_boy:"👨👨👦👦",family_man_man_girl_girl:"👨👨👧👧",family_woman_boy:"👩👦",family_woman_girl:"👩👧",family_woman_girl_boy:"👩👧👦",family_woman_boy_boy:"👩👦👦",family_woman_girl_girl:"👩👧👧",family_man_boy:"👨👦",family_man_girl:"👨👧",family_man_girl_boy:"👨👧👦",family_man_boy_boy:"👨👦👦",family_man_girl_girl:"👨👧👧",yarn:"🧶",thread:"🧵",coat:"🧥",labcoat:"🥼",womans_clothes:"👚",tshirt:"👕",jeans:"👖",necktie:"👔",dress:"👗",bikini:"👙",kimono:"👘",lipstick:"💄",kiss:"💋",footprints:"👣",flat_shoe:"🥿",high_heel:"👠",sandal:"👡",boot:"👢",mans_shoe:"👞",athletic_shoe:"👟",hiking_boot:"🥾",socks:"🧦",gloves:"🧤",scarf:"🧣",womans_hat:"👒",tophat:"🎩",billed_hat:"🧢",rescue_worker_helmet:"⛑",mortar_board:"🎓",crown:"👑",school_satchel:"🎒",luggage:"🧳",pouch:"👝",purse:"👛",handbag:"👜",briefcase:"💼",eyeglasses:"👓",dark_sunglasses:"🕶",goggles:"🥽",ring:"💍",closed_umbrella:"🌂",dog:"🐶",cat:"🐱",mouse:"🐭",hamster:"🐹",rabbit:"🐰",fox_face:"🦊",bear:"🐻",panda_face:"🐼",koala:"🐨",tiger:"🐯",lion:"🦁",cow:"🐮",pig:"🐷",pig_nose:"🐽",frog:"🐸",squid:"🦑",octopus:"🐙",shrimp:"🦐",monkey_face:"🐵",gorilla:"🦍",see_no_evil:"🙈",hear_no_evil:"🙉",speak_no_evil:"🙊",monkey:"🐒",chicken:"🐔",penguin:"🐧",bird:"🐦",baby_chick:"🐤",hatching_chick:"🐣",hatched_chick:"🐥",duck:"🦆",eagle:"🦅",owl:"🦉",bat:"🦇",wolf:"🐺",boar:"🐗",horse:"🐴",unicorn:"🦄",honeybee:"🐝",bug:"🐛",butterfly:"🦋",snail:"🐌",beetle:"🐞",ant:"🐜",grasshopper:"🦗",spider:"🕷",scorpion:"🦂",crab:"🦀",snake:"🐍",lizard:"🦎","t-rex":"🦖",sauropod:"🦕",turtle:"🐢",tropical_fish:"🐠",fish:"🐟",blowfish:"🐡",dolphin:"🐬",shark:"🦈",whale:"🐳",whale2:"🐋",crocodile:"🐊",leopard:"🐆",zebra:"🦓",tiger2:"🐅",water_buffalo:"🐃",ox:"🐂",cow2:"🐄",deer:"🦌",dromedary_camel:"🐪",camel:"🐫",giraffe:"🦒",elephant:"🐘",rhinoceros:"🦏",goat:"🐐",ram:"🐏",sheep:"🐑",racehorse:"🐎",pig2:"🐖",rat:"🐀",mouse2:"🐁",rooster:"🐓",turkey:"🦃",dove:"🕊",dog2:"🐕",poodle:"🐩",cat2:"🐈",rabbit2:"🐇",chipmunk:"🐿",hedgehog:"🦔",raccoon:"🦝",llama:"🦙",hippopotamus:"🦛",kangaroo:"🦘",badger:"🦡",swan:"🦢",peacock:"🦚",parrot:"🦜",lobster:"🦞",mosquito:"🦟",paw_prints:"🐾",dragon:"🐉",dragon_face:"🐲",cactus:"🌵",christmas_tree:"🎄",evergreen_tree:"🌲",deciduous_tree:"🌳",palm_tree:"🌴",seedling:"🌱",herb:"🌿",shamrock:"☘",four_leaf_clover:"🍀",bamboo:"🎍",tanabata_tree:"🎋",leaves:"🍃",fallen_leaf:"🍂",maple_leaf:"🍁",ear_of_rice:"🌾",hibiscus:"🌺",sunflower:"🌻",rose:"🌹",wilted_flower:"🥀",tulip:"🌷",blossom:"🌼",cherry_blossom:"🌸",bouquet:"💐",mushroom:"🍄",chestnut:"🌰",jack_o_lantern:"🎃",shell:"🐚",spider_web:"🕸",earth_americas:"🌎",earth_africa:"🌍",earth_asia:"🌏",full_moon:"🌕",waning_gibbous_moon:"🌖",last_quarter_moon:"🌗",waning_crescent_moon:"🌘",new_moon:"🌑",waxing_crescent_moon:"🌒",first_quarter_moon:"🌓",waxing_gibbous_moon:"🌔",new_moon_with_face:"🌚",full_moon_with_face:"🌝",first_quarter_moon_with_face:"🌛",last_quarter_moon_with_face:"🌜",sun_with_face:"🌞",crescent_moon:"🌙",star:"⭐",star2:"🌟",dizzy:"💫",sparkles:"✨",comet:"☄",sunny:"☀️",sun_behind_small_cloud:"🌤",partly_sunny:"⛅",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",cloud:"☁️",cloud_with_rain:"🌧",cloud_with_lightning_and_rain:"⛈",cloud_with_lightning:"🌩",zap:"⚡",fire:"🔥",boom:"💥",snowflake:"❄️",cloud_with_snow:"🌨",snowman:"⛄",snowman_with_snow:"☃",wind_face:"🌬",dash:"💨",tornado:"🌪",fog:"🌫",open_umbrella:"☂",umbrella:"☔",droplet:"💧",sweat_drops:"💦",ocean:"🌊",green_apple:"🍏",apple:"🍎",pear:"🍐",tangerine:"🍊",lemon:"🍋",banana:"🍌",watermelon:"🍉",grapes:"🍇",strawberry:"🍓",melon:"🍈",cherries:"🍒",peach:"🍑",pineapple:"🍍",coconut:"🥥",kiwi_fruit:"🥝",mango:"🥭",avocado:"🥑",broccoli:"🥦",tomato:"🍅",eggplant:"🍆",cucumber:"🥒",carrot:"🥕",hot_pepper:"🌶",potato:"🥔",corn:"🌽",leafy_greens:"🥬",sweet_potato:"🍠",peanuts:"🥜",honey_pot:"🍯",croissant:"🥐",bread:"🍞",baguette_bread:"🥖",bagel:"🥯",pretzel:"🥨",cheese:"🧀",egg:"🥚",bacon:"🥓",steak:"🥩",pancakes:"🥞",poultry_leg:"🍗",meat_on_bone:"🍖",bone:"🦴",fried_shrimp:"🍤",fried_egg:"🍳",hamburger:"🍔",fries:"🍟",stuffed_flatbread:"🥙",hotdog:"🌭",pizza:"🍕",sandwich:"🥪",canned_food:"🥫",spaghetti:"🍝",taco:"🌮",burrito:"🌯",green_salad:"🥗",shallow_pan_of_food:"🥘",ramen:"🍜",stew:"🍲",fish_cake:"🍥",fortune_cookie:"🥠",sushi:"🍣",bento:"🍱",curry:"🍛",rice_ball:"🍙",rice:"🍚",rice_cracker:"🍘",oden:"🍢",dango:"🍡",shaved_ice:"🍧",ice_cream:"🍨",icecream:"🍦",pie:"🥧",cake:"🍰",cupcake:"🧁",moon_cake:"🥮",birthday:"🎂",custard:"🍮",candy:"🍬",lollipop:"🍭",chocolate_bar:"🍫",popcorn:"🍿",dumpling:"🥟",doughnut:"🍩",cookie:"🍪",milk_glass:"🥛",beer:"🍺",beers:"🍻",clinking_glasses:"🥂",wine_glass:"🍷",tumbler_glass:"🥃",cocktail:"🍸",tropical_drink:"🍹",champagne:"🍾",sake:"🍶",tea:"🍵",cup_with_straw:"🥤",coffee:"☕",baby_bottle:"🍼",salt:"🧂",spoon:"🥄",fork_and_knife:"🍴",plate_with_cutlery:"🍽",bowl_with_spoon:"🥣",takeout_box:"🥡",chopsticks:"🥢",soccer:"⚽",basketball:"🏀",football:"🏈",baseball:"⚾",softball:"🥎",tennis:"🎾",volleyball:"🏐",rugby_football:"🏉",flying_disc:"🥏","8ball":"🎱",golf:"⛳",golfing_woman:"🏌️♀️",golfing_man:"🏌",ping_pong:"🏓",badminton:"🏸",goal_net:"🥅",ice_hockey:"🏒",field_hockey:"🏑",lacrosse:"🥍",cricket:"🏏",ski:"🎿",skier:"⛷",snowboarder:"🏂",person_fencing:"🤺",women_wrestling:"🤼♀️",men_wrestling:"🤼♂️",woman_cartwheeling:"🤸♀️",man_cartwheeling:"🤸♂️",woman_playing_handball:"🤾♀️",man_playing_handball:"🤾♂️",ice_skate:"⛸",curling_stone:"🥌",skateboard:"🛹",sled:"🛷",bow_and_arrow:"🏹",fishing_pole_and_fish:"🎣",boxing_glove:"🥊",martial_arts_uniform:"🥋",rowing_woman:"🚣♀️",rowing_man:"🚣",climbing_woman:"🧗♀️",climbing_man:"🧗♂️",swimming_woman:"🏊♀️",swimming_man:"🏊",woman_playing_water_polo:"🤽♀️",man_playing_water_polo:"🤽♂️",woman_in_lotus_position:"🧘♀️",man_in_lotus_position:"🧘♂️",surfing_woman:"🏄♀️",surfing_man:"🏄",bath:"🛀",basketball_woman:"⛹️♀️",basketball_man:"⛹",weight_lifting_woman:"🏋️♀️",weight_lifting_man:"🏋",biking_woman:"🚴♀️",biking_man:"🚴",mountain_biking_woman:"🚵♀️",mountain_biking_man:"🚵",horse_racing:"🏇",business_suit_levitating:"🕴",trophy:"🏆",running_shirt_with_sash:"🎽",medal_sports:"🏅",medal_military:"🎖","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉",reminder_ribbon:"🎗",rosette:"🏵",ticket:"🎫",tickets:"🎟",performing_arts:"🎭",art:"🎨",circus_tent:"🎪",woman_juggling:"🤹♀️",man_juggling:"🤹♂️",microphone:"🎤",headphones:"🎧",musical_score:"🎼",musical_keyboard:"🎹",drum:"🥁",saxophone:"🎷",trumpet:"🎺",guitar:"🎸",violin:"🎻",clapper:"🎬",video_game:"🎮",space_invader:"👾",dart:"🎯",game_die:"🎲",chess_pawn:"♟",slot_machine:"🎰",jigsaw:"🧩",bowling:"🎳",red_car:"🚗",taxi:"🚕",blue_car:"🚙",bus:"🚌",trolleybus:"🚎",racing_car:"🏎",police_car:"🚓",ambulance:"🚑",fire_engine:"🚒",minibus:"🚐",truck:"🚚",articulated_lorry:"🚛",tractor:"🚜",kick_scooter:"🛴",motorcycle:"🏍",bike:"🚲",motor_scooter:"🛵",rotating_light:"🚨",oncoming_police_car:"🚔",oncoming_bus:"🚍",oncoming_automobile:"🚘",oncoming_taxi:"🚖",aerial_tramway:"🚡",mountain_cableway:"🚠",suspension_railway:"🚟",railway_car:"🚃",train:"🚋",monorail:"🚝",bullettrain_side:"🚄",bullettrain_front:"🚅",light_rail:"🚈",mountain_railway:"🚞",steam_locomotive:"🚂",train2:"🚆",metro:"🚇",tram:"🚊",station:"🚉",flying_saucer:"🛸",helicopter:"🚁",small_airplane:"🛩",airplane:"✈️",flight_departure:"🛫",flight_arrival:"🛬",sailboat:"⛵",motor_boat:"🛥",speedboat:"🚤",ferry:"⛴",passenger_ship:"🛳",rocket:"🚀",artificial_satellite:"🛰",seat:"💺",canoe:"🛶",anchor:"⚓",construction:"🚧",fuelpump:"⛽",busstop:"🚏",vertical_traffic_light:"🚦",traffic_light:"🚥",checkered_flag:"🏁",ship:"🚢",ferris_wheel:"🎡",roller_coaster:"🎢",carousel_horse:"🎠",building_construction:"🏗",foggy:"🌁",tokyo_tower:"🗼",factory:"🏭",fountain:"⛲",rice_scene:"🎑",mountain:"⛰",mountain_snow:"🏔",mount_fuji:"🗻",volcano:"🌋",japan:"🗾",camping:"🏕",tent:"⛺",national_park:"🏞",motorway:"🛣",railway_track:"🛤",sunrise:"🌅",sunrise_over_mountains:"🌄",desert:"🏜",beach_umbrella:"🏖",desert_island:"🏝",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",night_with_stars:"🌃",bridge_at_night:"🌉",milky_way:"🌌",stars:"🌠",sparkler:"🎇",fireworks:"🎆",rainbow:"🌈",houses:"🏘",european_castle:"🏰",japanese_castle:"🏯",stadium:"🏟",statue_of_liberty:"🗽",house:"🏠",house_with_garden:"🏡",derelict_house:"🏚",office:"🏢",department_store:"🏬",post_office:"🏣",european_post_office:"🏤",hospital:"🏥",bank:"🏦",hotel:"🏨",convenience_store:"🏪",school:"🏫",love_hotel:"🏩",wedding:"💒",classical_building:"🏛",church:"⛪",mosque:"🕌",synagogue:"🕍",kaaba:"🕋",shinto_shrine:"⛩",watch:"⌚",iphone:"📱",calling:"📲",computer:"💻",keyboard:"⌨",desktop_computer:"🖥",printer:"🖨",computer_mouse:"🖱",trackball:"🖲",joystick:"🕹",clamp:"🗜",minidisc:"💽",floppy_disk:"💾",cd:"💿",dvd:"📀",vhs:"📼",camera:"📷",camera_flash:"📸",video_camera:"📹",movie_camera:"🎥",film_projector:"📽",film_strip:"🎞",telephone_receiver:"📞",phone:"☎️",pager:"📟",fax:"📠",tv:"📺",radio:"📻",studio_microphone:"🎙",level_slider:"🎚",control_knobs:"🎛",compass:"🧭",stopwatch:"⏱",timer_clock:"⏲",alarm_clock:"⏰",mantelpiece_clock:"🕰",hourglass_flowing_sand:"⏳",hourglass:"⌛",satellite:"📡",battery:"🔋",electric_plug:"🔌",bulb:"💡",flashlight:"🔦",candle:"🕯",fire_extinguisher:"🧯",wastebasket:"🗑",oil_drum:"🛢",money_with_wings:"💸",dollar:"💵",yen:"💴",euro:"💶",pound:"💷",moneybag:"💰",credit_card:"💳",gem:"💎",balance_scale:"⚖",toolbox:"🧰",wrench:"🔧",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",pick:"⛏",nut_and_bolt:"🔩",gear:"⚙",brick:"🧱",chains:"⛓",magnet:"🧲",gun:"🔫",bomb:"💣",firecracker:"🧨",hocho:"🔪",dagger:"🗡",crossed_swords:"⚔",shield:"🛡",smoking:"🚬",skull_and_crossbones:"☠",coffin:"⚰",funeral_urn:"⚱",amphora:"🏺",crystal_ball:"🔮",prayer_beads:"📿",nazar_amulet:"🧿",barber:"💈",alembic:"⚗",telescope:"🔭",microscope:"🔬",hole:"🕳",pill:"💊",syringe:"💉",dna:"🧬",microbe:"🦠",petri_dish:"🧫",test_tube:"🧪",thermometer:"🌡",broom:"🧹",basket:"🧺",toilet_paper:"🧻",label:"🏷",bookmark:"🔖",toilet:"🚽",shower:"🚿",bathtub:"🛁",soap:"🧼",sponge:"🧽",lotion_bottle:"🧴",key:"🔑",old_key:"🗝",couch_and_lamp:"🛋",sleeping_bed:"🛌",bed:"🛏",door:"🚪",bellhop_bell:"🛎",teddy_bear:"🧸",framed_picture:"🖼",world_map:"🗺",parasol_on_ground:"⛱",moyai:"🗿",shopping:"🛍",shopping_cart:"🛒",balloon:"🎈",flags:"🎏",ribbon:"🎀",gift:"🎁",confetti_ball:"🎊",tada:"🎉",dolls:"🎎",wind_chime:"🎐",crossed_flags:"🎌",izakaya_lantern:"🏮",red_envelope:"🧧",email:"✉️",envelope_with_arrow:"📩",incoming_envelope:"📨","e-mail":"📧",love_letter:"💌",postbox:"📮",mailbox_closed:"📪",mailbox:"📫",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",package:"📦",postal_horn:"📯",inbox_tray:"📥",outbox_tray:"📤",scroll:"📜",page_with_curl:"📃",bookmark_tabs:"📑",receipt:"🧾",bar_chart:"📊",chart_with_upwards_trend:"📈",chart_with_downwards_trend:"📉",page_facing_up:"📄",date:"📅",calendar:"📆",spiral_calendar:"🗓",card_index:"📇",card_file_box:"🗃",ballot_box:"🗳",file_cabinet:"🗄",clipboard:"📋",spiral_notepad:"🗒",file_folder:"📁",open_file_folder:"📂",card_index_dividers:"🗂",newspaper_roll:"🗞",newspaper:"📰",notebook:"📓",closed_book:"📕",green_book:"📗",blue_book:"📘",orange_book:"📙",notebook_with_decorative_cover:"📔",ledger:"📒",books:"📚",open_book:"📖",safety_pin:"🧷",link:"🔗",paperclip:"📎",paperclips:"🖇",scissors:"✂️",triangular_ruler:"📐",straight_ruler:"📏",abacus:"🧮",pushpin:"📌",round_pushpin:"📍",triangular_flag_on_post:"🚩",white_flag:"🏳",black_flag:"🏴",rainbow_flag:"🏳️🌈",closed_lock_with_key:"🔐",lock:"🔒",unlock:"🔓",lock_with_ink_pen:"🔏",pen:"🖊",fountain_pen:"🖋",black_nib:"✒️",memo:"📝",pencil2:"✏️",crayon:"🖍",paintbrush:"🖌",mag:"🔍",mag_right:"🔎",heart:"❤️",orange_heart:"🧡",yellow_heart:"💛",green_heart:"💚",blue_heart:"💙",purple_heart:"💜",black_heart:"🖤",broken_heart:"💔",heavy_heart_exclamation:"❣",two_hearts:"💕",revolving_hearts:"💞",heartbeat:"💓",heartpulse:"💗",sparkling_heart:"💖",cupid:"💘",gift_heart:"💝",heart_decoration:"💟",peace_symbol:"☮",latin_cross:"✝",star_and_crescent:"☪",om:"🕉",wheel_of_dharma:"☸",star_of_david:"✡",six_pointed_star:"🔯",menorah:"🕎",yin_yang:"☯",orthodox_cross:"☦",place_of_worship:"🛐",ophiuchus:"⛎",aries:"♈",taurus:"♉",gemini:"♊",cancer:"♋",leo:"♌",virgo:"♍",libra:"♎",scorpius:"♏",sagittarius:"♐",capricorn:"♑",aquarius:"♒",pisces:"♓",id:"🆔",atom_symbol:"⚛",u7a7a:"🈳",u5272:"🈹",radioactive:"☢",biohazard:"☣",mobile_phone_off:"📴",vibration_mode:"📳",u6709:"🈶",u7121:"🈚",u7533:"🈸",u55b6:"🈺",u6708:"🈷️",eight_pointed_black_star:"✴️",vs:"🆚",accept:"🉑",white_flower:"💮",ideograph_advantage:"🉐",secret:"㊙️",congratulations:"㊗️",u5408:"🈴",u6e80:"🈵",u7981:"🈲",a:"🅰️",b:"🅱️",ab:"🆎",cl:"🆑",o2:"🅾️",sos:"🆘",no_entry:"⛔",name_badge:"📛",no_entry_sign:"🚫",x:"❌",o:"⭕",stop_sign:"🛑",anger:"💢",hotsprings:"♨️",no_pedestrians:"🚷",do_not_litter:"🚯",no_bicycles:"🚳","non-potable_water":"🚱",underage:"🔞",no_mobile_phones:"📵",exclamation:"❗",grey_exclamation:"❕",question:"❓",grey_question:"❔",bangbang:"‼️",interrobang:"⁉️",low_brightness:"🔅",high_brightness:"🔆",trident:"🔱",fleur_de_lis:"⚜",part_alternation_mark:"〽️",warning:"⚠️",children_crossing:"🚸",beginner:"🔰",recycle:"♻️",u6307:"🈯",chart:"💹",sparkle:"❇️",eight_spoked_asterisk:"✳️",negative_squared_cross_mark:"❎",white_check_mark:"✅",diamond_shape_with_a_dot_inside:"💠",cyclone:"🌀",loop:"➿",globe_with_meridians:"🌐",m:"Ⓜ️",atm:"🏧",sa:"🈂️",passport_control:"🛂",customs:"🛃",baggage_claim:"🛄",left_luggage:"🛅",wheelchair:"♿",no_smoking:"🚭",wc:"🚾",parking:"🅿️",potable_water:"🚰",mens:"🚹",womens:"🚺",baby_symbol:"🚼",restroom:"🚻",put_litter_in_its_place:"🚮",cinema:"🎦",signal_strength:"📶",koko:"🈁",ng:"🆖",ok:"🆗",up:"🆙",cool:"🆒",new:"🆕",free:"🆓",zero:"0️⃣",one:"1️⃣",two:"2️⃣",three:"3️⃣",four:"4️⃣",five:"5️⃣",six:"6️⃣",seven:"7️⃣",eight:"8️⃣",nine:"9️⃣",keycap_ten:"🔟",asterisk:"*⃣",eject_button:"⏏️",arrow_forward:"▶️",pause_button:"⏸",next_track_button:"⏭",stop_button:"⏹",record_button:"⏺",play_or_pause_button:"⏯",previous_track_button:"⏮",fast_forward:"⏩",rewind:"⏪",twisted_rightwards_arrows:"🔀",repeat:"🔁",repeat_one:"🔂",arrow_backward:"◀️",arrow_up_small:"🔼",arrow_down_small:"🔽",arrow_double_up:"⏫",arrow_double_down:"⏬",arrow_right:"➡️",arrow_left:"⬅️",arrow_up:"⬆️",arrow_down:"⬇️",arrow_upper_right:"↗️",arrow_lower_right:"↘️",arrow_lower_left:"↙️",arrow_upper_left:"↖️",arrow_up_down:"↕️",left_right_arrow:"↔️",arrows_counterclockwise:"🔄",arrow_right_hook:"↪️",leftwards_arrow_with_hook:"↩️",arrow_heading_up:"⤴️",arrow_heading_down:"⤵️",hash:"#️⃣",information_source:"ℹ️",abc:"🔤",abcd:"🔡",capital_abcd:"🔠",symbols:"🔣",musical_note:"🎵",notes:"🎶",wavy_dash:"〰️",curly_loop:"➰",heavy_check_mark:"✔️",arrows_clockwise:"🔃",heavy_plus_sign:"➕",heavy_minus_sign:"➖",heavy_division_sign:"➗",heavy_multiplication_x:"✖️",infinity:"♾",heavy_dollar_sign:"💲",currency_exchange:"💱",copyright:"©️",registered:"®️",tm:"™️",end:"🔚",back:"🔙",on:"🔛",top:"🔝",soon:"🔜",ballot_box_with_check:"☑️",radio_button:"🔘",white_circle:"⚪",black_circle:"⚫",red_circle:"🔴",large_blue_circle:"🔵",small_orange_diamond:"🔸",small_blue_diamond:"🔹",large_orange_diamond:"🔶",large_blue_diamond:"🔷",small_red_triangle:"🔺",black_small_square:"▪️",white_small_square:"▫️",black_large_square:"⬛",white_large_square:"⬜",small_red_triangle_down:"🔻",black_medium_square:"◼️",white_medium_square:"◻️",black_medium_small_square:"◾",white_medium_small_square:"◽",black_square_button:"🔲",white_square_button:"🔳",speaker:"🔈",sound:"🔉",loud_sound:"🔊",mute:"🔇",mega:"📣",loudspeaker:"📢",bell:"🔔",no_bell:"🔕",black_joker:"🃏",mahjong:"🀄",spades:"♠️",clubs:"♣️",hearts:"♥️",diamonds:"♦️",flower_playing_cards:"🎴",thought_balloon:"💭",right_anger_bubble:"🗯",speech_balloon:"💬",left_speech_bubble:"🗨",clock1:"🕐",clock2:"🕑",clock3:"🕒",clock4:"🕓",clock5:"🕔",clock6:"🕕",clock7:"🕖",clock8:"🕗",clock9:"🕘",clock10:"🕙",clock11:"🕚",clock12:"🕛",clock130:"🕜",clock230:"🕝",clock330:"🕞",clock430:"🕟",clock530:"🕠",clock630:"🕡",clock730:"🕢",clock830:"🕣",clock930:"🕤",clock1030:"🕥",clock1130:"🕦",clock1230:"🕧",afghanistan:"🇦🇫",aland_islands:"🇦🇽",albania:"🇦🇱",algeria:"🇩🇿",american_samoa:"🇦🇸",andorra:"🇦🇩",angola:"🇦🇴",anguilla:"🇦🇮",antarctica:"🇦🇶",antigua_barbuda:"🇦🇬",argentina:"🇦🇷",armenia:"🇦🇲",aruba:"🇦🇼",australia:"🇦🇺",austria:"🇦🇹",azerbaijan:"🇦🇿",bahamas:"🇧🇸",bahrain:"🇧🇭",bangladesh:"🇧🇩",barbados:"🇧🇧",belarus:"🇧🇾",belgium:"🇧🇪",belize:"🇧🇿",benin:"🇧🇯",bermuda:"🇧🇲",bhutan:"🇧🇹",bolivia:"🇧🇴",caribbean_netherlands:"🇧🇶",bosnia_herzegovina:"🇧🇦",botswana:"🇧🇼",brazil:"🇧🇷",british_indian_ocean_territory:"🇮🇴",british_virgin_islands:"🇻🇬",brunei:"🇧🇳",bulgaria:"🇧🇬",burkina_faso:"🇧🇫",burundi:"🇧🇮",cape_verde:"🇨🇻",cambodia:"🇰🇭",cameroon:"🇨🇲",canada:"🇨🇦",canary_islands:"🇮🇨",cayman_islands:"🇰🇾",central_african_republic:"🇨🇫",chad:"🇹🇩",chile:"🇨🇱",cn:"🇨🇳",christmas_island:"🇨🇽",cocos_islands:"🇨🇨",colombia:"🇨🇴",comoros:"🇰🇲",congo_brazzaville:"🇨🇬",congo_kinshasa:"🇨🇩",cook_islands:"🇨🇰",costa_rica:"🇨🇷",croatia:"🇭🇷",cuba:"🇨🇺",curacao:"🇨🇼",cyprus:"🇨🇾",czech_republic:"🇨🇿",denmark:"🇩🇰",djibouti:"🇩🇯",dominica:"🇩🇲",dominican_republic:"🇩🇴",ecuador:"🇪🇨",egypt:"🇪🇬",el_salvador:"🇸🇻",equatorial_guinea:"🇬🇶",eritrea:"🇪🇷",estonia:"🇪🇪",ethiopia:"🇪🇹",eu:"🇪🇺",falkland_islands:"🇫🇰",faroe_islands:"🇫🇴",fiji:"🇫🇯",finland:"🇫🇮",fr:"🇫🇷",french_guiana:"🇬🇫",french_polynesia:"🇵🇫",french_southern_territories:"🇹🇫",gabon:"🇬🇦",gambia:"🇬🇲",georgia:"🇬🇪",de:"🇩🇪",ghana:"🇬🇭",gibraltar:"🇬🇮",greece:"🇬🇷",greenland:"🇬🇱",grenada:"🇬🇩",guadeloupe:"🇬🇵",guam:"🇬🇺",guatemala:"🇬🇹",guernsey:"🇬🇬",guinea:"🇬🇳",guinea_bissau:"🇬🇼",guyana:"🇬🇾",haiti:"🇭🇹",honduras:"🇭🇳",hong_kong:"🇭🇰",hungary:"🇭🇺",iceland:"🇮🇸",india:"🇮🇳",indonesia:"🇮🇩",iran:"🇮🇷",iraq:"🇮🇶",ireland:"🇮🇪",isle_of_man:"🇮🇲",israel:"🇮🇱",it:"🇮🇹",cote_divoire:"🇨🇮",jamaica:"🇯🇲",jp:"🇯🇵",jersey:"🇯🇪",jordan:"🇯🇴",kazakhstan:"🇰🇿",kenya:"🇰🇪",kiribati:"🇰🇮",kosovo:"🇽🇰",kuwait:"🇰🇼",kyrgyzstan:"🇰🇬",laos:"🇱🇦",latvia:"🇱🇻",lebanon:"🇱🇧",lesotho:"🇱🇸",liberia:"🇱🇷",libya:"🇱🇾",liechtenstein:"🇱🇮",lithuania:"🇱🇹",luxembourg:"🇱🇺",macau:"🇲🇴",macedonia:"🇲🇰",madagascar:"🇲🇬",malawi:"🇲🇼",malaysia:"🇲🇾",maldives:"🇲🇻",mali:"🇲🇱",malta:"🇲🇹",marshall_islands:"🇲🇭",martinique:"🇲🇶",mauritania:"🇲🇷",mauritius:"🇲🇺",mayotte:"🇾🇹",mexico:"🇲🇽",micronesia:"🇫🇲",moldova:"🇲🇩",monaco:"🇲🇨",mongolia:"🇲🇳",montenegro:"🇲🇪",montserrat:"🇲🇸",morocco:"🇲🇦",mozambique:"🇲🇿",myanmar:"🇲🇲",namibia:"🇳🇦",nauru:"🇳🇷",nepal:"🇳🇵",netherlands:"🇳🇱",new_caledonia:"🇳🇨",new_zealand:"🇳🇿",nicaragua:"🇳🇮",niger:"🇳🇪",nigeria:"🇳🇬",niue:"🇳🇺",norfolk_island:"🇳🇫",northern_mariana_islands:"🇲🇵",north_korea:"🇰🇵",norway:"🇳🇴",oman:"🇴🇲",pakistan:"🇵🇰",palau:"🇵🇼",palestinian_territories:"🇵🇸",panama:"🇵🇦",papua_new_guinea:"🇵🇬",paraguay:"🇵🇾",peru:"🇵🇪",philippines:"🇵🇭",pitcairn_islands:"🇵🇳",poland:"🇵🇱",portugal:"🇵🇹",puerto_rico:"🇵🇷",qatar:"🇶🇦",reunion:"🇷🇪",romania:"🇷🇴",ru:"🇷🇺",rwanda:"🇷🇼",st_barthelemy:"🇧🇱",st_helena:"🇸🇭",st_kitts_nevis:"🇰🇳",st_lucia:"🇱🇨",st_pierre_miquelon:"🇵🇲",st_vincent_grenadines:"🇻🇨",samoa:"🇼🇸",san_marino:"🇸🇲",sao_tome_principe:"🇸🇹",saudi_arabia:"🇸🇦",senegal:"🇸🇳",serbia:"🇷🇸",seychelles:"🇸🇨",sierra_leone:"🇸🇱",singapore:"🇸🇬",sint_maarten:"🇸🇽",slovakia:"🇸🇰",slovenia:"🇸🇮",solomon_islands:"🇸🇧",somalia:"🇸🇴",south_africa:"🇿🇦",south_georgia_south_sandwich_islands:"🇬🇸",kr:"🇰🇷",south_sudan:"🇸🇸",es:"🇪🇸",sri_lanka:"🇱🇰",sudan:"🇸🇩",suriname:"🇸🇷",swaziland:"🇸🇿",sweden:"🇸🇪",switzerland:"🇨🇭",syria:"🇸🇾",taiwan:"🇹🇼",tajikistan:"🇹🇯",tanzania:"🇹🇿",thailand:"🇹🇭",timor_leste:"🇹🇱",togo:"🇹🇬",tokelau:"🇹🇰",tonga:"🇹🇴",trinidad_tobago:"🇹🇹",tunisia:"🇹🇳",tr:"🇹🇷",turkmenistan:"🇹🇲",turks_caicos_islands:"🇹🇨",tuvalu:"🇹🇻",uganda:"🇺🇬",ukraine:"🇺🇦",united_arab_emirates:"🇦🇪",uk:"🇬🇧",england:"🏴",scotland:"🏴",wales:"🏴",us:"🇺🇸",us_virgin_islands:"🇻🇮",uruguay:"🇺🇾",uzbekistan:"🇺🇿",vanuatu:"🇻🇺",vatican_city:"🇻🇦",venezuela:"🇻🇪",vietnam:"🇻🇳",wallis_futuna:"🇼🇫",western_sahara:"🇪🇭",yemen:"🇾🇪",zambia:"🇿🇲",zimbabwe:"🇿🇼",united_nations:"🇺🇳",pirate_flag:"🏴☠️"},Ys=typeof navigator<"u"&&navigator.hardwareConcurrency?Math.max(1,Math.floor(navigator.hardwareConcurrency/2)):2;function Vs(){if(typeof Worker<"u")try{return new Qs}catch{}const e={message:[],error:[]};return{addEventListener(n,i){e[n]||(e[n]=[]),e[n].push(i)},removeEventListener(n,i){if(!e[n])return;const r=e[n].indexOf(i);r!==-1&&e[n].splice(r,1)},postMessage(n){setTimeout(async()=>{try{const r={data:await Ks(n)}(e.message||[]).forEach(a=>a(r))}catch{const r={data:{id:n&&n.id}}(e.message||[]).forEach(a=>a(r))}},0)},terminate(){Object.keys(e).forEach(n=>e[n].length=0)}}}const Ti=Vr(()=>Vs(),"markdown",Ys),Or=typeof DOMParser<"u"?new DOMParser:null,ut=()=>Ti.get(),rr=e=>Ti.send(e,3e3),Qe=[];function Hn(e){if(e&&(typeof e=="object"||typeof e=="function")){Qe.push(e);try{se.use(e)}catch(t){console.warn("[markdown] failed to apply plugin",t)}}}function Js(e){Qe.length=0,Array.isArray(e)&&Qe.push(...e.filter(t=>t&&typeof t=="object"));try{Qe.forEach(t=>se.use(t))}catch(t){console.warn("[markdown] failed to apply markdown extensions",t)}}async function hn(e){if(Qe&&Qe.length){let{content:i,data:r}=cn(e||"");try{i=String(i||"").replace(/:([^:\s]+):/g,(s,c)=>Tn[c]||s)}catch{}se.setOptions({gfm:!0,mangle:!1,headerIds:!1,headerPrefix:""});try{Qe.forEach(s=>se.use(s))}catch(s){console.warn("[markdown] apply plugins failed",s)}const a=se.parse(i);try{const s=Or||(typeof DOMParser<"u"?new DOMParser:null);if(s){const c=s.parseFromString(a,"text/html"),o=c.querySelectorAll("h1,h2,h3,h4,h5,h6"),l=[],u=new Set,p=h=>{try{return String(h||"").toLowerCase().trim().replace(/[^a-z0-9\-\s]+/g,"").replace(/\s+/g,"-")}catch{return"heading"}},m=h=>{const d={1:"is-size-3-mobile is-size-2-tablet is-size-1-desktop",2:"is-size-4-mobile is-size-3-tablet is-size-2-desktop",3:"is-size-5-mobile is-size-4-tablet is-size-3-desktop",4:"is-size-6-mobile is-size-5-tablet is-size-4-desktop",5:"is-size-6-mobile is-size-6-tablet is-size-5-desktop",6:"is-size-6-mobile is-size-6-tablet is-size-6-desktop"},g=h<=2?"has-text-weight-bold":h<=4?"has-text-weight-semibold":"has-text-weight-normal";return(d[h]+" "+g).trim()};o.forEach(h=>{try{const d=Number(h.tagName.substring(1)),g=(h.textContent||"").trim();let f=p(g)||"heading",w=f,y=2;for(;u.has(w);)w=f+"-"+y,y+=1;u.add(w),h.id=w,h.className=m(d),l.push({level:d,text:g,id:w})}catch{}});try{c.querySelectorAll("img").forEach(h=>{try{const d=h.getAttribute&&h.getAttribute("loading"),g=h.getAttribute&&h.getAttribute("data-want-lazy");!d&&!g&&h.setAttribute&&h.setAttribute("loading","lazy")}catch{}})}catch{}try{c.querySelectorAll("pre code, code[class]").forEach(h=>{try{const d=h.getAttribute&&h.getAttribute("class")||h.className||"",g=String(d||"").replace(/\blanguage-undefined\b|\blang-undefined\b/g,"").trim();if(g)try{h.setAttribute&&h.setAttribute("class",g)}catch{h.className=g}else try{h.removeAttribute&&h.removeAttribute("class")}catch{h.className=""}}catch{}})}catch{}return{html:c.body.innerHTML,meta:r||{},toc:l}}}catch{}return{html:a,meta:r||{},toc:[]}}let t;if(typeof process<"u"&&process.env&&process.env.VITEST)try{const i=await Promise.resolve().then(()=>Ci);t=i.initRendererWorker&&i.initRendererWorker()}catch{t=ut&&ut()}else t=ut&&ut();try{e=String(e||"").replace(/:([^:\s]+):/g,(i,r)=>Tn[r]||i)}catch{}try{if(typeof de<"u"&&de&&typeof de.getLanguage=="function"&&de.getLanguage("plaintext")&&/```\s*\n/.test(String(e||""))){let{content:i,data:r}=cn(e||"");try{i=String(i||"").replace(/:([^:\s]+):/g,(l,u)=>Tn[u]||l)}catch{}se.setOptions({gfm:!0,headerIds:!0,mangle:!1,highlighted:(l,u)=>{try{return u&&de.getLanguage&&de.getLanguage(u)?de.highlight(l,{language:u}).value:de&&typeof de.getLanguage=="function"&&de.getLanguage("plaintext")?de.highlight(l,{language:"plaintext"}).value:l}catch{return l}}});let a=se.parse(i);try{a=a.replace(/<pre><code>([\s\S]*?)<\/code><\/pre>/g,(l,u)=>{try{if(u&&de&&typeof de.highlight=="function")try{const p=de.highlight(u,{language:"plaintext"});return`<pre><code>${p&&p.value?p.value:p}</code></pre>`}catch{try{if(de&&typeof de.highlightElement=="function"){const m={innerHTML:u};return de.highlightElement(m),`<pre><code>${m.innerHTML}</code></pre>`}}catch{}}}catch{}return l})}catch{}const s=[],c=new Set,o=l=>{try{return String(l||"").toLowerCase().trim().replace(/[^a-z0-9\-\s]+/g,"").replace(/\s+/g,"-")}catch{return"heading"}};return a=a.replace(/<h([1-6])([^>]*)>([\s\S]*?)<\/h\1>/g,(l,u,p,m)=>{const h=Number(u),d=m.replace(/<[^>]+>/g,"").trim();let g=o(d)||"heading",f=g,w=2;for(;c.has(f);)f=g+"-"+w,w+=1;c.add(f),s.push({level:h,text:d,id:f});const y={1:"is-size-3-mobile is-size-2-tablet is-size-1-desktop",2:"is-size-4-mobile is-size-3-tablet is-size-2-desktop",3:"is-size-5-mobile is-size-4-tablet is-size-3-desktop",4:"is-size-6-mobile is-size-5-tablet is-size-4-desktop",5:"is-size-6-mobile is-size-6-tablet is-size-5-desktop",6:"is-size-6-mobile is-size-6-tablet is-size-6-desktop"},k=h<=2?"has-text-weight-bold":h<=4?"has-text-weight-semibold":"has-text-weight-normal",L=(y[h]+" "+k).trim(),I=((p||"").replace(/\s*(id|class)="[^"]*"/g,"")+` id="${f}" class="${L}"`).trim();return`<h${h} ${I}>${m}</h${h}>`}),a=a.replace(/<img([^>]*)>/g,(l,u)=>/\bloading=/.test(u)?`<img${u}>`:/\bdata-want-lazy=/.test(u)?`<img${u}>`:`<img${u} loading="lazy">`),{html:a,meta:r||{},toc:s}}}catch{}if(!t)throw new Error("renderer worker required but unavailable");const n=await rr({type:"render",md:e});if(!n||typeof n!="object"||n.html===void 0)throw new Error("renderer worker returned invalid response");try{const i=new Map,r=[],a=o=>{try{return String(o||"").toLowerCase().trim().replace(/[^a-z0-9\-\s]+/g,"").replace(/\s+/g,"-")}catch{return"heading"}},s=o=>{const l={1:"is-size-3-mobile is-size-2-tablet is-size-1-desktop",2:"is-size-4-mobile is-size-3-tablet is-size-2-desktop",3:"is-size-5-mobile is-size-4-tablet is-size-3-desktop",4:"is-size-6-mobile is-size-5-tablet is-size-4-desktop",5:"is-size-6-mobile is-size-6-tablet is-size-5-desktop",6:"is-size-6-mobile is-size-6-tablet is-size-6-desktop"},u=o<=2?"has-text-weight-bold":o<=4?"has-text-weight-semibold":"has-text-weight-normal";return(l[o]+" "+u).trim()};let c=n.html;c=c.replace(/<h([1-6])([^>]*)>([\s\S]*?)<\/h\1>/g,(o,l,u,p)=>{const m=Number(l),h=p.replace(/<[^>]+>/g,"").trim(),d=(u||"").match(/\sid="([^"]+)"/),g=d?d[1]:a(h)||"heading",w=(i.get(g)||0)+1;i.set(g,w);const y=w===1?g:g+"-"+w;r.push({level:m,text:h,id:y});const k=s(m),R=((u||"").replace(/\s*(id|class)="[^"]*"/g,"")+` id="${y}" class="${k}"`).trim();return`<h${m} ${R}>${p}</h${m}>`});try{const o=typeof document<"u"&&document.documentElement&&document.documentElement.getAttribute&&document.documentElement.getAttribute("data-nimbi-logo-moved")||"";if(o){const l=Or||(typeof DOMParser<"u"?new DOMParser:null);if(l){const u=l.parseFromString(c,"text/html");u.querySelectorAll("img").forEach(m=>{try{const h=m.getAttribute("src")||"";(h?new URL(h,location.href).toString():"")===o&&m.remove()}catch{}}),c=u.body.innerHTML}else try{const u=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");c=c.replace(new RegExp(`<img[^>]*src=\\"${u}\\"[^>]*>`,"g"),"")}catch{}}}catch{}return{html:c,meta:n.meta||{},toc:r}}catch{return{html:n.html,meta:n.meta||{},toc:n.toc||[]}}}function zt(e,t){const n=new Set,i=/```\s*([a-zA-Z0-9_\-+]+)?/g,r=new Set(["then","now","if","once","so","and","or","but","when","the","a","an","as","let","const","var","export","import","from","true","false","null","npm","run","echo","sudo","this","that","have","using","some","return","returns","function","console","log","error","warn","class","new","undefined","with","select","from","where","join","on","group","order","by","having","as","into","values","like","limit","offset","create","table","index","view","insert","update","delete","returning","and","or","not","all","any","exists","case","when","then","else","end","distance","geometry","you","which","would","why","cool","other","same","everything","check"]),a=new Set(["bash","sh","zsh","javascript","js","python","py","php","java","c","cpp","rust","go","ruby","perl","r","scala","swift","kotlin","cs","csharp","html","css","json","xml","yaml","yml","dockerfile","docker"]);let s;for(;s=i.exec(e);)if(s[1]){const c=s[1].toLowerCase();if(Wn.has(c)||t&&t.size&&c.length<3&&!t.has(c)&&!(Be&&Be[c]&&t.has(Be[c])))continue;if(t&&t.size){if(t.has(c)){const l=t.get(c);l&&n.add(l);continue}if(Be&&Be[c]){const l=Be[c];if(t.has(l)){const u=t.get(l)||l;n.add(u);continue}}}(a.has(c)||c.length>=5&&c.length<=30&&/^[a-z][a-z0-9_\-+]*$/.test(c)&&!r.has(c))&&n.add(c)}return n}async function jn(e,t){if(Qe&&Qe.length||typeof process<"u"&&process.env&&process.env.VITEST)return zt(e||"",t);if(ut&&ut())try{const i=t&&t.size?Array.from(t.keys()):[],r=await rr({type:"detect",md:String(e||""),supported:i});if(Array.isArray(r))return new Set(r)}catch(i){console.warn("[markdown] detectFenceLanguagesAsync worker failed",i)}return zt(e||"",t)}const Ci=Object.freeze(Object.defineProperty({__proto__:null,_sendToRenderer:rr,addMarkdownExtension:Hn,detectFenceLanguages:zt,detectFenceLanguagesAsync:jn,initRendererWorker:ut,markdownPlugins:Qe,parseMarkdownToHtml:hn,setMarkdownExtensions:Js},Symbol.toStringTag,{value:"Module"})),eo=`import { _rewriteAnchors } from '../htmlBuilder.js'
|
|
1401
|
+
`,Or=typeof self<"u"&&self.Blob&&new Blob(["URL.revokeObjectURL(import.meta.url);",Li],{type:"text/javascript;charset=utf-8"});function Qs(e){let t;try{if(t=Or&&(self.URL||self.webkitURL).createObjectURL(Or),!t)throw"";const n=new Worker(t,{type:"module",name:e?.name});return n.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Li),{type:"module",name:e?.name})}}function un(e){if(e.startsWith("---")){const t=e.indexOf(`
|
|
1402
|
+
---`,3);if(t!==-1){const n=e.slice(3,t+0).trim(),i=e.slice(t+4).trimStart(),r={};return n.split(/\r?\n/).forEach(a=>{const s=a.match(/^([^:]+):\s*(.*)$/);s&&(r[s[1].trim()]=s[2].trim())}),{content:i,data:r}}}return{content:e,data:{}}}function Ti(e){try{if(!e&&e!==0)return"";const t=String(e),n={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "};return t.replace(/&(#x?[0-9a-fA-F]+|[a-zA-Z]+);/g,(i,r)=>{if(!r)return i;if(r[0]==="#")try{return r[1]==="x"||r[1]==="X"?String.fromCharCode(parseInt(r.slice(2),16)):String.fromCharCode(parseInt(r.slice(1),10))}catch{return i}return n[r]!==void 0?n[r]:i})}catch{return String(e||"")}}const zt=Br&&(se||Br)||void 0;let Pe=null;const Xs="https://cdn.jsdelivr.net/npm/highlight.js";async function hn(){if(Pe)return Pe;try{try{const e=await import(Xs+"/lib/core.js");Pe=e.default||e}catch{Pe=null}}catch{Pe=null}return Pe}zt&&typeof zt.setOptions=="function"&&zt.setOptions({gfm:!0,headerIds:!0,mangle:!1,highlighted:(e,t)=>{try{return Pe&&t&&typeof Pe.getLanguage=="function"&&Pe.getLanguage(t)?Pe.highlight(e,{language:t}).value:Pe&&typeof Pe.getLanguage=="function"&&Pe.getLanguage("plaintext")?Pe.highlight(e,{language:"plaintext"}).value:e}catch{return e}}});onmessage=async e=>{const t=e.data||{};try{if(t.type==="register"){const{name:c,url:f}=t;try{if(!await hn()){postMessage({type:"register-error",name:c,error:"hljs unavailable"});return}const h=await import(f),d=h.default||h;Pe.registerLanguage(c,d),postMessage({type:"registered",name:c})}catch(m){postMessage({type:"register-error",name:c,error:String(m)})}return}if(t.type==="detect"){const c=t.md||"",f=t.supported||[],m=new Set,h=/```\s*([a-zA-Z0-9_\-+]+)?/g;let d;for(;d=h.exec(c);)if(d[1]){const p=String(d[1]).toLowerCase();if(!p)continue;if(p.length>=5&&p.length<=30&&/^[a-z][a-z0-9_\-+]*$/.test(p)&&m.add(p),new Set(["bash","sh","zsh","javascript","js","python","py","php","java","c","cpp","rust","go","ruby","perl","r","scala","swift","kotlin","cs","csharp","html","css","json","xml","yaml","yml","dockerfile","docker"]).has(p)&&m.add(p),f&&f.length)try{f.indexOf(p)!==-1&&m.add(p)}catch{}}postMessage({id:t.id,result:Array.from(m)});return}const{id:n,md:i}=t,{content:r,data:a}=un(i||"");await hn().catch(()=>{});let s=zt.parse(r);const u=[],o=new Map,l=c=>{try{return String(c||"").toLowerCase().trim().replace(/[^a-z0-9\-\s]+/g,"").replace(/\s+/g,"-")}catch{return"heading"}};s=s.replace(/<h([1-6])([^>]*)>([\s\S]*?)<\/h\1>/g,(c,f,m,h)=>{const d=Number(f);let p=h.replace(/<[^>]+>/g,"").trim();try{p=Ti(p)}catch{}let g=null;const w=(m||"").match(/\sid="([^"]+)"/);w&&(g=w[1]);const y=g||l(p)||"heading",v=(o.get(y)||0)+1;o.set(y,v);const $=v===1?y:y+"-"+v;u.push({level:d,text:p,id:$});const N={1:"is-size-3-mobile is-size-2-tablet is-size-1-desktop",2:"is-size-4-mobile is-size-3-tablet is-size-2-desktop",3:"is-size-5-mobile is-size-4-tablet is-size-3-desktop",4:"is-size-6-mobile is-size-5-tablet is-size-4-desktop",5:"is-size-6-mobile is-size-6-tablet is-size-5-desktop",6:"is-size-6-mobile is-size-6-tablet is-size-6-desktop"},U=d<=2?"has-text-weight-bold":d<=4?"has-text-weight-semibold":"has-text-weight-normal",z=(N[d]+" "+U).trim(),le=((m||"").replace(/\s*(id|class)="[^"]*"/g,"")+` id="${$}" class="${z}"`).trim();return`<h${d} ${le}>${h}</h${d}>`}),s=s.replace(/<img([^>]*)>/g,(c,f)=>/\bloading=/.test(f)?`<img${f}>`:/\bdata-want-lazy=/.test(f)?`<img${f}>`:`<img${f} loading="lazy">`),postMessage({id:n,result:{html:s,meta:a||{},toc:u}})}catch(n){postMessage({id:t.id,error:String(n)})}};async function Ks(e){try{if(e&&e.type==="register"){const{name:o,url:l}=e;try{if(!await hn())return{type:"register-error",name:o,error:"hljs unavailable"};const f=await import(l),m=f.default||f;return Pe.registerLanguage(o,m),{type:"registered",name:o}}catch(c){return{type:"register-error",name:o,error:String(c)}}}if(e&&e.type==="detect"){const o=e.md||"",l=e.supported||[],c=new Set,f=/``\`\s*([a-zA-Z0-9_\-+]+)?/g;let m;for(;m=f.exec(o);)if(m[1]){const h=String(m[1]).toLowerCase();if(!h)continue;if(h.length>=5&&h.length<=30&&/^[a-z][a-z0-9_\-+]*$/.test(h)&&c.add(h),new Set(["bash","sh","zsh","javascript","js","python","py","php","java","c","cpp","rust","go","ruby","perl","r","scala","swift","kotlin","cs","csharp","html","css","json","xml","yaml","yml","dockerfile","docker"]).has(h)&&c.add(h),l&&l.length)try{l.indexOf(h)!==-1&&c.add(h)}catch{}}return{id:e.id,result:Array.from(c)}}const t=e&&e.id,{content:n,data:i}=un(e&&e.md||"");await hn().catch(()=>{});let r=zt.parse(n);const a=[],s=new Map,u=o=>{try{return String(o||"").toLowerCase().trim().replace(/[^a-z0-9\-\s]+/g,"").replace(/\s+/g,"-")}catch{return"heading"}};return r=r.replace(/<h([1-6])([^>]*)>([\s\S]*?)<\/h\1>/g,(o,l,c,f)=>{const m=Number(l);let h=f.replace(/<[^>]+>/g,"").trim();try{h=Ti(h)}catch{}let d=null;const p=(c||"").match(/\sid="([^"]+)"/);p&&(d=p[1]);const g=d||u(h)||"heading",y=(s.get(g)||0)+1;s.set(g,y);const k=y===1?g:g+"-"+y;a.push({level:m,text:h,id:k});const v={1:"is-size-3-mobile is-size-2-tablet is-size-1-desktop",2:"is-size-4-mobile is-size-3-tablet is-size-2-desktop",3:"is-size-5-mobile is-size-4-tablet is-size-3-desktop",4:"is-size-6-mobile is-size-5-tablet is-size-4-desktop",5:"is-size-6-mobile is-size-6-tablet is-size-5-desktop",6:"is-size-6-mobile is-size-6-tablet is-size-6-desktop"},$=m<=2?"has-text-weight-bold":m<=4?"has-text-weight-semibold":"has-text-weight-normal",N=(v[m]+" "+$).trim(),z=((c||"").replace(/\s*(id|class)="[^"]*"/g,"")+` id="${k}" class="${N}"`).trim();return`<h${m} ${z}>${f}</h${m}>`}),r=r.replace(/<img([^>]*)>/g,(o,l)=>/\bloading=/.test(l)?`<img${l}>`:/\bdata-want-lazy=/.test(l)?`<img${l}>`:`<img${l} loading="lazy">`),{id:t,result:{html:r,meta:i||{},toc:a}}}catch(t){return{id:e&&e.id,error:String(t)}}}const Cn={100:"💯",1234:"🔢",grinning:"😀",grimacing:"😬",grin:"😁",joy:"😂",rofl:"🤣",partying:"🥳",smiley:"😃",smile:"😄",sweat_smile:"😅",laughing:"😆",innocent:"😇",wink:"😉",blush:"😊",slightly_smiling_face:"🙂",upside_down_face:"🙃",relaxed:"☺️",yum:"😋",relieved:"😌",heart_eyes:"😍",smiling_face_with_three_hearts:"🥰",kissing_heart:"😘",kissing:"😗",kissing_smiling_eyes:"😙",kissing_closed_eyes:"😚",stuck_out_tongue_winking_eye:"😜",zany:"🤪",raised_eyebrow:"🤨",monocle:"🧐",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue:"😛",money_mouth_face:"🤑",nerd_face:"🤓",sunglasses:"😎",star_struck:"🤩",clown_face:"🤡",cowboy_hat_face:"🤠",hugs:"🤗",smirk:"😏",no_mouth:"😶",neutral_face:"😐",expressionless:"😑",unamused:"😒",roll_eyes:"🙄",thinking:"🤔",lying_face:"🤥",hand_over_mouth:"🤭",shushing:"🤫",symbols_over_mouth:"🤬",exploding_head:"🤯",flushed:"😳",disappointed:"😞",worried:"😟",angry:"😠",rage:"😡",pensive:"😔",confused:"😕",slightly_frowning_face:"🙁",frowning_face:"☹",persevere:"😣",confounded:"😖",tired_face:"😫",weary:"😩",pleading:"🥺",triumph:"😤",open_mouth:"😮",scream:"😱",fearful:"😨",cold_sweat:"😰",hushed:"😯",frowning:"😦",anguished:"😧",cry:"😢",disappointed_relieved:"😥",drooling_face:"🤤",sleepy:"😪",sweat:"😓",hot:"🥵",cold:"🥶",sob:"😭",dizzy_face:"😵",astonished:"😲",zipper_mouth_face:"🤐",nauseated_face:"🤢",sneezing_face:"🤧",vomiting:"🤮",mask:"😷",face_with_thermometer:"🤒",face_with_head_bandage:"🤕",woozy:"🥴",sleeping:"😴",zzz:"💤",poop:"💩",smiling_imp:"😈",imp:"👿",japanese_ogre:"👹",japanese_goblin:"👺",skull:"💀",ghost:"👻",alien:"👽",robot:"🤖",smiley_cat:"😺",smile_cat:"😸",joy_cat:"😹",heart_eyes_cat:"😻",smirk_cat:"😼",kissing_cat:"😽",scream_cat:"🙀",crying_cat_face:"😿",pouting_cat:"😾",palms_up:"🤲",raised_hands:"🙌",clap:"👏",wave:"👋",call_me_hand:"🤙","+1":"👍","-1":"👎",facepunch:"👊",fist:"✊",fist_left:"🤛",fist_right:"🤜",v:"✌",ok_hand:"👌",raised_hand:"✋",raised_back_of_hand:"🤚",open_hands:"👐",muscle:"💪",pray:"🙏",foot:"🦶",leg:"🦵",handshake:"🤝",point_up:"☝",point_up_2:"👆",point_down:"👇",point_left:"👈",point_right:"👉",fu:"🖕",raised_hand_with_fingers_splayed:"🖐",love_you:"🤟",metal:"🤘",crossed_fingers:"🤞",vulcan_salute:"🖖",writing_hand:"✍",selfie:"🤳",nail_care:"💅",lips:"👄",tooth:"🦷",tongue:"👅",ear:"👂",nose:"👃",eye:"👁",eyes:"👀",brain:"🧠",bust_in_silhouette:"👤",busts_in_silhouette:"👥",speaking_head:"🗣",baby:"👶",child:"🧒",boy:"👦",girl:"👧",adult:"🧑",man:"👨",woman:"👩",blonde_woman:"👱♀️",blonde_man:"👱",bearded_person:"🧔",older_adult:"🧓",older_man:"👴",older_woman:"👵",man_with_gua_pi_mao:"👲",woman_with_headscarf:"🧕",woman_with_turban:"👳♀️",man_with_turban:"👳",policewoman:"👮♀️",policeman:"👮",construction_worker_woman:"👷♀️",construction_worker_man:"👷",guardswoman:"💂♀️",guardsman:"💂",female_detective:"🕵️♀️",male_detective:"🕵",woman_health_worker:"👩⚕️",man_health_worker:"👨⚕️",woman_farmer:"👩🌾",man_farmer:"👨🌾",woman_cook:"👩🍳",man_cook:"👨🍳",woman_student:"👩🎓",man_student:"👨🎓",woman_singer:"👩🎤",man_singer:"👨🎤",woman_teacher:"👩🏫",man_teacher:"👨🏫",woman_factory_worker:"👩🏭",man_factory_worker:"👨🏭",woman_technologist:"👩💻",man_technologist:"👨💻",woman_office_worker:"👩💼",man_office_worker:"👨💼",woman_mechanic:"👩🔧",man_mechanic:"👨🔧",woman_scientist:"👩🔬",man_scientist:"👨🔬",woman_artist:"👩🎨",man_artist:"👨🎨",woman_firefighter:"👩🚒",man_firefighter:"👨🚒",woman_pilot:"👩✈️",man_pilot:"👨✈️",woman_astronaut:"👩🚀",man_astronaut:"👨🚀",woman_judge:"👩⚖️",man_judge:"👨⚖️",woman_superhero:"🦸♀️",man_superhero:"🦸♂️",woman_supervillain:"🦹♀️",man_supervillain:"🦹♂️",mrs_claus:"🤶",santa:"🎅",sorceress:"🧙♀️",wizard:"🧙♂️",woman_elf:"🧝♀️",man_elf:"🧝♂️",woman_vampire:"🧛♀️",man_vampire:"🧛♂️",woman_zombie:"🧟♀️",man_zombie:"🧟♂️",woman_genie:"🧞♀️",man_genie:"🧞♂️",mermaid:"🧜♀️",merman:"🧜♂️",woman_fairy:"🧚♀️",man_fairy:"🧚♂️",angel:"👼",pregnant_woman:"🤰",breastfeeding:"🤱",princess:"👸",prince:"🤴",bride_with_veil:"👰",man_in_tuxedo:"🤵",running_woman:"🏃♀️",running_man:"🏃",walking_woman:"🚶♀️",walking_man:"🚶",dancer:"💃",man_dancing:"🕺",dancing_women:"👯",dancing_men:"👯♂️",couple:"👫",two_men_holding_hands:"👬",two_women_holding_hands:"👭",bowing_woman:"🙇♀️",bowing_man:"🙇",man_facepalming:"🤦♂️",woman_facepalming:"🤦♀️",woman_shrugging:"🤷",man_shrugging:"🤷♂️",tipping_hand_woman:"💁",tipping_hand_man:"💁♂️",no_good_woman:"🙅",no_good_man:"🙅♂️",ok_woman:"🙆",ok_man:"🙆♂️",raising_hand_woman:"🙋",raising_hand_man:"🙋♂️",pouting_woman:"🙎",pouting_man:"🙎♂️",frowning_woman:"🙍",frowning_man:"🙍♂️",haircut_woman:"💇",haircut_man:"💇♂️",massage_woman:"💆",massage_man:"💆♂️",woman_in_steamy_room:"🧖♀️",man_in_steamy_room:"🧖♂️",couple_with_heart_woman_man:"💑",couple_with_heart_woman_woman:"👩❤️👩",couple_with_heart_man_man:"👨❤️👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩❤️💋👩",couplekiss_man_man:"👨❤️💋👨",family_man_woman_boy:"👪",family_man_woman_girl:"👨👩👧",family_man_woman_girl_boy:"👨👩👧👦",family_man_woman_boy_boy:"👨👩👦👦",family_man_woman_girl_girl:"👨👩👧👧",family_woman_woman_boy:"👩👩👦",family_woman_woman_girl:"👩👩👧",family_woman_woman_girl_boy:"👩👩👧👦",family_woman_woman_boy_boy:"👩👩👦👦",family_woman_woman_girl_girl:"👩👩👧👧",family_man_man_boy:"👨👨👦",family_man_man_girl:"👨👨👧",family_man_man_girl_boy:"👨👨👧👦",family_man_man_boy_boy:"👨👨👦👦",family_man_man_girl_girl:"👨👨👧👧",family_woman_boy:"👩👦",family_woman_girl:"👩👧",family_woman_girl_boy:"👩👧👦",family_woman_boy_boy:"👩👦👦",family_woman_girl_girl:"👩👧👧",family_man_boy:"👨👦",family_man_girl:"👨👧",family_man_girl_boy:"👨👧👦",family_man_boy_boy:"👨👦👦",family_man_girl_girl:"👨👧👧",yarn:"🧶",thread:"🧵",coat:"🧥",labcoat:"🥼",womans_clothes:"👚",tshirt:"👕",jeans:"👖",necktie:"👔",dress:"👗",bikini:"👙",kimono:"👘",lipstick:"💄",kiss:"💋",footprints:"👣",flat_shoe:"🥿",high_heel:"👠",sandal:"👡",boot:"👢",mans_shoe:"👞",athletic_shoe:"👟",hiking_boot:"🥾",socks:"🧦",gloves:"🧤",scarf:"🧣",womans_hat:"👒",tophat:"🎩",billed_hat:"🧢",rescue_worker_helmet:"⛑",mortar_board:"🎓",crown:"👑",school_satchel:"🎒",luggage:"🧳",pouch:"👝",purse:"👛",handbag:"👜",briefcase:"💼",eyeglasses:"👓",dark_sunglasses:"🕶",goggles:"🥽",ring:"💍",closed_umbrella:"🌂",dog:"🐶",cat:"🐱",mouse:"🐭",hamster:"🐹",rabbit:"🐰",fox_face:"🦊",bear:"🐻",panda_face:"🐼",koala:"🐨",tiger:"🐯",lion:"🦁",cow:"🐮",pig:"🐷",pig_nose:"🐽",frog:"🐸",squid:"🦑",octopus:"🐙",shrimp:"🦐",monkey_face:"🐵",gorilla:"🦍",see_no_evil:"🙈",hear_no_evil:"🙉",speak_no_evil:"🙊",monkey:"🐒",chicken:"🐔",penguin:"🐧",bird:"🐦",baby_chick:"🐤",hatching_chick:"🐣",hatched_chick:"🐥",duck:"🦆",eagle:"🦅",owl:"🦉",bat:"🦇",wolf:"🐺",boar:"🐗",horse:"🐴",unicorn:"🦄",honeybee:"🐝",bug:"🐛",butterfly:"🦋",snail:"🐌",beetle:"🐞",ant:"🐜",grasshopper:"🦗",spider:"🕷",scorpion:"🦂",crab:"🦀",snake:"🐍",lizard:"🦎","t-rex":"🦖",sauropod:"🦕",turtle:"🐢",tropical_fish:"🐠",fish:"🐟",blowfish:"🐡",dolphin:"🐬",shark:"🦈",whale:"🐳",whale2:"🐋",crocodile:"🐊",leopard:"🐆",zebra:"🦓",tiger2:"🐅",water_buffalo:"🐃",ox:"🐂",cow2:"🐄",deer:"🦌",dromedary_camel:"🐪",camel:"🐫",giraffe:"🦒",elephant:"🐘",rhinoceros:"🦏",goat:"🐐",ram:"🐏",sheep:"🐑",racehorse:"🐎",pig2:"🐖",rat:"🐀",mouse2:"🐁",rooster:"🐓",turkey:"🦃",dove:"🕊",dog2:"🐕",poodle:"🐩",cat2:"🐈",rabbit2:"🐇",chipmunk:"🐿",hedgehog:"🦔",raccoon:"🦝",llama:"🦙",hippopotamus:"🦛",kangaroo:"🦘",badger:"🦡",swan:"🦢",peacock:"🦚",parrot:"🦜",lobster:"🦞",mosquito:"🦟",paw_prints:"🐾",dragon:"🐉",dragon_face:"🐲",cactus:"🌵",christmas_tree:"🎄",evergreen_tree:"🌲",deciduous_tree:"🌳",palm_tree:"🌴",seedling:"🌱",herb:"🌿",shamrock:"☘",four_leaf_clover:"🍀",bamboo:"🎍",tanabata_tree:"🎋",leaves:"🍃",fallen_leaf:"🍂",maple_leaf:"🍁",ear_of_rice:"🌾",hibiscus:"🌺",sunflower:"🌻",rose:"🌹",wilted_flower:"🥀",tulip:"🌷",blossom:"🌼",cherry_blossom:"🌸",bouquet:"💐",mushroom:"🍄",chestnut:"🌰",jack_o_lantern:"🎃",shell:"🐚",spider_web:"🕸",earth_americas:"🌎",earth_africa:"🌍",earth_asia:"🌏",full_moon:"🌕",waning_gibbous_moon:"🌖",last_quarter_moon:"🌗",waning_crescent_moon:"🌘",new_moon:"🌑",waxing_crescent_moon:"🌒",first_quarter_moon:"🌓",waxing_gibbous_moon:"🌔",new_moon_with_face:"🌚",full_moon_with_face:"🌝",first_quarter_moon_with_face:"🌛",last_quarter_moon_with_face:"🌜",sun_with_face:"🌞",crescent_moon:"🌙",star:"⭐",star2:"🌟",dizzy:"💫",sparkles:"✨",comet:"☄",sunny:"☀️",sun_behind_small_cloud:"🌤",partly_sunny:"⛅",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",cloud:"☁️",cloud_with_rain:"🌧",cloud_with_lightning_and_rain:"⛈",cloud_with_lightning:"🌩",zap:"⚡",fire:"🔥",boom:"💥",snowflake:"❄️",cloud_with_snow:"🌨",snowman:"⛄",snowman_with_snow:"☃",wind_face:"🌬",dash:"💨",tornado:"🌪",fog:"🌫",open_umbrella:"☂",umbrella:"☔",droplet:"💧",sweat_drops:"💦",ocean:"🌊",green_apple:"🍏",apple:"🍎",pear:"🍐",tangerine:"🍊",lemon:"🍋",banana:"🍌",watermelon:"🍉",grapes:"🍇",strawberry:"🍓",melon:"🍈",cherries:"🍒",peach:"🍑",pineapple:"🍍",coconut:"🥥",kiwi_fruit:"🥝",mango:"🥭",avocado:"🥑",broccoli:"🥦",tomato:"🍅",eggplant:"🍆",cucumber:"🥒",carrot:"🥕",hot_pepper:"🌶",potato:"🥔",corn:"🌽",leafy_greens:"🥬",sweet_potato:"🍠",peanuts:"🥜",honey_pot:"🍯",croissant:"🥐",bread:"🍞",baguette_bread:"🥖",bagel:"🥯",pretzel:"🥨",cheese:"🧀",egg:"🥚",bacon:"🥓",steak:"🥩",pancakes:"🥞",poultry_leg:"🍗",meat_on_bone:"🍖",bone:"🦴",fried_shrimp:"🍤",fried_egg:"🍳",hamburger:"🍔",fries:"🍟",stuffed_flatbread:"🥙",hotdog:"🌭",pizza:"🍕",sandwich:"🥪",canned_food:"🥫",spaghetti:"🍝",taco:"🌮",burrito:"🌯",green_salad:"🥗",shallow_pan_of_food:"🥘",ramen:"🍜",stew:"🍲",fish_cake:"🍥",fortune_cookie:"🥠",sushi:"🍣",bento:"🍱",curry:"🍛",rice_ball:"🍙",rice:"🍚",rice_cracker:"🍘",oden:"🍢",dango:"🍡",shaved_ice:"🍧",ice_cream:"🍨",icecream:"🍦",pie:"🥧",cake:"🍰",cupcake:"🧁",moon_cake:"🥮",birthday:"🎂",custard:"🍮",candy:"🍬",lollipop:"🍭",chocolate_bar:"🍫",popcorn:"🍿",dumpling:"🥟",doughnut:"🍩",cookie:"🍪",milk_glass:"🥛",beer:"🍺",beers:"🍻",clinking_glasses:"🥂",wine_glass:"🍷",tumbler_glass:"🥃",cocktail:"🍸",tropical_drink:"🍹",champagne:"🍾",sake:"🍶",tea:"🍵",cup_with_straw:"🥤",coffee:"☕",baby_bottle:"🍼",salt:"🧂",spoon:"🥄",fork_and_knife:"🍴",plate_with_cutlery:"🍽",bowl_with_spoon:"🥣",takeout_box:"🥡",chopsticks:"🥢",soccer:"⚽",basketball:"🏀",football:"🏈",baseball:"⚾",softball:"🥎",tennis:"🎾",volleyball:"🏐",rugby_football:"🏉",flying_disc:"🥏","8ball":"🎱",golf:"⛳",golfing_woman:"🏌️♀️",golfing_man:"🏌",ping_pong:"🏓",badminton:"🏸",goal_net:"🥅",ice_hockey:"🏒",field_hockey:"🏑",lacrosse:"🥍",cricket:"🏏",ski:"🎿",skier:"⛷",snowboarder:"🏂",person_fencing:"🤺",women_wrestling:"🤼♀️",men_wrestling:"🤼♂️",woman_cartwheeling:"🤸♀️",man_cartwheeling:"🤸♂️",woman_playing_handball:"🤾♀️",man_playing_handball:"🤾♂️",ice_skate:"⛸",curling_stone:"🥌",skateboard:"🛹",sled:"🛷",bow_and_arrow:"🏹",fishing_pole_and_fish:"🎣",boxing_glove:"🥊",martial_arts_uniform:"🥋",rowing_woman:"🚣♀️",rowing_man:"🚣",climbing_woman:"🧗♀️",climbing_man:"🧗♂️",swimming_woman:"🏊♀️",swimming_man:"🏊",woman_playing_water_polo:"🤽♀️",man_playing_water_polo:"🤽♂️",woman_in_lotus_position:"🧘♀️",man_in_lotus_position:"🧘♂️",surfing_woman:"🏄♀️",surfing_man:"🏄",bath:"🛀",basketball_woman:"⛹️♀️",basketball_man:"⛹",weight_lifting_woman:"🏋️♀️",weight_lifting_man:"🏋",biking_woman:"🚴♀️",biking_man:"🚴",mountain_biking_woman:"🚵♀️",mountain_biking_man:"🚵",horse_racing:"🏇",business_suit_levitating:"🕴",trophy:"🏆",running_shirt_with_sash:"🎽",medal_sports:"🏅",medal_military:"🎖","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉",reminder_ribbon:"🎗",rosette:"🏵",ticket:"🎫",tickets:"🎟",performing_arts:"🎭",art:"🎨",circus_tent:"🎪",woman_juggling:"🤹♀️",man_juggling:"🤹♂️",microphone:"🎤",headphones:"🎧",musical_score:"🎼",musical_keyboard:"🎹",drum:"🥁",saxophone:"🎷",trumpet:"🎺",guitar:"🎸",violin:"🎻",clapper:"🎬",video_game:"🎮",space_invader:"👾",dart:"🎯",game_die:"🎲",chess_pawn:"♟",slot_machine:"🎰",jigsaw:"🧩",bowling:"🎳",red_car:"🚗",taxi:"🚕",blue_car:"🚙",bus:"🚌",trolleybus:"🚎",racing_car:"🏎",police_car:"🚓",ambulance:"🚑",fire_engine:"🚒",minibus:"🚐",truck:"🚚",articulated_lorry:"🚛",tractor:"🚜",kick_scooter:"🛴",motorcycle:"🏍",bike:"🚲",motor_scooter:"🛵",rotating_light:"🚨",oncoming_police_car:"🚔",oncoming_bus:"🚍",oncoming_automobile:"🚘",oncoming_taxi:"🚖",aerial_tramway:"🚡",mountain_cableway:"🚠",suspension_railway:"🚟",railway_car:"🚃",train:"🚋",monorail:"🚝",bullettrain_side:"🚄",bullettrain_front:"🚅",light_rail:"🚈",mountain_railway:"🚞",steam_locomotive:"🚂",train2:"🚆",metro:"🚇",tram:"🚊",station:"🚉",flying_saucer:"🛸",helicopter:"🚁",small_airplane:"🛩",airplane:"✈️",flight_departure:"🛫",flight_arrival:"🛬",sailboat:"⛵",motor_boat:"🛥",speedboat:"🚤",ferry:"⛴",passenger_ship:"🛳",rocket:"🚀",artificial_satellite:"🛰",seat:"💺",canoe:"🛶",anchor:"⚓",construction:"🚧",fuelpump:"⛽",busstop:"🚏",vertical_traffic_light:"🚦",traffic_light:"🚥",checkered_flag:"🏁",ship:"🚢",ferris_wheel:"🎡",roller_coaster:"🎢",carousel_horse:"🎠",building_construction:"🏗",foggy:"🌁",tokyo_tower:"🗼",factory:"🏭",fountain:"⛲",rice_scene:"🎑",mountain:"⛰",mountain_snow:"🏔",mount_fuji:"🗻",volcano:"🌋",japan:"🗾",camping:"🏕",tent:"⛺",national_park:"🏞",motorway:"🛣",railway_track:"🛤",sunrise:"🌅",sunrise_over_mountains:"🌄",desert:"🏜",beach_umbrella:"🏖",desert_island:"🏝",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",night_with_stars:"🌃",bridge_at_night:"🌉",milky_way:"🌌",stars:"🌠",sparkler:"🎇",fireworks:"🎆",rainbow:"🌈",houses:"🏘",european_castle:"🏰",japanese_castle:"🏯",stadium:"🏟",statue_of_liberty:"🗽",house:"🏠",house_with_garden:"🏡",derelict_house:"🏚",office:"🏢",department_store:"🏬",post_office:"🏣",european_post_office:"🏤",hospital:"🏥",bank:"🏦",hotel:"🏨",convenience_store:"🏪",school:"🏫",love_hotel:"🏩",wedding:"💒",classical_building:"🏛",church:"⛪",mosque:"🕌",synagogue:"🕍",kaaba:"🕋",shinto_shrine:"⛩",watch:"⌚",iphone:"📱",calling:"📲",computer:"💻",keyboard:"⌨",desktop_computer:"🖥",printer:"🖨",computer_mouse:"🖱",trackball:"🖲",joystick:"🕹",clamp:"🗜",minidisc:"💽",floppy_disk:"💾",cd:"💿",dvd:"📀",vhs:"📼",camera:"📷",camera_flash:"📸",video_camera:"📹",movie_camera:"🎥",film_projector:"📽",film_strip:"🎞",telephone_receiver:"📞",phone:"☎️",pager:"📟",fax:"📠",tv:"📺",radio:"📻",studio_microphone:"🎙",level_slider:"🎚",control_knobs:"🎛",compass:"🧭",stopwatch:"⏱",timer_clock:"⏲",alarm_clock:"⏰",mantelpiece_clock:"🕰",hourglass_flowing_sand:"⏳",hourglass:"⌛",satellite:"📡",battery:"🔋",electric_plug:"🔌",bulb:"💡",flashlight:"🔦",candle:"🕯",fire_extinguisher:"🧯",wastebasket:"🗑",oil_drum:"🛢",money_with_wings:"💸",dollar:"💵",yen:"💴",euro:"💶",pound:"💷",moneybag:"💰",credit_card:"💳",gem:"💎",balance_scale:"⚖",toolbox:"🧰",wrench:"🔧",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",pick:"⛏",nut_and_bolt:"🔩",gear:"⚙",brick:"🧱",chains:"⛓",magnet:"🧲",gun:"🔫",bomb:"💣",firecracker:"🧨",hocho:"🔪",dagger:"🗡",crossed_swords:"⚔",shield:"🛡",smoking:"🚬",skull_and_crossbones:"☠",coffin:"⚰",funeral_urn:"⚱",amphora:"🏺",crystal_ball:"🔮",prayer_beads:"📿",nazar_amulet:"🧿",barber:"💈",alembic:"⚗",telescope:"🔭",microscope:"🔬",hole:"🕳",pill:"💊",syringe:"💉",dna:"🧬",microbe:"🦠",petri_dish:"🧫",test_tube:"🧪",thermometer:"🌡",broom:"🧹",basket:"🧺",toilet_paper:"🧻",label:"🏷",bookmark:"🔖",toilet:"🚽",shower:"🚿",bathtub:"🛁",soap:"🧼",sponge:"🧽",lotion_bottle:"🧴",key:"🔑",old_key:"🗝",couch_and_lamp:"🛋",sleeping_bed:"🛌",bed:"🛏",door:"🚪",bellhop_bell:"🛎",teddy_bear:"🧸",framed_picture:"🖼",world_map:"🗺",parasol_on_ground:"⛱",moyai:"🗿",shopping:"🛍",shopping_cart:"🛒",balloon:"🎈",flags:"🎏",ribbon:"🎀",gift:"🎁",confetti_ball:"🎊",tada:"🎉",dolls:"🎎",wind_chime:"🎐",crossed_flags:"🎌",izakaya_lantern:"🏮",red_envelope:"🧧",email:"✉️",envelope_with_arrow:"📩",incoming_envelope:"📨","e-mail":"📧",love_letter:"💌",postbox:"📮",mailbox_closed:"📪",mailbox:"📫",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",package:"📦",postal_horn:"📯",inbox_tray:"📥",outbox_tray:"📤",scroll:"📜",page_with_curl:"📃",bookmark_tabs:"📑",receipt:"🧾",bar_chart:"📊",chart_with_upwards_trend:"📈",chart_with_downwards_trend:"📉",page_facing_up:"📄",date:"📅",calendar:"📆",spiral_calendar:"🗓",card_index:"📇",card_file_box:"🗃",ballot_box:"🗳",file_cabinet:"🗄",clipboard:"📋",spiral_notepad:"🗒",file_folder:"📁",open_file_folder:"📂",card_index_dividers:"🗂",newspaper_roll:"🗞",newspaper:"📰",notebook:"📓",closed_book:"📕",green_book:"📗",blue_book:"📘",orange_book:"📙",notebook_with_decorative_cover:"📔",ledger:"📒",books:"📚",open_book:"📖",safety_pin:"🧷",link:"🔗",paperclip:"📎",paperclips:"🖇",scissors:"✂️",triangular_ruler:"📐",straight_ruler:"📏",abacus:"🧮",pushpin:"📌",round_pushpin:"📍",triangular_flag_on_post:"🚩",white_flag:"🏳",black_flag:"🏴",rainbow_flag:"🏳️🌈",closed_lock_with_key:"🔐",lock:"🔒",unlock:"🔓",lock_with_ink_pen:"🔏",pen:"🖊",fountain_pen:"🖋",black_nib:"✒️",memo:"📝",pencil2:"✏️",crayon:"🖍",paintbrush:"🖌",mag:"🔍",mag_right:"🔎",heart:"❤️",orange_heart:"🧡",yellow_heart:"💛",green_heart:"💚",blue_heart:"💙",purple_heart:"💜",black_heart:"🖤",broken_heart:"💔",heavy_heart_exclamation:"❣",two_hearts:"💕",revolving_hearts:"💞",heartbeat:"💓",heartpulse:"💗",sparkling_heart:"💖",cupid:"💘",gift_heart:"💝",heart_decoration:"💟",peace_symbol:"☮",latin_cross:"✝",star_and_crescent:"☪",om:"🕉",wheel_of_dharma:"☸",star_of_david:"✡",six_pointed_star:"🔯",menorah:"🕎",yin_yang:"☯",orthodox_cross:"☦",place_of_worship:"🛐",ophiuchus:"⛎",aries:"♈",taurus:"♉",gemini:"♊",cancer:"♋",leo:"♌",virgo:"♍",libra:"♎",scorpius:"♏",sagittarius:"♐",capricorn:"♑",aquarius:"♒",pisces:"♓",id:"🆔",atom_symbol:"⚛",u7a7a:"🈳",u5272:"🈹",radioactive:"☢",biohazard:"☣",mobile_phone_off:"📴",vibration_mode:"📳",u6709:"🈶",u7121:"🈚",u7533:"🈸",u55b6:"🈺",u6708:"🈷️",eight_pointed_black_star:"✴️",vs:"🆚",accept:"🉑",white_flower:"💮",ideograph_advantage:"🉐",secret:"㊙️",congratulations:"㊗️",u5408:"🈴",u6e80:"🈵",u7981:"🈲",a:"🅰️",b:"🅱️",ab:"🆎",cl:"🆑",o2:"🅾️",sos:"🆘",no_entry:"⛔",name_badge:"📛",no_entry_sign:"🚫",x:"❌",o:"⭕",stop_sign:"🛑",anger:"💢",hotsprings:"♨️",no_pedestrians:"🚷",do_not_litter:"🚯",no_bicycles:"🚳","non-potable_water":"🚱",underage:"🔞",no_mobile_phones:"📵",exclamation:"❗",grey_exclamation:"❕",question:"❓",grey_question:"❔",bangbang:"‼️",interrobang:"⁉️",low_brightness:"🔅",high_brightness:"🔆",trident:"🔱",fleur_de_lis:"⚜",part_alternation_mark:"〽️",warning:"⚠️",children_crossing:"🚸",beginner:"🔰",recycle:"♻️",u6307:"🈯",chart:"💹",sparkle:"❇️",eight_spoked_asterisk:"✳️",negative_squared_cross_mark:"❎",white_check_mark:"✅",diamond_shape_with_a_dot_inside:"💠",cyclone:"🌀",loop:"➿",globe_with_meridians:"🌐",m:"Ⓜ️",atm:"🏧",sa:"🈂️",passport_control:"🛂",customs:"🛃",baggage_claim:"🛄",left_luggage:"🛅",wheelchair:"♿",no_smoking:"🚭",wc:"🚾",parking:"🅿️",potable_water:"🚰",mens:"🚹",womens:"🚺",baby_symbol:"🚼",restroom:"🚻",put_litter_in_its_place:"🚮",cinema:"🎦",signal_strength:"📶",koko:"🈁",ng:"🆖",ok:"🆗",up:"🆙",cool:"🆒",new:"🆕",free:"🆓",zero:"0️⃣",one:"1️⃣",two:"2️⃣",three:"3️⃣",four:"4️⃣",five:"5️⃣",six:"6️⃣",seven:"7️⃣",eight:"8️⃣",nine:"9️⃣",keycap_ten:"🔟",asterisk:"*⃣",eject_button:"⏏️",arrow_forward:"▶️",pause_button:"⏸",next_track_button:"⏭",stop_button:"⏹",record_button:"⏺",play_or_pause_button:"⏯",previous_track_button:"⏮",fast_forward:"⏩",rewind:"⏪",twisted_rightwards_arrows:"🔀",repeat:"🔁",repeat_one:"🔂",arrow_backward:"◀️",arrow_up_small:"🔼",arrow_down_small:"🔽",arrow_double_up:"⏫",arrow_double_down:"⏬",arrow_right:"➡️",arrow_left:"⬅️",arrow_up:"⬆️",arrow_down:"⬇️",arrow_upper_right:"↗️",arrow_lower_right:"↘️",arrow_lower_left:"↙️",arrow_upper_left:"↖️",arrow_up_down:"↕️",left_right_arrow:"↔️",arrows_counterclockwise:"🔄",arrow_right_hook:"↪️",leftwards_arrow_with_hook:"↩️",arrow_heading_up:"⤴️",arrow_heading_down:"⤵️",hash:"#️⃣",information_source:"ℹ️",abc:"🔤",abcd:"🔡",capital_abcd:"🔠",symbols:"🔣",musical_note:"🎵",notes:"🎶",wavy_dash:"〰️",curly_loop:"➰",heavy_check_mark:"✔️",arrows_clockwise:"🔃",heavy_plus_sign:"➕",heavy_minus_sign:"➖",heavy_division_sign:"➗",heavy_multiplication_x:"✖️",infinity:"♾",heavy_dollar_sign:"💲",currency_exchange:"💱",copyright:"©️",registered:"®️",tm:"™️",end:"🔚",back:"🔙",on:"🔛",top:"🔝",soon:"🔜",ballot_box_with_check:"☑️",radio_button:"🔘",white_circle:"⚪",black_circle:"⚫",red_circle:"🔴",large_blue_circle:"🔵",small_orange_diamond:"🔸",small_blue_diamond:"🔹",large_orange_diamond:"🔶",large_blue_diamond:"🔷",small_red_triangle:"🔺",black_small_square:"▪️",white_small_square:"▫️",black_large_square:"⬛",white_large_square:"⬜",small_red_triangle_down:"🔻",black_medium_square:"◼️",white_medium_square:"◻️",black_medium_small_square:"◾",white_medium_small_square:"◽",black_square_button:"🔲",white_square_button:"🔳",speaker:"🔈",sound:"🔉",loud_sound:"🔊",mute:"🔇",mega:"📣",loudspeaker:"📢",bell:"🔔",no_bell:"🔕",black_joker:"🃏",mahjong:"🀄",spades:"♠️",clubs:"♣️",hearts:"♥️",diamonds:"♦️",flower_playing_cards:"🎴",thought_balloon:"💭",right_anger_bubble:"🗯",speech_balloon:"💬",left_speech_bubble:"🗨",clock1:"🕐",clock2:"🕑",clock3:"🕒",clock4:"🕓",clock5:"🕔",clock6:"🕕",clock7:"🕖",clock8:"🕗",clock9:"🕘",clock10:"🕙",clock11:"🕚",clock12:"🕛",clock130:"🕜",clock230:"🕝",clock330:"🕞",clock430:"🕟",clock530:"🕠",clock630:"🕡",clock730:"🕢",clock830:"🕣",clock930:"🕤",clock1030:"🕥",clock1130:"🕦",clock1230:"🕧",afghanistan:"🇦🇫",aland_islands:"🇦🇽",albania:"🇦🇱",algeria:"🇩🇿",american_samoa:"🇦🇸",andorra:"🇦🇩",angola:"🇦🇴",anguilla:"🇦🇮",antarctica:"🇦🇶",antigua_barbuda:"🇦🇬",argentina:"🇦🇷",armenia:"🇦🇲",aruba:"🇦🇼",australia:"🇦🇺",austria:"🇦🇹",azerbaijan:"🇦🇿",bahamas:"🇧🇸",bahrain:"🇧🇭",bangladesh:"🇧🇩",barbados:"🇧🇧",belarus:"🇧🇾",belgium:"🇧🇪",belize:"🇧🇿",benin:"🇧🇯",bermuda:"🇧🇲",bhutan:"🇧🇹",bolivia:"🇧🇴",caribbean_netherlands:"🇧🇶",bosnia_herzegovina:"🇧🇦",botswana:"🇧🇼",brazil:"🇧🇷",british_indian_ocean_territory:"🇮🇴",british_virgin_islands:"🇻🇬",brunei:"🇧🇳",bulgaria:"🇧🇬",burkina_faso:"🇧🇫",burundi:"🇧🇮",cape_verde:"🇨🇻",cambodia:"🇰🇭",cameroon:"🇨🇲",canada:"🇨🇦",canary_islands:"🇮🇨",cayman_islands:"🇰🇾",central_african_republic:"🇨🇫",chad:"🇹🇩",chile:"🇨🇱",cn:"🇨🇳",christmas_island:"🇨🇽",cocos_islands:"🇨🇨",colombia:"🇨🇴",comoros:"🇰🇲",congo_brazzaville:"🇨🇬",congo_kinshasa:"🇨🇩",cook_islands:"🇨🇰",costa_rica:"🇨🇷",croatia:"🇭🇷",cuba:"🇨🇺",curacao:"🇨🇼",cyprus:"🇨🇾",czech_republic:"🇨🇿",denmark:"🇩🇰",djibouti:"🇩🇯",dominica:"🇩🇲",dominican_republic:"🇩🇴",ecuador:"🇪🇨",egypt:"🇪🇬",el_salvador:"🇸🇻",equatorial_guinea:"🇬🇶",eritrea:"🇪🇷",estonia:"🇪🇪",ethiopia:"🇪🇹",eu:"🇪🇺",falkland_islands:"🇫🇰",faroe_islands:"🇫🇴",fiji:"🇫🇯",finland:"🇫🇮",fr:"🇫🇷",french_guiana:"🇬🇫",french_polynesia:"🇵🇫",french_southern_territories:"🇹🇫",gabon:"🇬🇦",gambia:"🇬🇲",georgia:"🇬🇪",de:"🇩🇪",ghana:"🇬🇭",gibraltar:"🇬🇮",greece:"🇬🇷",greenland:"🇬🇱",grenada:"🇬🇩",guadeloupe:"🇬🇵",guam:"🇬🇺",guatemala:"🇬🇹",guernsey:"🇬🇬",guinea:"🇬🇳",guinea_bissau:"🇬🇼",guyana:"🇬🇾",haiti:"🇭🇹",honduras:"🇭🇳",hong_kong:"🇭🇰",hungary:"🇭🇺",iceland:"🇮🇸",india:"🇮🇳",indonesia:"🇮🇩",iran:"🇮🇷",iraq:"🇮🇶",ireland:"🇮🇪",isle_of_man:"🇮🇲",israel:"🇮🇱",it:"🇮🇹",cote_divoire:"🇨🇮",jamaica:"🇯🇲",jp:"🇯🇵",jersey:"🇯🇪",jordan:"🇯🇴",kazakhstan:"🇰🇿",kenya:"🇰🇪",kiribati:"🇰🇮",kosovo:"🇽🇰",kuwait:"🇰🇼",kyrgyzstan:"🇰🇬",laos:"🇱🇦",latvia:"🇱🇻",lebanon:"🇱🇧",lesotho:"🇱🇸",liberia:"🇱🇷",libya:"🇱🇾",liechtenstein:"🇱🇮",lithuania:"🇱🇹",luxembourg:"🇱🇺",macau:"🇲🇴",macedonia:"🇲🇰",madagascar:"🇲🇬",malawi:"🇲🇼",malaysia:"🇲🇾",maldives:"🇲🇻",mali:"🇲🇱",malta:"🇲🇹",marshall_islands:"🇲🇭",martinique:"🇲🇶",mauritania:"🇲🇷",mauritius:"🇲🇺",mayotte:"🇾🇹",mexico:"🇲🇽",micronesia:"🇫🇲",moldova:"🇲🇩",monaco:"🇲🇨",mongolia:"🇲🇳",montenegro:"🇲🇪",montserrat:"🇲🇸",morocco:"🇲🇦",mozambique:"🇲🇿",myanmar:"🇲🇲",namibia:"🇳🇦",nauru:"🇳🇷",nepal:"🇳🇵",netherlands:"🇳🇱",new_caledonia:"🇳🇨",new_zealand:"🇳🇿",nicaragua:"🇳🇮",niger:"🇳🇪",nigeria:"🇳🇬",niue:"🇳🇺",norfolk_island:"🇳🇫",northern_mariana_islands:"🇲🇵",north_korea:"🇰🇵",norway:"🇳🇴",oman:"🇴🇲",pakistan:"🇵🇰",palau:"🇵🇼",palestinian_territories:"🇵🇸",panama:"🇵🇦",papua_new_guinea:"🇵🇬",paraguay:"🇵🇾",peru:"🇵🇪",philippines:"🇵🇭",pitcairn_islands:"🇵🇳",poland:"🇵🇱",portugal:"🇵🇹",puerto_rico:"🇵🇷",qatar:"🇶🇦",reunion:"🇷🇪",romania:"🇷🇴",ru:"🇷🇺",rwanda:"🇷🇼",st_barthelemy:"🇧🇱",st_helena:"🇸🇭",st_kitts_nevis:"🇰🇳",st_lucia:"🇱🇨",st_pierre_miquelon:"🇵🇲",st_vincent_grenadines:"🇻🇨",samoa:"🇼🇸",san_marino:"🇸🇲",sao_tome_principe:"🇸🇹",saudi_arabia:"🇸🇦",senegal:"🇸🇳",serbia:"🇷🇸",seychelles:"🇸🇨",sierra_leone:"🇸🇱",singapore:"🇸🇬",sint_maarten:"🇸🇽",slovakia:"🇸🇰",slovenia:"🇸🇮",solomon_islands:"🇸🇧",somalia:"🇸🇴",south_africa:"🇿🇦",south_georgia_south_sandwich_islands:"🇬🇸",kr:"🇰🇷",south_sudan:"🇸🇸",es:"🇪🇸",sri_lanka:"🇱🇰",sudan:"🇸🇩",suriname:"🇸🇷",swaziland:"🇸🇿",sweden:"🇸🇪",switzerland:"🇨🇭",syria:"🇸🇾",taiwan:"🇹🇼",tajikistan:"🇹🇯",tanzania:"🇹🇿",thailand:"🇹🇭",timor_leste:"🇹🇱",togo:"🇹🇬",tokelau:"🇹🇰",tonga:"🇹🇴",trinidad_tobago:"🇹🇹",tunisia:"🇹🇳",tr:"🇹🇷",turkmenistan:"🇹🇲",turks_caicos_islands:"🇹🇨",tuvalu:"🇹🇻",uganda:"🇺🇬",ukraine:"🇺🇦",united_arab_emirates:"🇦🇪",uk:"🇬🇧",england:"🏴",scotland:"🏴",wales:"🏴",us:"🇺🇸",us_virgin_islands:"🇻🇮",uruguay:"🇺🇾",uzbekistan:"🇺🇿",vanuatu:"🇻🇺",vatican_city:"🇻🇦",venezuela:"🇻🇪",vietnam:"🇻🇳",wallis_futuna:"🇼🇫",western_sahara:"🇪🇭",yemen:"🇾🇪",zambia:"🇿🇲",zimbabwe:"🇿🇼",united_nations:"🇺🇳",pirate_flag:"🏴☠️"},Ys=typeof navigator<"u"&&navigator.hardwareConcurrency?Math.max(1,Math.floor(navigator.hardwareConcurrency/2)):2;function Vs(){if(typeof Worker<"u")try{return new Qs}catch{}const e={message:[],error:[]};return{addEventListener(n,i){e[n]||(e[n]=[]),e[n].push(i)},removeEventListener(n,i){if(!e[n])return;const r=e[n].indexOf(i);r!==-1&&e[n].splice(r,1)},postMessage(n){setTimeout(async()=>{try{const r={data:await Ks(n)}(e.message||[]).forEach(a=>a(r))}catch{const r={data:{id:n&&n.id}}(e.message||[]).forEach(a=>a(r))}},0)},terminate(){Object.keys(e).forEach(n=>e[n].length=0)}}}const Ci=Jr(()=>Vs(),"markdown",Ys),qr=typeof DOMParser<"u"?new DOMParser:null,ht=()=>Ci.get(),ir=e=>Ci.send(e,3e3),Ke=[];function jn(e){if(e&&(typeof e=="object"||typeof e=="function")){Ke.push(e);try{se.use(e)}catch(t){console.warn("[markdown] failed to apply plugin",t)}}}function Js(e){Ke.length=0,Array.isArray(e)&&Ke.push(...e.filter(t=>t&&typeof t=="object"));try{Ke.forEach(t=>se.use(t))}catch(t){console.warn("[markdown] failed to apply markdown extensions",t)}}async function dn(e){if(Ke&&Ke.length){let{content:i,data:r}=un(e||"");try{i=String(i||"").replace(/:([^:\s]+):/g,(s,u)=>Cn[u]||s)}catch{}se.setOptions({gfm:!0,mangle:!1,headerIds:!1,headerPrefix:""});try{Ke.forEach(s=>se.use(s))}catch(s){console.warn("[markdown] apply plugins failed",s)}const a=se.parse(i);try{const s=qr||(typeof DOMParser<"u"?new DOMParser:null);if(s){const u=s.parseFromString(a,"text/html"),o=u.querySelectorAll("h1,h2,h3,h4,h5,h6"),l=[],c=new Set,f=h=>{try{return String(h||"").toLowerCase().trim().replace(/[^a-z0-9\-\s]+/g,"").replace(/\s+/g,"-")}catch{return"heading"}},m=h=>{const d={1:"is-size-3-mobile is-size-2-tablet is-size-1-desktop",2:"is-size-4-mobile is-size-3-tablet is-size-2-desktop",3:"is-size-5-mobile is-size-4-tablet is-size-3-desktop",4:"is-size-6-mobile is-size-5-tablet is-size-4-desktop",5:"is-size-6-mobile is-size-6-tablet is-size-5-desktop",6:"is-size-6-mobile is-size-6-tablet is-size-6-desktop"},p=h<=2?"has-text-weight-bold":h<=4?"has-text-weight-semibold":"has-text-weight-normal";return(d[h]+" "+p).trim()};o.forEach(h=>{try{const d=Number(h.tagName.substring(1)),p=(h.textContent||"").trim();let g=f(p)||"heading",w=g,y=2;for(;c.has(w);)w=g+"-"+y,y+=1;c.add(w),h.id=w,h.className=m(d),l.push({level:d,text:p,id:w})}catch{}});try{u.querySelectorAll("img").forEach(h=>{try{const d=h.getAttribute&&h.getAttribute("loading"),p=h.getAttribute&&h.getAttribute("data-want-lazy");!d&&!p&&h.setAttribute&&h.setAttribute("loading","lazy")}catch{}})}catch{}try{u.querySelectorAll("pre code, code[class]").forEach(h=>{try{const d=h.getAttribute&&h.getAttribute("class")||h.className||"",p=String(d||"").replace(/\blanguage-undefined\b|\blang-undefined\b/g,"").trim();if(p)try{h.setAttribute&&h.setAttribute("class",p)}catch{h.className=p}else try{h.removeAttribute&&h.removeAttribute("class")}catch{h.className=""}}catch{}})}catch{}return{html:u.body.innerHTML,meta:r||{},toc:l}}}catch{}return{html:a,meta:r||{},toc:[]}}let t;if(typeof process<"u"&&process.env&&process.env.VITEST)try{const i=await Promise.resolve().then(()=>Mi);t=i.initRendererWorker&&i.initRendererWorker()}catch{t=ht&&ht()}else t=ht&&ht();try{e=String(e||"").replace(/:([^:\s]+):/g,(i,r)=>Cn[r]||i)}catch{}try{if(typeof de<"u"&&de&&typeof de.getLanguage=="function"&&de.getLanguage("plaintext")&&/```\s*\n/.test(String(e||""))){let{content:i,data:r}=un(e||"");try{i=String(i||"").replace(/:([^:\s]+):/g,(l,c)=>Cn[c]||l)}catch{}se.setOptions({gfm:!0,headerIds:!0,mangle:!1,highlighted:(l,c)=>{try{return c&&de.getLanguage&&de.getLanguage(c)?de.highlight(l,{language:c}).value:de&&typeof de.getLanguage=="function"&&de.getLanguage("plaintext")?de.highlight(l,{language:"plaintext"}).value:l}catch{return l}}});let a=se.parse(i);try{a=a.replace(/<pre><code>([\s\S]*?)<\/code><\/pre>/g,(l,c)=>{try{if(c&&de&&typeof de.highlight=="function")try{const f=de.highlight(c,{language:"plaintext"});return`<pre><code>${f&&f.value?f.value:f}</code></pre>`}catch{try{if(de&&typeof de.highlightElement=="function"){const m={innerHTML:c};return de.highlightElement(m),`<pre><code>${m.innerHTML}</code></pre>`}}catch{}}}catch{}return l})}catch{}const s=[],u=new Set,o=l=>{try{return String(l||"").toLowerCase().trim().replace(/[^a-z0-9\-\s]+/g,"").replace(/\s+/g,"-")}catch{return"heading"}};return a=a.replace(/<h([1-6])([^>]*)>([\s\S]*?)<\/h\1>/g,(l,c,f,m)=>{const h=Number(c),d=m.replace(/<[^>]+>/g,"").trim();let p=o(d)||"heading",g=p,w=2;for(;u.has(g);)g=p+"-"+w,w+=1;u.add(g),s.push({level:h,text:d,id:g});const y={1:"is-size-3-mobile is-size-2-tablet is-size-1-desktop",2:"is-size-4-mobile is-size-3-tablet is-size-2-desktop",3:"is-size-5-mobile is-size-4-tablet is-size-3-desktop",4:"is-size-6-mobile is-size-5-tablet is-size-4-desktop",5:"is-size-6-mobile is-size-6-tablet is-size-5-desktop",6:"is-size-6-mobile is-size-6-tablet is-size-6-desktop"},k=h<=2?"has-text-weight-bold":h<=4?"has-text-weight-semibold":"has-text-weight-normal",v=(y[h]+" "+k).trim(),N=((f||"").replace(/\s*(id|class)="[^"]*"/g,"")+` id="${g}" class="${v}"`).trim();return`<h${h} ${N}>${m}</h${h}>`}),a=a.replace(/<img([^>]*)>/g,(l,c)=>/\bloading=/.test(c)?`<img${c}>`:/\bdata-want-lazy=/.test(c)?`<img${c}>`:`<img${c} loading="lazy">`),{html:a,meta:r||{},toc:s}}}catch{}if(!t)throw new Error("renderer worker required but unavailable");const n=await ir({type:"render",md:e});if(!n||typeof n!="object"||n.html===void 0)throw new Error("renderer worker returned invalid response");try{const i=new Map,r=[],a=o=>{try{return String(o||"").toLowerCase().trim().replace(/[^a-z0-9\-\s]+/g,"").replace(/\s+/g,"-")}catch{return"heading"}},s=o=>{const l={1:"is-size-3-mobile is-size-2-tablet is-size-1-desktop",2:"is-size-4-mobile is-size-3-tablet is-size-2-desktop",3:"is-size-5-mobile is-size-4-tablet is-size-3-desktop",4:"is-size-6-mobile is-size-5-tablet is-size-4-desktop",5:"is-size-6-mobile is-size-6-tablet is-size-5-desktop",6:"is-size-6-mobile is-size-6-tablet is-size-6-desktop"},c=o<=2?"has-text-weight-bold":o<=4?"has-text-weight-semibold":"has-text-weight-normal";return(l[o]+" "+c).trim()};let u=n.html;u=u.replace(/<h([1-6])([^>]*)>([\s\S]*?)<\/h\1>/g,(o,l,c,f)=>{const m=Number(l),h=f.replace(/<[^>]+>/g,"").trim(),d=(c||"").match(/\sid="([^"]+)"/),p=d?d[1]:a(h)||"heading",w=(i.get(p)||0)+1;i.set(p,w);const y=w===1?p:p+"-"+w;r.push({level:m,text:h,id:y});const k=s(m),$=((c||"").replace(/\s*(id|class)="[^"]*"/g,"")+` id="${y}" class="${k}"`).trim();return`<h${m} ${$}>${f}</h${m}>`});try{const o=typeof document<"u"&&document.documentElement&&document.documentElement.getAttribute&&document.documentElement.getAttribute("data-nimbi-logo-moved")||"";if(o){const l=qr||(typeof DOMParser<"u"?new DOMParser:null);if(l){const c=l.parseFromString(u,"text/html");c.querySelectorAll("img").forEach(m=>{try{const h=m.getAttribute("src")||"";(h?new URL(h,location.href).toString():"")===o&&m.remove()}catch{}}),u=c.body.innerHTML}else try{const c=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");u=u.replace(new RegExp(`<img[^>]*src=\\"${c}\\"[^>]*>`,"g"),"")}catch{}}}catch{}return{html:u,meta:n.meta||{},toc:r}}catch{return{html:n.html,meta:n.meta||{},toc:n.toc||[]}}}function Pt(e,t){const n=new Set,i=/```\s*([a-zA-Z0-9_\-+]+)?/g,r=new Set(["then","now","if","once","so","and","or","but","when","the","a","an","as","let","const","var","export","import","from","true","false","null","npm","run","echo","sudo","this","that","have","using","some","return","returns","function","console","log","error","warn","class","new","undefined","with","select","from","where","join","on","group","order","by","having","as","into","values","like","limit","offset","create","table","index","view","insert","update","delete","returning","and","or","not","all","any","exists","case","when","then","else","end","distance","geometry","you","which","would","why","cool","other","same","everything","check"]),a=new Set(["bash","sh","zsh","javascript","js","python","py","php","java","c","cpp","rust","go","ruby","perl","r","scala","swift","kotlin","cs","csharp","html","css","json","xml","yaml","yml","dockerfile","docker"]);let s;for(;s=i.exec(e);)if(s[1]){const u=s[1].toLowerCase();if(Fn.has(u)||t&&t.size&&u.length<3&&!t.has(u)&&!(Oe&&Oe[u]&&t.has(Oe[u])))continue;if(t&&t.size){if(t.has(u)){const l=t.get(u);l&&n.add(l);continue}if(Oe&&Oe[u]){const l=Oe[u];if(t.has(l)){const c=t.get(l)||l;n.add(c);continue}}}(a.has(u)||u.length>=5&&u.length<=30&&/^[a-z][a-z0-9_\-+]*$/.test(u)&&!r.has(u))&&n.add(u)}return n}async function Un(e,t){if(Ke&&Ke.length||typeof process<"u"&&process.env&&process.env.VITEST)return Pt(e||"",t);if(ht&&ht())try{const i=t&&t.size?Array.from(t.keys()):[],r=await ir({type:"detect",md:String(e||""),supported:i});if(Array.isArray(r))return new Set(r)}catch(i){console.warn("[markdown] detectFenceLanguagesAsync worker failed",i)}return Pt(e||"",t)}const Mi=Object.freeze(Object.defineProperty({__proto__:null,_sendToRenderer:ir,addMarkdownExtension:jn,detectFenceLanguages:Pt,detectFenceLanguagesAsync:Un,initRendererWorker:ht,markdownPlugins:Ke,parseMarkdownToHtml:dn,setMarkdownExtensions:Js},Symbol.toStringTag,{value:"Module"})),eo=`import { _rewriteAnchors } from '../htmlBuilder.js'
|
|
1403
1403
|
|
|
1404
1404
|
/**
|
|
1405
1405
|
* Worker entrypoint for rewriting anchor hrefs inside rendered HTML.
|
|
@@ -1463,9 +1463,9 @@ export async function handleAnchorWorkerMessage(msg) {
|
|
|
1463
1463
|
return { id: msg && msg.id, error: String(e) }
|
|
1464
1464
|
}
|
|
1465
1465
|
}
|
|
1466
|
-
`;onmessage=async e=>{const t=e.data||{};try{if(t.type==="rewriteAnchors"){const{id:n,html:i,contentBase:r,pagePath:a}=t;try{const c=new DOMParser().parseFromString(i||"","text/html"),o=c.body;await ir(o,r,a),postMessage({id:n,result:c.body.innerHTML})}catch(s){postMessage({id:n,error:String(s)})}return}}catch(n){postMessage({id:t.id,error:String(n)})}};async function to(e){try{if(e&&e.type==="rewriteAnchors"){const{id:t,html:n,contentBase:i,pagePath:r}=e;try{const s=new DOMParser().parseFromString(n||"","text/html"),c=s.body;return await ir(c,i,r),{id:t,result:s.body.innerHTML}}catch(a){return{id:t,error:String(a)}}}return{id:e&&e.id,error:"unsupported message"}}catch(t){return{id:e&&e.id,error:String(t)}}}const no=typeof globalThis<"u"&&typeof globalThis.__nimbiCMSDebug<"u"?!!globalThis.__nimbiCMSDebug:!1;function ro(...e){try{no&&console&&typeof console.warn=="function"&&console.warn(...e)}catch{}}function io(e,t){try{return new URL(e,t).pathname}catch{try{return new URL(e,typeof location<"u"?location.href:"http://localhost/").pathname}catch{try{return(String(t||"").replace(/\/$/,"")+"/"+String(e||"").replace(/^\//,"")).replace(/\/\\+/g,"/")}catch{return String(e||"")}}}}function ao(e,t){const n=document.createElement("aside");n.className="menu box nimbi-nav";const i=document.createElement("p");i.className="menu-label",i.textContent=e("navigation"),n.appendChild(i);const r=document.createElement("ul");return r.className="menu-list",t.forEach(a=>{const s=document.createElement("li"),c=document.createElement("a");if(c.href="#"+a.path,c.textContent=a.name,s.appendChild(c),a.children&&a.children.length){const o=document.createElement("ul");a.children.forEach(l=>{const u=document.createElement("li"),p=document.createElement("a");p.href="#"+l.path,p.textContent=l.name,u.appendChild(p),o.appendChild(u)}),s.appendChild(o)}r.appendChild(s)}),n.appendChild(r),n}function so(e,t,n=""){const i=document.createElement("aside");i.className="menu box nimbi-toc-inner is-hidden-mobile";const r=document.createElement("p");r.className="menu-label",r.textContent=e("onThisPage"),i.appendChild(r);const a=document.createElement("ul");a.className="menu-list";try{const c={};(t||[]).forEach(o=>{try{if(!o||o.level===1)return;const l=Number(o.level)>=2?Number(o.level):2,u=document.createElement("li"),p=document.createElement("a"),m=Ma(o.text||""),h=o.id||pe(m);p.textContent=m;try{const w=String(n||"").replace(/^[\\.\\/]+/,""),y=w&&G&&G.has&&G.has(w)?G.get(w):w;y?p.href=_e(y,h):p.href=`#${encodeURIComponent(h)}`}catch(w){console.warn("[htmlBuilder] buildTocElement href normalization failed",w),p.href=`#${encodeURIComponent(h)}`}if(u.appendChild(p),l===2){a.appendChild(u),c[2]=u,Object.keys(c).forEach(w=>{Number(w)>2&&delete c[w]});return}let d=l-1;for(;d>2&&!c[d];)d--;d<2&&(d=2);let g=c[d];if(!g){a.appendChild(u),c[l]=u;return}let f=g.querySelector("ul");f||(f=document.createElement("ul"),g.appendChild(f)),f.appendChild(u),c[l]=u}catch(l){console.warn("[htmlBuilder] buildTocElement item failed",l,o)}})}catch(c){console.warn("[htmlBuilder] buildTocElement failed",c)}return i.appendChild(a),a.querySelectorAll("li").length<=1?null:i}function Mi(e){e.querySelectorAll("h1,h2,h3,h4,h5,h6").forEach(n=>{n.id||(n.id=pe(n.textContent||""))})}function oo(e,t,n){try{const i=e.querySelectorAll("img");if(i&&i.length){const r=t&&t.includes("/")?t.substring(0,t.lastIndexOf("/")+1):"";i.forEach(a=>{const s=a.getAttribute("src")||"";if(s&&!(/^(https?:)?\/\//.test(s)||s.startsWith("/")))try{const c=new URL(r+s,n).toString();a.src=c;try{a.getAttribute("loading")||a.setAttribute("data-want-lazy","1")}catch(o){console.warn("[htmlBuilder] set image loading attribute failed",o)}}catch(c){console.warn("[htmlBuilder] resolve image src failed",c)}})}}catch(i){console.warn("[htmlBuilder] lazyLoadImages failed",i)}}function qr(e,t,n){try{const i=t&&t.includes("/")?t.substring(0,t.lastIndexOf("/")+1):"";let r=null;try{const s=new URL(n,location.href);r=new URL(i||".",s).toString()}catch{try{r=new URL(i||".",location.href).toString()}catch{r=i||"./"}}const a=e.querySelectorAll("*");for(const s of Array.from(a||[]))try{const c=s.tagName?s.tagName.toLowerCase():"",o=l=>{try{const u=s.getAttribute(l)||"";if(!u||/^(https?:)?\/\//i.test(u)||u.startsWith("/")||u.startsWith("#"))return;try{s.setAttribute(l,new URL(u,r).toString())}catch(p){console.warn("[htmlBuilder] rewrite asset attribute failed",l,u,p)}}catch(u){console.warn("[htmlBuilder] rewriteAttr failed",u)}};if(s.hasAttribute&&s.hasAttribute("src")&&o("src"),s.hasAttribute&&s.hasAttribute("href")&&c!=="a"&&o("href"),s.hasAttribute&&s.hasAttribute("xlink:href")&&o("xlink:href"),s.hasAttribute&&s.hasAttribute("poster")&&o("poster"),s.hasAttribute("srcset")){const p=(s.getAttribute("srcset")||"").split(",").map(m=>m.trim()).filter(Boolean).map(m=>{const[h,d]=m.split(/\s+/,2);if(!h||/^(https?:)?\/\//i.test(h)||h.startsWith("/"))return m;try{const g=new URL(h,r).toString();return d?`${g} ${d}`:g}catch{return m}}).join(", ");s.setAttribute("srcset",p)}}catch(c){console.warn("[htmlBuilder] rewriteRelativeAssets node processing failed",c)}}catch(i){console.warn("[htmlBuilder] rewriteRelativeAssets failed",i)}}let Dr="",Cn=null,Hr="";async function ir(e,t,n){try{const i=e.querySelectorAll("a");if(!i||!i.length)return;let r,a;if(t===Dr&&Cn)r=Cn,a=Hr;else{try{r=new URL(t,location.href),a=Bt(r.pathname)}catch{try{r=new URL(t,location.href),a=Bt(r.pathname)}catch{r=null,a="/"}}Dr=t,Cn=r,Hr=a}const s=new Set,c=[],o=new Set,l=[];for(const u of Array.from(i))try{const p=u.getAttribute("href")||"";if(!p||Jr(p))continue;try{if(p.startsWith("?")||p.indexOf("?")!==-1)try{const h=new URL(p,t||location.href),d=h.searchParams.get("page");if(d&&d.indexOf("/")===-1&&n){const g=n.includes("/")?n.substring(0,n.lastIndexOf("/")+1):"";if(g){const f=xe(g+d);u.setAttribute("href",_e(f,h.hash?h.hash.replace(/^#/,""):null));continue}}}catch{}}catch{}if(p.startsWith("/")&&!p.endsWith(".md"))continue;const m=p.match(/^([^#?]+\.md)(?:[#](.+))?$/);if(m){let h=m[1];const d=m[2];!h.startsWith("/")&&n&&(h=(n.includes("/")?n.substring(0,n.lastIndexOf("/")+1):"")+h);try{const g=new URL(h,t).pathname;let f=g.startsWith(a)?g.slice(a.length):g;f=xe(f),c.push({node:u,mdPathRaw:h,frag:d,rel:f}),G.has(f)||s.add(f)}catch(g){console.warn("[htmlBuilder] resolve mdPath failed",g)}continue}try{let h=p;!p.startsWith("/")&&n&&(p.startsWith("#")?h=n+p:h=(n.includes("/")?n.substring(0,n.lastIndexOf("/")+1):"")+p);const g=new URL(h,t).pathname||"";if(g&&g.indexOf(a)!==-1){let f=g.startsWith(a)?g.slice(a.length):g;if(f=xe(f),f=Dt(f),f||(f="_home"),!f.endsWith(".md")){let w=null;try{if(G&&G.has&&G.has(f))w=G.get(f);else try{const y=String(f||"").replace(/^.*\//,"");y&&G.has&&G.has(y)&&(w=G.get(y))}catch(y){console.warn("[htmlBuilder] mdToSlug baseName check failed",y)}}catch(y){console.warn("[htmlBuilder] mdToSlug access check failed",y)}if(!w)try{const y=String(f||"").replace(/^.*\//,"");for(const[k,L]of re||[])if(L===f||L===y){w=k;break}}catch{}w?u.setAttribute("href",_e(w)):(o.add(f),l.push({node:u,rel:f}))}}}catch(h){console.warn("[htmlBuilder] resolving href to URL failed",h)}}catch(p){console.warn("[htmlBuilder] processing anchor failed",p)}s.size&&await Promise.all(Array.from(s).map(async u=>{try{try{const m=String(u).match(/([^\/]+)\.md$/),h=m&&m[1];if(h&&re.has(h)){try{const d=re.get(h);if(d)try{G.set(d,h)}catch(g){console.warn("[htmlBuilder] mdToSlug.set failed",g)}}catch(d){console.warn("[htmlBuilder] reading slugToMd failed",d)}return}}catch(m){console.warn("[htmlBuilder] basename slug lookup failed",m)}const p=await Ce(u,t);if(p&&p.raw){const m=(p.raw||"").match(/^#\s+(.+)$/m);if(m&&m[1]){const h=pe(m[1].trim());if(h)try{re.set(h,u),G.set(u,h)}catch(d){console.warn("[htmlBuilder] setting slug mapping failed",d)}}}}catch(p){console.warn("[htmlBuilder] fetchMarkdown during rewriteAnchors failed",p)}})),o.size&&await Promise.all(Array.from(o).map(async u=>{try{const p=await Ce(u,t);if(p&&p.raw)try{const h=(ar||new DOMParser).parseFromString(p.raw,"text/html"),d=h.querySelector("title"),g=h.querySelector("h1"),f=d&&d.textContent&&d.textContent.trim()?d.textContent.trim():g&&g.textContent?g.textContent.trim():null;if(f){const w=pe(f);if(w)try{re.set(w,u),G.set(u,w)}catch(y){console.warn("[htmlBuilder] setting html slug mapping failed",y)}}}catch(m){console.warn("[htmlBuilder] parse fetched HTML failed",m)}}catch(p){console.warn("[htmlBuilder] fetchMarkdown for htmlPending failed",p)}}));for(const u of c){const{node:p,frag:m,rel:h}=u;let d=null;try{G.has(h)&&(d=G.get(h))}catch(g){console.warn("[htmlBuilder] mdToSlug access failed",g)}d?p.setAttribute("href",_e(d,m)):p.setAttribute("href",_e(h,m))}for(const u of l){const{node:p,rel:m}=u;let h=null;try{G.has(m)&&(h=G.get(m))}catch(d){console.warn("[htmlBuilder] mdToSlug access failed for htmlAnchorInfo",d)}if(!h)try{const d=String(m||"").replace(/^.*\//,"");G.has(d)&&(h=G.get(d))}catch(d){console.warn("[htmlBuilder] mdToSlug baseName access failed for htmlAnchorInfo",d)}h?p.setAttribute("href",_e(h)):p.setAttribute("href",_e(m))}}catch(i){console.warn("[htmlBuilder] rewriteAnchors failed",i)}}function lo(e,t,n,i){const r=t.querySelector("h1"),a=r?(r.textContent||"").trim():"";let s="";try{let c="";try{e&&e.meta&&e.meta.title&&(c=String(e.meta.title).trim())}catch{}if(!c&&a&&(c=a),!c)try{const o=t.querySelector("h2");o&&o.textContent&&(c=String(o.textContent).trim())}catch{}!c&&n&&(c=String(n)),c&&(s=pe(c)),s||(s="_home");try{n&&(re.set(s,n),G.set(n,s))}catch(o){console.warn("[htmlBuilder] computeSlug set slug mapping failed",o)}try{const o=i||(location.hash?decodeURIComponent(location.hash.replace(/^#/,"")):"");try{history.replaceState({page:s},"",_e(s,o))}catch(l){console.warn("[htmlBuilder] computeSlug history replace failed",l)}}catch(o){console.warn("[htmlBuilder] computeSlug inner failed",o)}}catch(c){console.warn("[htmlBuilder] computeSlug failed",c)}try{if(e&&e.meta&&e.meta.title&&r){const c=String(e.meta.title).trim();if(c&&c!==a){try{s&&(r.id=s)}catch{}try{if(Array.isArray(e.toc))for(const o of e.toc)try{if(o&&Number(o.level)===1&&String(o.text).trim()===(a||"").trim()){o.id=s;break}}catch{}}catch{}}}}catch{}return{topH1:r,h1Text:a,slugKey:s}}async function co(e,t){if(!e||!e.length)return;const n=new Set;for(const o of Array.from(e||[]))try{const l=o.getAttribute("href")||"";if(!l)continue;let m=xe(l).split(/::|#/,2)[0];try{const d=m.indexOf("?");d!==-1&&(m=m.slice(0,d))}catch{}if(!m||(m.includes(".")||(m=m+".html"),!/\.html(?:$|[?#])/.test(m)&&!m.toLowerCase().endsWith(".html")))continue;const h=m;try{if(G&&G.has&&G.has(h))continue}catch(d){console.warn("[htmlBuilder] mdToSlug check failed",d)}try{let d=!1;for(const g of re.values())if(g===h){d=!0;break}if(d)continue}catch(d){console.warn("[htmlBuilder] slugToMd iteration failed",d)}n.add(h)}catch(l){console.warn("[htmlBuilder] preScanHtmlSlugs anchor iteration failed",l)}if(!n.size)return;const i=async o=>{try{const l=await Ce(o,t);if(l&&l.raw)try{const p=(ar||new DOMParser).parseFromString(l.raw,"text/html"),m=p.querySelector("title"),h=p.querySelector("h1"),d=m&&m.textContent&&m.textContent.trim()?m.textContent.trim():h&&h.textContent?h.textContent.trim():null;if(d){const g=pe(d);if(g)try{re.set(g,o),G.set(o,g)}catch(f){console.warn("[htmlBuilder] set slugToMd/mdToSlug failed",f)}}}catch(u){console.warn("[htmlBuilder] parse HTML title failed",u)}}catch(l){console.warn("[htmlBuilder] fetchAndExtract failed",l)}},r=5,a=Array.from(n);let s=0;const c=[];for(;s<a.length;){const o=a.slice(s,s+r);c.push(Promise.all(o.map(i))),s+=r}await Promise.all(c)}async function uo(e,t){if(!e||!e.length)return;const n=[],i=new Set;let r="";try{const a=new URL(t,typeof location<"u"?location.href:"http://localhost/");r=Bt(a.pathname)}catch(a){r="",console.warn("[htmlBuilder] preMapMdSlugs parse base failed",a)}for(const a of Array.from(e||[]))try{const s=a.getAttribute("href")||"";if(!s)continue;const c=s.match(/^([^#?]+\.md)(?:[#](.+))?$/);if(c){let o=xe(c[1]);try{let l;try{l=io(o,t)}catch(p){l=o,console.warn("[htmlBuilder] resolve mdPath URL failed",p)}const u=l&&r&&l.startsWith(r)?l.slice(r.length):String(l||"").replace(/^\//,"");n.push({rel:u}),G.has(u)||i.add(u)}catch(l){console.warn("[htmlBuilder] rewriteAnchors failed",l)}continue}}catch(s){console.warn("[htmlBuilder] preMapMdSlugs anchor iteration failed",s)}i.size&&await Promise.all(Array.from(i).map(async a=>{try{const s=String(a).match(/([^\/]+)\.md$/),c=s&&s[1];if(c&&re.has(c)){try{const o=re.get(c);o&&G.set(o,c)}catch(o){console.warn("[htmlBuilder] preMapMdSlugs slug map access failed",o)}return}}catch(s){console.warn("[htmlBuilder] preMapMdSlugs basename check failed",s)}try{const s=await Ce(a,t);if(s&&s.raw){const c=(s.raw||"").match(/^#\s+(.+)$/m);if(c&&c[1]){const o=pe(c[1].trim());if(o)try{re.set(o,a),G.set(a,o)}catch(l){console.warn("[htmlBuilder] preMapMdSlugs setting slug mapping failed",l)}}}}catch(s){console.warn("[htmlBuilder] preMapMdSlugs fetch failed",s)}}))}const ar=typeof DOMParser<"u"?new DOMParser:null;function Mn(e){try{const n=(ar||new DOMParser).parseFromString(e||"","text/html");Mi(n);try{n.querySelectorAll("img").forEach(o=>{try{o.getAttribute("loading")||o.setAttribute("data-want-lazy","1")}catch(l){console.warn("[htmlBuilder] parseHtml set image loading attribute failed",l)}})}catch(c){console.warn("[htmlBuilder] parseHtml query images failed",c)}n.querySelectorAll("pre code, code[class]").forEach(c=>{try{const o=c.getAttribute&&c.getAttribute("class")||c.className||"",l=o.match(/language-([a-zA-Z0-9_+-]+)/)||o.match(/lang(?:uage)?-?([a-zA-Z0-9_+-]+)/);if(l&&l[1]){const u=(l[1]||"").toLowerCase(),p=ae.size&&(ae.get(u)||ae.get(String(u).toLowerCase()))||u;try{(async()=>{try{await yt(p)}catch(m){console.warn("[htmlBuilder] registerLanguage failed",m)}})()}catch(m){console.warn("[htmlBuilder] schedule registerLanguage failed",m)}}else try{if(de&&typeof de.getLanguage=="function"&&de.getLanguage("plaintext")){const u=de.highlight?de.highlight(c.textContent||"",{language:"plaintext"}):null;u&&u.value&&(c.innerHTML=u.value)}}catch(u){console.warn("[htmlBuilder] plaintext highlight fallback failed",u)}}catch(o){console.warn("[htmlBuilder] code element processing failed",o)}});const r=[];n.querySelectorAll("h1,h2,h3,h4,h5,h6").forEach(c=>{r.push({level:Number(c.tagName.substring(1)),text:(c.textContent||"").trim(),id:c.id})});const s={};try{const c=n.querySelector("title");c&&c.textContent&&String(c.textContent).trim()&&(s.title=String(c.textContent).trim())}catch{}return{html:n.body.innerHTML,meta:s,toc:r}}catch(t){return console.warn("[htmlBuilder] parseHtml failed",t),{html:e||"",meta:{},toc:[]}}}async function ho(e){const t=jn?await jn(e||"",ae):zt(e||"",ae),n=new Set(t),i=[];for(const r of n)try{const a=ae.size&&(ae.get(r)||ae.get(String(r).toLowerCase()))||r;try{i.push(yt(a))}catch(s){console.warn("[htmlBuilder] ensureLanguages push canonical failed",s)}if(String(r)!==String(a))try{i.push(yt(r))}catch(s){console.warn("[htmlBuilder] ensureLanguages push alias failed",s)}}catch(a){console.warn("[htmlBuilder] ensureLanguages inner failed",a)}try{await Promise.all(i)}catch(r){console.warn("[htmlBuilder] ensureLanguages failed",r)}}async function po(e){if(await ho(e),hn){const t=await hn(e||"");return!t||typeof t!="object"?{html:String(e||""),meta:{},toc:[]}:(Array.isArray(t.toc)||(t.toc=[]),t.meta||(t.meta={}),t)}return{html:String(e||""),meta:{},toc:[]}}async function go(e,t,n,i,r){let a=null;if(t.isHtml)try{const p=typeof DOMParser<"u"?new DOMParser:null;if(p){const m=p.parseFromString(t.raw||"","text/html");try{qr(m.body,n,r)}catch(h){console.warn("[htmlBuilder] rewriteRelativeAssets failed in prepareArticle (inner)",h)}a=Mn(m.documentElement&&m.documentElement.outerHTML?m.documentElement.outerHTML:t.raw||"")}else a=Mn(t.raw||"")}catch{a=Mn(t.raw||"")}else a=await po(t.raw||"");const s=document.createElement("article");s.className="nimbi-article content",s.innerHTML=a.html;try{qr(s,n,r)}catch(p){console.warn("[htmlBuilder] rewriteRelativeAssets failed in prepareArticle",p)}try{Mi(s)}catch(p){console.warn("[htmlBuilder] addHeadingIds failed",p)}try{s.querySelectorAll("pre code, code[class]").forEach(m=>{try{const h=m.getAttribute&&m.getAttribute("class")||m.className||"",d=String(h||"").replace(/\blanguage-undefined\b|\blang-undefined\b/g,"").trim();if(d)try{m.setAttribute&&m.setAttribute("class",d)}catch(g){m.className=d,console.warn("[htmlBuilder] set element class failed",g)}else try{m.removeAttribute&&m.removeAttribute("class")}catch(g){m.className="",console.warn("[htmlBuilder] remove element class failed",g)}}catch(h){console.warn("[htmlBuilder] code element cleanup failed",h)}})}catch(p){console.warn("[htmlBuilder] processing code elements failed",p)}try{Gr(s)}catch(p){console.warn("[htmlBuilder] observeCodeBlocks failed",p)}oo(s,n,r);try{(s.querySelectorAll&&s.querySelectorAll("img")||[]).forEach(m=>{try{const h=m.parentElement;if(!h||h.tagName.toLowerCase()!=="p"||h.childNodes.length!==1)return;const d=document.createElement("figure");d.className="image",h.replaceWith(d),d.appendChild(m)}catch{}})}catch(p){console.warn("[htmlBuilder] wrap images in Bulma image helper failed",p)}try{(s.querySelectorAll&&s.querySelectorAll("table")||[]).forEach(m=>{try{if(m.classList)m.classList.contains("table")||m.classList.add("table");else{const h=m.getAttribute&&m.getAttribute("class")?m.getAttribute("class"):"",d=String(h||"").split(/\s+/).filter(Boolean);d.indexOf("table")===-1&&d.push("table");try{m.setAttribute&&m.setAttribute("class",d.join(" "))}catch{m.className=d.join(" ")}}}catch{}})}catch(p){console.warn("[htmlBuilder] add Bulma table class failed",p)}const{topH1:c,h1Text:o,slugKey:l}=lo(a,s,n,i);try{if(c&&a&&a.meta&&(a.meta.author||a.meta.date)&&!(c.parentElement&&c.parentElement.querySelector&&c.parentElement.querySelector(".nimbi-article-subtitle"))){const m=a.meta.author?String(a.meta.author).trim():"",h=a.meta.date?String(a.meta.date).trim():"";let d="";try{const f=new Date(h);h&&!isNaN(f.getTime())?d=f.toLocaleDateString():d=h}catch{d=h}const g=[];if(m&&g.push(m),d&&g.push(d),g.length){const f=document.createElement("p"),w=g[0]?String(g[0]).replace(/"/g,"").trim():"",y=g.slice(1);if(f.className="nimbi-article-subtitle is-6 has-text-grey-light",w){const k=document.createElement("span");k.className="nimbi-article-author",k.textContent=w,f.appendChild(k)}if(y.length){const k=document.createElement("span");k.className="nimbi-article-meta",k.textContent=y.join(" • "),f.appendChild(k)}try{c.parentElement.insertBefore(f,c.nextSibling)}catch{try{c.insertAdjacentElement("afterend",f)}catch{}}}}}catch{}try{await wo(s,r,n)}catch(p){ro("[htmlBuilder] rewriteAnchorsWorker failed, falling back to main thread",p),await ir(s,r,n)}const u=so(e,a.toc,n);return{article:s,parsed:a,toc:u,topH1:c,h1Text:o,slugKey:l}}function fo(e){if(!(!e||!e.querySelectorAll))try{const t=Array.from(e.querySelectorAll("script"));for(const n of t)try{const i=document.createElement("script");for(const a of Array.from(n.attributes||[]))try{i.setAttribute(a.name,a.value)}catch{}if(!n.src){const a=n.textContent||"";let s=!1;try{new Function(a)(),s=!0}catch{s=!1}if(s){n.parentNode&&n.parentNode.removeChild(n);try{console.info("[htmlBuilder] executed inline script via Function")}catch{}continue}try{i.type="module"}catch{}i.textContent=a}if(n.src)try{if(document.querySelector&&document.querySelector(`script[src="${n.src}"]`)){n.parentNode&&n.parentNode.removeChild(n);continue}}catch{}const r=n.src||"<inline>";i.addEventListener("error",a=>{try{console.warn("[htmlBuilder] injected script error",{src:r,ev:a})}catch{}}),i.addEventListener("load",()=>{try{console.info("[htmlBuilder] injected script loaded",{src:r,hasNimbi:!!(window&&window.nimbiCMS)})}catch{}});try{(document.head||document.body||document.documentElement).appendChild(i)}catch{try{try{i.type="text/javascript"}catch{}(document.head||document.body||document.documentElement).appendChild(i)}catch(s){try{console.warn("[htmlBuilder] injected script append failed, skipping",{src:r,err:s})}catch{}}}n.parentNode&&n.parentNode.removeChild(n);try{console.info("[htmlBuilder] executed injected script",r)}catch{}}catch(i){console.warn("[htmlBuilder] execute injected script failed",i)}}catch{}}function jr(e,t,n){e&&(e.innerHTML="");const i=document.createElement("article");i.className="nimbi-article content nimbi-not-found";const r=document.createElement("h1");r.textContent=t&&t("notFound")||"Page not found";const a=document.createElement("p");a.textContent=n&&n.message?String(n.message):"Failed to resolve the requested page.",i.appendChild(r),i.appendChild(a),e&&e.appendChild&&e.appendChild(i)}const Ri=La(()=>{const e=Lt(eo);if(e)try{if(!(typeof process<"u"&&process.env&&process.env.VITEST))return e}catch{return e}const t={message:[],error:[]};return{addEventListener(n,i){t[n]||(t[n]=[]),t[n].push(i)},removeEventListener(n,i){if(!t[n])return;const r=t[n].indexOf(i);r!==-1&&t[n].splice(r,1)},postMessage(n){setTimeout(async()=>{try{const r={data:await to(n)};(t.message||[]).forEach(a=>a(r))}catch(i){const r={data:{id:n&&n.id,error:String(i)}};(t.message||[]).forEach(a=>a(r))}},0)},terminate(){Object.keys(t).forEach(n=>t[n].length=0)}}},"anchor");function mo(){return Ri.get()}function bo(e){return Ri.send(e,2e3)}async function wo(e,t,n){if(!mo())throw new Error("anchor worker unavailable");if(!e||typeof e.innerHTML!="string")throw new Error("invalid article element");const r=String(e.innerHTML),a=await bo({type:"rewriteAnchors",html:r,contentBase:t,pagePath:n});if(a&&typeof a=="string")try{e.innerHTML=a}catch(s){console.warn("[htmlBuilder] applying rewritten anchors failed",s)}}function yo(e){try{e.addEventListener("click",t=>{const n=t.target&&t.target.closest?t.target.closest("a"):null;if(!n)return;const i=n.getAttribute("href")||"";try{const r=new URL(i,location.href),a=r.searchParams.get("page"),s=r.hash?r.hash.replace(/^#/,""):null;if(!a&&!s)return;t.preventDefault();let c=null;try{history&&history.state&&history.state.page&&(c=history.state.page)}catch(o){c=null,console.warn("[htmlBuilder] access history.state failed",o)}try{c||(c=new URL(location.href).searchParams.get("page"))}catch(o){console.warn("[htmlBuilder] parse current location failed",o)}if(!a&&s||a&&c&&String(a)===String(c)){try{if(!a&&s)try{history.replaceState(history.state,"",(location.pathname||"")+(location.search||"")+(s?"#"+encodeURIComponent(s):""))}catch(o){console.warn("[htmlBuilder] history.replaceState failed",o)}else try{history.replaceState({page:c||a},"",_e(c||a,s))}catch(o){console.warn("[htmlBuilder] history.replaceState failed",o)}}catch(o){console.warn("[htmlBuilder] update history for anchor failed",o)}try{t.stopImmediatePropagation&&t.stopImmediatePropagation(),t.stopPropagation&&t.stopPropagation()}catch(o){console.warn("[htmlBuilder] stopPropagation failed",o)}try{Un(s)}catch(o){console.warn("[htmlBuilder] scrollToAnchorOrTop failed",o)}return}history.pushState({page:a},"",_e(a,s));try{if(typeof window<"u"&&typeof window.renderByQuery=="function")try{window.renderByQuery()}catch(o){console.warn("[htmlBuilder] window.renderByQuery failed",o)}else if(typeof window<"u")try{window.dispatchEvent(new PopStateEvent("popstate"))}catch(o){console.warn("[htmlBuilder] dispatch popstate failed",o)}else try{renderByQuery()}catch(o){console.warn("[htmlBuilder] renderByQuery failed",o)}}catch(o){console.warn("[htmlBuilder] SPA navigation invocation failed",o)}}catch(r){console.warn("[htmlBuilder] non-URL href in attachTocClickHandler",r)}})}catch(t){console.warn("[htmlBuilder] attachTocClickHandler failed",t)}}function Un(e){const t=document.querySelector(".nimbi-cms")||null;if(e){const n=document.getElementById(e);if(n)try{const i=()=>{try{if(t&&t.scrollTo&&t.contains(n)){const r=n.getBoundingClientRect().top-t.getBoundingClientRect().top+t.scrollTop;t.scrollTo({top:r,behavior:"smooth"})}else try{n.scrollIntoView({behavior:"smooth",block:"start"})}catch{try{n.scrollIntoView()}catch(a){console.warn("[htmlBuilder] scrollIntoView failed",a)}}}catch{try{n.scrollIntoView()}catch(a){console.warn("[htmlBuilder] final scroll fallback failed",a)}}};try{requestAnimationFrame(()=>setTimeout(i,50))}catch(r){console.warn("[htmlBuilder] scheduling scroll failed",r),setTimeout(i,50)}}catch(i){try{n.scrollIntoView()}catch(r){console.warn("[htmlBuilder] final scroll fallback failed",r)}console.warn("[htmlBuilder] doScroll failed",i)}}else try{t&&t.scrollTo?t.scrollTo({top:0,behavior:"smooth"}):window.scrollTo(0,0)}catch(n){try{window.scrollTo(0,0)}catch(i){console.warn("[htmlBuilder] window.scrollTo failed",i)}console.warn("[htmlBuilder] scroll to top failed",n)}}function ko(e,t,{mountOverlay:n=null,container:i=null,mountEl:r=null,navWrap:a=null,t:s=null}={}){try{const c=s||(g=>typeof g=="string"?g:""),o=i||document.querySelector(".nimbi-cms"),l=r||document.querySelector(".nimbi-mount"),u=n||document.querySelector(".nimbi-overlay"),p=a||document.querySelector(".nimbi-nav-wrap");let h=document.querySelector(".nimbi-scroll-top");if(!h){h=document.createElement("button"),h.className="nimbi-scroll-top button is-primary is-rounded is-small",h.setAttribute("aria-label",c("scrollToTop")),h.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19V6"/><path d="M5 12l7-7 7 7"/></svg>';try{u&&u.appendChild?u.appendChild(h):o&&o.appendChild?o.appendChild(h):l&&l.appendChild?l.appendChild(h):document.body.appendChild(h)}catch{try{document.body.appendChild(h)}catch(f){console.warn("[htmlBuilder] append scroll top button failed",f)}}try{try{Kr(h)}catch{}}catch(g){console.warn("[htmlBuilder] set scroll-top button theme registration failed",g)}h.addEventListener("click",()=>{try{i&&i.scrollTo?i.scrollTo({top:0,left:0,behavior:"smooth"}):r&&r.scrollTo?r.scrollTo({top:0,left:0,behavior:"smooth"}):window.scrollTo({top:0,left:0,behavior:"smooth"})}catch{try{i&&(i.scrollTop=0)}catch(f){console.warn("[htmlBuilder] fallback container scrollTop failed",f)}try{r&&(r.scrollTop=0)}catch(f){console.warn("[htmlBuilder] fallback mountEl scrollTop failed",f)}try{document.documentElement.scrollTop=0}catch(f){console.warn("[htmlBuilder] fallback document scrollTop failed",f)}}})}const d=p&&p.querySelector?p.querySelector(".menu-label"):null;if(t){if(!h._nimbiObserver){const g=new IntersectionObserver(f=>{for(const w of f)w.target instanceof Element&&(w.isIntersecting?(h.classList.remove("show"),d&&d.classList.remove("show")):(h.classList.add("show"),d&&d.classList.add("show")))},{root:i instanceof Element?i:r instanceof Element?r:null,threshold:0});h._nimbiObserver=g}try{h._nimbiObserver.disconnect()}catch(g){console.warn("[htmlBuilder] observer disconnect failed",g)}try{h._nimbiObserver.observe(t)}catch(g){console.warn("[htmlBuilder] observer observe failed",g)}try{const g=()=>{try{const f=o instanceof Element?o.getBoundingClientRect():{top:0,bottom:window.innerHeight},w=t.getBoundingClientRect();!(w.bottom<f.top||w.top>f.bottom)?(h.classList.remove("show"),d&&d.classList.remove("show")):(h.classList.add("show"),d&&d.classList.add("show"))}catch(f){console.warn("[htmlBuilder] checkIntersect failed",f)}};g(),"IntersectionObserver"in window||setTimeout(g,100)}catch(g){console.warn("[htmlBuilder] checkIntersect outer failed",g)}}else{h.classList.remove("show"),d&&d.classList.remove("show");const g=i instanceof Element?i:r instanceof Element?r:window,f=()=>{try{(g===window?window.scrollY:g.scrollTop||0)>10?(h.classList.add("show"),d&&d.classList.add("show")):(h.classList.remove("show"),d&&d.classList.remove("show"))}catch(w){console.warn("[htmlBuilder] onScroll handler failed",w)}};an(()=>g.addEventListener("scroll",f)),f()}}catch(c){console.warn("[htmlBuilder] ensureScrollTopButton failed",c)}}function Ur(e,t){try{if(!e)return;try{const n=e[t];if(typeof n<"u")return n}catch{}try{if(e.default)return e.default[t]}catch{}return}catch{return}}async function _o(e,t,n,i,r,a,s,c,o="eager",l=1,u=void 0,p="favicon"){if(!e||!(e instanceof HTMLElement))throw new TypeError("navbarWrap must be an HTMLElement");const m=typeof DOMParser<"u"?new DOMParser:null,h=m?m.parseFromString(n||"","text/html"):null,d=h?h.querySelectorAll("a"):[];await an(()=>co(d,i)),await an(()=>uo(d,i));try{if(t&&t instanceof HTMLElement&&(!t.hasAttribute||!t.hasAttribute("role")))try{t.setAttribute("role","main")}catch{}}catch{}let g=null,f=null,w=null,y=null,k=null,L=null;function R(){try{const A=document.querySelector(".navbar-burger"),S=A&&A.dataset?A.dataset.target:null,P=S?document.getElementById(S):null;A&&A.classList.contains("is-active")&&(A.classList.remove("is-active"),A.setAttribute("aria-expanded","false"),P&&P.classList.remove("is-active"))}catch(A){console.warn&&console.warn("[nimbi-cms] closeMobileMenu failed",A)}}async function I(){const A=typeof document<"u"?document.querySelector(".nimbi-content"):null;try{A&&A.classList.add("is-inactive")}catch{}try{const S=s&&s();S&&typeof S.then=="function"&&await S}catch(S){try{console.warn&&console.warn("[nimbi-cms] renderByQuery failed",S)}catch{}}finally{try{if(typeof requestAnimationFrame=="function")requestAnimationFrame(()=>{try{A&&A.classList.remove("is-inactive")}catch{}});else try{A&&A.classList.remove("is-inactive")}catch{}}catch{try{A&&A.classList.remove("is-inactive")}catch{}}}}const U=()=>g||(g=(async()=>{try{const A=await Promise.resolve().then(()=>wt),S=Ur(A,"buildSearchIndex")||(typeof globalThis<"u"?globalThis.buildSearchIndex:void 0),P=Ur(A,"buildSearchIndexWorker")||(typeof globalThis<"u"?globalThis.buildSearchIndexWorker:void 0);if(o==="lazy"&&typeof P=="function")try{const C=await P(i,l,u);if(C&&C.length)return C}catch(C){console.warn&&console.warn("[nimbi-cms] worker builder threw",C)}return typeof S=="function"?await S(i,l,u):[]}catch(A){return console.warn("[nimbi-cms] buildSearchIndex failed",A),[]}finally{if(f){try{f.removeAttribute("disabled")}catch{}try{w&&w.classList.remove("is-loading")}catch{}}}})(),g.then(A=>{try{const S=String(f&&f.value||"").trim().toLowerCase();if(!S||!Array.isArray(A)||!A.length)return;const P=A.filter(B=>B.title&&B.title.toLowerCase().includes(S)||B.excerpt&&B.excerpt.toLowerCase().includes(S));if(!P||!P.length)return;const C=document.getElementById("nimbi-search-results");if(!C)return;C.innerHTML="";try{const B=document.createElement("div");B.className="panel nimbi-search-panel",P.slice(0,10).forEach(_=>{try{if(_.parentTitle){const fe=document.createElement("p");fe.className="panel-heading nimbi-search-title nimbi-search-parent",fe.textContent=_.parentTitle,B.appendChild(fe)}const q=document.createElement("a");q.className="panel-block nimbi-search-result",q.href=_e(_.slug),q.setAttribute("role","button");try{if(_.path&&typeof _.slug=="string"){try{re.set(_.slug,_.path)}catch{}try{G.set(_.path,_.slug)}catch{}}}catch{}const ue=document.createElement("div");ue.className="is-size-6 has-text-weight-semibold",ue.textContent=_.title,q.appendChild(ue),q.addEventListener("click",()=>{try{C.style.display="none"}catch{}}),B.appendChild(q)}catch{}}),C.appendChild(B);try{C.style.display="block"}catch{}}catch{}}catch{}}).catch(()=>{}),g),z=document.createElement("nav");z.className="navbar",z.setAttribute("role","navigation"),z.setAttribute("aria-label","main navigation");const K=document.createElement("div");K.className="navbar-brand";const oe=d[0],E=document.createElement("a");if(E.className="navbar-item",oe){const A=oe.getAttribute("href")||"#";try{const P=new URL(A,location.href).searchParams.get("page");if(P){const C=decodeURIComponent(P);E.href=_e(C)}else E.href=_e(r),E.textContent=a("home")}catch{E.href=_e(r),E.textContent=a("home")}}else E.href=_e(r),E.textContent=a("home");async function j(A){try{if(!A||A==="none")return null;if(A==="favicon")try{const S=document.querySelector('link[rel~="icon"],link[rel="shortcut icon"]');if(!S)return null;const P=S.getAttribute("href")||"";return P&&/\.png(?:\?|$)/i.test(P)?new URL(P,location.href).toString():null}catch{return null}if(A==="copy-first"||A==="move-first")try{const S=await Ce(r,i);if(!S||!S.raw)return null;const B=new DOMParser().parseFromString(S.raw,"text/html").querySelector("img");if(!B)return null;const _=B.getAttribute("src")||"";if(!_)return null;const q=new URL(_,location.href).toString();if(A==="move-first")try{document.documentElement.setAttribute("data-nimbi-logo-moved",q)}catch{}return q}catch{return null}try{return new URL(A,location.href).toString()}catch{return null}}catch{return null}}let be=null;try{be=await j(p)}catch{be=null}if(be)try{const A=document.createElement("img");A.className="nimbi-navbar-logo";const S=a&&typeof a=="function"&&(a("home")||a("siteLogo"))||"";A.alt=S,A.title=S,A.src=be;try{A.style.marginRight="0.5em"}catch{}try{(!E.textContent||!String(E.textContent).trim())&&(E.textContent=S)}catch{}try{E.insertBefore(A,E.firstChild)}catch{try{E.appendChild(A)}catch{}}}catch{}K.appendChild(E),E.addEventListener("click",function(A){const S=E.getAttribute("href")||"";if(S.startsWith("?page=")){A.preventDefault();const P=new URL(S,location.href),C=P.searchParams.get("page"),B=P.hash?P.hash.replace(/^#/,""):null;history.pushState({page:C},"",_e(C,B)),I();try{R()}catch{}}});const V=document.createElement("a");V.className="navbar-burger",V.setAttribute("role","button"),V.setAttribute("aria-label","menu"),V.setAttribute("aria-expanded","false");const H="nimbi-navbar-menu";V.dataset.target=H,V.innerHTML='<span aria-hidden="true"></span><span aria-hidden="true"></span><span aria-hidden="true"></span>',K.appendChild(V);try{V.addEventListener("click",A=>{try{const S=V.dataset&&V.dataset.target?V.dataset.target:null,P=S?document.getElementById(S):null;V.classList.contains("is-active")?(V.classList.remove("is-active"),V.setAttribute("aria-expanded","false"),P&&P.classList.remove("is-active")):(V.classList.add("is-active"),V.setAttribute("aria-expanded","true"),P&&P.classList.add("is-active"))}catch(S){console.warn("[nimbi-cms] navbar burger toggle failed",S)}})}catch(A){console.warn("[nimbi-cms] burger event binding failed",A)}const v=document.createElement("div");v.className="navbar-menu",v.id=H;const F=document.createElement("div");F.className="navbar-start";let Z=null,ge=null;if(!c)Z=null,f=null,y=null,k=null,L=null;else{Z=document.createElement("div"),Z.className="navbar-end",ge=document.createElement("div"),ge.className="navbar-item",f=document.createElement("input"),f.className="input",f.type="search",f.placeholder=a("searchPlaceholder")||"",f.id="nimbi-search";try{const B=(a&&typeof a=="function"?a("searchAria"):null)||f.placeholder||"Search";try{f.setAttribute("aria-label",B)}catch{}try{f.setAttribute("aria-controls","nimbi-search-results")}catch{}try{f.setAttribute("aria-autocomplete","list")}catch{}try{f.setAttribute("role","combobox")}catch{}}catch{}o==="eager"&&(f.disabled=!0),w=document.createElement("div"),w.className="control",o==="eager"&&w.classList.add("is-loading"),w.appendChild(f),ge.appendChild(w),y=document.createElement("div"),y.className="dropdown is-right",y.id="nimbi-search-dropdown";const A=document.createElement("div");A.className="dropdown-trigger",A.appendChild(ge);const S=document.createElement("div");S.className="dropdown-menu",S.setAttribute("role","menu"),k=document.createElement("div"),k.id="nimbi-search-results",k.className="dropdown-content nimbi-search-results",L=k,S.appendChild(k),y.appendChild(A),y.appendChild(S),Z.appendChild(y);const P=B=>{if(!k)return;k.innerHTML="";let _=-1;function q(te){try{const ne=k.querySelector(".nimbi-search-result.is-selected");ne&&ne.classList.remove("is-selected");const le=k.querySelectorAll(".nimbi-search-result");if(!le||!le.length)return;if(te<0){_=-1;return}te>=le.length&&(te=le.length-1);const X=le[te];if(X){X.classList.add("is-selected"),_=te;try{X.scrollIntoView({block:"nearest"})}catch{}}}catch{}}function ue(te){try{const ne=te.key,le=k.querySelectorAll(".nimbi-search-result");if(!le||!le.length)return;if(ne==="ArrowDown"){te.preventDefault();const X=_<0?0:Math.min(le.length-1,_+1);q(X);return}if(ne==="ArrowUp"){te.preventDefault();const X=_<=0?0:_-1;q(X);return}if(ne==="Enter"){te.preventDefault();const X=k.querySelector(".nimbi-search-result.is-selected")||k.querySelector(".nimbi-search-result");if(X)try{X.click()}catch{}return}if(ne==="Escape"){try{y.classList.remove("is-active")}catch{}try{k.style.display="none"}catch{}try{k.classList.remove("is-open")}catch{}try{k.removeAttribute("tabindex")}catch{}try{k.removeEventListener("keydown",ue)}catch{}try{f&&f.focus()}catch{}try{f&&f.removeEventListener("keydown",fe)}catch{}return}}catch{}}function fe(te){try{if(te&&te.key==="ArrowDown"){te.preventDefault();try{k.focus()}catch{}q(0)}}catch{}}try{const te=document.createElement("div");te.className="panel nimbi-search-panel",B.forEach(ne=>{if(ne.parentTitle){const ke=document.createElement("p");ke.textContent=ne.parentTitle,ke.className="panel-heading nimbi-search-title nimbi-search-parent",te.appendChild(ke)}const le=document.createElement("a");le.className="panel-block nimbi-search-result",le.href=_e(ne.slug),le.setAttribute("role","button");try{if(ne.path&&typeof ne.slug=="string"){try{re.set(ne.slug,ne.path)}catch{}try{G.set(ne.path,ne.slug)}catch{}}}catch{}const X=document.createElement("div");X.className="is-size-6 has-text-weight-semibold",X.textContent=ne.title,le.appendChild(X),le.addEventListener("click",()=>{y&&y.classList.remove("is-active");try{k.style.display="none"}catch{}try{k.classList.remove("is-open")}catch{}try{k.removeAttribute("tabindex")}catch{}try{k.removeEventListener("keydown",ue)}catch{}try{f&&f.removeEventListener("keydown",fe)}catch{}}),te.appendChild(le)}),k.appendChild(te)}catch{}y&&y.classList.add("is-active");try{k.style.display="block"}catch{}try{k.classList.add("is-open")}catch{}try{k.setAttribute("tabindex","0")}catch{}try{k.addEventListener("keydown",ue)}catch{}try{f&&f.addEventListener("keydown",fe)}catch{}},C=(B,_)=>{let q=null;return(...ue)=>{q&&clearTimeout(q),q=setTimeout(()=>B(...ue),_)}};if(f){const B=C(async()=>{const _=document.querySelector("input#nimbi-search"),q=String(_&&_.value||"").trim().toLowerCase();if(!q){P([]);return}try{await U();const fe=(await g).filter(te=>te.title&&te.title.toLowerCase().includes(q)||te.excerpt&&te.excerpt.toLowerCase().includes(q));P(fe.slice(0,10))}catch(ue){console.warn("[nimbi-cms] search input handler failed",ue),P([])}},50);try{f.addEventListener("input",B)}catch{}try{document.addEventListener("input",_=>{try{_&&_.target&&_.target.id==="nimbi-search"&&B(_)}catch{}},!0)}catch{}}if(o==="eager"){try{g=U()}catch(B){console.warn("[nimbi-cms] eager search index init failed",B),g=Promise.resolve([])}g.finally(()=>{const B=document.querySelector("input#nimbi-search");if(B){try{B.removeAttribute("disabled")}catch{}try{w&&w.classList.remove("is-loading")}catch{}}})}try{const B=_=>{try{const q=_&&_.target;if(!L||!L.classList.contains("is-open")&&L.style&&L.style.display!=="block"||q&&(L.contains(q)||f&&(q===f||f.contains&&f.contains(q))))return;y&&y.classList.remove("is-active");try{L.style.display="none"}catch{}try{L.classList.remove("is-open")}catch{}}catch{}};document.addEventListener("click",B,!0),document.addEventListener("touchstart",B,!0)}catch{}}for(let A=0;A<d.length;A++){const S=d[A];if(A===0)continue;const P=S.getAttribute("href")||"#",C=document.createElement("a");C.className="navbar-item";try{if(/^[^#]*\.md(?:$|[#?])/.test(P)||P.endsWith(".md")){const _=xe(P).split(/::|#/,2),q=_[0],ue=_[1];C.href=_e(q,ue)}else if(/\.html(?:$|[#?])/.test(P)||P.endsWith(".html")){const _=xe(P).split(/::|#/,2);let q=_[0];q&&!q.toLowerCase().endsWith(".html")&&(q=q+".html");const ue=_[1];try{const fe=await Ce(q,i);if(fe&&fe.raw)try{const ne=new DOMParser().parseFromString(fe.raw,"text/html"),le=ne.querySelector("title"),X=ne.querySelector("h1"),ke=le&&le.textContent&&le.textContent.trim()?le.textContent.trim():X&&X.textContent?X.textContent.trim():null;if(ke){const Ve=pe(ke);if(Ve){try{re.set(Ve,q),G.set(q,Ve)}catch(wn){console.warn("[nimbi-cms] slugToMd/mdToSlug set failed",wn)}C.href=_e(Ve,ue)}else C.href=_e(q,ue)}else C.href=_e(q,ue)}catch{C.href=_e(q,ue)}else C.href=P}catch{C.href=P}}else C.href=P}catch(B){console.warn("[nimbi-cms] nav item href parse failed",B),C.href=P}try{const B=S.textContent&&String(S.textContent).trim()?String(S.textContent).trim():null;if(B)try{const _=pe(B);if(_){const q=C.getAttribute&&C.getAttribute("href")?C.getAttribute("href"):"";try{const fe=new URL(q,location.href).searchParams.get("page");if(fe){const te=decodeURIComponent(fe);try{re.set(_,te),G.set(te,_)}catch(ne){console.warn("[nimbi-cms] slugToMd/mdToSlug set failed",ne)}}}catch(ue){console.warn("[nimbi-cms] nav slug mapping failed",ue)}}}catch(_){console.warn("[nimbi-cms] nav slug mapping failed",_)}}catch(B){console.warn("[nimbi-cms] nav slug mapping failed",B)}C.textContent=S.textContent||P,F.appendChild(C)}v.appendChild(F),Z&&v.appendChild(Z),z.appendChild(K),z.appendChild(v),e.appendChild(z);try{const A=S=>{try{const P=z&&z.querySelector?z.querySelector(".navbar-burger"):document.querySelector(".navbar-burger");if(!P||!P.classList.contains("is-active"))return;const C=P&&P.closest?P.closest(".navbar"):z;if(C&&C.contains(S.target))return;R()}catch{}};document.addEventListener("click",A,!0),document.addEventListener("touchstart",A,!0)}catch{}try{v.addEventListener("click",A=>{const S=A.target&&A.target.closest?A.target.closest("a"):null;if(!S)return;const P=S.getAttribute("href")||"";try{const C=new URL(P,location.href),B=C.searchParams.get("page"),_=C.hash?C.hash.replace(/^#/,""):null;B&&(A.preventDefault(),history.pushState({page:B},"",_e(B,_)),I())}catch(C){console.warn("[nimbi-cms] navbar click handler failed",C)}try{const C=z&&z.querySelector?z.querySelector(".navbar-burger"):null,B=C&&C.dataset?C.dataset.target:null,_=B?document.getElementById(B):null;C&&C.classList.contains("is-active")&&(C.classList.remove("is-active"),C.setAttribute("aria-expanded","false"),_&&_.classList.remove("is-active"))}catch(C){console.warn("[nimbi-cms] mobile menu close failed",C)}})}catch(A){console.warn("[nimbi-cms] attach content click handler failed",A)}try{t.addEventListener("click",A=>{const S=A.target&&A.target.closest?A.target.closest("a"):null;if(!S)return;const P=S.getAttribute("href")||"";if(P&&!Jr(P))try{const C=new URL(P,location.href),B=C.searchParams.get("page"),_=C.hash?C.hash.replace(/^#/,""):null;B&&(A.preventDefault(),history.pushState({page:B},"",_e(B,_)),I())}catch(C){console.warn("[nimbi-cms] container click URL parse failed",C)}})}catch(A){console.warn("[nimbi-cms] build navbar failed",A)}return{navbar:z,linkEls:d}}try{document.addEventListener("input",e=>{try{if(e&&e.target&&e.target.id==="nimbi-search"){const t=document.getElementById("nimbi-search-results");if(t&&e.target&&e.target.value)try{t.style.display="block"}catch{}}}catch{}},!0)}catch{}var Rn,Wr;function xo(){if(Wr)return Rn;Wr=1;function e(a,s){return s.some(([c,o])=>c<=a&&a<=o)}function t(a){if(typeof a!="string")return!1;const s=a.charCodeAt(0);return e(s,[[12352,12447],[19968,40959],[44032,55203],[131072,191456]])}function n(a){return`
|
|
1467
|
-
\r `.includes(a)}function i(a){if(typeof a!="string")return!1;const s=a.charCodeAt(0);return e(s,[[33,47],[58,64],[91,96],[123,126],[12288,12351],[65280,65519]])}function r(a,s={}){let
|
|
1468
|
-
`;for(let
|
|
1466
|
+
`;onmessage=async e=>{const t=e.data||{};try{if(t.type==="rewriteAnchors"){const{id:n,html:i,contentBase:r,pagePath:a}=t;try{const u=new DOMParser().parseFromString(i||"","text/html"),o=u.body;await ar(o,r,a),postMessage({id:n,result:u.body.innerHTML})}catch(s){postMessage({id:n,error:String(s)})}return}}catch(n){postMessage({id:t.id,error:String(n)})}};async function to(e){try{if(e&&e.type==="rewriteAnchors"){const{id:t,html:n,contentBase:i,pagePath:r}=e;try{const s=new DOMParser().parseFromString(n||"","text/html"),u=s.body;return await ar(u,i,r),{id:t,result:s.body.innerHTML}}catch(a){return{id:t,error:String(a)}}}return{id:e&&e.id,error:"unsupported message"}}catch(t){return{id:e&&e.id,error:String(t)}}}const no=typeof globalThis<"u"&&typeof globalThis.__nimbiCMSDebug<"u"?!!globalThis.__nimbiCMSDebug:!1;function ro(...e){try{no&&console&&typeof console.warn=="function"&&console.warn(...e)}catch{}}function io(e,t){try{return new URL(e,t).pathname}catch{try{return new URL(e,typeof location<"u"?location.href:"http://localhost/").pathname}catch{try{return(String(t||"").replace(/\/$/,"")+"/"+String(e||"").replace(/^\//,"")).replace(/\/\\+/g,"/")}catch{return String(e||"")}}}}function ao(e,t){const n=document.createElement("aside");n.className="menu box nimbi-nav";const i=document.createElement("p");i.className="menu-label",i.textContent=e("navigation"),n.appendChild(i);const r=document.createElement("ul");return r.className="menu-list",t.forEach(a=>{const s=document.createElement("li"),u=document.createElement("a");if(u.href="#"+a.path,u.textContent=a.name,s.appendChild(u),a.children&&a.children.length){const o=document.createElement("ul");a.children.forEach(l=>{const c=document.createElement("li"),f=document.createElement("a");f.href="#"+l.path,f.textContent=l.name,c.appendChild(f),o.appendChild(c)}),s.appendChild(o)}r.appendChild(s)}),n.appendChild(r),n}function so(e,t,n=""){const i=document.createElement("aside");i.className="menu box nimbi-toc-inner is-hidden-mobile";const r=document.createElement("p");r.className="menu-label",r.textContent=e("onThisPage"),i.appendChild(r);const a=document.createElement("ul");a.className="menu-list";try{const u={};(t||[]).forEach(o=>{try{if(!o||o.level===1)return;const l=Number(o.level)>=2?Number(o.level):2,c=document.createElement("li"),f=document.createElement("a"),m=Ma(o.text||""),h=o.id||fe(m);f.textContent=m;try{const w=String(n||"").replace(/^[\\.\\/]+/,""),y=w&&G&&G.has&&G.has(w)?G.get(w):w;y?f.href=Se(y,h):f.href=`#${encodeURIComponent(h)}`}catch(w){console.warn("[htmlBuilder] buildTocElement href normalization failed",w),f.href=`#${encodeURIComponent(h)}`}if(c.appendChild(f),l===2){a.appendChild(c),u[2]=c,Object.keys(u).forEach(w=>{Number(w)>2&&delete u[w]});return}let d=l-1;for(;d>2&&!u[d];)d--;d<2&&(d=2);let p=u[d];if(!p){a.appendChild(c),u[l]=c;return}let g=p.querySelector("ul");g||(g=document.createElement("ul"),p.appendChild(g)),g.appendChild(c),u[l]=c}catch(l){console.warn("[htmlBuilder] buildTocElement item failed",l,o)}})}catch(u){console.warn("[htmlBuilder] buildTocElement failed",u)}return i.appendChild(a),a.querySelectorAll("li").length<=1?null:i}function Ri(e){e.querySelectorAll("h1,h2,h3,h4,h5,h6").forEach(n=>{n.id||(n.id=fe(n.textContent||""))})}function oo(e,t,n){try{const i=e.querySelectorAll("img");if(i&&i.length){const r=t&&t.includes("/")?t.substring(0,t.lastIndexOf("/")+1):"";i.forEach(a=>{const s=a.getAttribute("src")||"";if(s&&!(/^(https?:)?\/\//.test(s)||s.startsWith("/")))try{const u=new URL(r+s,n).toString();a.src=u;try{a.getAttribute("loading")||a.setAttribute("data-want-lazy","1")}catch(o){console.warn("[htmlBuilder] set image loading attribute failed",o)}}catch(u){console.warn("[htmlBuilder] resolve image src failed",u)}})}}catch(i){console.warn("[htmlBuilder] lazyLoadImages failed",i)}}function Dr(e,t,n){try{const i=t&&t.includes("/")?t.substring(0,t.lastIndexOf("/")+1):"";let r=null;try{const s=new URL(n,location.href);r=new URL(i||".",s).toString()}catch{try{r=new URL(i||".",location.href).toString()}catch{r=i||"./"}}const a=e.querySelectorAll("*");for(const s of Array.from(a||[]))try{const u=s.tagName?s.tagName.toLowerCase():"",o=l=>{try{const c=s.getAttribute(l)||"";if(!c||/^(https?:)?\/\//i.test(c)||c.startsWith("/")||c.startsWith("#"))return;try{s.setAttribute(l,new URL(c,r).toString())}catch(f){console.warn("[htmlBuilder] rewrite asset attribute failed",l,c,f)}}catch(c){console.warn("[htmlBuilder] rewriteAttr failed",c)}};if(s.hasAttribute&&s.hasAttribute("src")&&o("src"),s.hasAttribute&&s.hasAttribute("href")&&u!=="a"&&o("href"),s.hasAttribute&&s.hasAttribute("xlink:href")&&o("xlink:href"),s.hasAttribute&&s.hasAttribute("poster")&&o("poster"),s.hasAttribute("srcset")){const f=(s.getAttribute("srcset")||"").split(",").map(m=>m.trim()).filter(Boolean).map(m=>{const[h,d]=m.split(/\s+/,2);if(!h||/^(https?:)?\/\//i.test(h)||h.startsWith("/"))return m;try{const p=new URL(h,r).toString();return d?`${p} ${d}`:p}catch{return m}}).join(", ");s.setAttribute("srcset",f)}}catch(u){console.warn("[htmlBuilder] rewriteRelativeAssets node processing failed",u)}}catch(i){console.warn("[htmlBuilder] rewriteRelativeAssets failed",i)}}let Hr="",Mn=null,jr="";async function ar(e,t,n){try{const i=e.querySelectorAll("a");if(!i||!i.length)return;let r,a;if(t===Hr&&Mn)r=Mn,a=jr;else{try{r=new URL(t,location.href),a=dt(r.pathname)}catch{try{r=new URL(t,location.href),a=dt(r.pathname)}catch{r=null,a="/"}}Hr=t,Mn=r,jr=a}const s=new Set,u=[],o=new Set,l=[];for(const c of Array.from(i))try{try{if(c.closest&&c.closest("h1,h2,h3,h4,h5,h6"))continue}catch{}const f=c.getAttribute("href")||"";if(!f||ei(f))continue;try{if(f.startsWith("?")||f.indexOf("?")!==-1)try{const h=new URL(f,t||location.href),d=h.searchParams.get("page");if(d&&d.indexOf("/")===-1&&n){const p=n.includes("/")?n.substring(0,n.lastIndexOf("/")+1):"";if(p){const g=xe(p+d);c.setAttribute("href",Se(g,h.hash?h.hash.replace(/^#/,""):null));continue}}}catch{}}catch{}if(f.startsWith("/")&&!f.endsWith(".md"))continue;const m=f.match(/^([^#?]+\.md)(?:[#](.+))?$/);if(m){let h=m[1];const d=m[2];!h.startsWith("/")&&n&&(h=(n.includes("/")?n.substring(0,n.lastIndexOf("/")+1):"")+h);try{const p=new URL(h,t).pathname;let g=p.startsWith(a)?p.slice(a.length):p;g=xe(g),u.push({node:c,mdPathRaw:h,frag:d,rel:g}),G.has(g)||s.add(g)}catch(p){console.warn("[htmlBuilder] resolve mdPath failed",p)}continue}try{let h=f;!f.startsWith("/")&&n&&(f.startsWith("#")?h=n+f:h=(n.includes("/")?n.substring(0,n.lastIndexOf("/")+1):"")+f);const p=new URL(h,t).pathname||"";if(p&&p.indexOf(a)!==-1){let g=p.startsWith(a)?p.slice(a.length):p;if(g=xe(g),g=Ht(g),g||(g="_home"),!g.endsWith(".md")){let w=null;try{if(G&&G.has&&G.has(g))w=G.get(g);else try{const y=String(g||"").replace(/^.*\//,"");y&&G.has&&G.has(y)&&(w=G.get(y))}catch(y){console.warn("[htmlBuilder] mdToSlug baseName check failed",y)}}catch(y){console.warn("[htmlBuilder] mdToSlug access check failed",y)}if(!w)try{const y=String(g||"").replace(/^.*\//,"");for(const[k,v]of ne||[])if(v===g||v===y){w=k;break}}catch{}w?c.setAttribute("href",Se(w)):(o.add(g),l.push({node:c,rel:g}))}}}catch(h){console.warn("[htmlBuilder] resolving href to URL failed",h)}}catch(f){console.warn("[htmlBuilder] processing anchor failed",f)}s.size&&await Promise.all(Array.from(s).map(async c=>{try{try{const m=String(c).match(/([^\/]+)\.md$/),h=m&&m[1];if(h&&ne.has(h)){try{const d=ne.get(h);if(d)try{G.set(d,h)}catch(p){console.warn("[htmlBuilder] mdToSlug.set failed",p)}}catch(d){console.warn("[htmlBuilder] reading slugToMd failed",d)}return}}catch(m){console.warn("[htmlBuilder] basename slug lookup failed",m)}const f=await Me(c,t);if(f&&f.raw){const m=(f.raw||"").match(/^#\s+(.+)$/m);if(m&&m[1]){const h=fe(m[1].trim());if(h)try{ne.set(h,c),G.set(c,h)}catch(d){console.warn("[htmlBuilder] setting slug mapping failed",d)}}}}catch(f){console.warn("[htmlBuilder] fetchMarkdown during rewriteAnchors failed",f)}})),o.size&&await Promise.all(Array.from(o).map(async c=>{try{const f=await Me(c,t);if(f&&f.raw)try{const h=(sr||new DOMParser).parseFromString(f.raw,"text/html"),d=h.querySelector("title"),p=h.querySelector("h1"),g=d&&d.textContent&&d.textContent.trim()?d.textContent.trim():p&&p.textContent?p.textContent.trim():null;if(g){const w=fe(g);if(w)try{ne.set(w,c),G.set(c,w)}catch(y){console.warn("[htmlBuilder] setting html slug mapping failed",y)}}}catch(m){console.warn("[htmlBuilder] parse fetched HTML failed",m)}}catch(f){console.warn("[htmlBuilder] fetchMarkdown for htmlPending failed",f)}}));for(const c of u){const{node:f,frag:m,rel:h}=c;let d=null;try{G.has(h)&&(d=G.get(h))}catch(p){console.warn("[htmlBuilder] mdToSlug access failed",p)}d?f.setAttribute("href",Se(d,m)):f.setAttribute("href",Se(h,m))}for(const c of l){const{node:f,rel:m}=c;let h=null;try{G.has(m)&&(h=G.get(m))}catch(d){console.warn("[htmlBuilder] mdToSlug access failed for htmlAnchorInfo",d)}if(!h)try{const d=String(m||"").replace(/^.*\//,"");G.has(d)&&(h=G.get(d))}catch(d){console.warn("[htmlBuilder] mdToSlug baseName access failed for htmlAnchorInfo",d)}h?f.setAttribute("href",Se(h)):f.setAttribute("href",Se(m))}}catch(i){console.warn("[htmlBuilder] rewriteAnchors failed",i)}}function lo(e,t,n,i){const r=t.querySelector("h1"),a=r?(r.textContent||"").trim():"";let s="";try{let u="";try{e&&e.meta&&e.meta.title&&(u=String(e.meta.title).trim())}catch{}if(!u&&a&&(u=a),!u)try{const o=t.querySelector("h2");o&&o.textContent&&(u=String(o.textContent).trim())}catch{}!u&&n&&(u=String(n)),u&&(s=fe(u)),s||(s="_home");try{n&&(ne.set(s,n),G.set(n,s))}catch(o){console.warn("[htmlBuilder] computeSlug set slug mapping failed",o)}try{const o=i||(location.hash?decodeURIComponent(location.hash.replace(/^#/,"")):"");try{history.replaceState({page:s},"",Se(s,o))}catch(l){console.warn("[htmlBuilder] computeSlug history replace failed",l)}}catch(o){console.warn("[htmlBuilder] computeSlug inner failed",o)}}catch(u){console.warn("[htmlBuilder] computeSlug failed",u)}try{if(e&&e.meta&&e.meta.title&&r){const u=String(e.meta.title).trim();if(u&&u!==a){try{s&&(r.id=s)}catch{}try{if(Array.isArray(e.toc))for(const o of e.toc)try{if(o&&Number(o.level)===1&&String(o.text).trim()===(a||"").trim()){o.id=s;break}}catch{}}catch{}}}}catch{}return{topH1:r,h1Text:a,slugKey:s}}async function co(e,t){if(!e||!e.length)return;const n=new Set;for(const o of Array.from(e||[]))try{const l=o.getAttribute("href")||"";if(!l)continue;let m=xe(l).split(/::|#/,2)[0];try{const d=m.indexOf("?");d!==-1&&(m=m.slice(0,d))}catch{}if(!m||(m.includes(".")||(m=m+".html"),!/\.html(?:$|[?#])/.test(m)&&!m.toLowerCase().endsWith(".html")))continue;const h=m;try{if(G&&G.has&&G.has(h))continue}catch(d){console.warn("[htmlBuilder] mdToSlug check failed",d)}try{let d=!1;for(const p of ne.values())if(p===h){d=!0;break}if(d)continue}catch(d){console.warn("[htmlBuilder] slugToMd iteration failed",d)}n.add(h)}catch(l){console.warn("[htmlBuilder] preScanHtmlSlugs anchor iteration failed",l)}if(!n.size)return;const i=async o=>{try{const l=await Me(o,t);if(l&&l.raw)try{const f=(sr||new DOMParser).parseFromString(l.raw,"text/html"),m=f.querySelector("title"),h=f.querySelector("h1"),d=m&&m.textContent&&m.textContent.trim()?m.textContent.trim():h&&h.textContent?h.textContent.trim():null;if(d){const p=fe(d);if(p)try{ne.set(p,o),G.set(o,p)}catch(g){console.warn("[htmlBuilder] set slugToMd/mdToSlug failed",g)}}}catch(c){console.warn("[htmlBuilder] parse HTML title failed",c)}}catch(l){console.warn("[htmlBuilder] fetchAndExtract failed",l)}},r=5,a=Array.from(n);let s=0;const u=[];for(;s<a.length;){const o=a.slice(s,s+r);u.push(Promise.all(o.map(i))),s+=r}await Promise.all(u)}async function uo(e,t){if(!e||!e.length)return;const n=[],i=new Set;let r="";try{const a=new URL(t,typeof location<"u"?location.href:"http://localhost/");r=dt(a.pathname)}catch(a){r="",console.warn("[htmlBuilder] preMapMdSlugs parse base failed",a)}for(const a of Array.from(e||[]))try{const s=a.getAttribute("href")||"";if(!s)continue;const u=s.match(/^([^#?]+\.md)(?:[#](.+))?$/);if(u){let o=xe(u[1]);try{let l;try{l=io(o,t)}catch(f){l=o,console.warn("[htmlBuilder] resolve mdPath URL failed",f)}const c=l&&r&&l.startsWith(r)?l.slice(r.length):String(l||"").replace(/^\//,"");n.push({rel:c}),G.has(c)||i.add(c)}catch(l){console.warn("[htmlBuilder] rewriteAnchors failed",l)}continue}}catch(s){console.warn("[htmlBuilder] preMapMdSlugs anchor iteration failed",s)}i.size&&await Promise.all(Array.from(i).map(async a=>{try{const s=String(a).match(/([^\/]+)\.md$/),u=s&&s[1];if(u&&ne.has(u)){try{const o=ne.get(u);o&&G.set(o,u)}catch(o){console.warn("[htmlBuilder] preMapMdSlugs slug map access failed",o)}return}}catch(s){console.warn("[htmlBuilder] preMapMdSlugs basename check failed",s)}try{const s=await Me(a,t);if(s&&s.raw){const u=(s.raw||"").match(/^#\s+(.+)$/m);if(u&&u[1]){const o=fe(u[1].trim());if(o)try{ne.set(o,a),G.set(a,o)}catch(l){console.warn("[htmlBuilder] preMapMdSlugs setting slug mapping failed",l)}}}}catch(s){console.warn("[htmlBuilder] preMapMdSlugs fetch failed",s)}}))}const sr=typeof DOMParser<"u"?new DOMParser:null;function Rn(e){try{const n=(sr||new DOMParser).parseFromString(e||"","text/html");Ri(n);try{n.querySelectorAll("img").forEach(o=>{try{o.getAttribute("loading")||o.setAttribute("data-want-lazy","1")}catch(l){console.warn("[htmlBuilder] parseHtml set image loading attribute failed",l)}})}catch(u){console.warn("[htmlBuilder] parseHtml query images failed",u)}n.querySelectorAll("pre code, code[class]").forEach(u=>{try{const o=u.getAttribute&&u.getAttribute("class")||u.className||"",l=o.match(/language-([a-zA-Z0-9_+-]+)/)||o.match(/lang(?:uage)?-?([a-zA-Z0-9_+-]+)/);if(l&&l[1]){const c=(l[1]||"").toLowerCase(),f=ae.size&&(ae.get(c)||ae.get(String(c).toLowerCase()))||c;try{(async()=>{try{await _t(f)}catch(m){console.warn("[htmlBuilder] registerLanguage failed",m)}})()}catch(m){console.warn("[htmlBuilder] schedule registerLanguage failed",m)}}else try{if(de&&typeof de.getLanguage=="function"&&de.getLanguage("plaintext")){const c=de.highlight?de.highlight(u.textContent||"",{language:"plaintext"}):null;c&&c.value&&(u.innerHTML=c.value)}}catch(c){console.warn("[htmlBuilder] plaintext highlight fallback failed",c)}}catch(o){console.warn("[htmlBuilder] code element processing failed",o)}});const r=[];n.querySelectorAll("h1,h2,h3,h4,h5,h6").forEach(u=>{r.push({level:Number(u.tagName.substring(1)),text:(u.textContent||"").trim(),id:u.id})});const s={};try{const u=n.querySelector("title");u&&u.textContent&&String(u.textContent).trim()&&(s.title=String(u.textContent).trim())}catch{}return{html:n.body.innerHTML,meta:s,toc:r}}catch(t){return console.warn("[htmlBuilder] parseHtml failed",t),{html:e||"",meta:{},toc:[]}}}async function ho(e){const t=Un?await Un(e||"",ae):Pt(e||"",ae),n=new Set(t),i=[];for(const r of n)try{const a=ae.size&&(ae.get(r)||ae.get(String(r).toLowerCase()))||r;try{i.push(_t(a))}catch(s){console.warn("[htmlBuilder] ensureLanguages push canonical failed",s)}if(String(r)!==String(a))try{i.push(_t(r))}catch(s){console.warn("[htmlBuilder] ensureLanguages push alias failed",s)}}catch(a){console.warn("[htmlBuilder] ensureLanguages inner failed",a)}try{await Promise.all(i)}catch(r){console.warn("[htmlBuilder] ensureLanguages failed",r)}}async function po(e){if(await ho(e),dn){const t=await dn(e||"");return!t||typeof t!="object"?{html:String(e||""),meta:{},toc:[]}:(Array.isArray(t.toc)||(t.toc=[]),t.meta||(t.meta={}),t)}return{html:String(e||""),meta:{},toc:[]}}async function go(e,t,n,i,r){let a=null;if(t.isHtml)try{const f=typeof DOMParser<"u"?new DOMParser:null;if(f){const m=f.parseFromString(t.raw||"","text/html");try{Dr(m.body,n,r)}catch(h){console.warn("[htmlBuilder] rewriteRelativeAssets failed in prepareArticle (inner)",h)}a=Rn(m.documentElement&&m.documentElement.outerHTML?m.documentElement.outerHTML:t.raw||"")}else a=Rn(t.raw||"")}catch{a=Rn(t.raw||"")}else a=await po(t.raw||"");const s=document.createElement("article");s.className="nimbi-article content",s.innerHTML=a.html;try{Dr(s,n,r)}catch(f){console.warn("[htmlBuilder] rewriteRelativeAssets failed in prepareArticle",f)}try{Ri(s)}catch(f){console.warn("[htmlBuilder] addHeadingIds failed",f)}try{s.querySelectorAll("pre code, code[class]").forEach(m=>{try{const h=m.getAttribute&&m.getAttribute("class")||m.className||"",d=String(h||"").replace(/\blanguage-undefined\b|\blang-undefined\b/g,"").trim();if(d)try{m.setAttribute&&m.setAttribute("class",d)}catch(p){m.className=d,console.warn("[htmlBuilder] set element class failed",p)}else try{m.removeAttribute&&m.removeAttribute("class")}catch(p){m.className="",console.warn("[htmlBuilder] remove element class failed",p)}}catch(h){console.warn("[htmlBuilder] code element cleanup failed",h)}})}catch(f){console.warn("[htmlBuilder] processing code elements failed",f)}try{Qr(s)}catch(f){console.warn("[htmlBuilder] observeCodeBlocks failed",f)}oo(s,n,r);try{(s.querySelectorAll&&s.querySelectorAll("img")||[]).forEach(m=>{try{const h=m.parentElement;if(!h||h.tagName.toLowerCase()!=="p"||h.childNodes.length!==1)return;const d=document.createElement("figure");d.className="image",h.replaceWith(d),d.appendChild(m)}catch{}})}catch(f){console.warn("[htmlBuilder] wrap images in Bulma image helper failed",f)}try{(s.querySelectorAll&&s.querySelectorAll("table")||[]).forEach(m=>{try{if(m.classList)m.classList.contains("table")||m.classList.add("table");else{const h=m.getAttribute&&m.getAttribute("class")?m.getAttribute("class"):"",d=String(h||"").split(/\s+/).filter(Boolean);d.indexOf("table")===-1&&d.push("table");try{m.setAttribute&&m.setAttribute("class",d.join(" "))}catch{m.className=d.join(" ")}}}catch{}})}catch(f){console.warn("[htmlBuilder] add Bulma table class failed",f)}const{topH1:u,h1Text:o,slugKey:l}=lo(a,s,n,i);try{if(u&&a&&a.meta&&(a.meta.author||a.meta.date)&&!(u.parentElement&&u.parentElement.querySelector&&u.parentElement.querySelector(".nimbi-article-subtitle"))){const m=a.meta.author?String(a.meta.author).trim():"",h=a.meta.date?String(a.meta.date).trim():"";let d="";try{const g=new Date(h);h&&!isNaN(g.getTime())?d=g.toLocaleDateString():d=h}catch{d=h}const p=[];if(m&&p.push(m),d&&p.push(d),p.length){const g=document.createElement("p"),w=p[0]?String(p[0]).replace(/"/g,"").trim():"",y=p.slice(1);if(g.className="nimbi-article-subtitle is-6 has-text-grey-light",w){const k=document.createElement("span");k.className="nimbi-article-author",k.textContent=w,g.appendChild(k)}if(y.length){const k=document.createElement("span");k.className="nimbi-article-meta",k.textContent=y.join(" • "),g.appendChild(k)}try{u.parentElement.insertBefore(g,u.nextSibling)}catch{try{u.insertAdjacentElement("afterend",g)}catch{}}}}}catch{}try{await wo(s,r,n)}catch(f){ro("[htmlBuilder] rewriteAnchorsWorker failed, falling back to main thread",f),await ar(s,r,n)}const c=so(e,a.toc,n);return{article:s,parsed:a,toc:c,topH1:u,h1Text:o,slugKey:l}}function fo(e){if(!(!e||!e.querySelectorAll))try{const t=Array.from(e.querySelectorAll("script"));for(const n of t)try{const i=document.createElement("script");for(const a of Array.from(n.attributes||[]))try{i.setAttribute(a.name,a.value)}catch{}if(!n.src){const a=n.textContent||"";let s=!1;try{new Function(a)(),s=!0}catch{s=!1}if(s){n.parentNode&&n.parentNode.removeChild(n);try{console.info("[htmlBuilder] executed inline script via Function")}catch{}continue}try{i.type="module"}catch{}i.textContent=a}if(n.src)try{if(document.querySelector&&document.querySelector(`script[src="${n.src}"]`)){n.parentNode&&n.parentNode.removeChild(n);continue}}catch{}const r=n.src||"<inline>";i.addEventListener("error",a=>{try{console.warn("[htmlBuilder] injected script error",{src:r,ev:a})}catch{}}),i.addEventListener("load",()=>{try{console.info("[htmlBuilder] injected script loaded",{src:r,hasNimbi:!!(window&&window.nimbiCMS)})}catch{}});try{(document.head||document.body||document.documentElement).appendChild(i)}catch{try{try{i.type="text/javascript"}catch{}(document.head||document.body||document.documentElement).appendChild(i)}catch(s){try{console.warn("[htmlBuilder] injected script append failed, skipping",{src:r,err:s})}catch{}}}n.parentNode&&n.parentNode.removeChild(n);try{console.info("[htmlBuilder] executed injected script",r)}catch{}}catch(i){console.warn("[htmlBuilder] execute injected script failed",i)}}catch{}}function Ur(e,t,n){e&&(e.innerHTML="");const i=document.createElement("article");i.className="nimbi-article content nimbi-not-found";const r=document.createElement("h1");r.textContent=t&&t("notFound")||"Page not found";const a=document.createElement("p");a.textContent=n&&n.message?String(n.message):"Failed to resolve the requested page.",i.appendChild(r),i.appendChild(a),e&&e.appendChild&&e.appendChild(i)}const $i=La(()=>{const e=Ct(eo);if(e)try{if(!(typeof process<"u"&&process.env&&process.env.VITEST))return e}catch{return e}const t={message:[],error:[]};return{addEventListener(n,i){t[n]||(t[n]=[]),t[n].push(i)},removeEventListener(n,i){if(!t[n])return;const r=t[n].indexOf(i);r!==-1&&t[n].splice(r,1)},postMessage(n){setTimeout(async()=>{try{const r={data:await to(n)};(t.message||[]).forEach(a=>a(r))}catch(i){const r={data:{id:n&&n.id,error:String(i)}};(t.message||[]).forEach(a=>a(r))}},0)},terminate(){Object.keys(t).forEach(n=>t[n].length=0)}}},"anchor");function mo(){return $i.get()}function bo(e){return $i.send(e,2e3)}async function wo(e,t,n){if(!mo())throw new Error("anchor worker unavailable");if(!e||typeof e.innerHTML!="string")throw new Error("invalid article element");const r=String(e.innerHTML),a=await bo({type:"rewriteAnchors",html:r,contentBase:t,pagePath:n});if(a&&typeof a=="string")try{e.innerHTML=a}catch(s){console.warn("[htmlBuilder] applying rewritten anchors failed",s)}}function yo(e){try{e.addEventListener("click",t=>{const n=t.target&&t.target.closest?t.target.closest("a"):null;if(!n)return;const i=n.getAttribute("href")||"";try{const r=new URL(i,location.href),a=r.searchParams.get("page"),s=r.hash?r.hash.replace(/^#/,""):null;if(!a&&!s)return;t.preventDefault();let u=null;try{history&&history.state&&history.state.page&&(u=history.state.page)}catch(o){u=null,console.warn("[htmlBuilder] access history.state failed",o)}try{u||(u=new URL(location.href).searchParams.get("page"))}catch(o){console.warn("[htmlBuilder] parse current location failed",o)}if(!a&&s||a&&u&&String(a)===String(u)){try{if(!a&&s)try{history.replaceState(history.state,"",(location.pathname||"")+(location.search||"")+(s?"#"+encodeURIComponent(s):""))}catch(o){console.warn("[htmlBuilder] history.replaceState failed",o)}else try{history.replaceState({page:u||a},"",Se(u||a,s))}catch(o){console.warn("[htmlBuilder] history.replaceState failed",o)}}catch(o){console.warn("[htmlBuilder] update history for anchor failed",o)}try{t.stopImmediatePropagation&&t.stopImmediatePropagation(),t.stopPropagation&&t.stopPropagation()}catch(o){console.warn("[htmlBuilder] stopPropagation failed",o)}try{Wn(s)}catch(o){console.warn("[htmlBuilder] scrollToAnchorOrTop failed",o)}return}history.pushState({page:a},"",Se(a,s));try{if(typeof window<"u"&&typeof window.renderByQuery=="function")try{window.renderByQuery()}catch(o){console.warn("[htmlBuilder] window.renderByQuery failed",o)}else if(typeof window<"u")try{window.dispatchEvent(new PopStateEvent("popstate"))}catch(o){console.warn("[htmlBuilder] dispatch popstate failed",o)}else try{renderByQuery()}catch(o){console.warn("[htmlBuilder] renderByQuery failed",o)}}catch(o){console.warn("[htmlBuilder] SPA navigation invocation failed",o)}}catch(r){console.warn("[htmlBuilder] non-URL href in attachTocClickHandler",r)}})}catch(t){console.warn("[htmlBuilder] attachTocClickHandler failed",t)}}function Wn(e){const t=document.querySelector(".nimbi-cms")||null;if(e){const n=document.getElementById(e);if(n)try{const i=()=>{try{if(t&&t.scrollTo&&t.contains(n)){const r=n.getBoundingClientRect().top-t.getBoundingClientRect().top+t.scrollTop;t.scrollTo({top:r,behavior:"smooth"})}else try{n.scrollIntoView({behavior:"smooth",block:"start"})}catch{try{n.scrollIntoView()}catch(a){console.warn("[htmlBuilder] scrollIntoView failed",a)}}}catch{try{n.scrollIntoView()}catch(a){console.warn("[htmlBuilder] final scroll fallback failed",a)}}};try{requestAnimationFrame(()=>setTimeout(i,50))}catch(r){console.warn("[htmlBuilder] scheduling scroll failed",r),setTimeout(i,50)}}catch(i){try{n.scrollIntoView()}catch(r){console.warn("[htmlBuilder] final scroll fallback failed",r)}console.warn("[htmlBuilder] doScroll failed",i)}}else try{t&&t.scrollTo?t.scrollTo({top:0,behavior:"smooth"}):window.scrollTo(0,0)}catch(n){try{window.scrollTo(0,0)}catch(i){console.warn("[htmlBuilder] window.scrollTo failed",i)}console.warn("[htmlBuilder] scroll to top failed",n)}}function ko(e,t,{mountOverlay:n=null,container:i=null,mountEl:r=null,navWrap:a=null,t:s=null}={}){try{const u=s||(p=>typeof p=="string"?p:""),o=i||document.querySelector(".nimbi-cms"),l=r||document.querySelector(".nimbi-mount"),c=n||document.querySelector(".nimbi-overlay"),f=a||document.querySelector(".nimbi-nav-wrap");let h=document.querySelector(".nimbi-scroll-top");if(!h){h=document.createElement("button"),h.className="nimbi-scroll-top button is-primary is-rounded is-small",h.setAttribute("aria-label",u("scrollToTop")),h.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19V6"/><path d="M5 12l7-7 7 7"/></svg>';try{c&&c.appendChild?c.appendChild(h):o&&o.appendChild?o.appendChild(h):l&&l.appendChild?l.appendChild(h):document.body.appendChild(h)}catch{try{document.body.appendChild(h)}catch(g){console.warn("[htmlBuilder] append scroll top button failed",g)}}try{try{Yr(h)}catch{}}catch(p){console.warn("[htmlBuilder] set scroll-top button theme registration failed",p)}h.addEventListener("click",()=>{try{i&&i.scrollTo?i.scrollTo({top:0,left:0,behavior:"smooth"}):r&&r.scrollTo?r.scrollTo({top:0,left:0,behavior:"smooth"}):window.scrollTo({top:0,left:0,behavior:"smooth"})}catch{try{i&&(i.scrollTop=0)}catch(g){console.warn("[htmlBuilder] fallback container scrollTop failed",g)}try{r&&(r.scrollTop=0)}catch(g){console.warn("[htmlBuilder] fallback mountEl scrollTop failed",g)}try{document.documentElement.scrollTop=0}catch(g){console.warn("[htmlBuilder] fallback document scrollTop failed",g)}}})}const d=f&&f.querySelector?f.querySelector(".menu-label"):null;if(t){if(!h._nimbiObserver){const p=new IntersectionObserver(g=>{for(const w of g)w.target instanceof Element&&(w.isIntersecting?(h.classList.remove("show"),d&&d.classList.remove("show")):(h.classList.add("show"),d&&d.classList.add("show")))},{root:i instanceof Element?i:r instanceof Element?r:null,threshold:0});h._nimbiObserver=p}try{h._nimbiObserver.disconnect()}catch(p){console.warn("[htmlBuilder] observer disconnect failed",p)}try{h._nimbiObserver.observe(t)}catch(p){console.warn("[htmlBuilder] observer observe failed",p)}try{const p=()=>{try{const g=o instanceof Element?o.getBoundingClientRect():{top:0,bottom:window.innerHeight},w=t.getBoundingClientRect();!(w.bottom<g.top||w.top>g.bottom)?(h.classList.remove("show"),d&&d.classList.remove("show")):(h.classList.add("show"),d&&d.classList.add("show"))}catch(g){console.warn("[htmlBuilder] checkIntersect failed",g)}};p(),"IntersectionObserver"in window||setTimeout(p,100)}catch(p){console.warn("[htmlBuilder] checkIntersect outer failed",p)}}else{h.classList.remove("show"),d&&d.classList.remove("show");const p=i instanceof Element?i:r instanceof Element?r:window,g=()=>{try{(p===window?window.scrollY:p.scrollTop||0)>10?(h.classList.add("show"),d&&d.classList.add("show")):(h.classList.remove("show"),d&&d.classList.remove("show"))}catch(w){console.warn("[htmlBuilder] onScroll handler failed",w)}};sn(()=>p.addEventListener("scroll",g)),g()}}catch(u){console.warn("[htmlBuilder] ensureScrollTopButton failed",u)}}function Wr(e,t){try{if(!e)return;try{const n=e[t];if(typeof n<"u")return n}catch{}try{if(e.default)return e.default[t]}catch{}return}catch{return}}async function _o(e,t,n,i,r,a,s,u,o="eager",l=1,c=void 0,f="favicon"){if(!e||!(e instanceof HTMLElement))throw new TypeError("navbarWrap must be an HTMLElement");const m=typeof DOMParser<"u"?new DOMParser:null,h=m?m.parseFromString(n||"","text/html"):null,d=h?h.querySelectorAll("a"):[];await sn(()=>co(d,i)),await sn(()=>uo(d,i));try{if(t&&t instanceof HTMLElement&&(!t.hasAttribute||!t.hasAttribute("role")))try{t.setAttribute("role","main")}catch{}}catch{}let p=null,g=null,w=null,y=null,k=null,v=null;function $(){try{const x=document.querySelector(".navbar-burger"),A=x&&x.dataset?x.dataset.target:null,I=A?document.getElementById(A):null;x&&x.classList.contains("is-active")&&(x.classList.remove("is-active"),x.setAttribute("aria-expanded","false"),I&&I.classList.remove("is-active"))}catch(x){console.warn&&console.warn("[nimbi-cms] closeMobileMenu failed",x)}}async function N(){const x=typeof document<"u"?document.querySelector(".nimbi-content"):null;try{x&&x.classList.add("is-inactive")}catch{}try{const A=s&&s();A&&typeof A.then=="function"&&await A}catch(A){try{console.warn&&console.warn("[nimbi-cms] renderByQuery failed",A)}catch{}}finally{try{if(typeof requestAnimationFrame=="function")requestAnimationFrame(()=>{try{x&&x.classList.remove("is-inactive")}catch{}});else try{x&&x.classList.remove("is-inactive")}catch{}}catch{try{x&&x.classList.remove("is-inactive")}catch{}}}}const U=()=>p||(p=(async()=>{try{const x=await Promise.resolve().then(()=>kt),A=Wr(x,"buildSearchIndex")||(typeof globalThis<"u"?globalThis.buildSearchIndex:void 0),I=Wr(x,"buildSearchIndexWorker")||(typeof globalThis<"u"?globalThis.buildSearchIndexWorker:void 0);if(o==="lazy"&&typeof I=="function")try{const R=await I(i,l,c);if(R&&R.length)return R}catch(R){console.warn&&console.warn("[nimbi-cms] worker builder threw",R)}return typeof A=="function"?await A(i,l,c):[]}catch(x){return console.warn("[nimbi-cms] buildSearchIndex failed",x),[]}finally{if(g){try{g.removeAttribute("disabled")}catch{}try{w&&w.classList.remove("is-loading")}catch{}}}})(),p.then(x=>{try{const A=String(g&&g.value||"").trim().toLowerCase();if(!A||!Array.isArray(x)||!x.length)return;const I=x.filter(O=>O.title&&O.title.toLowerCase().includes(A)||O.excerpt&&O.excerpt.toLowerCase().includes(A));if(!I||!I.length)return;const R=document.getElementById("nimbi-search-results");if(!R)return;R.innerHTML="";try{const O=document.createElement("div");O.className="panel nimbi-search-panel",I.slice(0,10).forEach(C=>{try{if(C.parentTitle){const ue=document.createElement("p");ue.className="panel-heading nimbi-search-title nimbi-search-parent",ue.textContent=C.parentTitle,O.appendChild(ue)}const X=document.createElement("a");X.className="panel-block nimbi-search-result",X.href=Se(C.slug),X.setAttribute("role","button");try{if(C.path&&typeof C.slug=="string"){try{ne.set(C.slug,C.path)}catch{}try{G.set(C.path,C.slug)}catch{}}}catch{}const E=document.createElement("div");E.className="is-size-6 has-text-weight-semibold",E.textContent=C.title,X.appendChild(E),X.addEventListener("click",()=>{try{R.style.display="none"}catch{}}),O.appendChild(X)}catch{}}),R.appendChild(O);try{R.style.display="block"}catch{}}catch{}}catch{}}).catch(()=>{}),p),z=document.createElement("nav");z.className="navbar",z.setAttribute("role","navigation"),z.setAttribute("aria-label","main navigation");const K=document.createElement("div");K.className="navbar-brand";const le=d[0],L=document.createElement("a");if(L.className="navbar-item",le){const x=le.getAttribute("href")||"#";try{const I=new URL(x,location.href).searchParams.get("page");if(I){const R=decodeURIComponent(I);L.href=Se(R)}else L.href=Se(r),L.textContent=a("home")}catch{L.href=Se(r),L.textContent=a("home")}}else L.href=Se(r),L.textContent=a("home");async function j(x){try{if(!x||x==="none")return null;if(x==="favicon")try{const A=document.querySelector('link[rel~="icon"],link[rel="shortcut icon"]');if(!A)return null;const I=A.getAttribute("href")||"";return I&&/\.png(?:\?|$)/i.test(I)?new URL(I,location.href).toString():null}catch{return null}if(x==="copy-first"||x==="move-first")try{const A=await Me(r,i);if(!A||!A.raw)return null;const O=new DOMParser().parseFromString(A.raw,"text/html").querySelector("img");if(!O)return null;const C=O.getAttribute("src")||"";if(!C)return null;const X=new URL(C,location.href).toString();if(x==="move-first")try{document.documentElement.setAttribute("data-nimbi-logo-moved",X)}catch{}return X}catch{return null}try{return new URL(x,location.href).toString()}catch{return null}}catch{return null}}let ye=null;try{ye=await j(f)}catch{ye=null}if(ye)try{const x=document.createElement("img");x.className="nimbi-navbar-logo";const A=a&&typeof a=="function"&&(a("home")||a("siteLogo"))||"";x.alt=A,x.title=A,x.src=ye;try{x.style.marginRight="0.5em"}catch{}try{(!L.textContent||!String(L.textContent).trim())&&(L.textContent=A)}catch{}try{L.insertBefore(x,L.firstChild)}catch{try{L.appendChild(x)}catch{}}}catch{}K.appendChild(L),L.addEventListener("click",function(x){const A=L.getAttribute("href")||"";if(A.startsWith("?page=")){x.preventDefault();const I=new URL(A,location.href),R=I.searchParams.get("page"),O=I.hash?I.hash.replace(/^#/,""):null;history.pushState({page:R},"",Se(R,O)),N();try{$()}catch{}}});const V=document.createElement("a");V.className="navbar-burger",V.setAttribute("role","button"),V.setAttribute("aria-label","menu"),V.setAttribute("aria-expanded","false");const H="nimbi-navbar-menu";V.dataset.target=H,V.innerHTML='<span aria-hidden="true"></span><span aria-hidden="true"></span><span aria-hidden="true"></span>',K.appendChild(V);try{V.addEventListener("click",x=>{try{const A=V.dataset&&V.dataset.target?V.dataset.target:null,I=A?document.getElementById(A):null;V.classList.contains("is-active")?(V.classList.remove("is-active"),V.setAttribute("aria-expanded","false"),I&&I.classList.remove("is-active")):(V.classList.add("is-active"),V.setAttribute("aria-expanded","true"),I&&I.classList.add("is-active"))}catch(A){console.warn("[nimbi-cms] navbar burger toggle failed",A)}})}catch(x){console.warn("[nimbi-cms] burger event binding failed",x)}const S=document.createElement("div");S.className="navbar-menu",S.id=H;const F=document.createElement("div");F.className="navbar-start";let Z=null,pe=null;if(!u)Z=null,g=null,y=null,k=null,v=null;else{Z=document.createElement("div"),Z.className="navbar-end",pe=document.createElement("div"),pe.className="navbar-item",g=document.createElement("input"),g.className="input",g.type="search",g.placeholder=a("searchPlaceholder")||"",g.id="nimbi-search";try{const O=(a&&typeof a=="function"?a("searchAria"):null)||g.placeholder||"Search";try{g.setAttribute("aria-label",O)}catch{}try{g.setAttribute("aria-controls","nimbi-search-results")}catch{}try{g.setAttribute("aria-autocomplete","list")}catch{}try{g.setAttribute("role","combobox")}catch{}}catch{}o==="eager"&&(g.disabled=!0),w=document.createElement("div"),w.className="control",o==="eager"&&w.classList.add("is-loading"),w.appendChild(g),pe.appendChild(w),y=document.createElement("div"),y.className="dropdown is-right",y.id="nimbi-search-dropdown";const x=document.createElement("div");x.className="dropdown-trigger",x.appendChild(pe);const A=document.createElement("div");A.className="dropdown-menu",A.setAttribute("role","menu"),k=document.createElement("div"),k.id="nimbi-search-results",k.className="dropdown-content nimbi-search-results",v=k,A.appendChild(k),y.appendChild(x),y.appendChild(A),Z.appendChild(y);const I=O=>{if(!k)return;k.innerHTML="";let C=-1;function X(J){try{const ie=k.querySelector(".nimbi-search-result.is-selected");ie&&ie.classList.remove("is-selected");const me=k.querySelectorAll(".nimbi-search-result");if(!me||!me.length)return;if(J<0){C=-1;return}J>=me.length&&(J=me.length-1);const oe=me[J];if(oe){oe.classList.add("is-selected"),C=J;try{oe.scrollIntoView({block:"nearest"})}catch{}}}catch{}}function E(J){try{const ie=J.key,me=k.querySelectorAll(".nimbi-search-result");if(!me||!me.length)return;if(ie==="ArrowDown"){J.preventDefault();const oe=C<0?0:Math.min(me.length-1,C+1);X(oe);return}if(ie==="ArrowUp"){J.preventDefault();const oe=C<=0?0:C-1;X(oe);return}if(ie==="Enter"){J.preventDefault();const oe=k.querySelector(".nimbi-search-result.is-selected")||k.querySelector(".nimbi-search-result");if(oe)try{oe.click()}catch{}return}if(ie==="Escape"){try{y.classList.remove("is-active")}catch{}try{document.documentElement.classList.remove("nimbi-search-open")}catch{}try{k.style.display="none"}catch{}try{k.classList.remove("is-open")}catch{}try{k.removeAttribute("tabindex")}catch{}try{k.removeEventListener("keydown",E)}catch{}try{g&&g.focus()}catch{}try{g&&g.removeEventListener("keydown",ue)}catch{}return}}catch{}}function ue(J){try{if(J&&J.key==="ArrowDown"){J.preventDefault();try{k.focus()}catch{}X(0)}}catch{}}try{const J=document.createElement("div");J.className="panel nimbi-search-panel",O.forEach(ie=>{if(ie.parentTitle){const ge=document.createElement("p");ge.textContent=ie.parentTitle,ge.className="panel-heading nimbi-search-title nimbi-search-parent",J.appendChild(ge)}const me=document.createElement("a");me.className="panel-block nimbi-search-result",me.href=Se(ie.slug),me.setAttribute("role","button");try{if(ie.path&&typeof ie.slug=="string"){try{ne.set(ie.slug,ie.path)}catch{}try{G.set(ie.path,ie.slug)}catch{}}}catch{}const oe=document.createElement("div");oe.className="is-size-6 has-text-weight-semibold",oe.textContent=ie.title,me.appendChild(oe),me.addEventListener("click",()=>{if(y){y.classList.remove("is-active");try{document.documentElement.classList.remove("nimbi-search-open")}catch{}}try{k.style.display="none"}catch{}try{k.classList.remove("is-open")}catch{}try{k.removeAttribute("tabindex")}catch{}try{k.removeEventListener("keydown",E)}catch{}try{g&&g.removeEventListener("keydown",ue)}catch{}}),J.appendChild(me)}),k.appendChild(J)}catch{}if(y){y.classList.add("is-active");try{document.documentElement.classList.add("nimbi-search-open")}catch{}}try{k.style.display="block"}catch{}try{k.classList.add("is-open")}catch{}try{k.setAttribute("tabindex","0")}catch{}try{k.addEventListener("keydown",E)}catch{}try{g&&g.addEventListener("keydown",ue)}catch{}},R=(O,C)=>{let X=null;return(...E)=>{X&&clearTimeout(X),X=setTimeout(()=>O(...E),C)}};if(g){const O=R(async()=>{const C=document.querySelector("input#nimbi-search"),X=String(C&&C.value||"").trim().toLowerCase();if(!X){I([]);return}try{await U();const ue=(await p).filter(J=>J.title&&J.title.toLowerCase().includes(X)||J.excerpt&&J.excerpt.toLowerCase().includes(X));I(ue.slice(0,10))}catch(E){console.warn("[nimbi-cms] search input handler failed",E),I([])}},50);try{g.addEventListener("input",O)}catch{}try{document.addEventListener("input",C=>{try{C&&C.target&&C.target.id==="nimbi-search"&&O(C)}catch{}},!0)}catch{}}if(o==="eager"){try{p=U()}catch(O){console.warn("[nimbi-cms] eager search index init failed",O),p=Promise.resolve([])}p.finally(()=>{const O=document.querySelector("input#nimbi-search");if(O){try{O.removeAttribute("disabled")}catch{}try{w&&w.classList.remove("is-loading")}catch{}}})}try{const O=C=>{try{const X=C&&C.target;if(!v||!v.classList.contains("is-open")&&v.style&&v.style.display!=="block"||X&&(v.contains(X)||g&&(X===g||g.contains&&g.contains(X))))return;if(y){y.classList.remove("is-active");try{document.documentElement.classList.remove("nimbi-search-open")}catch{}}try{v.style.display="none"}catch{}try{v.classList.remove("is-open")}catch{}}catch{}};document.addEventListener("click",O,!0),document.addEventListener("touchstart",O,!0)}catch{}}for(let x=0;x<d.length;x++){const A=d[x];if(x===0)continue;const I=A.getAttribute("href")||"#",R=document.createElement("a");R.className="navbar-item";try{if(/^[^#]*\.md(?:$|[#?])/.test(I)||I.endsWith(".md")){const C=xe(I).split(/::|#/,2),X=C[0],E=C[1];R.href=Se(X,E)}else if(/\.html(?:$|[#?])/.test(I)||I.endsWith(".html")){const C=xe(I).split(/::|#/,2);let X=C[0];X&&!X.toLowerCase().endsWith(".html")&&(X=X+".html");const E=C[1];try{const ue=await Me(X,i);if(ue&&ue.raw)try{const ie=new DOMParser().parseFromString(ue.raw,"text/html"),me=ie.querySelector("title"),oe=ie.querySelector("h1"),ge=me&&me.textContent&&me.textContent.trim()?me.textContent.trim():oe&&oe.textContent?oe.textContent.trim():null;if(ge){const we=fe(ge);if(we){try{ne.set(we,X),G.set(X,we)}catch(We){console.warn("[nimbi-cms] slugToMd/mdToSlug set failed",We)}R.href=Se(we,E)}else R.href=Se(X,E)}else R.href=Se(X,E)}catch{R.href=Se(X,E)}else R.href=I}catch{R.href=I}}else R.href=I}catch(O){console.warn("[nimbi-cms] nav item href parse failed",O),R.href=I}try{const O=A.textContent&&String(A.textContent).trim()?String(A.textContent).trim():null;if(O)try{const C=fe(O);if(C){const X=R.getAttribute&&R.getAttribute("href")?R.getAttribute("href"):"";try{const ue=new URL(X,location.href).searchParams.get("page");if(ue){const J=decodeURIComponent(ue);try{ne.set(C,J),G.set(J,C)}catch(ie){console.warn("[nimbi-cms] slugToMd/mdToSlug set failed",ie)}}}catch(E){console.warn("[nimbi-cms] nav slug mapping failed",E)}}}catch(C){console.warn("[nimbi-cms] nav slug mapping failed",C)}}catch(O){console.warn("[nimbi-cms] nav slug mapping failed",O)}R.textContent=A.textContent||I,F.appendChild(R)}S.appendChild(F),Z&&S.appendChild(Z),z.appendChild(K),z.appendChild(S),e.appendChild(z);try{const x=A=>{try{const I=z&&z.querySelector?z.querySelector(".navbar-burger"):document.querySelector(".navbar-burger");if(!I||!I.classList.contains("is-active"))return;const R=I&&I.closest?I.closest(".navbar"):z;if(R&&R.contains(A.target))return;$()}catch{}};document.addEventListener("click",x,!0),document.addEventListener("touchstart",x,!0)}catch{}try{S.addEventListener("click",x=>{const A=x.target&&x.target.closest?x.target.closest("a"):null;if(!A)return;const I=A.getAttribute("href")||"";try{const R=new URL(I,location.href),O=R.searchParams.get("page"),C=R.hash?R.hash.replace(/^#/,""):null;O&&(x.preventDefault(),history.pushState({page:O},"",Se(O,C)),N())}catch(R){console.warn("[nimbi-cms] navbar click handler failed",R)}try{const R=z&&z.querySelector?z.querySelector(".navbar-burger"):null,O=R&&R.dataset?R.dataset.target:null,C=O?document.getElementById(O):null;R&&R.classList.contains("is-active")&&(R.classList.remove("is-active"),R.setAttribute("aria-expanded","false"),C&&C.classList.remove("is-active"))}catch(R){console.warn("[nimbi-cms] mobile menu close failed",R)}})}catch(x){console.warn("[nimbi-cms] attach content click handler failed",x)}try{t.addEventListener("click",x=>{const A=x.target&&x.target.closest?x.target.closest("a"):null;if(!A)return;const I=A.getAttribute("href")||"";if(I&&!ei(I))try{const R=new URL(I,location.href),O=R.searchParams.get("page"),C=R.hash?R.hash.replace(/^#/,""):null;O&&(x.preventDefault(),history.pushState({page:O},"",Se(O,C)),N())}catch(R){console.warn("[nimbi-cms] container click URL parse failed",R)}})}catch(x){console.warn("[nimbi-cms] build navbar failed",x)}return{navbar:z,linkEls:d}}try{document.addEventListener("input",e=>{try{if(e&&e.target&&e.target.id==="nimbi-search"){const t=document.getElementById("nimbi-search-results");if(t&&e.target&&e.target.value)try{t.style.display="block"}catch{}}}catch{}},!0)}catch{}var $n,Fr;function xo(){if(Fr)return $n;Fr=1;function e(a,s){return s.some(([u,o])=>u<=a&&a<=o)}function t(a){if(typeof a!="string")return!1;const s=a.charCodeAt(0);return e(s,[[12352,12447],[19968,40959],[44032,55203],[131072,191456]])}function n(a){return`
|
|
1467
|
+
\r `.includes(a)}function i(a){if(typeof a!="string")return!1;const s=a.charCodeAt(0);return e(s,[[33,47],[58,64],[91,96],[123,126],[12288,12351],[65280,65519]])}function r(a,s={}){let u=0,o=0,l=a.length-1;const c=s.wordsPerMinute||200,f=s.wordBound||n;for(;f(a[o]);)o++;for(;f(a[l]);)l--;const m=`${a}
|
|
1468
|
+
`;for(let g=o;g<=l;g++)if((t(m[g])||!f(m[g])&&(f(m[g+1])||t(m[g+1])))&&u++,t(m[g]))for(;g<=l&&(i(m[g+1])||f(m[g+1]));)g++;const h=u/c,d=Math.round(h*60*1e3);return{text:Math.ceil(h.toFixed(2))+" min read",minutes:h,time:d,words:u}}return $n=r,$n}var So=xo();const vo=Gr(So);function Zr(e,t){let n=document.querySelector(`meta[name="${e}"]`);n||(n=document.createElement("meta"),n.setAttribute("name",e),document.head.appendChild(n)),n.setAttribute("content",t)}function lt(e,t,n){let i=`meta[${e}="${t}"]`,r=document.querySelector(i);r||(r=document.createElement("meta"),r.setAttribute(e,t),document.head.appendChild(r)),r.setAttribute("content",n)}function Ao(e,t){try{let n=document.querySelector(`link[rel="${e}"]`);n||(n=document.createElement("link"),n.setAttribute("rel",e),document.head.appendChild(n)),n.setAttribute("href",t)}catch(n){console.warn("[seoManager] upsertLinkRel failed",n)}}function Eo(e,t,n,i){const r=t&&String(t).trim()?t:e.title||document.title;lt("property","og:title",r);const a=i&&String(i).trim()?i:e.description||"";a&&String(a).trim()&<("property","og:description",a),a&&String(a).trim()&<("name","twitter:description",a),lt("name","twitter:card",e.twitter_card||"summary_large_image");const s=n||e.image;s&&(lt("property","og:image",s),lt("name","twitter:image",s))}function Lo(e,t,n,i,r=""){const a=e.meta||{},s=document&&document.querySelector&&document.querySelector('meta[name="description"]')&&document.querySelector('meta[name="description"]').getAttribute("content")||"",u=i&&String(i).trim()?i:a.description&&String(a.description).trim()?a.description:s&&String(s).trim()?s:"";u&&String(u).trim()&&Zr("description",u),Zr("robots",a.robots||"index,follow"),Eo(a,t,n,u)}function To(){try{const e=['meta[name="site"]','meta[name="site-name"]','meta[name="siteName"]','meta[property="og:site_name"]','meta[name="twitter:site"]'];for(const t of e){const n=document.querySelector(t);if(n){const i=n.getAttribute("content")||"";if(i&&i.trim())return i.trim()}}}catch(e){console.warn("[seoManager] getSiteNameFromMeta failed",e)}return""}function Co(e,t,n,i,r,a=""){try{const s=e.meta||{},u=n&&String(n).trim()?n:s.title||a||document.title,o=r&&String(r).trim()?r:s.description||document.querySelector('meta[name="description"]')&&document.querySelector('meta[name="description"]').getAttribute("content")||"",l=i||s.image||null;let c="";try{if(t){const d=xe(t);try{c=(location.origin+location.pathname).split("?")[0]+"?page="+encodeURIComponent(d)}catch{c=location.href.split("#")[0]}}else c=location.href.split("#")[0]}catch(d){c=location.href.split("#")[0],console.warn("[seoManager] compute canonical failed",d)}c&&Ao("canonical",c);try{lt("property","og:url",c)}catch(d){console.warn("[seoManager] upsertMeta og:url failed",d)}const f={"@context":"https://schema.org","@type":"Article",headline:u||"",description:o||"",url:c||location.href.split("#")[0]};l&&(f.image=String(l)),s.date&&(f.datePublished=s.date),s.dateModified&&(f.dateModified=s.dateModified);const m="nimbi-jsonld";let h=document.getElementById(m);h||(h=document.createElement("script"),h.type="application/ld+json",h.id=m,document.head.appendChild(h)),h.textContent=JSON.stringify(f,null,2)}catch(s){console.warn("[seoManager] setStructuredData failed",s)}}function Mo(e,t,n,i,r,a,s,u,o,l,c){try{if(i&&i.querySelector){const f=i.querySelector(".menu-label");f&&(f.textContent=u&&u.textContent||e("onThisPage"))}}catch(f){console.warn("[seoManager] update toc label failed",f)}try{const f=n.meta&&n.meta.title?String(n.meta.title).trim():"",m=r.querySelector("img"),h=m&&(m.getAttribute("src")||m.src)||null;let d="";try{let w="";try{const y=u||(r&&r.querySelector?r.querySelector("h1"):null);if(y){let k=y.nextElementSibling;const v=[];for(;k&&!(k.tagName&&k.tagName.toLowerCase()==="h2");){try{if(k.classList&&k.classList.contains("nimbi-article-subtitle")){k=k.nextElementSibling;continue}}catch{}const $=(k.textContent||"").trim();$&&v.push($),k=k.nextElementSibling}v.length&&(w=v.join(" ").replace(/\s+/g," ").trim()),!w&&o&&(w=String(o).trim())}}catch(y){console.warn("[seoManager] compute descOverride failed",y)}w&&String(w).length>160&&(w=String(w).slice(0,157).trim()+"..."),d=w}catch(w){console.warn("[seoManager] compute descOverride failed",w)}let p="";try{f&&(p=f)}catch{}if(!p)try{u&&u.textContent&&(p=String(u.textContent).trim())}catch{}if(!p)try{const w=r.querySelector("h2");w&&w.textContent&&(p=String(w.textContent).trim())}catch{}p||(p=a||"");try{Lo(n,p||void 0,h,d)}catch(w){console.warn("[seoManager] setMetaTags failed",w)}try{Co(n,l,p||void 0,h,d,t)}catch(w){console.warn("[seoManager] setStructuredData failed",w)}const g=To();p?g?document.title=`${g} - ${p}`:document.title=`${t||"Site"} - ${p}`:f?document.title=f:document.title=t||document.title}catch(f){console.warn("[seoManager] applyPageMeta failed",f)}try{try{const f=r.querySelectorAll(".nimbi-reading-time");f&&f.forEach(m=>m.remove())}catch{}if(o){const f=vo(c.raw||""),m=f&&typeof f.minutes=="number"?Math.ceil(f.minutes):0,h=m?e("readingTime",{minutes:m}):"";if(!h)return;const d=r.querySelector("h1");if(d){const p=r.querySelector(".nimbi-article-subtitle");try{if(p){const g=document.createElement("span");g.className="nimbi-reading-time",g.textContent=h,p.appendChild(g)}else{const g=document.createElement("p");g.className="nimbi-article-subtitle is-6 has-text-grey-light";const w=document.createElement("span");w.className="nimbi-reading-time",w.textContent=h,g.appendChild(w);try{d.parentElement.insertBefore(g,d.nextSibling)}catch{try{d.insertAdjacentElement("afterend",g)}catch{}}}}catch{try{const w=document.createElement("p");w.className="nimbi-article-subtitle is-6 has-text-grey-light";const y=document.createElement("span");y.className="nimbi-reading-time",y.textContent=h,w.appendChild(y),d.insertAdjacentElement("afterend",w)}catch{}}}}}catch(f){console.warn("[seoManager] reading time update failed",f)}}let ze=null,Q=null,Te=1,Qe=(e,t)=>t,It=0,Nt=0,rn=()=>{},Tt=.25;function Ro(){if(ze&&document.contains(ze))return ze;ze=null;const e=document.createElement("dialog");e.className="nimbi-image-preview modal",e.setAttribute("role","dialog"),e.setAttribute("aria-modal","true"),e.setAttribute("aria-label",Qe("imagePreviewTitle","Image preview")),e.innerHTML=`
|
|
1469
1469
|
<div class="modal-background"></div>
|
|
1470
1470
|
<div class="modal-content">
|
|
1471
1471
|
<div class="nimbi-image-preview__content box" role="document">
|
|
@@ -1487,4 +1487,4 @@ export async function handleAnchorWorkerMessage(msg) {
|
|
|
1487
1487
|
</div>
|
|
1488
1488
|
</div>
|
|
1489
1489
|
</div>
|
|
1490
|
-
`,e.addEventListener("click",v=>{v.target===e&&zn()}),e.addEventListener("wheel",v=>{if(!oe())return;v.preventDefault();const F=v.deltaY<0?Et:-Et;Ye(Le+F),l(),u()},{passive:!1}),e.addEventListener("keydown",v=>{if(v.key==="Escape"){zn();return}if(Le>1){const F=e.querySelector(".nimbi-image-preview__image-wrapper");if(!F)return;const Z=40;switch(v.key){case"ArrowUp":F.scrollTop-=Z,v.preventDefault();break;case"ArrowDown":F.scrollTop+=Z,v.preventDefault();break;case"ArrowLeft":F.scrollLeft-=Z,v.preventDefault();break;case"ArrowRight":F.scrollLeft+=Z,v.preventDefault();break}}}),document.body.appendChild(e),ze=e,Q=e.querySelector("[data-nimbi-preview-image]");const t=e.querySelector("[data-nimbi-preview-fit]"),n=e.querySelector("[data-nimbi-preview-original]"),i=e.querySelector("[data-nimbi-preview-zoom-in]"),r=e.querySelector("[data-nimbi-preview-zoom-out]"),a=e.querySelector("[data-nimbi-preview-reset]"),s=e.querySelector("[data-nimbi-preview-close]"),c=e.querySelector("[data-nimbi-preview-zoom-label]"),o=e.querySelector("[data-nimbi-preview-zoom-hud]");function l(){c&&(c.textContent=`${Math.round(Le*100)}%`)}const u=()=>{o&&(o.textContent=`${Math.round(Le*100)}%`,o.classList.add("visible"),clearTimeout(o._timeout),o._timeout=setTimeout(()=>o.classList.remove("visible"),800))};nn=l,i.addEventListener("click",()=>{Ye(Le+Et),l(),u()}),r.addEventListener("click",()=>{Ye(Le-Et),l(),u()}),t.addEventListener("click",()=>{It(),l(),u()}),n.addEventListener("click",()=>{Ye(1),l(),u()}),a.addEventListener("click",()=>{It(),l(),u()}),s.addEventListener("click",zn),t.title=Ze("imagePreviewFit","Fit to screen"),n.title=Ze("imagePreviewOriginal","Original size"),r.title=Ze("imagePreviewZoomOut","Zoom out"),i.title=Ze("imagePreviewZoomIn","Zoom in"),s.title=Ze("imagePreviewClose","Close"),s.setAttribute("aria-label",Ze("imagePreviewClose","Close"));let p=!1,m=0,h=0,d=0,g=0;const f=new Map;let w=0,y=1;const k=(v,F)=>{const Z=v.x-F.x,ge=v.y-F.y;return Math.hypot(Z,ge)},L=()=>{p=!1,f.clear(),w=0,Q&&(Q.classList.add("is-panning"),Q.classList.remove("is-grabbing"))};let R=0,I=0,U=0;const z=v=>{const F=Date.now(),Z=F-R,ge=v.clientX-I,A=v.clientY-U;R=F,I=v.clientX,U=v.clientY,Z<300&&Math.hypot(ge,A)<30&&(Ye(Le>1?1:2),l(),v.preventDefault())},K=v=>{Ye(Le>1?1:2),l(),v.preventDefault()},oe=()=>ze?typeof ze.open=="boolean"?ze.open:ze.classList.contains("is-active"):!1,E=(v,F,Z=1)=>{if(f.has(Z)&&f.set(Z,{x:v,y:F}),f.size===2){const P=Array.from(f.values()),C=k(P[0],P[1]);if(w>0){const B=C/w;Ye(y*B)}return}if(!p)return;const ge=Q.closest(".nimbi-image-preview__image-wrapper");if(!ge)return;const A=v-m,S=F-h;ge.scrollLeft=d-A,ge.scrollTop=g-S},j=(v,F,Z=1)=>{if(!oe())return;if(f.set(Z,{x:v,y:F}),f.size===2){const S=Array.from(f.values());w=k(S[0],S[1]),y=Le;return}const ge=Q.closest(".nimbi-image-preview__image-wrapper");!ge||!(ge.scrollWidth>ge.clientWidth||ge.scrollHeight>ge.clientHeight)||(p=!0,m=v,h=F,d=ge.scrollLeft,g=ge.scrollTop,Q.classList.add("is-panning"),Q.classList.remove("is-grabbing"),window.addEventListener("pointermove",be),window.addEventListener("pointerup",V),window.addEventListener("pointercancel",V))},be=v=>{p&&(v.preventDefault(),E(v.clientX,v.clientY,v.pointerId))},V=()=>{L(),window.removeEventListener("pointermove",be),window.removeEventListener("pointerup",V),window.removeEventListener("pointercancel",V)};Q.addEventListener("pointerdown",v=>{v.preventDefault(),j(v.clientX,v.clientY,v.pointerId)}),Q.addEventListener("pointermove",v=>{(p||f.size===2)&&v.preventDefault(),E(v.clientX,v.clientY,v.pointerId)}),Q.addEventListener("pointerup",v=>{v.preventDefault(),v.pointerType==="touch"&&z(v),L()}),Q.addEventListener("dblclick",K),Q.addEventListener("pointercancel",L),Q.addEventListener("mousedown",v=>{v.preventDefault(),j(v.clientX,v.clientY,1)}),Q.addEventListener("mousemove",v=>{p&&v.preventDefault(),E(v.clientX,v.clientY,1)}),Q.addEventListener("mouseup",v=>{v.preventDefault(),L()});const H=e.querySelector(".nimbi-image-preview__image-wrapper");return H&&(H.addEventListener("pointerdown",v=>{if(j(v.clientX,v.clientY,v.pointerId),v&&v.target&&v.target.tagName==="IMG")try{v.target.classList.add("is-grabbing")}catch{}}),H.addEventListener("pointermove",v=>{E(v.clientX,v.clientY,v.pointerId)}),H.addEventListener("pointerup",L),H.addEventListener("pointercancel",L),H.addEventListener("mousedown",v=>{if(j(v.clientX,v.clientY,1),v&&v.target&&v.target.tagName==="IMG")try{v.target.classList.add("is-grabbing")}catch{}}),H.addEventListener("mousemove",v=>{E(v.clientX,v.clientY,1)}),H.addEventListener("mouseup",L)),e}function Ye(e){if(!Q)return;const t=Number(e);Le=Number.isFinite(t)?Math.max(.1,Math.min(4,t)):1;const i=Q.getBoundingClientRect(),r=$t||Q.naturalWidth||Q.width||i.width||0,a=Pt||Q.naturalHeight||Q.height||i.height||0;if(r&&a){Q.style.setProperty("--nimbi-preview-img-max-width","none"),Q.style.setProperty("--nimbi-preview-img-max-height","none"),Q.style.setProperty("--nimbi-preview-img-width",`${r*Le}px`),Q.style.setProperty("--nimbi-preview-img-height",`${a*Le}px`),Q.style.setProperty("--nimbi-preview-img-transform","none");try{Q.style.width=`${r*Le}px`,Q.style.height=`${a*Le}px`,Q.style.transform="none"}catch{}}else{Q.style.setProperty("--nimbi-preview-img-max-width",""),Q.style.setProperty("--nimbi-preview-img-max-height",""),Q.style.setProperty("--nimbi-preview-img-width",""),Q.style.setProperty("--nimbi-preview-img-height",""),Q.style.setProperty("--nimbi-preview-img-transform",`scale(${Le})`);try{Q.style.transform=`scale(${Le})`}catch{}}Q&&(Q.classList.add("is-panning"),Q.classList.remove("is-grabbing"))}function It(){if(!Q)return;const e=Q.closest(".nimbi-image-preview__image-wrapper");if(!e)return;const t=e.getBoundingClientRect();if(t.width===0||t.height===0)return;const n=$t||Q.naturalWidth||t.width,i=Pt||Q.naturalHeight||t.height;if(!n||!i)return;const r=t.width/n,a=t.height/i,s=Math.min(r,a,1);Ye(Number.isFinite(s)?s:1)}function zo(e,t="",n=0,i=0){const r=Ro();Le=1,$t=n||0,Pt=i||0,Q.src=e;try{if(!t)try{const c=new URL(e,typeof location<"u"?location.href:"").pathname||"",l=(c.substring(c.lastIndexOf("/")+1)||e).replace(/\.[^/.]+$/,"").replace(/[-_]+/g," ");t=Ze("imagePreviewDefaultAlt",l||"Image")}catch{t=Ze("imagePreviewDefaultAlt","Image")}}catch{}Q.alt=t,Q.style.transform="scale(1)";const a=()=>{$t=Q.naturalWidth||Q.width||0,Pt=Q.naturalHeight||Q.height||0};if(a(),It(),nn(),requestAnimationFrame(()=>{It(),nn()}),!$t||!Pt){const s=()=>{a(),requestAnimationFrame(()=>{It(),nn()}),Q.removeEventListener("load",s)};Q.addEventListener("load",s)}typeof r.showModal=="function"&&(r.open||r.showModal()),r.classList.add("is-active");try{document.documentElement.classList.add("nimbi-image-preview-open")}catch{}r.focus()}function zn(){if(ze){typeof ze.close=="function"&&ze.open&&ze.close(),ze.classList.remove("is-active");try{document.documentElement.classList.remove("nimbi-image-preview-open")}catch{}}}function $o(e,{t,zoomStep:n=.25}={}){if(!e||!e.querySelectorAll)return;Ze=(h,d)=>(typeof t=="function"?t(h):void 0)||d,Et=n,e.addEventListener("click",h=>{const d=h.target;if(!d||d.tagName!=="IMG")return;const g=d;if(!g.src)return;const f=g.closest("a");f&&f.getAttribute("href")||zo(g.src,g.alt||"",g.naturalWidth||0,g.naturalHeight||0)});let i=!1,r=0,a=0,s=0,c=0;const o=new Map;let l=0,u=1;const p=(h,d)=>{const g=h.x-d.x,f=h.y-d.y;return Math.hypot(g,f)};e.addEventListener("pointerdown",h=>{const d=h.target;if(!d||d.tagName!=="IMG")return;const g=d.closest("a");if(g&&g.getAttribute("href")||!ze||!ze.open)return;if(o.set(h.pointerId,{x:h.clientX,y:h.clientY}),o.size===2){const w=Array.from(o.values());l=p(w[0],w[1]),u=Le;return}const f=d.closest(".nimbi-image-preview__image-wrapper");if(f&&!(Le<=1)){h.preventDefault(),i=!0,r=h.clientX,a=h.clientY,s=f.scrollLeft,c=f.scrollTop,d.setPointerCapture(h.pointerId);try{d.classList.add("is-grabbing")}catch{}}}),e.addEventListener("pointermove",h=>{if(o.has(h.pointerId)&&o.set(h.pointerId,{x:h.clientX,y:h.clientY}),o.size===2){h.preventDefault();const k=Array.from(o.values()),L=p(k[0],k[1]);if(l>0){const R=L/l;Ye(u*R)}return}if(!i)return;h.preventDefault();const d=h.target,g=d.closest&&d.closest("a");if(g&&g.getAttribute&&g.getAttribute("href"))return;const f=d.closest(".nimbi-image-preview__image-wrapper");if(!f)return;const w=h.clientX-r,y=h.clientY-a;f.scrollLeft=s-w,f.scrollTop=c-y});const m=()=>{i=!1,o.clear(),l=0;try{const h=document.querySelector("[data-nimbi-preview-image]");h&&(h.classList.add("is-panning"),h.classList.remove("is-grabbing"))}catch{}};e.addEventListener("pointerup",m),e.addEventListener("pointercancel",m)}function Po(e){const{contentWrap:t,navWrap:n,container:i,mountOverlay:r=null,t:a,contentBase:s,homePage:c,initialDocumentTitle:o,runHooks:l}=e||{};if(!t||!(t instanceof HTMLElement))throw new TypeError("contentWrap must be an HTMLElement");let u=null;const p=ao(a,[{path:c,name:a("home"),isIndex:!0,children:[]}]);async function m(w,y){let k,L,R;try{({data:k,pagePath:L,anchor:R}=await Ya(w,s))}catch(j){console.error("[nimbi-cms] fetchPageData failed",j),jr(t,a,j);return}!R&&y&&(R=y);try{Un(null)}catch(j){console.warn("[nimbi-cms] scrollToAnchorOrTop failed",j)}t.innerHTML="";const{article:I,parsed:U,toc:z,topH1:K,h1Text:oe,slugKey:E}=await go(a,k,L,R,s);Mo(a,o,U,z,I,L,R,K,oe,E,k),n.innerHTML="",z&&(n.appendChild(z),yo(z));try{await l("transformHtml",{article:I,parsed:U,toc:z,pagePath:L,anchor:R,topH1:K,h1Text:oe,slugKey:E,data:k})}catch(j){console.warn("[nimbi-cms] transformHtml hooks failed",j)}t.appendChild(I);try{fo(I)}catch(j){console.warn("[nimbi-cms] executeEmbeddedScripts failed",j)}try{$o(I,{t:a})}catch(j){console.warn("[nimbi-cms] attachImagePreview failed",j)}try{Vt(i,100,!1),requestAnimationFrame(()=>Vt(i,100,!1)),setTimeout(()=>Vt(i,100,!1),250)}catch(j){console.warn("[nimbi-cms] setEagerForAboveFoldImages failed",j)}Un(R),ko(I,K,{mountOverlay:r,container:i,navWrap:n,t:a});try{await l("onPageLoad",{data:k,pagePath:L,anchor:R,article:I,toc:z,topH1:K,h1Text:oe,slugKey:E,contentWrap:t,navWrap:n})}catch(j){console.warn("[nimbi-cms] onPageLoad hooks failed",j)}u=L}async function h(){let w=new URLSearchParams(location.search).get("page")||c;const y=location.hash?decodeURIComponent(location.hash.replace(/^#/,"")):null;try{await m(w,y)}catch(k){console.warn("[nimbi-cms] renderByQuery failed for",w,k),jr(t,a,k)}}window.addEventListener("popstate",h);const d=()=>`nimbi-cms-scroll:${location.pathname}${location.search}`,g=()=>{try{const w=i||document.querySelector(".nimbi-cms");if(!w)return;const y={top:w.scrollTop||0,left:w.scrollLeft||0};sessionStorage.setItem(d(),JSON.stringify(y))}catch{}},f=()=>{try{const w=i||document.querySelector(".nimbi-cms");if(!w)return;const y=sessionStorage.getItem(d());if(!y)return;const k=JSON.parse(y);k&&typeof k.top=="number"&&w.scrollTo({top:k.top,left:k.left||0,behavior:"auto"})}catch{}};return window.addEventListener("pageshow",w=>{if(w.persisted)try{f(),Vt(i,100,!1)}catch(y){console.warn("[nimbi-cms] bfcache restore failed",y)}}),window.addEventListener("pagehide",()=>{try{g()}catch(w){console.warn("[nimbi-cms] save scroll position failed",w)}}),{renderByQuery:h,siteNav:p,getCurrentPagePath:()=>u}}function Io(e){try{let t=typeof e=="string"?e:typeof window<"u"&&window.location?window.location.search:"";if(!t&&typeof window<"u"&&window.location&&window.location.hash){const a=window.location.hash,s=a.indexOf("?");s!==-1&&(t=a.slice(s))}if(!t)return{};const n=new URLSearchParams(t.startsWith("?")?t.slice(1):t),i={},r=a=>{if(a==null)return;const s=String(a).toLowerCase();if(s==="1"||s==="true"||s==="yes")return!0;if(s==="0"||s==="false"||s==="no")return!1};if(n.has("contentPath")&&(i.contentPath=n.get("contentPath")),n.has("searchIndex")){const a=r(n.get("searchIndex"));typeof a=="boolean"&&(i.searchIndex=a)}if(n.has("searchIndexMode")){const a=n.get("searchIndexMode");(a==="eager"||a==="lazy")&&(i.searchIndexMode=a)}if(n.has("defaultStyle")){const a=n.get("defaultStyle");(a==="light"||a==="dark"||a==="system")&&(i.defaultStyle=a)}if(n.has("bulmaCustomize")&&(i.bulmaCustomize=n.get("bulmaCustomize")),n.has("lang")&&(i.lang=n.get("lang")),n.has("l10nFile")){const a=n.get("l10nFile");i.l10nFile=a==="null"?null:a}if(n.has("cacheTtlMinutes")){const a=Number(n.get("cacheTtlMinutes"));Number.isFinite(a)&&a>=0&&(i.cacheTtlMinutes=a)}if(n.has("cacheMaxEntries")){const a=Number(n.get("cacheMaxEntries"));Number.isInteger(a)&&a>=0&&(i.cacheMaxEntries=a)}if(n.has("homePage")&&(i.homePage=n.get("homePage")),n.has("navigationPage")&&(i.navigationPage=n.get("navigationPage")),n.has("notFoundPage")&&(i.notFoundPage=n.get("notFoundPage")),n.has("availableLanguages")&&(i.availableLanguages=n.get("availableLanguages").split(",").map(a=>a.trim()).filter(Boolean)),n.has("indexDepth")){const a=Number(n.get("indexDepth"));Number.isInteger(a)&&(a===1||a===2||a===3)&&(i.indexDepth=a)}if(n.has("noIndexing")){const s=(n.get("noIndexing")||"").split(",").map(c=>c.trim()).filter(Boolean);s.length&&(i.noIndexing=s)}return i}catch{return{}}}function No(e){return!(typeof e!="string"||!e.trim()||e.includes("..")||/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(e)||e.startsWith("//")||e.startsWith("/")||/^[A-Za-z]:\\/.test(e))}function $n(e){if(typeof e!="string")return!1;const t=e.trim();if(!t||t.includes("..")||/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(t)||t.startsWith("//")||t.startsWith("/")||/^[A-Za-z]:\\/.test(t))return!1;const n=t.replace(/^\.\//,"");return!!/^[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*\.(md|html)$/.test(n)}let Pn="";async function zi(e={}){if(typeof window<"u"&&window.__nimbiCMSDebug)try{console.info("[nimbi-cms] initCMS called",{options:e})}catch{}if(!e||typeof e!="object")throw new TypeError("initCMS(options): options must be an object");const n=Io();if(n&&(n.contentPath||n.homePage||n.notFoundPage||n.navigationPage))if(e&&e.allowUrlPathOverrides===!0)try{console.warn("[nimbi-cms] allowUrlPathOverrides enabled by host; honoring URL overrides for contentPath/homePage/notFoundPage/navigationPage")}catch(E){console.warn("[nimbi-cms] allowUrlPathOverrides logging failed",E)}else{try{console.warn("[nimbi-cms] ignoring unsafe URL overrides for contentPath/homePage/notFoundPage/navigationPage")}catch(E){console.warn("[nimbi-cms] logging ignore of URL overrides failed",E)}delete n.contentPath,delete n.homePage,delete n.notFoundPage,delete n.navigationPage}const i=Object.assign({},n,e);n&&typeof n.bulmaCustomize=="string"&&n.bulmaCustomize.trim()&&(i.bulmaCustomize=n.bulmaCustomize);let{el:r,contentPath:a="/content",crawlMaxQueue:s=1e3,searchIndex:c=!0,searchIndexMode:o="eager",indexDepth:l=1,noIndexing:u=void 0,defaultStyle:p="light",bulmaCustomize:m="none",lang:h=void 0,l10nFile:d=null,cacheTtlMinutes:g=5,cacheMaxEntries:f,markdownExtensions:w,availableLanguages:y,homePage:k="_home.md",notFoundPage:L="_404.md",navigationPage:R="_navigation.md"}=i;try{typeof k=="string"&&k.startsWith("./")&&(k=k.replace(/^\.\//,""))}catch{}try{typeof L=="string"&&L.startsWith("./")&&(L=L.replace(/^\.\//,""))}catch{}try{typeof R=="string"&&R.startsWith("./")&&(R=R.replace(/^[.]\//,""))}catch{}const{navbarLogo:I="favicon"}=i,{skipRootReadme:U=!1}=i,z=E=>{try{const j=document.querySelector(r);j&&j instanceof Element&&(j.innerHTML=`<div style="padding:1rem;font-family:system-ui, sans-serif;color:#b00;background:#fee;border:1px solid #b00;"><strong>NimbiCMS failed to initialize:</strong><br><pre style="white-space:pre-wrap;">${String(E)}</pre></div>`)}catch{}};if(i.contentPath!=null&&!No(i.contentPath))throw new TypeError('initCMS(options): "contentPath" contains unsafe characters or patterns');if(k!=null&&!$n(k))throw new TypeError('initCMS(options): "homePage" must be a relative path (no leading "/") ending with .md or .html');if(L!=null&&!$n(L))throw new TypeError('initCMS(options): "notFoundPage" must be a relative path (no leading "/") ending with .md or .html');if(R!=null&&!$n(R))throw new TypeError('initCMS(options): "navigationPage" must be a relative path (no leading "/") ending with .md or .html');if(!r)throw new Error("el is required");let K=r;if(typeof r=="string"){if(K=document.querySelector(r),!K)throw new Error(`el selector "${r}" did not match any element`)}else if(!(r instanceof Element))throw new TypeError("el must be a CSS selector string or a DOM element");if(typeof a!="string"||!a.trim())throw new TypeError('initCMS(options): "contentPath" must be a non-empty string when provided');if(typeof c!="boolean")throw new TypeError('initCMS(options): "searchIndex" must be a boolean when provided');if(o!=null&&o!=="eager"&&o!=="lazy")throw new TypeError('initCMS(options): "searchIndexMode" must be "eager" or "lazy" when provided');if(l!=null&&l!==1&&l!==2&&l!==3)throw new TypeError('initCMS(options): "indexDepth" must be 1, 2, or 3 when provided');if(p!=="light"&&p!=="dark"&&p!=="system")throw new TypeError('initCMS(options): "defaultStyle" must be "light", "dark" or "system"');if(m!=null&&typeof m!="string")throw new TypeError('initCMS(options): "bulmaCustomize" must be a string when provided');if(h!=null&&typeof h!="string")throw new TypeError('initCMS(options): "lang" must be a string when provided');if(d!=null&&typeof d!="string")throw new TypeError('initCMS(options): "l10nFile" must be a string or null when provided');if(g!=null&&(typeof g!="number"||!Number.isFinite(g)||g<0))throw new TypeError('initCMS(options): "cacheTtlMinutes" must be a non‑negative number when provided');if(f!=null&&(typeof f!="number"||!Number.isInteger(f)||f<0))throw new TypeError('initCMS(options): "cacheMaxEntries" must be a non‑negative integer when provided');if(w!=null&&(!Array.isArray(w)||w.some(E=>!E||typeof E!="object")))throw new TypeError('initCMS(options): "markdownExtensions" must be an array of extension objects when provided');if(y!=null&&(!Array.isArray(y)||y.some(E=>typeof E!="string"||!E.trim())))throw new TypeError('initCMS(options): "availableLanguages" must be an array of non-empty strings when provided');if(u!=null&&(!Array.isArray(u)||u.some(E=>typeof E!="string"||!E.trim())))throw new TypeError('initCMS(options): "noIndexing" must be an array of non-empty strings when provided');if(U!=null&&typeof U!="boolean")throw new TypeError('initCMS(options): "skipRootReadme" must be a boolean when provided');if(k!=null&&(typeof k!="string"||!k.trim()||!/\.(md|html)$/.test(k)))throw new TypeError('initCMS(options): "homePage" must be a non-empty string ending with .md or .html');if(L!=null&&(typeof L!="string"||!L.trim()||!/\.(md|html)$/.test(L)))throw new TypeError('initCMS(options): "notFoundPage" must be a non-empty string ending with .md or .html');const oe=!!c;try{Promise.resolve().then(()=>wt).then(E=>{try{E&&typeof E.setSkipRootReadme=="function"&&E.setSkipRootReadme(!!U)}catch(j){console.warn("[nimbi-cms] setSkipRootReadme failed",j)}}).catch(E=>{})}catch(E){console.warn("[nimbi-cms] setSkipRootReadme dynamic import failed",E)}try{await(async()=>{try{K.classList.add("nimbi-mount")}catch(_){console.warn("[nimbi-cms] mount element setup failed",_)}const E=document.createElement("section");E.className="section";const j=document.createElement("div");j.className="container nimbi-cms";const be=document.createElement("div");be.className="columns";const V=document.createElement("div");V.className="column is-hidden-mobile is-3-tablet nimbi-nav-wrap",V.setAttribute("role","navigation");try{const _=typeof gt=="function"?gt("navigation"):null;_&&V.setAttribute("aria-label",_)}catch(_){console.warn("[nimbi-cms] set nav aria-label failed",_)}be.appendChild(V);const H=document.createElement("main");H.className="column nimbi-content",H.setAttribute("role","main"),be.appendChild(H),j.appendChild(be),E.appendChild(j);const v=V,F=H;K.appendChild(E);let Z=null;try{Z=K.querySelector(".nimbi-overlay"),Z||(Z=document.createElement("div"),Z.className="nimbi-overlay",K.appendChild(Z))}catch(_){Z=null,console.warn("[nimbi-cms] mount overlay setup failed",_)}const ge=location.pathname||"/",A=ge.endsWith("/")?ge:ge.substring(0,ge.lastIndexOf("/")+1);try{Pn=document.title||""}catch(_){Pn="",console.warn("[nimbi-cms] read initial document title failed",_)}let S=a;const P=Object.prototype.hasOwnProperty.call(i,"contentPath");if(S==="."||S==="./"){S="";var C=new URL(A+S,location.origin).toString()}else if(P&&S&&String(S).trim()!==""){S.startsWith("./")&&(S=S.slice(2)),S.startsWith("/")&&(S=S.slice(1)),S!==""&&!S.endsWith("/")&&(S=S+"/");var C=new URL(A+S,location.origin).toString()}else if(S&&String(S).trim()!==""){S.startsWith("/")||(S="/"+S),S.endsWith("/")||(S=S+"/");try{S=S.replace(/\\/g,"/")}catch{}var C=new URL(S,location.origin).toString()}else var C=new URL(A,location.origin).toString();try{Promise.resolve().then(()=>wt).then(_=>{try{_&&typeof _.setHomePage=="function"&&_.setHomePage(k)}catch(q){console.warn("[nimbi-cms] setHomePage failed",q)}}).catch(_=>{})}catch(_){console.warn("[nimbi-cms] setHomePage dynamic import failed",_)}d&&await Zn(d,A),y&&Array.isArray(y)&&ei(y),h&&Gn(h);const B=Po({contentWrap:F,navWrap:v,container:j,mountOverlay:Z,t:gt,contentBase:C,homePage:k,initialDocumentTitle:Pn,runHooks:In});if(typeof g=="number"&&g>=0&&typeof Tr=="function"&&Tr(g*60*1e3),typeof f=="number"&&f>=0&&typeof Lr=="function"&&Lr(f),w&&Array.isArray(w)&&w.length)try{w.forEach(_=>{typeof _=="object"&&Ci&&typeof Hn=="function"&&Hn(_)})}catch(_){console.warn("[nimbi-cms] applying markdownExtensions failed",_)}try{typeof s=="number"&&Promise.resolve().then(()=>wt).then(({setDefaultCrawlMaxQueue:_})=>{try{_(s)}catch(q){console.warn("[nimbi-cms] setDefaultCrawlMaxQueue failed",q)}})}catch(_){console.warn("[nimbi-cms] setDefaultCrawlMaxQueue import failed",_)}try{on(C)}catch(_){console.warn("[nimbi-cms] setContentBase failed",_)}try{Bn(L)}catch(_){console.warn("[nimbi-cms] setNotFoundPage failed",_)}try{on(C)}catch(_){console.warn("[nimbi-cms] setContentBase failed",_)}try{Bn(L)}catch(_){console.warn("[nimbi-cms] setNotFoundPage failed",_)}try{await Ce(k,C)}catch(_){throw k==="_home.md"?new Error("Required _home.md not found"):new Error(`Required ${k} not found at ${C}${k}: ${_.message}`)}Xr(p),await Qr(m,A);try{const _=document.createElement("header");_.className="nimbi-site-navbar",K.insertBefore(_,E);const q=await Ce(R,C),ue=await hn(q.raw||""),{navbar:fe,linkEls:te}=await _o(_,j,ue.html||"",C,k,gt,B.renderByQuery,oe,o,l,u,I);try{await In("onNavBuild",{navWrap:v,navbar:fe,linkEls:te,contentBase:C})}catch(ne){console.warn("[nimbi-cms] onNavBuild hooks failed",ne)}try{const ne=()=>{const le=_&&_.getBoundingClientRect&&Math.round(_.getBoundingClientRect().height)||_&&_.offsetHeight||0;if(le>0){try{K.style.setProperty("--nimbi-site-navbar-height",`${le}px`)}catch(X){console.warn("[nimbi-cms] set CSS var failed",X)}try{j.style.paddingTop=""}catch(X){console.warn("[nimbi-cms] set container paddingTop failed",X)}try{const X=K&&K.getBoundingClientRect&&Math.round(K.getBoundingClientRect().height)||K&&K.clientHeight||0;if(X>0){const ke=Math.max(0,X-le);try{j.style.setProperty("--nimbi-cms-height",`${ke}px`)}catch(Ve){console.warn("[nimbi-cms] set --nimbi-cms-height failed",Ve)}}else try{j.style.setProperty("--nimbi-cms-height","calc(100vh - var(--nimbi-site-navbar-height))")}catch(ke){console.warn("[nimbi-cms] set --nimbi-cms-height failed",ke)}}catch(X){console.warn("[nimbi-cms] compute container height failed",X)}try{_.style.setProperty("--nimbi-site-navbar-height",`${le}px`)}catch(X){console.warn("[nimbi-cms] set navbar CSS var failed",X)}}};ne();try{if(typeof ResizeObserver<"u"){const le=new ResizeObserver(()=>ne());try{le.observe(_)}catch(X){console.warn("[nimbi-cms] ResizeObserver.observe failed",X)}}}catch(le){console.warn("[nimbi-cms] ResizeObserver setup failed",le)}}catch(ne){console.warn("[nimbi-cms] compute navbar height failed",ne)}}catch(_){console.warn("[nimbi-cms] build navigation failed",_)}await B.renderByQuery();try{Promise.resolve().then(()=>Bo).then(({getVersion:_})=>{typeof _=="function"&&_().then(q=>{try{const ue=q||"0.0.0";try{const fe=le=>{const X=document.createElement("a");X.className="nimbi-version-label tag is-small",X.textContent=`Ninbi CMS v. ${ue}`,X.href=le||"#",X.target="_blank",X.rel="noopener noreferrer nofollow",X.setAttribute("aria-label",`Ninbi CMS version ${ue}`);try{Kr(X)}catch{}try{K.appendChild(X)}catch(ke){console.warn("[nimbi-cms] append version label failed",ke)}},te="https://abelvm.github.io/nimbiCMS/",ne=(()=>{try{if(te&&typeof te=="string")return new URL(te).toString()}catch{}return"#"})();fe(ne)}catch(fe){console.warn("[nimbi-cms] building version label failed",fe)}}catch(ue){console.warn("[nimbi-cms] building version label failed",ue)}}).catch(q=>{console.warn("[nimbi-cms] getVersion() failed",q)})}).catch(_=>{console.warn("[nimbi-cms] import version module failed",_)})}catch(_){console.warn("[nimbi-cms] version label setup failed",_)}})()}catch(E){throw z(E),E}}async function $i(){try{if("1.0.4".trim())return"1.0.4"}catch{}return"0.0.0"}const Bo=Object.freeze(Object.defineProperty({__proto__:null,getVersion:$i},Symbol.toStringTag,{value:"Module"}));exports.BAD_LANGUAGES=Wn;exports.SUPPORTED_HLJS_MAP=ae;exports._clearHooks=ma;exports.addHook=dn;exports.default=zi;exports.ensureBulma=Qr;exports.getVersion=$i;exports.initCMS=zi;exports.loadL10nFile=Zn;exports.loadSupportedLanguages=Fn;exports.observeCodeBlocks=Gr;exports.onNavBuild=ga;exports.onPageLoad=pa;exports.registerLanguage=yt;exports.runHooks=In;exports.setHighlightTheme=xa;exports.setLang=Gn;exports.setStyle=Xr;exports.setThemeVars=va;exports.t=gt;exports.transformHtml=fa;
|
|
1490
|
+
`,e.addEventListener("click",S=>{S.target===e&&zn()}),e.addEventListener("wheel",S=>{if(!le())return;S.preventDefault();const F=S.deltaY<0?Tt:-Tt;Je(Te+F),l(),c()},{passive:!1}),e.addEventListener("keydown",S=>{if(S.key==="Escape"){zn();return}if(Te>1){const F=e.querySelector(".nimbi-image-preview__image-wrapper");if(!F)return;const Z=40;switch(S.key){case"ArrowUp":F.scrollTop-=Z,S.preventDefault();break;case"ArrowDown":F.scrollTop+=Z,S.preventDefault();break;case"ArrowLeft":F.scrollLeft-=Z,S.preventDefault();break;case"ArrowRight":F.scrollLeft+=Z,S.preventDefault();break}}}),document.body.appendChild(e),ze=e,Q=e.querySelector("[data-nimbi-preview-image]");const t=e.querySelector("[data-nimbi-preview-fit]"),n=e.querySelector("[data-nimbi-preview-original]"),i=e.querySelector("[data-nimbi-preview-zoom-in]"),r=e.querySelector("[data-nimbi-preview-zoom-out]"),a=e.querySelector("[data-nimbi-preview-reset]"),s=e.querySelector("[data-nimbi-preview-close]"),u=e.querySelector("[data-nimbi-preview-zoom-label]"),o=e.querySelector("[data-nimbi-preview-zoom-hud]");function l(){u&&(u.textContent=`${Math.round(Te*100)}%`)}const c=()=>{o&&(o.textContent=`${Math.round(Te*100)}%`,o.classList.add("visible"),clearTimeout(o._timeout),o._timeout=setTimeout(()=>o.classList.remove("visible"),800))};rn=l,i.addEventListener("click",()=>{Je(Te+Tt),l(),c()}),r.addEventListener("click",()=>{Je(Te-Tt),l(),c()}),t.addEventListener("click",()=>{Bt(),l(),c()}),n.addEventListener("click",()=>{Je(1),l(),c()}),a.addEventListener("click",()=>{Bt(),l(),c()}),s.addEventListener("click",zn),t.title=Qe("imagePreviewFit","Fit to screen"),n.title=Qe("imagePreviewOriginal","Original size"),r.title=Qe("imagePreviewZoomOut","Zoom out"),i.title=Qe("imagePreviewZoomIn","Zoom in"),s.title=Qe("imagePreviewClose","Close"),s.setAttribute("aria-label",Qe("imagePreviewClose","Close"));let f=!1,m=0,h=0,d=0,p=0;const g=new Map;let w=0,y=1;const k=(S,F)=>{const Z=S.x-F.x,pe=S.y-F.y;return Math.hypot(Z,pe)},v=()=>{f=!1,g.clear(),w=0,Q&&(Q.classList.add("is-panning"),Q.classList.remove("is-grabbing"))};let $=0,N=0,U=0;const z=S=>{const F=Date.now(),Z=F-$,pe=S.clientX-N,x=S.clientY-U;$=F,N=S.clientX,U=S.clientY,Z<300&&Math.hypot(pe,x)<30&&(Je(Te>1?1:2),l(),S.preventDefault())},K=S=>{Je(Te>1?1:2),l(),S.preventDefault()},le=()=>ze?typeof ze.open=="boolean"?ze.open:ze.classList.contains("is-active"):!1,L=(S,F,Z=1)=>{if(g.has(Z)&&g.set(Z,{x:S,y:F}),g.size===2){const I=Array.from(g.values()),R=k(I[0],I[1]);if(w>0){const O=R/w;Je(y*O)}return}if(!f)return;const pe=Q.closest(".nimbi-image-preview__image-wrapper");if(!pe)return;const x=S-m,A=F-h;pe.scrollLeft=d-x,pe.scrollTop=p-A},j=(S,F,Z=1)=>{if(!le())return;if(g.set(Z,{x:S,y:F}),g.size===2){const A=Array.from(g.values());w=k(A[0],A[1]),y=Te;return}const pe=Q.closest(".nimbi-image-preview__image-wrapper");!pe||!(pe.scrollWidth>pe.clientWidth||pe.scrollHeight>pe.clientHeight)||(f=!0,m=S,h=F,d=pe.scrollLeft,p=pe.scrollTop,Q.classList.add("is-panning"),Q.classList.remove("is-grabbing"),window.addEventListener("pointermove",ye),window.addEventListener("pointerup",V),window.addEventListener("pointercancel",V))},ye=S=>{f&&(S.preventDefault(),L(S.clientX,S.clientY,S.pointerId))},V=()=>{v(),window.removeEventListener("pointermove",ye),window.removeEventListener("pointerup",V),window.removeEventListener("pointercancel",V)};Q.addEventListener("pointerdown",S=>{S.preventDefault(),j(S.clientX,S.clientY,S.pointerId)}),Q.addEventListener("pointermove",S=>{(f||g.size===2)&&S.preventDefault(),L(S.clientX,S.clientY,S.pointerId)}),Q.addEventListener("pointerup",S=>{S.preventDefault(),S.pointerType==="touch"&&z(S),v()}),Q.addEventListener("dblclick",K),Q.addEventListener("pointercancel",v),Q.addEventListener("mousedown",S=>{S.preventDefault(),j(S.clientX,S.clientY,1)}),Q.addEventListener("mousemove",S=>{f&&S.preventDefault(),L(S.clientX,S.clientY,1)}),Q.addEventListener("mouseup",S=>{S.preventDefault(),v()});const H=e.querySelector(".nimbi-image-preview__image-wrapper");return H&&(H.addEventListener("pointerdown",S=>{if(j(S.clientX,S.clientY,S.pointerId),S&&S.target&&S.target.tagName==="IMG")try{S.target.classList.add("is-grabbing")}catch{}}),H.addEventListener("pointermove",S=>{L(S.clientX,S.clientY,S.pointerId)}),H.addEventListener("pointerup",v),H.addEventListener("pointercancel",v),H.addEventListener("mousedown",S=>{if(j(S.clientX,S.clientY,1),S&&S.target&&S.target.tagName==="IMG")try{S.target.classList.add("is-grabbing")}catch{}}),H.addEventListener("mousemove",S=>{L(S.clientX,S.clientY,1)}),H.addEventListener("mouseup",v)),e}function Je(e){if(!Q)return;const t=Number(e);Te=Number.isFinite(t)?Math.max(.1,Math.min(4,t)):1;const i=Q.getBoundingClientRect(),r=It||Q.naturalWidth||Q.width||i.width||0,a=Nt||Q.naturalHeight||Q.height||i.height||0;if(r&&a){Q.style.setProperty("--nimbi-preview-img-max-width","none"),Q.style.setProperty("--nimbi-preview-img-max-height","none"),Q.style.setProperty("--nimbi-preview-img-width",`${r*Te}px`),Q.style.setProperty("--nimbi-preview-img-height",`${a*Te}px`),Q.style.setProperty("--nimbi-preview-img-transform","none");try{Q.style.width=`${r*Te}px`,Q.style.height=`${a*Te}px`,Q.style.transform="none"}catch{}}else{Q.style.setProperty("--nimbi-preview-img-max-width",""),Q.style.setProperty("--nimbi-preview-img-max-height",""),Q.style.setProperty("--nimbi-preview-img-width",""),Q.style.setProperty("--nimbi-preview-img-height",""),Q.style.setProperty("--nimbi-preview-img-transform",`scale(${Te})`);try{Q.style.transform=`scale(${Te})`}catch{}}Q&&(Q.classList.add("is-panning"),Q.classList.remove("is-grabbing"))}function Bt(){if(!Q)return;const e=Q.closest(".nimbi-image-preview__image-wrapper");if(!e)return;const t=e.getBoundingClientRect();if(t.width===0||t.height===0)return;const n=It||Q.naturalWidth||t.width,i=Nt||Q.naturalHeight||t.height;if(!n||!i)return;const r=t.width/n,a=t.height/i,s=Math.min(r,a,1);Je(Number.isFinite(s)?s:1)}function $o(e,t="",n=0,i=0){const r=Ro();Te=1,It=n||0,Nt=i||0,Q.src=e;try{if(!t)try{const u=new URL(e,typeof location<"u"?location.href:"").pathname||"",l=(u.substring(u.lastIndexOf("/")+1)||e).replace(/\.[^/.]+$/,"").replace(/[-_]+/g," ");t=Qe("imagePreviewDefaultAlt",l||"Image")}catch{t=Qe("imagePreviewDefaultAlt","Image")}}catch{}Q.alt=t,Q.style.transform="scale(1)";const a=()=>{It=Q.naturalWidth||Q.width||0,Nt=Q.naturalHeight||Q.height||0};if(a(),Bt(),rn(),requestAnimationFrame(()=>{Bt(),rn()}),!It||!Nt){const s=()=>{a(),requestAnimationFrame(()=>{Bt(),rn()}),Q.removeEventListener("load",s)};Q.addEventListener("load",s)}typeof r.showModal=="function"&&(r.open||r.showModal()),r.classList.add("is-active");try{document.documentElement.classList.add("nimbi-image-preview-open")}catch{}r.focus()}function zn(){if(ze){typeof ze.close=="function"&&ze.open&&ze.close(),ze.classList.remove("is-active");try{document.documentElement.classList.remove("nimbi-image-preview-open")}catch{}}}function zo(e,{t,zoomStep:n=.25}={}){if(!e||!e.querySelectorAll)return;Qe=(h,d)=>(typeof t=="function"?t(h):void 0)||d,Tt=n,e.addEventListener("click",h=>{const d=h.target;if(!d||d.tagName!=="IMG")return;const p=d;if(!p.src)return;const g=p.closest("a");g&&g.getAttribute("href")||$o(p.src,p.alt||"",p.naturalWidth||0,p.naturalHeight||0)});let i=!1,r=0,a=0,s=0,u=0;const o=new Map;let l=0,c=1;const f=(h,d)=>{const p=h.x-d.x,g=h.y-d.y;return Math.hypot(p,g)};e.addEventListener("pointerdown",h=>{const d=h.target;if(!d||d.tagName!=="IMG")return;const p=d.closest("a");if(p&&p.getAttribute("href")||!ze||!ze.open)return;if(o.set(h.pointerId,{x:h.clientX,y:h.clientY}),o.size===2){const w=Array.from(o.values());l=f(w[0],w[1]),c=Te;return}const g=d.closest(".nimbi-image-preview__image-wrapper");if(g&&!(Te<=1)){h.preventDefault(),i=!0,r=h.clientX,a=h.clientY,s=g.scrollLeft,u=g.scrollTop,d.setPointerCapture(h.pointerId);try{d.classList.add("is-grabbing")}catch{}}}),e.addEventListener("pointermove",h=>{if(o.has(h.pointerId)&&o.set(h.pointerId,{x:h.clientX,y:h.clientY}),o.size===2){h.preventDefault();const k=Array.from(o.values()),v=f(k[0],k[1]);if(l>0){const $=v/l;Je(c*$)}return}if(!i)return;h.preventDefault();const d=h.target,p=d.closest&&d.closest("a");if(p&&p.getAttribute&&p.getAttribute("href"))return;const g=d.closest(".nimbi-image-preview__image-wrapper");if(!g)return;const w=h.clientX-r,y=h.clientY-a;g.scrollLeft=s-w,g.scrollTop=u-y});const m=()=>{i=!1,o.clear(),l=0;try{const h=document.querySelector("[data-nimbi-preview-image]");h&&(h.classList.add("is-panning"),h.classList.remove("is-grabbing"))}catch{}};e.addEventListener("pointerup",m),e.addEventListener("pointercancel",m)}function Po(e){const{contentWrap:t,navWrap:n,container:i,mountOverlay:r=null,t:a,contentBase:s,homePage:u,initialDocumentTitle:o,runHooks:l}=e||{};if(!t||!(t instanceof HTMLElement))throw new TypeError("contentWrap must be an HTMLElement");let c=null;const f=ao(a,[{path:u,name:a("home"),isIndex:!0,children:[]}]);async function m(w,y){let k,v,$;try{({data:k,pagePath:v,anchor:$}=await Ya(w,s))}catch(j){console.error("[nimbi-cms] fetchPageData failed",j),Ur(t,a,j);return}!$&&y&&($=y);try{Wn(null)}catch(j){console.warn("[nimbi-cms] scrollToAnchorOrTop failed",j)}t.innerHTML="";const{article:N,parsed:U,toc:z,topH1:K,h1Text:le,slugKey:L}=await go(a,k,v,$,s);Mo(a,o,U,z,N,v,$,K,le,L,k),n.innerHTML="",z&&(n.appendChild(z),yo(z));try{await l("transformHtml",{article:N,parsed:U,toc:z,pagePath:v,anchor:$,topH1:K,h1Text:le,slugKey:L,data:k})}catch(j){console.warn("[nimbi-cms] transformHtml hooks failed",j)}t.appendChild(N);try{fo(N)}catch(j){console.warn("[nimbi-cms] executeEmbeddedScripts failed",j)}try{zo(N,{t:a})}catch(j){console.warn("[nimbi-cms] attachImagePreview failed",j)}try{Jt(i,100,!1),requestAnimationFrame(()=>Jt(i,100,!1)),setTimeout(()=>Jt(i,100,!1),250)}catch(j){console.warn("[nimbi-cms] setEagerForAboveFoldImages failed",j)}Wn($),ko(N,K,{mountOverlay:r,container:i,navWrap:n,t:a});try{await l("onPageLoad",{data:k,pagePath:v,anchor:$,article:N,toc:z,topH1:K,h1Text:le,slugKey:L,contentWrap:t,navWrap:n})}catch(j){console.warn("[nimbi-cms] onPageLoad hooks failed",j)}c=v}async function h(){let w=new URLSearchParams(location.search).get("page")||u;const y=location.hash?decodeURIComponent(location.hash.replace(/^#/,"")):null;try{await m(w,y)}catch(k){console.warn("[nimbi-cms] renderByQuery failed for",w,k),Ur(t,a,k)}}window.addEventListener("popstate",h);const d=()=>`nimbi-cms-scroll:${location.pathname}${location.search}`,p=()=>{try{const w=i||document.querySelector(".nimbi-cms");if(!w)return;const y={top:w.scrollTop||0,left:w.scrollLeft||0};sessionStorage.setItem(d(),JSON.stringify(y))}catch{}},g=()=>{try{const w=i||document.querySelector(".nimbi-cms");if(!w)return;const y=sessionStorage.getItem(d());if(!y)return;const k=JSON.parse(y);k&&typeof k.top=="number"&&w.scrollTo({top:k.top,left:k.left||0,behavior:"auto"})}catch{}};return window.addEventListener("pageshow",w=>{if(w.persisted)try{g(),Jt(i,100,!1)}catch(y){console.warn("[nimbi-cms] bfcache restore failed",y)}}),window.addEventListener("pagehide",()=>{try{p()}catch(w){console.warn("[nimbi-cms] save scroll position failed",w)}}),{renderByQuery:h,siteNav:f,getCurrentPagePath:()=>c}}function Io(e){try{let t=typeof e=="string"?e:typeof window<"u"&&window.location?window.location.search:"";if(!t&&typeof window<"u"&&window.location&&window.location.hash){const a=window.location.hash,s=a.indexOf("?");s!==-1&&(t=a.slice(s))}if(!t)return{};const n=new URLSearchParams(t.startsWith("?")?t.slice(1):t),i={},r=a=>{if(a==null)return;const s=String(a).toLowerCase();if(s==="1"||s==="true"||s==="yes")return!0;if(s==="0"||s==="false"||s==="no")return!1};if(n.has("contentPath")&&(i.contentPath=n.get("contentPath")),n.has("searchIndex")){const a=r(n.get("searchIndex"));typeof a=="boolean"&&(i.searchIndex=a)}if(n.has("searchIndexMode")){const a=n.get("searchIndexMode");(a==="eager"||a==="lazy")&&(i.searchIndexMode=a)}if(n.has("defaultStyle")){const a=n.get("defaultStyle");(a==="light"||a==="dark"||a==="system")&&(i.defaultStyle=a)}if(n.has("bulmaCustomize")&&(i.bulmaCustomize=n.get("bulmaCustomize")),n.has("lang")&&(i.lang=n.get("lang")),n.has("l10nFile")){const a=n.get("l10nFile");i.l10nFile=a==="null"?null:a}if(n.has("cacheTtlMinutes")){const a=Number(n.get("cacheTtlMinutes"));Number.isFinite(a)&&a>=0&&(i.cacheTtlMinutes=a)}if(n.has("cacheMaxEntries")){const a=Number(n.get("cacheMaxEntries"));Number.isInteger(a)&&a>=0&&(i.cacheMaxEntries=a)}if(n.has("homePage")&&(i.homePage=n.get("homePage")),n.has("navigationPage")&&(i.navigationPage=n.get("navigationPage")),n.has("notFoundPage")&&(i.notFoundPage=n.get("notFoundPage")),n.has("availableLanguages")&&(i.availableLanguages=n.get("availableLanguages").split(",").map(a=>a.trim()).filter(Boolean)),n.has("indexDepth")){const a=Number(n.get("indexDepth"));Number.isInteger(a)&&(a===1||a===2||a===3)&&(i.indexDepth=a)}if(n.has("noIndexing")){const s=(n.get("noIndexing")||"").split(",").map(u=>u.trim()).filter(Boolean);s.length&&(i.noIndexing=s)}return i}catch{return{}}}function No(e){return!(typeof e!="string"||!e.trim()||e.includes("..")||/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(e)||e.startsWith("//")||e.startsWith("/")||/^[A-Za-z]:\\/.test(e))}function Pn(e){if(typeof e!="string")return!1;const t=e.trim();if(!t||t.includes("..")||/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(t)||t.startsWith("//")||t.startsWith("/")||/^[A-Za-z]:\\/.test(t))return!1;const n=t.replace(/^\.\//,"");return!!/^[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*\.(md|html)$/.test(n)}let In="";async function zi(e={}){if(typeof window<"u"&&window.__nimbiCMSDebug)try{console.info("[nimbi-cms] initCMS called",{options:e})}catch{}if(!e||typeof e!="object")throw new TypeError("initCMS(options): options must be an object");const n=Io();if(n&&(n.contentPath||n.homePage||n.notFoundPage||n.navigationPage))if(e&&e.allowUrlPathOverrides===!0)try{console.warn("[nimbi-cms] allowUrlPathOverrides enabled by host; honoring URL overrides for contentPath/homePage/notFoundPage/navigationPage")}catch(L){console.warn("[nimbi-cms] allowUrlPathOverrides logging failed",L)}else{try{console.warn("[nimbi-cms] ignoring unsafe URL overrides for contentPath/homePage/notFoundPage/navigationPage")}catch(L){console.warn("[nimbi-cms] logging ignore of URL overrides failed",L)}delete n.contentPath,delete n.homePage,delete n.notFoundPage,delete n.navigationPage}const i=Object.assign({},n,e);n&&typeof n.bulmaCustomize=="string"&&n.bulmaCustomize.trim()&&(i.bulmaCustomize=n.bulmaCustomize);let{el:r,contentPath:a="/content",crawlMaxQueue:s=1e3,searchIndex:u=!0,searchIndexMode:o="eager",indexDepth:l=1,noIndexing:c=void 0,defaultStyle:f="light",bulmaCustomize:m="none",lang:h=void 0,l10nFile:d=null,cacheTtlMinutes:p=5,cacheMaxEntries:g,markdownExtensions:w,availableLanguages:y,homePage:k="_home.md",notFoundPage:v="_404.md",navigationPage:$="_navigation.md"}=i;try{typeof k=="string"&&k.startsWith("./")&&(k=k.replace(/^\.\//,""))}catch{}try{typeof v=="string"&&v.startsWith("./")&&(v=v.replace(/^\.\//,""))}catch{}try{typeof $=="string"&&$.startsWith("./")&&($=$.replace(/^[.]\//,""))}catch{}const{navbarLogo:N="favicon"}=i,{skipRootReadme:U=!1}=i,z=L=>{try{const j=document.querySelector(r);j&&j instanceof Element&&(j.innerHTML=`<div style="padding:1rem;font-family:system-ui, sans-serif;color:#b00;background:#fee;border:1px solid #b00;"><strong>NimbiCMS failed to initialize:</strong><br><pre style="white-space:pre-wrap;">${String(L)}</pre></div>`)}catch{}};if(i.contentPath!=null&&!No(i.contentPath))throw new TypeError('initCMS(options): "contentPath" contains unsafe characters or patterns');if(k!=null&&!Pn(k))throw new TypeError('initCMS(options): "homePage" must be a relative path (no leading "/") ending with .md or .html');if(v!=null&&!Pn(v))throw new TypeError('initCMS(options): "notFoundPage" must be a relative path (no leading "/") ending with .md or .html');if($!=null&&!Pn($))throw new TypeError('initCMS(options): "navigationPage" must be a relative path (no leading "/") ending with .md or .html');if(!r)throw new Error("el is required");let K=r;if(typeof r=="string"){if(K=document.querySelector(r),!K)throw new Error(`el selector "${r}" did not match any element`)}else if(!(r instanceof Element))throw new TypeError("el must be a CSS selector string or a DOM element");if(typeof a!="string"||!a.trim())throw new TypeError('initCMS(options): "contentPath" must be a non-empty string when provided');if(typeof u!="boolean")throw new TypeError('initCMS(options): "searchIndex" must be a boolean when provided');if(o!=null&&o!=="eager"&&o!=="lazy")throw new TypeError('initCMS(options): "searchIndexMode" must be "eager" or "lazy" when provided');if(l!=null&&l!==1&&l!==2&&l!==3)throw new TypeError('initCMS(options): "indexDepth" must be 1, 2, or 3 when provided');if(f!=="light"&&f!=="dark"&&f!=="system")throw new TypeError('initCMS(options): "defaultStyle" must be "light", "dark" or "system"');if(m!=null&&typeof m!="string")throw new TypeError('initCMS(options): "bulmaCustomize" must be a string when provided');if(h!=null&&typeof h!="string")throw new TypeError('initCMS(options): "lang" must be a string when provided');if(d!=null&&typeof d!="string")throw new TypeError('initCMS(options): "l10nFile" must be a string or null when provided');if(p!=null&&(typeof p!="number"||!Number.isFinite(p)||p<0))throw new TypeError('initCMS(options): "cacheTtlMinutes" must be a non‑negative number when provided');if(g!=null&&(typeof g!="number"||!Number.isInteger(g)||g<0))throw new TypeError('initCMS(options): "cacheMaxEntries" must be a non‑negative integer when provided');if(w!=null&&(!Array.isArray(w)||w.some(L=>!L||typeof L!="object")))throw new TypeError('initCMS(options): "markdownExtensions" must be an array of extension objects when provided');if(y!=null&&(!Array.isArray(y)||y.some(L=>typeof L!="string"||!L.trim())))throw new TypeError('initCMS(options): "availableLanguages" must be an array of non-empty strings when provided');if(c!=null&&(!Array.isArray(c)||c.some(L=>typeof L!="string"||!L.trim())))throw new TypeError('initCMS(options): "noIndexing" must be an array of non-empty strings when provided');if(U!=null&&typeof U!="boolean")throw new TypeError('initCMS(options): "skipRootReadme" must be a boolean when provided');if(k!=null&&(typeof k!="string"||!k.trim()||!/\.(md|html)$/.test(k)))throw new TypeError('initCMS(options): "homePage" must be a non-empty string ending with .md or .html');if(v!=null&&(typeof v!="string"||!v.trim()||!/\.(md|html)$/.test(v)))throw new TypeError('initCMS(options): "notFoundPage" must be a non-empty string ending with .md or .html');const le=!!u;try{Promise.resolve().then(()=>kt).then(L=>{try{L&&typeof L.setSkipRootReadme=="function"&&L.setSkipRootReadme(!!U)}catch(j){console.warn("[nimbi-cms] setSkipRootReadme failed",j)}}).catch(L=>{})}catch(L){console.warn("[nimbi-cms] setSkipRootReadme dynamic import failed",L)}try{await(async()=>{try{K.classList.add("nimbi-mount")}catch(E){console.warn("[nimbi-cms] mount element setup failed",E)}const L=document.createElement("section");L.className="section";const j=document.createElement("div");j.className="container nimbi-cms";const ye=document.createElement("div");ye.className="columns";const V=document.createElement("div");V.className="column is-hidden-mobile is-3-tablet nimbi-nav-wrap",V.setAttribute("role","navigation");try{const E=typeof mt=="function"?mt("navigation"):null;E&&V.setAttribute("aria-label",E)}catch(E){console.warn("[nimbi-cms] set nav aria-label failed",E)}ye.appendChild(V);const H=document.createElement("main");H.className="column nimbi-content",H.setAttribute("role","main"),ye.appendChild(H),j.appendChild(ye),L.appendChild(j);const S=V,F=H;K.appendChild(L);let Z=null;try{Z=K.querySelector(".nimbi-overlay"),Z||(Z=document.createElement("div"),Z.className="nimbi-overlay",K.appendChild(Z))}catch(E){Z=null,console.warn("[nimbi-cms] mount overlay setup failed",E)}const pe=location.pathname||"/";let x;if(pe.endsWith("/"))x=pe;else{const E=pe.substring(pe.lastIndexOf("/")+1);E&&!E.includes(".")?x=pe+"/":x=pe.substring(0,pe.lastIndexOf("/")+1)}try{In=document.title||""}catch(E){In="",console.warn("[nimbi-cms] read initial document title failed",E)}let A=a;const I=Object.prototype.hasOwnProperty.call(i,"contentPath"),R=typeof location<"u"&&location.origin?location.origin:"http://localhost",O=new URL(x,R).toString();(A==="."||A==="./")&&(A="");try{A=String(A||"").replace(/\\/g,"/")}catch{A=String(A||"")}A.startsWith("/")&&(A=A.replace(/^\/+/,"")),A&&!A.endsWith("/")&&(A=A+"/");try{if(A&&x&&x!=="/"){const E=x.replace(/^\/+/,"").replace(/\/+$/,"")+"/";E&&A.startsWith(E)&&(A=A.slice(E.length))}}catch{}try{if(A)var C=new URL(A,O.endsWith("/")?O:O+"/").toString();else var C=O}catch{try{if(A)var C=new URL("/"+A,R).toString();else var C=new URL(x,R).toString()}catch{var C=R}}try{Promise.resolve().then(()=>kt).then(E=>{try{E&&typeof E.setHomePage=="function"&&E.setHomePage(k)}catch(ue){console.warn("[nimbi-cms] setHomePage failed",ue)}}).catch(E=>{})}catch(E){console.warn("[nimbi-cms] setHomePage dynamic import failed",E)}d&&await Gn(d,x),y&&Array.isArray(y)&&ti(y),h&&Qn(h);const X=Po({contentWrap:F,navWrap:S,container:j,mountOverlay:Z,t:mt,contentBase:C,homePage:k,initialDocumentTitle:In,runHooks:Nn});if(typeof p=="number"&&p>=0&&typeof Cr=="function"&&Cr(p*60*1e3),typeof g=="number"&&g>=0&&typeof Tr=="function"&&Tr(g),w&&Array.isArray(w)&&w.length)try{w.forEach(E=>{typeof E=="object"&&Mi&&typeof jn=="function"&&jn(E)})}catch(E){console.warn("[nimbi-cms] applying markdownExtensions failed",E)}try{typeof s=="number"&&Promise.resolve().then(()=>kt).then(({setDefaultCrawlMaxQueue:E})=>{try{E(s)}catch(ue){console.warn("[nimbi-cms] setDefaultCrawlMaxQueue failed",ue)}})}catch(E){console.warn("[nimbi-cms] setDefaultCrawlMaxQueue import failed",E)}try{ln(C)}catch(E){console.warn("[nimbi-cms] setContentBase failed",E)}try{On(v)}catch(E){console.warn("[nimbi-cms] setNotFoundPage failed",E)}try{ln(C)}catch(E){console.warn("[nimbi-cms] setContentBase failed",E)}try{On(v)}catch(E){console.warn("[nimbi-cms] setNotFoundPage failed",E)}try{await Me(k,C)}catch(E){throw k==="_home.md"?new Error("Required _home.md not found"):new Error(`Required ${k} not found at ${C}${k}: ${E.message}`)}Kr(f),await Xr(m,x);try{const E=document.createElement("header");E.className="nimbi-site-navbar",K.insertBefore(E,L);const ue=await Me($,C),J=await dn(ue.raw||""),{navbar:ie,linkEls:me}=await _o(E,j,J.html||"",C,k,mt,X.renderByQuery,le,o,l,c,N);try{await Nn("onNavBuild",{navWrap:S,navbar:ie,linkEls:me,contentBase:C})}catch(oe){console.warn("[nimbi-cms] onNavBuild hooks failed",oe)}try{const oe=()=>{const ge=E&&E.getBoundingClientRect&&Math.round(E.getBoundingClientRect().height)||E&&E.offsetHeight||0;if(ge>0){try{K.style.setProperty("--nimbi-site-navbar-height",`${ge}px`)}catch(we){console.warn("[nimbi-cms] set CSS var failed",we)}try{j.style.paddingTop=""}catch(we){console.warn("[nimbi-cms] set container paddingTop failed",we)}try{const we=K&&K.getBoundingClientRect&&Math.round(K.getBoundingClientRect().height)||K&&K.clientHeight||0;if(we>0){const We=Math.max(0,we-ge);try{j.style.setProperty("--nimbi-cms-height",`${We}px`)}catch(yn){console.warn("[nimbi-cms] set --nimbi-cms-height failed",yn)}}else try{j.style.setProperty("--nimbi-cms-height","calc(100vh - var(--nimbi-site-navbar-height))")}catch(We){console.warn("[nimbi-cms] set --nimbi-cms-height failed",We)}}catch(we){console.warn("[nimbi-cms] compute container height failed",we)}try{E.style.setProperty("--nimbi-site-navbar-height",`${ge}px`)}catch(we){console.warn("[nimbi-cms] set navbar CSS var failed",we)}}};oe();try{if(typeof ResizeObserver<"u"){const ge=new ResizeObserver(()=>oe());try{ge.observe(E)}catch(we){console.warn("[nimbi-cms] ResizeObserver.observe failed",we)}}}catch(ge){console.warn("[nimbi-cms] ResizeObserver setup failed",ge)}}catch(oe){console.warn("[nimbi-cms] compute navbar height failed",oe)}}catch(E){console.warn("[nimbi-cms] build navigation failed",E)}await X.renderByQuery();try{Promise.resolve().then(()=>Bo).then(({getVersion:E})=>{typeof E=="function"&&E().then(ue=>{try{const J=ue||"0.0.0";try{const ie=ge=>{const we=document.createElement("a");we.className="nimbi-version-label tag is-small",we.textContent=`Nimbi CMS v. ${J}`,we.href=ge||"#",we.target="_blank",we.rel="noopener noreferrer nofollow",we.setAttribute("aria-label",`Nimbi CMS version ${J}`);try{Yr(we)}catch{}try{K.appendChild(we)}catch(We){console.warn("[nimbi-cms] append version label failed",We)}},me="https://abelvm.github.io/nimbiCMS/",oe=(()=>{try{if(me&&typeof me=="string")return new URL(me).toString()}catch{}return"#"})();ie(oe)}catch(ie){console.warn("[nimbi-cms] building version label failed",ie)}}catch(J){console.warn("[nimbi-cms] building version label failed",J)}}).catch(ue=>{console.warn("[nimbi-cms] getVersion() failed",ue)})}).catch(E=>{console.warn("[nimbi-cms] import version module failed",E)})}catch(E){console.warn("[nimbi-cms] version label setup failed",E)}})()}catch(L){throw z(L),L}}async function Pi(){try{if("1.0.5".trim())return"1.0.5"}catch{}return"0.0.0"}const Bo=Object.freeze(Object.defineProperty({__proto__:null,getVersion:Pi},Symbol.toStringTag,{value:"Module"}));exports.BAD_LANGUAGES=Fn;exports.SUPPORTED_HLJS_MAP=ae;exports._clearHooks=ma;exports.addHook=pn;exports.default=zi;exports.ensureBulma=Xr;exports.getVersion=Pi;exports.initCMS=zi;exports.loadL10nFile=Gn;exports.loadSupportedLanguages=Zn;exports.observeCodeBlocks=Qr;exports.onNavBuild=ga;exports.onPageLoad=pa;exports.registerLanguage=_t;exports.runHooks=Nn;exports.setHighlightTheme=xa;exports.setLang=Qn;exports.setStyle=Kr;exports.setThemeVars=va;exports.t=mt;exports.transformHtml=fa;
|