diff --git a/dist/components/index.js b/dist/components/index.js index be3878e..bd3667c 100644 --- a/dist/components/index.js +++ b/dist/components/index.js @@ -1,20 +1,41 @@ -import { classNames } from '@quartz-community/utils/lang'; -import { jsx } from 'preact/jsx-runtime'; - -// src/util/lang.ts +// node_modules/@quartz-community/utils/dist/lang.js +function classNames(...classes) { + return classes.filter(Boolean).join(" "); +} // src/components/styles/example.scss var example_default = ".example-component {\n padding: 8px 16px;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-radius: 4px;\n font-weight: 600;\n display: inline-block;\n}"; // src/components/scripts/example.inline.ts var example_inline_default = 'function l(){let e=window.location.pathname;return e.startsWith("/")&&(e=e.slice(1)),e.endsWith("/")&&(e=e.slice(0,-1)),e||"index"}function r(){let e=document.querySelectorAll(".example-component");if(e.length===0)return;let t=[];function o(n){(n.ctrlKey||n.metaKey)&&n.shiftKey&&n.key.toLowerCase()==="e"&&(n.preventDefault(),console.log("[ExampleComponent] Keyboard shortcut triggered!"))}document.addEventListener("keydown",o),t.push(()=>document.removeEventListener("keydown",o));for(let n of e){let i=()=>{console.log("[ExampleComponent] Clicked!")};n.addEventListener("click",i),t.push(()=>n.removeEventListener("click",i))}typeof window<"u"&&window.addCleanup&&window.addCleanup(()=>{t.forEach(n=>n())}),console.log("[ExampleComponent] Initialized with",e.length,"component(s)")}document.addEventListener("nav",e=>{let t=e.detail?.url||l();console.log("[ExampleComponent] Navigation to:",t),r()});document.addEventListener("render",()=>{console.log("[ExampleComponent] Render event - re-initializing"),r()});document.addEventListener("prenav",()=>{let e=document.querySelector(".example-component");e&&sessionStorage.setItem("exampleScrollTop",e.scrollTop?.toString()||"0")});\n'; +var l; +l = { __e: function(n2, l2, u3, t2) { + for (var i2, r2, o2; l2 = l2.__; ) if ((i2 = l2.__c) && !i2.__) try { + if ((r2 = i2.constructor) && null != r2.getDerivedStateFromError && (i2.setState(r2.getDerivedStateFromError(n2)), o2 = i2.__d), null != i2.componentDidCatch && (i2.componentDidCatch(n2, t2 || {}), o2 = i2.__d), o2) return i2.__E = i2; + } catch (l3) { + n2 = l3; + } + throw n2; +} }, "function" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, Math.random().toString(8); + +// node_modules/preact/jsx-runtime/dist/jsxRuntime.mjs +var f2 = 0; +function u2(e2, t2, n2, o2, i2, u3) { + t2 || (t2 = {}); + var a2, c2, p2 = t2; + if ("ref" in p2) for (c2 in p2 = {}, t2) "ref" == c2 ? a2 = t2[c2] : p2[c2] = t2[c2]; + var l2 = { type: e2, props: p2, key: n2, ref: a2, __k: null, __: null, __b: 0, __e: null, __c: null, constructor: void 0, __v: --f2, __i: -1, __u: 0, __source: i2, __self: u3 }; + return l.vnode && l.vnode(l2), l2; +} + +// src/components/ExampleComponent.tsx var ExampleComponent_default = ((opts) => { const { prefix = "", suffix = "", className = "example-component" } = opts ?? {}; const Component = (props) => { const frontmatter = props.fileData?.frontmatter; const title = frontmatter?.title ?? "Untitled"; const fullText = `${prefix}${title}${suffix}`; - return /* @__PURE__ */ jsx("div", { class: classNames(className), children: fullText }); + return /* @__PURE__ */ u2("div", { class: classNames(className), children: fullText }); }; Component.css = example_default; Component.afterDOMLoaded = example_inline_default; @@ -26,6 +47,8 @@ var stacked_default = "#stacked-pages-container:not(.binder-active) {\n display // src/components/scripts/stacked.inline.ts var stacked_inline_default = 'var y=Object.hasOwnProperty;function h(){return typeof document>"u"?"":document.body?.dataset?.basepath??""}function o(u,D){let n=D??h(),F=u.startsWith("/")?u:"/"+u;return n+F}var B="stacked-pages-state";function d(){let u=window.location.pathname;return u.startsWith("/")&&(u=u.slice(1)),u.endsWith("/")&&(u=u.slice(0,-1)),u||"index"}function m(){return document.querySelector("h1")?.textContent?.trim()||document.title||d()}function s(){try{let u=sessionStorage.getItem(B);if(u){let D=JSON.parse(u);if(Array.isArray(D.tabs)&&typeof D.activeIndex=="number")return D}}catch{}return{tabs:[],activeIndex:-1}}function E(u){try{sessionStorage.setItem(B,JSON.stringify(u))}catch{}}function f(u){return{maxTabs:parseInt(u.dataset.maxTabs||"8",10),mobileBreakpoint:parseInt(u.dataset.mobileBreakpoint||"800",10),showSpines:u.dataset.showSpines!=="false",animate:u.dataset.animate!=="false"}}function A(u,D){let n=f(u);if(window.innerWidth0){let t=document.createElement("div");t.className="binder-strip binder-strip-left";for(let e=0;e0){let t=document.createElement("div");t.className="binder-strip binder-strip-right";for(let e=0;e0),document.body.classList.toggle("has-binder-right",r.length>0)}function c(u,D,n,F,r){let t=document.createElement("div");if(t.className=`binder-tab binder-tab-${n}`,t.dataset.index=String(D),D===F.activeIndex&&t.classList.add("binder-tab-active"),r.showSpines){let i=document.createElement("div");i.className="binder-spine",t.appendChild(i)}let e=document.createElement("span");if(e.className="binder-label",e.textContent=u.title,t.appendChild(e),F.tabs.length>=2){let i=document.createElement("button");i.className="binder-close",i.textContent="\\xD7",i.setAttribute("aria-label",`Close ${u.title}`),i.addEventListener("click",C=>{C.stopPropagation(),p(D)}),t.appendChild(i)}return t.addEventListener("click",()=>{g(D)}),t}function g(u){let D=s();if(u<0||u>=D.tabs.length)return;let n=D.tabs[u];if(!n)return;D.activeIndex=u,E(D);let F=new URL(o(n.slug),window.location.origin);window.spaNavigate?window.spaNavigate(F,!1):window.location.href=F.toString()}function p(u){let D=s();if(D.tabs.length<2)return;let n=u===D.activeIndex;D.tabs.splice(u,1),n?(D.activeIndex=Math.min(u,D.tabs.length-1),E(D),g(D.activeIndex)):(ue.slug===D);if(t>=0)F.tabs[t].title=n,F.activeIndex=t;else{let e={slug:D,title:n},i=F.activeIndex+1;for(F.tabs.splice(i,0,e),F.activeIndex=i;F.tabs.length>r.maxTabs;)F.activeIndex>0?(F.tabs.shift(),F.activeIndex--):F.tabs.pop()}E(F),A(u,F)}function a(){let u=document.getElementById("stacked-pages-container");u&&A(u,s())}function v(){b();let u=()=>a();window.addEventListener("resize",u),window.addCleanup&&window.addCleanup(()=>window.removeEventListener("resize",u))}typeof document<"u"&&(document.addEventListener("nav",()=>{v()}),document.addEventListener("render",()=>{a()}));\n'; + +// src/components/StackedPages.tsx var StackedPages_default = ((opts) => { const { maxTabs = 8, @@ -34,7 +57,7 @@ var StackedPages_default = ((opts) => { animateTransitions = true } = opts ?? {}; const Component = (_props) => { - return /* @__PURE__ */ jsx( + return /* @__PURE__ */ u2( "div", { id: "stacked-pages-container", diff --git a/dist/components/index.js.map b/dist/components/index.js.map index 3a30b65..1419dd2 100644 --- a/dist/components/index.js.map +++ b/dist/components/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/components/styles/example.scss","../../src/components/scripts/example.inline.ts","../../src/components/ExampleComponent.tsx","../../src/components/styles/stacked.scss","../../src/components/scripts/stacked.inline.ts","../../src/components/StackedPages.tsx"],"names":["jsx"],"mappings":";;;;;;AAAA,IAAA,eAAA,GAAA,wMAAA;;;ACAA,IAAA,sBAAA,GAAA,mqCAAA;ACgBA,IAAO,wBAAA,IAAS,CAAC,IAAA,KAAmC;AAClD,EAAA,MAAM,EAAE,SAAS,EAAA,EAAI,MAAA,GAAS,IAAI,SAAA,GAAY,mBAAA,EAAoB,GAAI,IAAA,IAAQ,EAAC;AAE/E,EAAA,MAAM,SAAA,GAA6B,CAAC,KAAA,KAAgC;AAClE,IAAA,MAAM,WAAA,GAAc,MAAM,QAAA,EAAU,WAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,aAAa,KAAA,IAAS,UAAA;AACpC,IAAA,MAAM,WAAW,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,GAAG,MAAM,CAAA,CAAA;AAE3C,IAAA,2BAAQ,KAAA,EAAA,EAAI,KAAA,EAAO,UAAA,CAAW,SAAS,GAAI,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,SAAA,CAAU,GAAA,GAAM,eAAA;AAChB,EAAA,SAAA,CAAU,cAAA,GAAiB,sBAAA;AAE3B,EAAA,OAAO,SAAA;AACT,CAAA;;;AC/BA,IAAA,eAAA,GAAA,qhGAAA;;;ACAA,IAAA,sBAAA,GAAA,koHAAA;ACiBA,IAAO,oBAAA,IAAS,CAAC,IAAA,KAAwC;AACvD,EAAA,MAAM;AAAA,IACJ,OAAA,GAAU,CAAA;AAAA,IACV,gBAAA,GAAmB,GAAA;AAAA,IACnB,UAAA,GAAa,IAAA;AAAA,IACb,kBAAA,GAAqB;AAAA,GACvB,GAAI,QAAQ,EAAC;AAEb,EAAA,MAAM,SAAA,GAA6B,CAAC,MAAA,KAAiC;AACnE,IAAA,uBACEA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,yBAAA;AAAA,QACH,eAAA,EAAe,OAAA;AAAA,QACf,wBAAA,EAAwB,gBAAA;AAAA,QACxB,kBAAA,EAAkB,UAAA;AAAA,QAClB,cAAA,EAAc;AAAA;AAAA,KAChB;AAAA,EAEJ,CAAA;AAEA,EAAA,SAAA,CAAU,GAAA,GAAM,eAAA;AAChB,EAAA,SAAA,CAAU,cAAA,GAAiB,sBAAA;AAE3B,EAAA,OAAO,SAAA;AACT,CAAA","file":"index.js","sourcesContent":[".example-component {\n padding: 8px 16px;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-radius: 4px;\n font-weight: 600;\n display: inline-block;\n}","function l(){let e=window.location.pathname;return e.startsWith(\"/\")&&(e=e.slice(1)),e.endsWith(\"/\")&&(e=e.slice(0,-1)),e||\"index\"}function r(){let e=document.querySelectorAll(\".example-component\");if(e.length===0)return;let t=[];function o(n){(n.ctrlKey||n.metaKey)&&n.shiftKey&&n.key.toLowerCase()===\"e\"&&(n.preventDefault(),console.log(\"[ExampleComponent] Keyboard shortcut triggered!\"))}document.addEventListener(\"keydown\",o),t.push(()=>document.removeEventListener(\"keydown\",o));for(let n of e){let i=()=>{console.log(\"[ExampleComponent] Clicked!\")};n.addEventListener(\"click\",i),t.push(()=>n.removeEventListener(\"click\",i))}typeof window<\"u\"&&window.addCleanup&&window.addCleanup(()=>{t.forEach(n=>n())}),console.log(\"[ExampleComponent] Initialized with\",e.length,\"component(s)\")}document.addEventListener(\"nav\",e=>{let t=e.detail?.url||l();console.log(\"[ExampleComponent] Navigation to:\",t),r()});document.addEventListener(\"render\",()=>{console.log(\"[ExampleComponent] Render event - re-initializing\"),r()});document.addEventListener(\"prenav\",()=>{let e=document.querySelector(\".example-component\");e&&sessionStorage.setItem(\"exampleScrollTop\",e.scrollTop?.toString()||\"0\")});\n","import type {\n QuartzComponent,\n QuartzComponentProps,\n QuartzComponentConstructor,\n} from \"@quartz-community/types\";\nimport { classNames } from \"../util/lang\";\nimport style from \"./styles/example.scss\";\n// @ts-expect-error - inline script import handled by Quartz bundler\nimport script from \"./scripts/example.inline.ts\";\n\nexport interface ExampleComponentOptions {\n prefix?: string;\n suffix?: string;\n className?: string;\n}\n\nexport default ((opts?: ExampleComponentOptions) => {\n const { prefix = \"\", suffix = \"\", className = \"example-component\" } = opts ?? {};\n\n const Component: QuartzComponent = (props: QuartzComponentProps) => {\n const frontmatter = props.fileData?.frontmatter as { title?: string } | undefined;\n const title = frontmatter?.title ?? \"Untitled\";\n const fullText = `${prefix}${title}${suffix}`;\n\n return
{fullText}
;\n };\n\n Component.css = style;\n Component.afterDOMLoaded = script;\n\n return Component;\n}) satisfies QuartzComponentConstructor;\n","#stacked-pages-container:not(.binder-active) {\n display: none;\n}\n#stacked-pages-container.binder-active {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n z-index: 99;\n display: flex;\n justify-content: space-between;\n align-items: stretch;\n}\n\nbody.has-binder-left .page {\n padding-left: 40px;\n}\n\nbody.has-binder-right .page {\n padding-right: 40px;\n}\n\n.binder-strip {\n pointer-events: auto;\n display: flex;\n flex-direction: column;\n gap: 0;\n padding: 0;\n justify-content: stretch;\n align-items: stretch;\n z-index: 100;\n width: 40px;\n height: 100%;\n}\n\n.binder-strip-left {\n align-self: flex-start;\n}\n\n.binder-strip-right {\n align-self: flex-end;\n margin-left: auto;\n}\n\n.binder-tab {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 8px 0;\n cursor: pointer;\n background: var(--lightgray);\n border: 1px solid var(--lightgray);\n transition: background 0.15s ease, transform 0.15s ease, border-color 0.15s ease;\n width: 100%;\n flex: 1;\n position: relative;\n writing-mode: vertical-lr;\n overflow: hidden;\n}\n.binder-tab:hover {\n background: var(--light);\n}\n\n.binder-tab.binder-tab-active {\n background: var(--light);\n z-index: 101;\n cursor: default;\n}\n.binder-tab.binder-tab-active.binder-tab-left {\n border-right: none;\n border-left: 3px solid var(--secondary);\n border-radius: 6px 0 0 6px;\n}\n.binder-tab.binder-tab-active.binder-tab-right {\n border-left: none;\n border-right: 3px solid var(--secondary);\n border-radius: 0 6px 6px 0;\n}\n\n.binder-tab:not(.binder-tab-active) {\n color: var(--gray);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-left {\n border-radius: 6px 0 0 6px;\n border-right: 2px solid var(--secondary);\n border-left: 1px solid var(--lightgray);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-left:hover {\n transform: translateX(4px);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-right {\n border-radius: 0 6px 6px 0;\n border-left: 2px solid var(--secondary);\n border-right: 1px solid var(--lightgray);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-right:hover {\n transform: translateX(-4px);\n}\n\n.binder-spine {\n display: none;\n}\n\n.binder-label {\n font-size: 1rem;\n line-height: 1.2;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--darkgray);\n user-select: none;\n transform: rotate(180deg);\n text-align: left;\n}\n\n.binder-tab-active .binder-label {\n font-weight: bold;\n color: var(--dark);\n}\n\n.binder-close {\n appearance: none;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 1rem;\n line-height: 1;\n color: var(--gray);\n padding: 2px;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.15s ease, color 0.15s ease;\n transform: rotate(180deg);\n}\n.binder-close:hover {\n color: var(--dark);\n background: rgba(0, 0, 0, 0.05);\n border-radius: 4px;\n}\n\n.binder-tab:hover .binder-close {\n opacity: 1;\n}","var y=Object.hasOwnProperty;function h(){return typeof document>\"u\"?\"\":document.body?.dataset?.basepath??\"\"}function o(u,D){let n=D??h(),F=u.startsWith(\"/\")?u:\"/\"+u;return n+F}var B=\"stacked-pages-state\";function d(){let u=window.location.pathname;return u.startsWith(\"/\")&&(u=u.slice(1)),u.endsWith(\"/\")&&(u=u.slice(0,-1)),u||\"index\"}function m(){return document.querySelector(\"h1\")?.textContent?.trim()||document.title||d()}function s(){try{let u=sessionStorage.getItem(B);if(u){let D=JSON.parse(u);if(Array.isArray(D.tabs)&&typeof D.activeIndex==\"number\")return D}}catch{}return{tabs:[],activeIndex:-1}}function E(u){try{sessionStorage.setItem(B,JSON.stringify(u))}catch{}}function f(u){return{maxTabs:parseInt(u.dataset.maxTabs||\"8\",10),mobileBreakpoint:parseInt(u.dataset.mobileBreakpoint||\"800\",10),showSpines:u.dataset.showSpines!==\"false\",animate:u.dataset.animate!==\"false\"}}function A(u,D){let n=f(u);if(window.innerWidth0){let t=document.createElement(\"div\");t.className=\"binder-strip binder-strip-left\";for(let e=0;e0){let t=document.createElement(\"div\");t.className=\"binder-strip binder-strip-right\";for(let e=0;e0),document.body.classList.toggle(\"has-binder-right\",r.length>0)}function c(u,D,n,F,r){let t=document.createElement(\"div\");if(t.className=`binder-tab binder-tab-${n}`,t.dataset.index=String(D),D===F.activeIndex&&t.classList.add(\"binder-tab-active\"),r.showSpines){let i=document.createElement(\"div\");i.className=\"binder-spine\",t.appendChild(i)}let e=document.createElement(\"span\");if(e.className=\"binder-label\",e.textContent=u.title,t.appendChild(e),F.tabs.length>=2){let i=document.createElement(\"button\");i.className=\"binder-close\",i.textContent=\"\\xD7\",i.setAttribute(\"aria-label\",`Close ${u.title}`),i.addEventListener(\"click\",C=>{C.stopPropagation(),p(D)}),t.appendChild(i)}return t.addEventListener(\"click\",()=>{g(D)}),t}function g(u){let D=s();if(u<0||u>=D.tabs.length)return;let n=D.tabs[u];if(!n)return;D.activeIndex=u,E(D);let F=new URL(o(n.slug),window.location.origin);window.spaNavigate?window.spaNavigate(F,!1):window.location.href=F.toString()}function p(u){let D=s();if(D.tabs.length<2)return;let n=u===D.activeIndex;D.tabs.splice(u,1),n?(D.activeIndex=Math.min(u,D.tabs.length-1),E(D),g(D.activeIndex)):(ue.slug===D);if(t>=0)F.tabs[t].title=n,F.activeIndex=t;else{let e={slug:D,title:n},i=F.activeIndex+1;for(F.tabs.splice(i,0,e),F.activeIndex=i;F.tabs.length>r.maxTabs;)F.activeIndex>0?(F.tabs.shift(),F.activeIndex--):F.tabs.pop()}E(F),A(u,F)}function a(){let u=document.getElementById(\"stacked-pages-container\");u&&A(u,s())}function v(){b();let u=()=>a();window.addEventListener(\"resize\",u),window.addCleanup&&window.addCleanup(()=>window.removeEventListener(\"resize\",u))}typeof document<\"u\"&&(document.addEventListener(\"nav\",()=>{v()}),document.addEventListener(\"render\",()=>{a()}));\n","import type {\n QuartzComponent,\n QuartzComponentProps,\n QuartzComponentConstructor,\n} from \"@quartz-community/types\";\n\nimport style from \"./styles/stacked.scss\";\n// @ts-expect-error - inline script import handled by Quartz bundler\nimport script from \"./scripts/stacked.inline.ts\";\n\nexport interface StackedPagesComponentOptions {\n maxTabs?: number;\n mobileBreakpoint?: number;\n showSpines?: boolean;\n animateTransitions?: boolean;\n}\n\nexport default ((opts?: StackedPagesComponentOptions) => {\n const {\n maxTabs = 8,\n mobileBreakpoint = 800,\n showSpines = true,\n animateTransitions = true,\n } = opts ?? {};\n\n const Component: QuartzComponent = (_props: QuartzComponentProps) => {\n return (\n \n );\n };\n\n Component.css = style;\n Component.afterDOMLoaded = script;\n\n return Component;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file +{"version":3,"sources":["../../node_modules/@quartz-community/utils/src/lang.ts","../../src/components/styles/example.scss","../../src/components/scripts/example.inline.ts","../../node_modules/preact/src/constants.js","../../node_modules/preact/src/options.js","../../node_modules/preact/src/diff/catch-error.js","../../node_modules/preact/src/component.js","../../node_modules/preact/src/diff/props.js","../../node_modules/preact/src/create-context.js","../../node_modules/preact/jsx-runtime/src/index.js","../../src/components/ExampleComponent.tsx","../../src/components/styles/stacked.scss","../../src/components/scripts/stacked.inline.ts","../../src/components/StackedPages.tsx"],"names":["options","__e","error","vnode","oldVNode","errorInfo","component","ctor","handled","__","__c","constructor","getDerivedStateFromError","setState","__d","componentDidCatch","__E","e","Promise","prototype","then","bind","resolve","setTimeout","Math","random","toString","vnodeId","createVNode","type","props","key","isStaticChildren","__source","__self","ref","i","normalizedProps","__k","__b","__v","__i","__u","u"],"mappings":";AAIO,SAAS,cAAc,OAAA,EAAwD;AACpF,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AACzC;;;ACNA,IAAA,eAAA,GAAA,wMAAA;;;ACAA,IAAA,sBAAA,GAAA,mqCAAA;ACCO,ICUDA,CAAAA;AAAAA,CAAAA,GAAU,EACfC,KCDM,SAAqBC,EAAAA,EAAOC,EAAAA,EAAOC,EAAAA,EAAUC,EAAAA,EAAAA;AAQnD,EAAA,KAAA,IANIC,EAAAA,EAEHC,EAAAA,EAEAC,EAAAA,EAEOL,EAAAA,GAAQA,EAAAA,CAAKM,EAAAA,IACpB,IAAA,CAAKH,EAAAA,GAAYH,EAAAA,CAAKO,GAAAA,KAAAA,CAAiBJ,EAAAA,CAASG,IAC/C,IAAA;AAcC,IAAA,IAAA,CAbAF,EAAAA,GAAOD,EAAAA,CAAUK,WAAAA,KFND,IAAA,IEQJJ,GAAKK,wBAAAA,KAChBN,EAAAA,CAAUO,QAAAA,CAASN,EAAAA,CAAKK,wBAAAA,CAAyBV,EAAAA,CAAAA,CAAAA,EACjDM,KAAUF,EAAAA,CAASQ,GAAAA,CAAAA,EFVJ,IAAA,IEaZR,EAAAA,CAAUS,iBAAAA,KACbT,EAAAA,CAAUS,iBAAAA,CAAkBb,EAAAA,EAAOG,MAAa,EAAE,CAAA,EAClDG,EAAAA,GAAUF,EAAAA,CAASQ,GAAAA,CAAAA,EAIhBN,EAAAA,EACH,OAAQF,GAASU,GAAAA,GAAiBV,EAAAA;AAIpC,EAAA,CAAA,CAAA,OAFSW,EAAAA,EAAAA;AACRf,IAAAA,EAAAA,GAAQe,EAAAA;AACT,EAAA;AAIF,EAAA,MAAMf,EAAAA;AACP,CAAA,EAAA,ECiJmB,UAAA,IAAA,OAAXgB,OAAAA,GACJA,QAAQC,SAAAA,CAAUC,IAAAA,CAAKC,IAAAA,CAAKH,OAAAA,CAAQI,OAAAA,EAAAA,IACpCC,UAAAA,ECtLMC,IAAAA,CAAKC,MAAAA,EAAAA,CAASC,QAAAA,CAAS,CAAA,CCPlB;;;ALiBF,IMhBTC,EAAAA,GAAU,CAAA;AAwBd,SAASC,GAAYC,EAAAA,EAAMC,EAAAA,EAAOC,EAAAA,EAAKC,EAAAA,EAAkBC,IAAUC,EAAAA,EAAAA;AAC7DJ,EAAAA,EAAAA,KAAOA,KAAQ,EAAA,CAAA;AAIpB,EAAA,IACCK,EAAAA,EACAC,IAFGC,EAAAA,GAAkBP,EAAAA;AAItB,EAAA,IAAI,SAASO,EAAAA,EAEZ,KAAKD,MADLC,EAAAA,GAAkB,IACRP,EAAAA,EACA,KAAA,IAALM,EAAAA,GACHD,EAAAA,GAAML,GAAMM,EAAAA,CAAAA,GAEZC,GAAgBD,EAAAA,CAAAA,GAAKN,GAAMM,EAAAA,CAAAA;AAM9B,EAAA,IAAMjC,EAAAA,GAAQ,EACb0B,IAAAA,EAAAA,EAAAA,EACAC,OAAOO,EAAAA,EACPN,GAAAA,EAAAA,EAAAA,EACAI,GAAAA,EAAAA,EAAAA,EACAG,GAAAA,EAAW,IAAA,EACX7B,EAAAA,EAAS,MACT8B,GAAAA,EAAQ,CAAA,EACRtC,GAAAA,EAAM,IAAA,EACNS,GAAAA,EAAY,IAAA,EACZC,WAAAA,EAAAA,MAAAA,EACA6B,KAAAA,EAAab,EAAAA,EACbc,GAAAA,EAAAA,EAAAA,EACAC,GAAAA,EAAQ,CAAA,EACRT,QAAAA,EAAAA,EAAAA,EACAC,QAAAA,EAAAA,EAAAA;AAaD,EAAA,OADIlC,CAAAA,CAAQG,KAAAA,IAAOH,CAAAA,CAAQG,KAAAA,CAAMA,EAAAA,CAAAA,EAC1BA,EAAAA;AACR;;;AC9DA,IAAO,wBAAA,IAAS,CAAC,IAAA,KAAmC;AAClD,EAAA,MAAM,EAAE,SAAS,EAAA,EAAI,MAAA,GAAS,IAAI,SAAA,GAAY,mBAAA,EAAoB,GAAI,IAAA,IAAQ,EAAC;AAE/E,EAAA,MAAM,SAAA,GAA6B,CAAC,KAAA,KAAgC;AAClE,IAAA,MAAM,WAAA,GAAc,MAAM,QAAA,EAAU,WAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,aAAa,KAAA,IAAS,UAAA;AACpC,IAAA,MAAM,WAAW,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,GAAG,MAAM,CAAA,CAAA;AAE3C,IAAA,uBAAOwC,EAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,UAAA,CAAW,SAAS,GAAI,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,SAAA,CAAU,GAAA,GAAM,eAAA;AAChB,EAAA,SAAA,CAAU,cAAA,GAAiB,sBAAA;AAE3B,EAAA,OAAO,SAAA;AACT,CAAA;;;AC/BA,IAAA,eAAA,GAAA,qhGAAA;;;ACAA,IAAA,sBAAA,GAAA,koHAAA;;;ACiBA,IAAO,oBAAA,IAAS,CAAC,IAAA,KAAwC;AACvD,EAAA,MAAM;AAAA,IACJ,OAAA,GAAU,CAAA;AAAA,IACV,gBAAA,GAAmB,GAAA;AAAA,IACnB,UAAA,GAAa,IAAA;AAAA,IACb,kBAAA,GAAqB;AAAA,GACvB,GAAI,QAAQ,EAAC;AAEb,EAAA,MAAM,SAAA,GAA6B,CAAC,MAAA,KAAiC;AACnE,IAAA,uBACEA,EAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,yBAAA;AAAA,QACH,eAAA,EAAe,OAAA;AAAA,QACf,wBAAA,EAAwB,gBAAA;AAAA,QACxB,kBAAA,EAAkB,UAAA;AAAA,QAClB,cAAA,EAAc;AAAA;AAAA,KAChB;AAAA,EAEJ,CAAA;AAEA,EAAA,SAAA,CAAU,GAAA,GAAM,eAAA;AAChB,EAAA,SAAA,CAAU,cAAA,GAAiB,sBAAA;AAE3B,EAAA,OAAO,SAAA;AACT,CAAA","file":"index.js","sourcesContent":["export function capitalize(s: string): string {\n return s.substring(0, 1).toUpperCase() + s.substring(1);\n}\n\nexport function classNames(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n",".example-component {\n padding: 8px 16px;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-radius: 4px;\n font-weight: 600;\n display: inline-block;\n}","function l(){let e=window.location.pathname;return e.startsWith(\"/\")&&(e=e.slice(1)),e.endsWith(\"/\")&&(e=e.slice(0,-1)),e||\"index\"}function r(){let e=document.querySelectorAll(\".example-component\");if(e.length===0)return;let t=[];function o(n){(n.ctrlKey||n.metaKey)&&n.shiftKey&&n.key.toLowerCase()===\"e\"&&(n.preventDefault(),console.log(\"[ExampleComponent] Keyboard shortcut triggered!\"))}document.addEventListener(\"keydown\",o),t.push(()=>document.removeEventListener(\"keydown\",o));for(let n of e){let i=()=>{console.log(\"[ExampleComponent] Clicked!\")};n.addEventListener(\"click\",i),t.push(()=>n.removeEventListener(\"click\",i))}typeof window<\"u\"&&window.addCleanup&&window.addCleanup(()=>{t.forEach(n=>n())}),console.log(\"[ExampleComponent] Initialized with\",e.length,\"component(s)\")}document.addEventListener(\"nav\",e=>{let t=e.detail?.url||l();console.log(\"[ExampleComponent] Navigation to:\",t),r()});document.addEventListener(\"render\",()=>{console.log(\"[ExampleComponent] Render event - re-initializing\"),r()});document.addEventListener(\"prenav\",()=>{let e=document.querySelector(\".example-component\");e&&sessionStorage.setItem(\"exampleScrollTop\",e.scrollTop?.toString()||\"0\")});\n","/** Normal hydration that attaches to a DOM tree but does not diff it. */\nexport const MODE_HYDRATE = 1 << 5;\n/** Signifies this VNode suspended on the previous render */\nexport const MODE_SUSPENDED = 1 << 7;\n/** Indicates that this node needs to be inserted while patching children */\nexport const INSERT_VNODE = 1 << 2;\n/** Indicates a VNode has been matched with another VNode in the diff */\nexport const MATCHED = 1 << 1;\n\n/** Reset all mode flags */\nexport const RESET_MODE = ~(MODE_HYDRATE | MODE_SUSPENDED);\n\nexport const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nexport const XHTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\nexport const MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n\nexport const NULL = null;\nexport const UNDEFINED = undefined;\nexport const EMPTY_OBJ = /** @type {any} */ ({});\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL =\n\t/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n","import { _catchError } from './diff/catch-error';\n\n/**\n * The `option` object can potentially contain callback functions\n * that are called during various stages of our renderer. This is the\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\n * for a full list of available option hooks (most editors/IDEs allow you to\n * ctrl+click or cmd+click on mac the type definition below).\n * @type {import('./internal').Options}\n */\nconst options = {\n\t_catchError\n};\n\nexport default options;\n","import { NULL } from '../constants';\n\n/**\n * Find the closest error boundary to a thrown error and call it\n * @param {object} error The thrown value\n * @param {import('../internal').VNode} vnode The vnode that threw the error that was caught (except\n * for unmounting when this parameter is the highest parent that was being\n * unmounted)\n * @param {import('../internal').VNode} [oldVNode]\n * @param {import('../internal').ErrorInfo} [errorInfo]\n */\nexport function _catchError(error, vnode, oldVNode, errorInfo) {\n\t/** @type {import('../internal').Component} */\n\tlet component,\n\t\t/** @type {import('../internal').ComponentType} */\n\t\tctor,\n\t\t/** @type {boolean} */\n\t\thandled;\n\n\tfor (; (vnode = vnode._parent); ) {\n\t\tif ((component = vnode._component) && !component._processingException) {\n\t\t\ttry {\n\t\t\t\tctor = component.constructor;\n\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != NULL) {\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\tif (component.componentDidCatch != NULL) {\n\t\t\t\t\tcomponent.componentDidCatch(error, errorInfo || {});\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\n\t\t\t\tif (handled) {\n\t\t\t\t\treturn (component._pendingError = component);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow error;\n}\n","import { assign } from './util';\nimport { diff, commitRoot } from './diff/index';\nimport options from './options';\nimport { Fragment } from './create-element';\nimport { MODE_HYDRATE, NULL } from './constants';\n\n/**\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\n * trigger rendering\n * @param {object} props The initial component props\n * @param {object} context The initial context from parent components'\n * getChildContext\n */\nexport function BaseComponent(props, context) {\n\tthis.props = props;\n\tthis.context = context;\n}\n\n/**\n * Update component state and schedule a re-render.\n * @this {import('./internal').Component}\n * @param {object | ((s: object, p: object) => object)} update A hash of state\n * properties to update with new values or a function that given the current\n * state and props returns a new partial state\n * @param {() => void} [callback] A function to be called once component state is\n * updated\n */\nBaseComponent.prototype.setState = function (update, callback) {\n\t// only clone state when copying to nextState the first time.\n\tlet s;\n\tif (this._nextState != NULL && this._nextState != this.state) {\n\t\ts = this._nextState;\n\t} else {\n\t\ts = this._nextState = assign({}, this.state);\n\t}\n\n\tif (typeof update == 'function') {\n\t\t// Some libraries like `immer` mark the current state as readonly,\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\n\t\tupdate = update(assign({}, s), this.props);\n\t}\n\n\tif (update) {\n\t\tassign(s, update);\n\t}\n\n\t// Skip update if updater function returned null\n\tif (update == NULL) return;\n\n\tif (this._vnode) {\n\t\tif (callback) {\n\t\t\tthis._stateCallbacks.push(callback);\n\t\t}\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Immediately perform a synchronous re-render of the component\n * @this {import('./internal').Component}\n * @param {() => void} [callback] A function to be called after component is\n * re-rendered\n */\nBaseComponent.prototype.forceUpdate = function (callback) {\n\tif (this._vnode) {\n\t\t// Set render mode so that we can differentiate where the render request\n\t\t// is coming from. We need this because forceUpdate should never call\n\t\t// shouldComponentUpdate\n\t\tthis._force = true;\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n * Virtual DOM is generally constructed via [JSX](https://jasonformat.com/wtf-is-jsx).\n * @param {object} props Props (eg: JSX attributes) received from parent\n * element/component\n * @param {object} state The component's current state\n * @param {object} context Context object, as returned by the nearest\n * ancestor's `getChildContext()`\n * @returns {ComponentChildren | void}\n */\nBaseComponent.prototype.render = Fragment;\n\n/**\n * @param {import('./internal').VNode} vnode\n * @param {number | null} [childIndex]\n */\nexport function getDomSibling(vnode, childIndex) {\n\tif (childIndex == NULL) {\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\n\t\treturn vnode._parent\n\t\t\t? getDomSibling(vnode._parent, vnode._index + 1)\n\t\t\t: NULL;\n\t}\n\n\tlet sibling;\n\tfor (; childIndex < vnode._children.length; childIndex++) {\n\t\tsibling = vnode._children[childIndex];\n\n\t\tif (sibling != NULL && sibling._dom != NULL) {\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\n\t\t\treturn sibling._dom;\n\t\t}\n\t}\n\n\t// If we get here, we have not found a DOM node in this vnode's children.\n\t// We must resume from this vnode's sibling (in it's parent _children array)\n\t// Only climb up and search the parent if we aren't searching through a DOM\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\n\t// the search)\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : NULL;\n}\n\n/**\n * Trigger in-place re-rendering of a component.\n * @param {import('./internal').Component} component The component to rerender\n */\nfunction renderComponent(component) {\n\tif (component._parentDom && component._dirty) {\n\t\tlet oldVNode = component._vnode,\n\t\t\toldDom = oldVNode._dom,\n\t\t\tcommitQueue = [],\n\t\t\trefQueue = [],\n\t\t\tnewVNode = assign({}, oldVNode);\n\t\tnewVNode._original = oldVNode._original + 1;\n\t\tif (options.vnode) options.vnode(newVNode);\n\n\t\tdiff(\n\t\t\tcomponent._parentDom,\n\t\t\tnewVNode,\n\t\t\toldVNode,\n\t\t\tcomponent._globalContext,\n\t\t\tcomponent._parentDom.namespaceURI,\n\t\t\toldVNode._flags & MODE_HYDRATE ? [oldDom] : NULL,\n\t\t\tcommitQueue,\n\t\t\toldDom == NULL ? getDomSibling(oldVNode) : oldDom,\n\t\t\t!!(oldVNode._flags & MODE_HYDRATE),\n\t\t\trefQueue\n\t\t);\n\n\t\tnewVNode._original = oldVNode._original;\n\t\tnewVNode._parent._children[newVNode._index] = newVNode;\n\t\tcommitRoot(commitQueue, newVNode, refQueue);\n\t\toldVNode._dom = oldVNode._parent = null;\n\n\t\tif (newVNode._dom != oldDom) {\n\t\t\tupdateParentDomPointers(newVNode);\n\t\t}\n\t}\n}\n\n/**\n * @param {import('./internal').VNode} vnode\n */\nfunction updateParentDomPointers(vnode) {\n\tif ((vnode = vnode._parent) != NULL && vnode._component != NULL) {\n\t\tvnode._dom = vnode._component.base = NULL;\n\t\tvnode._children.some(child => {\n\t\t\tif (child != NULL && child._dom != NULL) {\n\t\t\t\treturn (vnode._dom = vnode._component.base = child._dom);\n\t\t\t}\n\t\t});\n\n\t\treturn updateParentDomPointers(vnode);\n\t}\n}\n\n/**\n * The render queue\n * @type {Array}\n */\nlet rerenderQueue = [];\n\n/*\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\n * do, and when their effects will be applied. See the links below for some further reading on designing\n * asynchronous APIs.\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\n */\n\nlet prevDebounce;\n\nconst defer =\n\ttypeof Promise == 'function'\n\t\t? Promise.prototype.then.bind(Promise.resolve())\n\t\t: setTimeout;\n\n/**\n * Enqueue a rerender of a component\n * @param {import('./internal').Component} c The component to rerender\n */\nexport function enqueueRender(c) {\n\tif (\n\t\t(!c._dirty &&\n\t\t\t(c._dirty = true) &&\n\t\t\trerenderQueue.push(c) &&\n\t\t\t!process._rerenderCount++) ||\n\t\tprevDebounce != options.debounceRendering\n\t) {\n\t\tprevDebounce = options.debounceRendering;\n\t\t(prevDebounce || defer)(process);\n\t}\n}\n\n/**\n * @param {import('./internal').Component} a\n * @param {import('./internal').Component} b\n */\nconst depthSort = (a, b) => a._vnode._depth - b._vnode._depth;\n\n/** Flush the render queue by rerendering all queued components */\nfunction process() {\n\ttry {\n\t\tlet c,\n\t\t\tl = 1;\n\n\t\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\n\t\t// process() calls from getting scheduled while `queue` is still being consumed.\n\t\twhile (rerenderQueue.length) {\n\t\t\t// Keep the rerender queue sorted by (depth, insertion order). The queue\n\t\t\t// will initially be sorted on the first iteration only if it has more than 1 item.\n\t\t\t//\n\t\t\t// New items can be added to the queue e.g. when rerendering a provider, so we want to\n\t\t\t// keep the order from top to bottom with those new items so we can handle them in a\n\t\t\t// single pass\n\t\t\tif (rerenderQueue.length > l) {\n\t\t\t\trerenderQueue.sort(depthSort);\n\t\t\t}\n\n\t\t\tc = rerenderQueue.shift();\n\t\t\tl = rerenderQueue.length;\n\n\t\t\trenderComponent(c);\n\t\t}\n\t} finally {\n\t\trerenderQueue.length = process._rerenderCount = 0;\n\t}\n}\n\nprocess._rerenderCount = 0;\n","import { IS_NON_DIMENSIONAL, NULL, SVG_NAMESPACE } from '../constants';\nimport options from '../options';\n\n// Per-instance unique key for event clock stamps. Each Preact copy on the page\n// gets its own random suffix so that `_dispatched` / `_attached` properties on\n// shared event objects and handler functions cannot collide across instances.\n// ~1 in 60M collision odds - if you have that many praect versions on the page,\n// you deserve some weird bugs.\n// In 11 we can replace this with a\n// Symbol\nlet _id = Math.random().toString(8),\n\tEVENT_DISPATCHED = '__d' + _id,\n\tEVENT_ATTACHED = '__a' + _id;\n\nfunction setStyle(style, key, value) {\n\tif (key[0] == '-') {\n\t\tstyle.setProperty(key, value == NULL ? '' : value);\n\t} else if (value == NULL) {\n\t\tstyle[key] = '';\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\n\t\tstyle[key] = value;\n\t} else {\n\t\tstyle[key] = value + 'px';\n\t}\n}\n\nconst CAPTURE_REGEX = /(PointerCapture)$|Capture$/i;\n\n// A logical clock to solve issues like https://github.com/preactjs/preact/issues/3927.\n// When the DOM performs an event it leaves micro-ticks in between bubbling up which means that\n// an event can trigger on a newly reated DOM-node while the event bubbles up.\n//\n// Originally inspired by Vue\n// (https://github.com/vuejs/core/blob/caeb8a68811a1b0f79/packages/runtime-dom/src/modules/events.ts#L90-L101),\n// but modified to use a logical clock instead of Date.now() in case event handlers get attached\n// and events get dispatched during the same millisecond.\n//\n// The clock is incremented after each new event dispatch. This allows 1 000 000 new events\n// per second for over 280 years before the value reaches Number.MAX_SAFE_INTEGER (2**53 - 1).\nlet eventClock = 0;\n\n/**\n * Set a property value on a DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to modify\n * @param {string} name The name of the property to set\n * @param {*} value The value to set the property to\n * @param {*} oldValue The old value the property had\n * @param {string} namespace Whether or not this DOM node is an SVG node or not\n */\nexport function setProperty(dom, name, value, oldValue, namespace) {\n\tlet useCapture;\n\n\to: if (name == 'style') {\n\t\tif (typeof value == 'string') {\n\t\t\tdom.style.cssText = value;\n\t\t} else {\n\t\t\tif (typeof oldValue == 'string') {\n\t\t\t\tdom.style.cssText = oldValue = '';\n\t\t\t}\n\n\t\t\tif (oldValue) {\n\t\t\t\tfor (name in oldValue) {\n\t\t\t\t\tif (!(value && name in value)) {\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\tfor (name in value) {\n\t\t\t\t\tif (!oldValue || value[name] != oldValue[name]) {\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n\telse if (name[0] == 'o' && name[1] == 'n') {\n\t\tuseCapture = name != (name = name.replace(CAPTURE_REGEX, '$1'));\n\t\tconst lowerCaseName = name.toLowerCase();\n\n\t\t// Infer correct casing for DOM built-in events:\n\t\tif (lowerCaseName in dom || name == 'onFocusOut' || name == 'onFocusIn')\n\t\t\tname = lowerCaseName.slice(2);\n\t\telse name = name.slice(2);\n\n\t\tif (!dom._listeners) dom._listeners = {};\n\t\tdom._listeners[name + useCapture] = value;\n\n\t\tif (value) {\n\t\t\tif (!oldValue) {\n\t\t\t\tvalue[EVENT_ATTACHED] = eventClock;\n\t\t\t\tdom.addEventListener(\n\t\t\t\t\tname,\n\t\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\t\tuseCapture\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tvalue[EVENT_ATTACHED] = oldValue[EVENT_ATTACHED];\n\t\t\t}\n\t\t} else {\n\t\t\tdom.removeEventListener(\n\t\t\t\tname,\n\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\tuseCapture\n\t\t\t);\n\t\t}\n\t} else {\n\t\tif (namespace == SVG_NAMESPACE) {\n\t\t\t// Normalize incorrect prop usage for SVG:\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\n\t\t\t// - className --> class\n\t\t\tname = name.replace(/xlink(H|:h)/, 'h').replace(/sName$/, 's');\n\t\t} else if (\n\t\t\tname != 'width' &&\n\t\t\tname != 'height' &&\n\t\t\tname != 'href' &&\n\t\t\tname != 'list' &&\n\t\t\tname != 'form' &&\n\t\t\t// Default value in browsers is `-1` and an empty string is\n\t\t\t// cast to `0` instead\n\t\t\tname != 'tabIndex' &&\n\t\t\tname != 'download' &&\n\t\t\tname != 'rowSpan' &&\n\t\t\tname != 'colSpan' &&\n\t\t\tname != 'role' &&\n\t\t\tname != 'popover' &&\n\t\t\tname in dom\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdom[name] = value == NULL ? '' : value;\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\n\t\t\t\tbreak o;\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\t// aria- and data- attributes have no boolean representation.\n\t\t// A `false` value is different from the attribute not being\n\t\t// present, so we can't remove it. For non-boolean aria\n\t\t// attributes we could treat false as a removal, but the\n\t\t// amount of exceptions would cost too many bytes. On top of\n\t\t// that other frameworks generally stringify `false`.\n\n\t\tif (typeof value == 'function') {\n\t\t\t// never serialize functions as attribute values\n\t\t} else if (value != NULL && (value !== false || name[4] == '-')) {\n\t\t\tdom.setAttribute(name, name == 'popover' && value == true ? '' : value);\n\t\t} else {\n\t\t\tdom.removeAttribute(name);\n\t\t}\n\t}\n}\n\n/**\n * Create an event proxy function.\n * @param {boolean} useCapture Is the event handler for the capture phase.\n * @private\n */\nfunction createEventProxy(useCapture) {\n\t/**\n\t * Proxy an event to hooked event handlers\n\t * @param {import('../internal').PreactEvent} e The event object from the browser\n\t * @private\n\t */\n\treturn function (e) {\n\t\tif (this._listeners) {\n\t\t\tconst eventHandler = this._listeners[e.type + useCapture];\n\t\t\tif (e[EVENT_DISPATCHED] == NULL) {\n\t\t\t\te[EVENT_DISPATCHED] = eventClock++;\n\n\t\t\t\t// When `e[EVENT_DISPATCHED]` is smaller than the time when the targeted event\n\t\t\t\t// handler was attached we know we have bubbled up to an element that was added\n\t\t\t\t// during patching the DOM.\n\t\t\t} else if (e[EVENT_DISPATCHED] < eventHandler[EVENT_ATTACHED]) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn eventHandler(options.event ? options.event(e) : e);\n\t\t}\n\t};\n}\n\nconst eventProxy = createEventProxy(false);\nconst eventProxyCapture = createEventProxy(true);\n","import { enqueueRender } from './component';\nimport { NULL } from './constants';\n\nexport let i = 0;\n\nexport function createContext(defaultValue) {\n\tfunction Context(props) {\n\t\tif (!this.getChildContext) {\n\t\t\t/** @type {Set | null} */\n\t\t\tlet subs = new Set();\n\t\t\tlet ctx = {};\n\t\t\tctx[Context._id] = this;\n\n\t\t\tthis.getChildContext = () => ctx;\n\n\t\t\tthis.componentWillUnmount = () => {\n\t\t\t\tsubs = NULL;\n\t\t\t};\n\n\t\t\tthis.shouldComponentUpdate = function (_props) {\n\t\t\t\t// @ts-expect-error even\n\t\t\t\tif (this.props.value != _props.value) {\n\t\t\t\t\tsubs.forEach(c => {\n\t\t\t\t\t\tc._force = true;\n\t\t\t\t\t\tenqueueRender(c);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.sub = c => {\n\t\t\t\tsubs.add(c);\n\t\t\t\tlet old = c.componentWillUnmount;\n\t\t\t\tc.componentWillUnmount = () => {\n\t\t\t\t\tif (subs) {\n\t\t\t\t\t\tsubs.delete(c);\n\t\t\t\t\t}\n\t\t\t\t\tif (old) old.call(c);\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\n\t\treturn props.children;\n\t}\n\n\tContext._id = '__cC' + i++;\n\tContext._defaultValue = defaultValue;\n\n\t/** @type {import('./internal').FunctionComponent} */\n\tContext.Consumer = (props, contextValue) => {\n\t\treturn props.children(contextValue);\n\t};\n\n\t// we could also get rid of _contextRef entirely\n\tContext.Provider =\n\t\tContext._contextRef =\n\t\tContext.Consumer.contextType =\n\t\t\tContext;\n\n\treturn Context;\n}\n","import { options, Fragment } from 'preact';\nimport { encodeEntities } from './utils';\nimport { IS_NON_DIMENSIONAL } from '../../src/constants';\n\nlet vnodeId = 0;\n\nconst isArray = Array.isArray;\n\n/**\n * @fileoverview\n * This file exports various methods that implement Babel's \"automatic\" JSX runtime API:\n * - jsx(type, props, key)\n * - jsxs(type, props, key)\n * - jsxDEV(type, props, key, __source, __self)\n *\n * The implementation of createVNode here is optimized for performance.\n * Benchmarks: https://esbench.com/bench/5f6b54a0b4632100a7dcd2b3\n */\n\n/**\n * JSX.Element factory used by Babel's {runtime:\"automatic\"} JSX transform\n * @param {VNode['type']} type\n * @param {VNode['props']} props\n * @param {VNode['key']} [key]\n * @param {unknown} [isStaticChildren]\n * @param {unknown} [__source]\n * @param {unknown} [__self]\n */\nfunction createVNode(type, props, key, isStaticChildren, __source, __self) {\n\tif (!props) props = {};\n\t// We'll want to preserve `ref` in props to get rid of the need for\n\t// forwardRef components in the future, but that should happen via\n\t// a separate PR.\n\tlet normalizedProps = props,\n\t\tref,\n\t\ti;\n\n\tif ('ref' in normalizedProps) {\n\t\tnormalizedProps = {};\n\t\tfor (i in props) {\n\t\t\tif (i == 'ref') {\n\t\t\t\tref = props[i];\n\t\t\t} else {\n\t\t\t\tnormalizedProps[i] = props[i];\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @type {VNode & { __source: any; __self: any }} */\n\tconst vnode = {\n\t\ttype,\n\t\tprops: normalizedProps,\n\t\tkey,\n\t\tref,\n\t\t_children: null,\n\t\t_parent: null,\n\t\t_depth: 0,\n\t\t_dom: null,\n\t\t_component: null,\n\t\tconstructor: undefined,\n\t\t_original: --vnodeId,\n\t\t_index: -1,\n\t\t_flags: 0,\n\t\t__source,\n\t\t__self\n\t};\n\n\t// If a Component VNode, check for and apply defaultProps.\n\t// Note: `type` is often a String, and can be `undefined` in development.\n\tif (typeof type === 'function' && (ref = type.defaultProps)) {\n\t\tfor (i in ref)\n\t\t\tif (normalizedProps[i] === undefined) {\n\t\t\t\tnormalizedProps[i] = ref[i];\n\t\t\t}\n\t}\n\n\tif (options.vnode) options.vnode(vnode);\n\treturn vnode;\n}\n\n/**\n * Create a template vnode. This function is not expected to be\n * used directly, but rather through a precompile JSX transform\n * @param {string[]} templates\n * @param {Array} exprs\n * @returns {VNode}\n */\nfunction jsxTemplate(templates, ...exprs) {\n\tconst vnode = createVNode(Fragment, { tpl: templates, exprs });\n\t// Bypass render to string top level Fragment optimization\n\tvnode.key = vnode._vnode;\n\treturn vnode;\n}\n\nconst JS_TO_CSS = {};\nconst CSS_REGEX = /[A-Z]/g;\n\n/**\n * Unwrap potential signals.\n * @param {*} value\n * @returns {*}\n */\nfunction normalizeAttrValue(value) {\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.valueOf === 'function'\n\t\t? value.valueOf()\n\t\t: value;\n}\n\n/**\n * Serialize an HTML attribute to a string. This function is not\n * expected to be used directly, but rather through a precompile\n * JSX transform\n * @param {string} name The attribute name\n * @param {*} value The attribute value\n * @returns {string}\n */\nfunction jsxAttr(name, value) {\n\tif (options.attr) {\n\t\tconst result = options.attr(name, value);\n\t\tif (typeof result === 'string') return result;\n\t}\n\n\tvalue = normalizeAttrValue(value);\n\n\tif (name === 'ref' || name === 'key') return '';\n\tif (name === 'style' && typeof value === 'object') {\n\t\tlet str = '';\n\t\tfor (let prop in value) {\n\t\t\tlet val = value[prop];\n\t\t\tif (val != null && val !== '') {\n\t\t\t\tconst name =\n\t\t\t\t\tprop[0] == '-'\n\t\t\t\t\t\t? prop\n\t\t\t\t\t\t: JS_TO_CSS[prop] ||\n\t\t\t\t\t\t\t(JS_TO_CSS[prop] = prop.replace(CSS_REGEX, '-$&').toLowerCase());\n\n\t\t\t\tlet suffix = ';';\n\t\t\t\tif (\n\t\t\t\t\ttypeof val === 'number' &&\n\t\t\t\t\t// Exclude custom-attributes\n\t\t\t\t\t!name.startsWith('--') &&\n\t\t\t\t\t!IS_NON_DIMENSIONAL.test(name)\n\t\t\t\t) {\n\t\t\t\t\tsuffix = 'px;';\n\t\t\t\t}\n\t\t\t\tstr = str + name + ':' + val + suffix;\n\t\t\t}\n\t\t}\n\t\treturn name + '=\"' + encodeEntities(str) + '\"';\n\t}\n\n\tif (\n\t\tvalue == null ||\n\t\tvalue === false ||\n\t\ttypeof value === 'function' ||\n\t\ttypeof value === 'object'\n\t) {\n\t\treturn '';\n\t} else if (value === true) return name;\n\n\treturn name + '=\"' + encodeEntities('' + value) + '\"';\n}\n\n/**\n * Escape a dynamic child passed to `jsxTemplate`. This function\n * is not expected to be used directly, but rather through a\n * precompile JSX transform\n * @param {*} value\n * @returns {string | null | VNode | Array}\n */\nfunction jsxEscape(value) {\n\tif (\n\t\tvalue == null ||\n\t\ttypeof value === 'boolean' ||\n\t\ttypeof value === 'function'\n\t) {\n\t\treturn null;\n\t}\n\n\tif (typeof value === 'object') {\n\t\t// Check for VNode\n\t\tif (value.constructor === undefined) return value;\n\n\t\tif (isArray(value)) {\n\t\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\t\tvalue[i] = jsxEscape(value[i]);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t}\n\n\treturn encodeEntities('' + value);\n}\n\nexport {\n\tcreateVNode as jsx,\n\tcreateVNode as jsxs,\n\tcreateVNode as jsxDEV,\n\tFragment,\n\t// precompiled JSX transform\n\tjsxTemplate,\n\tjsxAttr,\n\tjsxEscape\n};\n","import type {\n QuartzComponent,\n QuartzComponentProps,\n QuartzComponentConstructor,\n} from \"@quartz-community/types\";\nimport { classNames } from \"../util/lang\";\nimport style from \"./styles/example.scss\";\n// @ts-expect-error - inline script import handled by Quartz bundler\nimport script from \"./scripts/example.inline.ts\";\n\nexport interface ExampleComponentOptions {\n prefix?: string;\n suffix?: string;\n className?: string;\n}\n\nexport default ((opts?: ExampleComponentOptions) => {\n const { prefix = \"\", suffix = \"\", className = \"example-component\" } = opts ?? {};\n\n const Component: QuartzComponent = (props: QuartzComponentProps) => {\n const frontmatter = props.fileData?.frontmatter as { title?: string } | undefined;\n const title = frontmatter?.title ?? \"Untitled\";\n const fullText = `${prefix}${title}${suffix}`;\n\n return
{fullText}
;\n };\n\n Component.css = style;\n Component.afterDOMLoaded = script;\n\n return Component;\n}) satisfies QuartzComponentConstructor;\n","#stacked-pages-container:not(.binder-active) {\n display: none;\n}\n#stacked-pages-container.binder-active {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n z-index: 99;\n display: flex;\n justify-content: space-between;\n align-items: stretch;\n}\n\nbody.has-binder-left .page {\n padding-left: 40px;\n}\n\nbody.has-binder-right .page {\n padding-right: 40px;\n}\n\n.binder-strip {\n pointer-events: auto;\n display: flex;\n flex-direction: column;\n gap: 0;\n padding: 0;\n justify-content: stretch;\n align-items: stretch;\n z-index: 100;\n width: 40px;\n height: 100%;\n}\n\n.binder-strip-left {\n align-self: flex-start;\n}\n\n.binder-strip-right {\n align-self: flex-end;\n margin-left: auto;\n}\n\n.binder-tab {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 8px 0;\n cursor: pointer;\n background: var(--lightgray);\n border: 1px solid var(--lightgray);\n transition: background 0.15s ease, transform 0.15s ease, border-color 0.15s ease;\n width: 100%;\n flex: 1;\n position: relative;\n writing-mode: vertical-lr;\n overflow: hidden;\n}\n.binder-tab:hover {\n background: var(--light);\n}\n\n.binder-tab.binder-tab-active {\n background: var(--light);\n z-index: 101;\n cursor: default;\n}\n.binder-tab.binder-tab-active.binder-tab-left {\n border-right: none;\n border-left: 3px solid var(--secondary);\n border-radius: 6px 0 0 6px;\n}\n.binder-tab.binder-tab-active.binder-tab-right {\n border-left: none;\n border-right: 3px solid var(--secondary);\n border-radius: 0 6px 6px 0;\n}\n\n.binder-tab:not(.binder-tab-active) {\n color: var(--gray);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-left {\n border-radius: 6px 0 0 6px;\n border-right: 2px solid var(--secondary);\n border-left: 1px solid var(--lightgray);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-left:hover {\n transform: translateX(4px);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-right {\n border-radius: 0 6px 6px 0;\n border-left: 2px solid var(--secondary);\n border-right: 1px solid var(--lightgray);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-right:hover {\n transform: translateX(-4px);\n}\n\n.binder-spine {\n display: none;\n}\n\n.binder-label {\n font-size: 1rem;\n line-height: 1.2;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--darkgray);\n user-select: none;\n transform: rotate(180deg);\n text-align: left;\n}\n\n.binder-tab-active .binder-label {\n font-weight: bold;\n color: var(--dark);\n}\n\n.binder-close {\n appearance: none;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 1rem;\n line-height: 1;\n color: var(--gray);\n padding: 2px;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.15s ease, color 0.15s ease;\n transform: rotate(180deg);\n}\n.binder-close:hover {\n color: var(--dark);\n background: rgba(0, 0, 0, 0.05);\n border-radius: 4px;\n}\n\n.binder-tab:hover .binder-close {\n opacity: 1;\n}","var y=Object.hasOwnProperty;function h(){return typeof document>\"u\"?\"\":document.body?.dataset?.basepath??\"\"}function o(u,D){let n=D??h(),F=u.startsWith(\"/\")?u:\"/\"+u;return n+F}var B=\"stacked-pages-state\";function d(){let u=window.location.pathname;return u.startsWith(\"/\")&&(u=u.slice(1)),u.endsWith(\"/\")&&(u=u.slice(0,-1)),u||\"index\"}function m(){return document.querySelector(\"h1\")?.textContent?.trim()||document.title||d()}function s(){try{let u=sessionStorage.getItem(B);if(u){let D=JSON.parse(u);if(Array.isArray(D.tabs)&&typeof D.activeIndex==\"number\")return D}}catch{}return{tabs:[],activeIndex:-1}}function E(u){try{sessionStorage.setItem(B,JSON.stringify(u))}catch{}}function f(u){return{maxTabs:parseInt(u.dataset.maxTabs||\"8\",10),mobileBreakpoint:parseInt(u.dataset.mobileBreakpoint||\"800\",10),showSpines:u.dataset.showSpines!==\"false\",animate:u.dataset.animate!==\"false\"}}function A(u,D){let n=f(u);if(window.innerWidth0){let t=document.createElement(\"div\");t.className=\"binder-strip binder-strip-left\";for(let e=0;e0){let t=document.createElement(\"div\");t.className=\"binder-strip binder-strip-right\";for(let e=0;e0),document.body.classList.toggle(\"has-binder-right\",r.length>0)}function c(u,D,n,F,r){let t=document.createElement(\"div\");if(t.className=`binder-tab binder-tab-${n}`,t.dataset.index=String(D),D===F.activeIndex&&t.classList.add(\"binder-tab-active\"),r.showSpines){let i=document.createElement(\"div\");i.className=\"binder-spine\",t.appendChild(i)}let e=document.createElement(\"span\");if(e.className=\"binder-label\",e.textContent=u.title,t.appendChild(e),F.tabs.length>=2){let i=document.createElement(\"button\");i.className=\"binder-close\",i.textContent=\"\\xD7\",i.setAttribute(\"aria-label\",`Close ${u.title}`),i.addEventListener(\"click\",C=>{C.stopPropagation(),p(D)}),t.appendChild(i)}return t.addEventListener(\"click\",()=>{g(D)}),t}function g(u){let D=s();if(u<0||u>=D.tabs.length)return;let n=D.tabs[u];if(!n)return;D.activeIndex=u,E(D);let F=new URL(o(n.slug),window.location.origin);window.spaNavigate?window.spaNavigate(F,!1):window.location.href=F.toString()}function p(u){let D=s();if(D.tabs.length<2)return;let n=u===D.activeIndex;D.tabs.splice(u,1),n?(D.activeIndex=Math.min(u,D.tabs.length-1),E(D),g(D.activeIndex)):(ue.slug===D);if(t>=0)F.tabs[t].title=n,F.activeIndex=t;else{let e={slug:D,title:n},i=F.activeIndex+1;for(F.tabs.splice(i,0,e),F.activeIndex=i;F.tabs.length>r.maxTabs;)F.activeIndex>0?(F.tabs.shift(),F.activeIndex--):F.tabs.pop()}E(F),A(u,F)}function a(){let u=document.getElementById(\"stacked-pages-container\");u&&A(u,s())}function v(){b();let u=()=>a();window.addEventListener(\"resize\",u),window.addCleanup&&window.addCleanup(()=>window.removeEventListener(\"resize\",u))}typeof document<\"u\"&&(document.addEventListener(\"nav\",()=>{v()}),document.addEventListener(\"render\",()=>{a()}));\n","import type {\n QuartzComponent,\n QuartzComponentProps,\n QuartzComponentConstructor,\n} from \"@quartz-community/types\";\n\nimport style from \"./styles/stacked.scss\";\n// @ts-expect-error - inline script import handled by Quartz bundler\nimport script from \"./scripts/stacked.inline.ts\";\n\nexport interface StackedPagesComponentOptions {\n maxTabs?: number;\n mobileBreakpoint?: number;\n showSpines?: boolean;\n animateTransitions?: boolean;\n}\n\nexport default ((opts?: StackedPagesComponentOptions) => {\n const {\n maxTabs = 8,\n mobileBreakpoint = 800,\n showSpines = true,\n animateTransitions = true,\n } = opts ?? {};\n\n const Component: QuartzComponent = (_props: QuartzComponentProps) => {\n return (\n \n );\n };\n\n Component.css = style;\n Component.afterDOMLoaded = script;\n\n return Component;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index e74ee66..293e1d1 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,7 +1,5 @@ import path2 from 'path'; import fs from 'fs/promises'; -import { classNames } from '@quartz-community/utils/lang'; -import { jsx } from 'preact/jsx-runtime'; // node_modules/ccount/index.js function ccount(value, character) { @@ -158,8 +156,8 @@ function looksLikeANode(value) { } // node_modules/unist-util-visit-parents/lib/color.node.js -function color(d) { - return "\x1B[33m" + d + "\x1B[39m"; +function color(d2) { + return "\x1B[33m" + d2 + "\x1B[39m"; } // node_modules/unist-util-visit-parents/lib/index.js @@ -422,7 +420,7 @@ function transformGfmAutolinkLiterals(tree) { { ignore: ["link", "linkReference"] } ); } -function findUrl(_, protocol, domain2, path3, match) { +function findUrl(_2, protocol, domain2, path3, match) { let prefix = ""; if (!previous(match)) { return false; @@ -448,7 +446,7 @@ function findUrl(_, protocol, domain2, path3, match) { } return result; } -function findEmail(_, atext, label, match) { +function findEmail(_2, atext, label, match) { if ( // Not an expected previous character. !previous(match, true) || // Label ends in not allowed character. @@ -543,7 +541,7 @@ function exitFootnoteDefinition(token) { function footnoteReferencePeek() { return "["; } -function footnoteReference(node2, _, state, info) { +function footnoteReference(node2, _2, state, info) { const tracker = state.createTracker(info); let value = tracker.move("[^"); const exit2 = state.enter("footnoteReference"); @@ -582,7 +580,7 @@ function gfmFootnoteToMarkdown(options) { // This is on by default already. unsafe: [{ character: "[", inConstruct: ["label", "phrasing", "reference"] }] }; - function footnoteDefinition(node2, _, state, info) { + function footnoteDefinition(node2, _2, state, info) { const tracker = state.createTracker(info); let value = tracker.move("[^"); const exit2 = state.enter("footnoteDefinition"); @@ -647,7 +645,7 @@ function enterStrikethrough(token) { function exitStrikethrough(token) { this.exit(token); } -function handleDelete(node2, _, state, info) { +function handleDelete(node2, _2, state, info) { const tracker = state.createTracker(info); const exit2 = state.enter("strikethrough"); let value = tracker.move("~~"); @@ -806,7 +804,7 @@ function toAlignment(value) { } // node_modules/mdast-util-to-markdown/lib/handle/blockquote.js -function blockquote(node2, _, state, info) { +function blockquote(node2, _2, state, info) { const exit2 = state.enter("blockquote"); const tracker = state.createTracker(info); tracker.move("> "); @@ -818,7 +816,7 @@ function blockquote(node2, _, state, info) { exit2(); return value; } -function map(line, _, blank) { +function map(line, _2, blank) { return ">" + (blank ? "" : " ") + line; } @@ -843,7 +841,7 @@ function listInScope(stack, list2, none) { } // node_modules/mdast-util-to-markdown/lib/handle/break.js -function hardBreak(_, _1, state, info) { +function hardBreak(_2, _1, state, info) { let index = -1; while (++index < state.unsafe.length) { if (state.unsafe[index].character === "\n" && patternInScope(state.stack, state.unsafe[index])) { @@ -899,7 +897,7 @@ function checkFence(state) { } // node_modules/mdast-util-to-markdown/lib/handle/code.js -function code(node2, _, state, info) { +function code(node2, _2, state, info) { const marker = checkFence(state); const raw = node2.value || ""; const suffix = marker === "`" ? "GraveAccent" : "Tilde"; @@ -946,7 +944,7 @@ function code(node2, _, state, info) { exit2(); return value; } -function map2(line, _, blank) { +function map2(line, _2, blank) { return (blank ? "" : " ") + line; } @@ -962,7 +960,7 @@ function checkQuote(state) { } // node_modules/mdast-util-to-markdown/lib/handle/definition.js -function definition(node2, _, state, info) { +function definition(node2, _2, state, info) { const quote = checkQuote(state); const suffix = quote === '"' ? "Quote" : "Apostrophe"; const exit2 = state.enter("definition"); @@ -1087,7 +1085,7 @@ function encodeInfo(outside, inside, marker) { // node_modules/mdast-util-to-markdown/lib/handle/emphasis.js emphasis.peek = emphasisPeek; -function emphasis(node2, _, state, info) { +function emphasis(node2, _2, state, info) { const marker = checkEmphasis(state); const exit2 = state.enter("emphasis"); const tracker = state.createTracker(info); @@ -1121,7 +1119,7 @@ function emphasis(node2, _, state, info) { }; return before + between + after; } -function emphasisPeek(_, _1, state) { +function emphasisPeek(_2, _1, state) { return state.options.emphasis || "*"; } @@ -1199,7 +1197,7 @@ function formatHeadingAsSetext(node2, state) { } // node_modules/mdast-util-to-markdown/lib/handle/heading.js -function heading(node2, _, state, info) { +function heading(node2, _2, state, info) { const rank = Math.max(Math.min(6, node2.depth || 1), 1); const tracker = state.createTracker(info); if (formatHeadingAsSetext(node2, state)) { @@ -1251,7 +1249,7 @@ function htmlPeek() { // node_modules/mdast-util-to-markdown/lib/handle/image.js image.peek = imagePeek; -function image(node2, _, state, info) { +function image(node2, _2, state, info) { const quote = checkQuote(state); const suffix = quote === '"' ? "Quote" : "Apostrophe"; const exit2 = state.enter("image"); @@ -1308,7 +1306,7 @@ function imagePeek() { // node_modules/mdast-util-to-markdown/lib/handle/image-reference.js imageReference.peek = imageReferencePeek; -function imageReference(node2, _, state, info) { +function imageReference(node2, _2, state, info) { const type = node2.referenceType; const exit2 = state.enter("imageReference"); let subexit = state.enter("label"); @@ -1347,7 +1345,7 @@ function imageReferencePeek() { // node_modules/mdast-util-to-markdown/lib/handle/inline-code.js inlineCode.peek = inlineCodePeek; -function inlineCode(node2, _, state) { +function inlineCode(node2, _2, state) { let value = node2.value || ""; let sequence = "`"; let index = -1; @@ -1393,7 +1391,7 @@ function formatLinkAsAutolink(node2, state) { // node_modules/mdast-util-to-markdown/lib/handle/link.js link.peek = linkPeek; -function link(node2, _, state, info) { +function link(node2, _2, state, info) { const quote = checkQuote(state); const suffix = quote === '"' ? "Quote" : "Apostrophe"; const tracker = state.createTracker(info); @@ -1467,13 +1465,13 @@ function link(node2, _, state, info) { exit2(); return value; } -function linkPeek(node2, _, state) { +function linkPeek(node2, _2, state) { return formatLinkAsAutolink(node2, state) ? "<" : "["; } // node_modules/mdast-util-to-markdown/lib/handle/link-reference.js linkReference.peek = linkReferencePeek; -function linkReference(node2, _, state, info) { +function linkReference(node2, _2, state, info) { const type = node2.referenceType; const exit2 = state.enter("linkReference"); let subexit = state.enter("label"); @@ -1644,7 +1642,7 @@ function listItem(node2, parent, state, info) { } // node_modules/mdast-util-to-markdown/lib/handle/paragraph.js -function paragraph(node2, _, state, info) { +function paragraph(node2, _2, state, info) { const exit2 = state.enter("paragraph"); const subexit = state.enter("phrasing"); const value = state.containerPhrasing(node2, info); @@ -1682,9 +1680,9 @@ var phrasing = ( ); // node_modules/mdast-util-to-markdown/lib/handle/root.js -function root(node2, _, state, info) { - const hasPhrasing = node2.children.some(function(d) { - return phrasing(d); +function root(node2, _2, state, info) { + const hasPhrasing = node2.children.some(function(d2) { + return phrasing(d2); }); const container = hasPhrasing ? state.containerPhrasing : state.containerFlow; return container.call(state, node2, info); @@ -1703,7 +1701,7 @@ function checkStrong(state) { // node_modules/mdast-util-to-markdown/lib/handle/strong.js strong.peek = strongPeek; -function strong(node2, _, state, info) { +function strong(node2, _2, state, info) { const marker = checkStrong(state); const exit2 = state.enter("strong"); const tracker = state.createTracker(info); @@ -1737,12 +1735,12 @@ function strong(node2, _, state, info) { }; return before + between + after; } -function strongPeek(_, _1, state) { +function strongPeek(_2, _1, state) { return state.options.strong || "*"; } // node_modules/mdast-util-to-markdown/lib/handle/text.js -function text(node2, _, state, info) { +function text(node2, _2, state, info) { return state.safe(node2.value, info); } @@ -1758,7 +1756,7 @@ function checkRuleRepetition(state) { } // node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js -function thematicBreak(_, _1, state) { +function thematicBreak(_2, _1, state) { const value = (checkRule(state) + (state.options.ruleSpaces ? " " : "")).repeat(checkRuleRepetition(state)); return state.options.ruleSpaces ? value.slice(0, -1) : value; } @@ -1810,8 +1808,8 @@ function enterTable(token) { this.enter( { type: "table", - align: align.map(function(d) { - return d === "none" ? null : d; + align: align.map(function(d2) { + return d2 === "none" ? null : d2; }), children: [] }, @@ -1877,15 +1875,15 @@ function gfmTableToMarkdown(options) { tableRow: handleTableRow } }; - function handleTable(node2, _, state, info) { + function handleTable(node2, _2, state, info) { return serializeData(handleTableAsData(node2, state, info), node2.align); } - function handleTableRow(node2, _, state, info) { + function handleTableRow(node2, _2, state, info) { const row = handleTableRowAsData(node2, state, info); const value = serializeData([row]); return value.slice(0, value.indexOf("\n")); } - function handleTableCell(node2, _, state, info) { + function handleTableCell(node2, _2, state, info) { const exit2 = state.enter("tableCell"); const subexit = state.enter("phrasing"); const value = state.containerPhrasing(node2, { @@ -2899,8 +2897,8 @@ var EditMap = class { * @returns {undefined} */ consume(events) { - this.map.sort(function(a, b) { - return a[0] - b[0]; + this.map.sort(function(a2, b2) { + return a2[0] - b2[0]; }); if (this.map.length === 0) { return; @@ -3322,9 +3320,9 @@ function flushCell(map3, context, range, rowKind, rowEnd, previousCell) { start[1].type = "chunkText"; start[1].contentType = "text"; if (range[3] > range[2] + 1) { - const a = range[2] + 1; - const b = range[3] - range[2] - 1; - map3.add(a, b, []); + const a2 = range[2] + 1; + const b2 = range[3] - range[2] - 1; + map3.add(a2, b2, []); } } map3.add(range[3] + 1, 0, [["exit", valueToken, context]]); @@ -3729,18 +3727,44 @@ var ExampleEmitter = (userOptions) => { }; }; +// node_modules/@quartz-community/utils/dist/lang.js +function classNames(...classes) { + return classes.filter(Boolean).join(" "); +} + // src/components/styles/example.scss var example_default = ".example-component {\n padding: 8px 16px;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-radius: 4px;\n font-weight: 600;\n display: inline-block;\n}"; // src/components/scripts/example.inline.ts var example_inline_default = 'function l(){let e=window.location.pathname;return e.startsWith("/")&&(e=e.slice(1)),e.endsWith("/")&&(e=e.slice(0,-1)),e||"index"}function r(){let e=document.querySelectorAll(".example-component");if(e.length===0)return;let t=[];function o(n){(n.ctrlKey||n.metaKey)&&n.shiftKey&&n.key.toLowerCase()==="e"&&(n.preventDefault(),console.log("[ExampleComponent] Keyboard shortcut triggered!"))}document.addEventListener("keydown",o),t.push(()=>document.removeEventListener("keydown",o));for(let n of e){let i=()=>{console.log("[ExampleComponent] Clicked!")};n.addEventListener("click",i),t.push(()=>n.removeEventListener("click",i))}typeof window<"u"&&window.addCleanup&&window.addCleanup(()=>{t.forEach(n=>n())}),console.log("[ExampleComponent] Initialized with",e.length,"component(s)")}document.addEventListener("nav",e=>{let t=e.detail?.url||l();console.log("[ExampleComponent] Navigation to:",t),r()});document.addEventListener("render",()=>{console.log("[ExampleComponent] Render event - re-initializing"),r()});document.addEventListener("prenav",()=>{let e=document.querySelector(".example-component");e&&sessionStorage.setItem("exampleScrollTop",e.scrollTop?.toString()||"0")});\n'; +var l; +l = { __e: function(n2, l2, u3, t2) { + for (var i2, r2, o2; l2 = l2.__; ) if ((i2 = l2.__c) && !i2.__) try { + if ((r2 = i2.constructor) && null != r2.getDerivedStateFromError && (i2.setState(r2.getDerivedStateFromError(n2)), o2 = i2.__d), null != i2.componentDidCatch && (i2.componentDidCatch(n2, t2 || {}), o2 = i2.__d), o2) return i2.__E = i2; + } catch (l3) { + n2 = l3; + } + throw n2; +} }, "function" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, Math.random().toString(8); + +// node_modules/preact/jsx-runtime/dist/jsxRuntime.mjs +var f2 = 0; +function u2(e2, t2, n2, o2, i2, u3) { + t2 || (t2 = {}); + var a2, c2, p2 = t2; + if ("ref" in p2) for (c2 in p2 = {}, t2) "ref" == c2 ? a2 = t2[c2] : p2[c2] = t2[c2]; + var l2 = { type: e2, props: p2, key: n2, ref: a2, __k: null, __: null, __b: 0, __e: null, __c: null, constructor: void 0, __v: --f2, __i: -1, __u: 0, __source: i2, __self: u3 }; + return l.vnode && l.vnode(l2), l2; +} + +// src/components/ExampleComponent.tsx var ExampleComponent_default = ((opts) => { const { prefix = "", suffix = "", className = "example-component" } = opts ?? {}; const Component = (props) => { const frontmatter = props.fileData?.frontmatter; const title = frontmatter?.title ?? "Untitled"; const fullText = `${prefix}${title}${suffix}`; - return /* @__PURE__ */ jsx("div", { class: classNames(className), children: fullText }); + return /* @__PURE__ */ u2("div", { class: classNames(className), children: fullText }); }; Component.css = example_default; Component.afterDOMLoaded = example_inline_default; @@ -3752,6 +3776,8 @@ var stacked_default = "#stacked-pages-container:not(.binder-active) {\n display // src/components/scripts/stacked.inline.ts var stacked_inline_default = 'var y=Object.hasOwnProperty;function h(){return typeof document>"u"?"":document.body?.dataset?.basepath??""}function o(u,D){let n=D??h(),F=u.startsWith("/")?u:"/"+u;return n+F}var B="stacked-pages-state";function d(){let u=window.location.pathname;return u.startsWith("/")&&(u=u.slice(1)),u.endsWith("/")&&(u=u.slice(0,-1)),u||"index"}function m(){return document.querySelector("h1")?.textContent?.trim()||document.title||d()}function s(){try{let u=sessionStorage.getItem(B);if(u){let D=JSON.parse(u);if(Array.isArray(D.tabs)&&typeof D.activeIndex=="number")return D}}catch{}return{tabs:[],activeIndex:-1}}function E(u){try{sessionStorage.setItem(B,JSON.stringify(u))}catch{}}function f(u){return{maxTabs:parseInt(u.dataset.maxTabs||"8",10),mobileBreakpoint:parseInt(u.dataset.mobileBreakpoint||"800",10),showSpines:u.dataset.showSpines!=="false",animate:u.dataset.animate!=="false"}}function A(u,D){let n=f(u);if(window.innerWidth0){let t=document.createElement("div");t.className="binder-strip binder-strip-left";for(let e=0;e0){let t=document.createElement("div");t.className="binder-strip binder-strip-right";for(let e=0;e0),document.body.classList.toggle("has-binder-right",r.length>0)}function c(u,D,n,F,r){let t=document.createElement("div");if(t.className=`binder-tab binder-tab-${n}`,t.dataset.index=String(D),D===F.activeIndex&&t.classList.add("binder-tab-active"),r.showSpines){let i=document.createElement("div");i.className="binder-spine",t.appendChild(i)}let e=document.createElement("span");if(e.className="binder-label",e.textContent=u.title,t.appendChild(e),F.tabs.length>=2){let i=document.createElement("button");i.className="binder-close",i.textContent="\\xD7",i.setAttribute("aria-label",`Close ${u.title}`),i.addEventListener("click",C=>{C.stopPropagation(),p(D)}),t.appendChild(i)}return t.addEventListener("click",()=>{g(D)}),t}function g(u){let D=s();if(u<0||u>=D.tabs.length)return;let n=D.tabs[u];if(!n)return;D.activeIndex=u,E(D);let F=new URL(o(n.slug),window.location.origin);window.spaNavigate?window.spaNavigate(F,!1):window.location.href=F.toString()}function p(u){let D=s();if(D.tabs.length<2)return;let n=u===D.activeIndex;D.tabs.splice(u,1),n?(D.activeIndex=Math.min(u,D.tabs.length-1),E(D),g(D.activeIndex)):(ue.slug===D);if(t>=0)F.tabs[t].title=n,F.activeIndex=t;else{let e={slug:D,title:n},i=F.activeIndex+1;for(F.tabs.splice(i,0,e),F.activeIndex=i;F.tabs.length>r.maxTabs;)F.activeIndex>0?(F.tabs.shift(),F.activeIndex--):F.tabs.pop()}E(F),A(u,F)}function a(){let u=document.getElementById("stacked-pages-container");u&&A(u,s())}function v(){b();let u=()=>a();window.addEventListener("resize",u),window.addCleanup&&window.addCleanup(()=>window.removeEventListener("resize",u))}typeof document<"u"&&(document.addEventListener("nav",()=>{v()}),document.addEventListener("render",()=>{a()}));\n'; + +// src/components/StackedPages.tsx var StackedPages_default = ((opts) => { const { maxTabs = 8, @@ -3760,7 +3786,7 @@ var StackedPages_default = ((opts) => { animateTransitions = true } = opts ?? {}; const Component = (_props) => { - return /* @__PURE__ */ jsx( + return /* @__PURE__ */ u2( "div", { id: "stacked-pages-container", diff --git a/dist/index.js.map b/dist/index.js.map index 59f349f..9bd239e 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../node_modules/ccount/index.js","../node_modules/devlop/lib/default.js","../node_modules/micromark-util-character/index.js","../node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","../node_modules/unist-util-is/lib/index.js","../node_modules/unist-util-visit-parents/lib/color.node.js","../node_modules/unist-util-visit-parents/lib/index.js","../node_modules/mdast-util-find-and-replace/lib/index.js","../node_modules/mdast-util-gfm-autolink-literal/lib/index.js","../node_modules/micromark-util-normalize-identifier/index.js","../node_modules/mdast-util-gfm-footnote/lib/index.js","../node_modules/mdast-util-gfm-strikethrough/lib/index.js","../node_modules/markdown-table/index.js","../node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","../node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","../node_modules/mdast-util-to-markdown/lib/handle/break.js","../node_modules/longest-streak/index.js","../node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","../node_modules/mdast-util-to-markdown/lib/util/check-fence.js","../node_modules/mdast-util-to-markdown/lib/handle/code.js","../node_modules/mdast-util-to-markdown/lib/util/check-quote.js","../node_modules/mdast-util-to-markdown/lib/handle/definition.js","../node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","../node_modules/mdast-util-to-markdown/lib/util/encode-character-reference.js","../node_modules/micromark-util-classify-character/index.js","../node_modules/mdast-util-to-markdown/lib/util/encode-info.js","../node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","../node_modules/unist-util-visit/lib/index.js","../node_modules/mdast-util-to-string/lib/index.js","../node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","../node_modules/mdast-util-to-markdown/lib/handle/heading.js","../node_modules/mdast-util-to-markdown/lib/handle/html.js","../node_modules/mdast-util-to-markdown/lib/handle/image.js","../node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","../node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","../node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","../node_modules/mdast-util-to-markdown/lib/handle/link.js","../node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule.js","../node_modules/mdast-util-to-markdown/lib/handle/list.js","../node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","../node_modules/mdast-util-to-markdown/lib/handle/list-item.js","../node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","../node_modules/mdast-util-phrasing/lib/index.js","../node_modules/mdast-util-to-markdown/lib/handle/root.js","../node_modules/mdast-util-to-markdown/lib/util/check-strong.js","../node_modules/mdast-util-to-markdown/lib/handle/strong.js","../node_modules/mdast-util-to-markdown/lib/handle/text.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","../node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","../node_modules/mdast-util-to-markdown/lib/handle/index.js","../node_modules/mdast-util-gfm-table/lib/index.js","../node_modules/mdast-util-gfm-task-list-item/lib/index.js","../node_modules/mdast-util-gfm/lib/index.js","../node_modules/micromark-util-chunked/index.js","../node_modules/micromark-util-combine-extensions/index.js","../node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","../node_modules/micromark-util-resolve-all/index.js","../node_modules/micromark-factory-space/index.js","../node_modules/micromark-core-commonmark/lib/blank-line.js","../node_modules/micromark-extension-gfm-footnote/lib/syntax.js","../node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","../node_modules/micromark-extension-gfm-table/lib/edit-map.js","../node_modules/micromark-extension-gfm-table/lib/infer.js","../node_modules/micromark-extension-gfm-table/lib/syntax.js","../node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","../node_modules/micromark-extension-gfm/index.js","../node_modules/remark-gfm/lib/index.js","../node_modules/github-slugger/regex.js","../node_modules/github-slugger/index.js","../node_modules/hast-util-heading-rank/lib/index.js","../node_modules/hast-util-to-string/lib/index.js","../node_modules/rehype-slug/lib/index.js","../src/transformer.ts","../src/filter.ts","../src/emitter.ts","../src/components/styles/example.scss","../src/components/scripts/example.inline.ts","../src/components/ExampleComponent.tsx","../src/components/styles/stacked.scss","../src/components/scripts/stacked.inline.ts","../src/components/StackedPages.tsx"],"names":["code","regex","ok","index","all","node","is","visit","list","replace","domain","path","trail","exit","row","sizes","columnIndex","value","map","subexit","text","constructs","previous","emptyOptions","toString","one","defaultOptions","slug","jsx"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","export function deprecate(fn) {\n return fn\n}\n\nexport function equal() {}\n\nexport function ok() {}\n\nexport function unreachable() {}\n","/**\n * @import {Code} from 'micromark-util-types'\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function asciiControl(code) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code !== null && (code < 32 || code === 127)\n );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEnding(code) {\n return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownSpace(code) {\n return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * Expression.\n * @returns {(code: Code) => boolean}\n * Check.\n */\nfunction regexCheck(regex) {\n return check;\n\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code\n * Character code.\n * @returns {boolean}\n * Whether the character code matches the bound regex.\n */\n function check(code) {\n return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n }\n}","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @import {Node, Parent} from 'unist'\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array | ReadonlyArray | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n * (>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test)\n ? anyFactory(test)\n : // Cast because `ReadonlyArray` goes into the above but `isArray`\n // narrows to `Array`.\n propertiesFactory(/** @type {Props} */ (test))\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propertiesFactory(check) {\n const checkAsRecord = /** @type {Record} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @param {string} d\n * @returns {string}\n */\nexport function color(d) {\n return '\\u001B[33m' + d + '\\u001B[39m'\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n */\n\n/**\n * @typedef {Exclude | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate extends Value\n * ? Predicate\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends ReadonlyArray\n * ? MatchesOne\n * : Check extends Array\n * ? MatchesOne\n * : MatchesOne\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent\n * | InternalAncestor, Max, Increment>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {InternalAncestor, Child>} Ancestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor, Check>, Ancestor, Check>>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n * Tree type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} test\n * `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n * Handle each node.\n * @param {boolean | null | undefined} [reverse]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n /** @type {Test} */\n let check\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n } else {\n // @ts-expect-error visitor given, so `test` isn’t a visitor.\n check = test\n }\n\n const is = convert(check)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {UnistNode} node\n * @param {number | undefined} index\n * @param {Array} parents\n */\n function factory(node, index, parents) {\n const value = /** @type {Record} */ (\n node && typeof node === 'object' ? node : {}\n )\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {Readonly} */\n let result = empty\n /** @type {Readonly} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n // @ts-expect-error: `visitor` is now a visitor.\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if ('children' in node && node.children) {\n const nodeAsParent = /** @type {UnistParent} */ (node)\n\n if (nodeAsParent.children && result[0] !== SKIP) {\n offset = (reverse ? nodeAsParent.children.length : -1) + step\n grandparents = parents.concat(nodeAsParent)\n\n while (offset > -1 && offset < nodeAsParent.children.length) {\n const child = nodeAsParent.children[offset]\n\n subresult = factory(child, offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n }\n\n return result\n }\n }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {Readonly}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @import {Nodes, Parents, PhrasingContent, Root, Text} from 'mdast'\n * @import {BuildVisitor, Test, VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef RegExpMatchObject\n * Info on the match.\n * @property {number} index\n * The index of the search at which the result was found.\n * @property {string} input\n * A copy of the search string in the text node.\n * @property {[...Array, Text]} stack\n * All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n * Pattern to find.\n *\n * Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array} FindAndReplaceList\n * Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n * Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n * Thing to replace with.\n *\n * @callback ReplaceFunction\n * Callback called when a search matches.\n * @param {...any} parameters\n * The parameters are the result of corresponding search expression:\n *\n * * `value` (`string`) — whole match\n * * `...capture` (`Array`) — matches from regex capture groups\n * * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array | PhrasingContent | string | false | null | undefined}\n * Thing to replace with.\n *\n * * when `null`, `undefined`, `''`, remove the match\n * * …or when `false`, do not replace at all\n * * …or when `string`, replace with a text node of that value\n * * …or when `Node` or `Array`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n * Normalized find and replace.\n *\n * @typedef {Array} Pairs\n * All find and replaced.\n *\n * @typedef Options\n * Configuration.\n * @property {Test | null | undefined} [ignore]\n * Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n * Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n * Patterns to find.\n * @param {Options | null | undefined} [options]\n * Configuration (when `find` is not `Find`).\n * @returns {undefined}\n * Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n const settings = options || {}\n const ignored = convert(settings.ignore || [])\n const pairs = toPairs(list)\n let pairIndex = -1\n\n while (++pairIndex < pairs.length) {\n visitParents(tree, 'text', visitor)\n }\n\n /** @type {BuildVisitor} */\n function visitor(node, parents) {\n let index = -1\n /** @type {Parents | undefined} */\n let grandparent\n\n while (++index < parents.length) {\n const parent = parents[index]\n /** @type {Array | undefined} */\n const siblings = grandparent ? grandparent.children : undefined\n\n if (\n ignored(\n parent,\n siblings ? siblings.indexOf(parent) : undefined,\n grandparent\n )\n ) {\n return\n }\n\n grandparent = parent\n }\n\n if (grandparent) {\n return handler(node, parents)\n }\n }\n\n /**\n * Handle a text node which is not in an ignored parent.\n *\n * @param {Text} node\n * Text node.\n * @param {Array} parents\n * Parents.\n * @returns {VisitorResult}\n * Result.\n */\n function handler(node, parents) {\n const parent = parents[parents.length - 1]\n const find = pairs[pairIndex][0]\n const replace = pairs[pairIndex][1]\n let start = 0\n /** @type {Array} */\n const siblings = parent.children\n const index = siblings.indexOf(node)\n let change = false\n /** @type {Array} */\n let nodes = []\n\n find.lastIndex = 0\n\n let match = find.exec(node.value)\n\n while (match) {\n const position = match.index\n /** @type {RegExpMatchObject} */\n const matchObject = {\n index: match.index,\n input: match.input,\n stack: [...parents, node]\n }\n let value = replace(...match, matchObject)\n\n if (typeof value === 'string') {\n value = value.length > 0 ? {type: 'text', value} : undefined\n }\n\n // It wasn’t a match after all.\n if (value === false) {\n // False acts as if there was no match.\n // So we need to reset `lastIndex`, which currently being at the end of\n // the current match, to the beginning.\n find.lastIndex = position + 1\n } else {\n if (start !== position) {\n nodes.push({\n type: 'text',\n value: node.value.slice(start, position)\n })\n }\n\n if (Array.isArray(value)) {\n nodes.push(...value)\n } else if (value) {\n nodes.push(value)\n }\n\n start = position + match[0].length\n change = true\n }\n\n if (!find.global) {\n break\n }\n\n match = find.exec(node.value)\n }\n\n if (change) {\n if (start < node.value.length) {\n nodes.push({type: 'text', value: node.value.slice(start)})\n }\n\n parent.children.splice(index, 1, ...nodes)\n } else {\n nodes = [node]\n }\n\n return index + nodes.length\n }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n * Schema.\n * @returns {Pairs}\n * Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n /** @type {Pairs} */\n const result = []\n\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError('Expected find and replace tuple or list of tuples')\n }\n\n /** @type {FindAndReplaceList} */\n // @ts-expect-error: correct.\n const list =\n !tupleOrList[0] || Array.isArray(tupleOrList[0])\n ? tupleOrList\n : [tupleOrList]\n\n let index = -1\n\n while (++index < list.length) {\n const tuple = list[index]\n result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n }\n\n return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n * Find.\n * @returns {RegExp}\n * Expression.\n */\nfunction toExpression(find) {\n return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n * Replace.\n * @returns {ReplaceFunction}\n * Function.\n */\nfunction toFunction(replace) {\n return typeof replace === 'function'\n ? replace\n : function () {\n return replace\n }\n}\n","/**\n * @import {RegExpMatchObject, ReplaceFunction} from 'mdast-util-find-and-replace'\n * @import {CompileContext, Extension as FromMarkdownExtension, Handle as FromMarkdownHandle, Transform as FromMarkdownTransform} from 'mdast-util-from-markdown'\n * @import {ConstructName, Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n * @import {Link, PhrasingContent} from 'mdast'\n */\n\nimport {ccount} from 'ccount'\nimport {ok as assert} from 'devlop'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralFromMarkdown() {\n return {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralToMarkdown() {\n return {\n unsafe: [\n {\n character: '@',\n before: '[+\\\\-.\\\\w]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: '.',\n before: '[Ww]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: ':',\n before: '[ps]',\n after: '\\\\/',\n inConstruct,\n notInConstruct\n }\n ]\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token)\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'link')\n node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/gu, findEmail]\n ],\n {ignore: ['link', 'linkReference']}\n )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Array | Link | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n let prefix = ''\n\n // Not an expected previous character.\n if (!previous(match)) {\n return false\n }\n\n // Treat `www` as part of the domain.\n if (/^w/i.test(protocol)) {\n domain = protocol + domain\n protocol = ''\n prefix = 'http://'\n }\n\n if (!isCorrectDomain(domain)) {\n return false\n }\n\n const parts = splitUrl(domain + path)\n\n if (!parts[0]) return false\n\n /** @type {Link} */\n const result = {\n type: 'link',\n title: null,\n url: prefix + protocol + parts[0],\n children: [{type: 'text', value: protocol + parts[0]}]\n }\n\n if (parts[1]) {\n return [result, {type: 'text', value: parts[1]}]\n }\n\n return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) ||\n // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false\n }\n\n return {\n type: 'link',\n title: null,\n url: 'mailto:' + atext + '@' + label,\n children: [{type: 'text', value: atext + '@' + label}]\n }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n const parts = domain.split('.')\n\n if (\n parts.length < 2 ||\n (parts[parts.length - 1] &&\n (/_/.test(parts[parts.length - 1]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n (parts[parts.length - 2] &&\n (/_/.test(parts[parts.length - 2]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n ) {\n return false\n }\n\n return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n if (!trailExec) {\n return [url, undefined]\n }\n\n url = url.slice(0, trailExec.index)\n\n let trail = trailExec[0]\n let closingParenIndex = trail.indexOf(')')\n const openingParens = ccount(url, '(')\n let closingParens = ccount(url, ')')\n\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail.slice(0, closingParenIndex + 1)\n trail = trail.slice(closingParenIndex + 1)\n closingParenIndex = trail.indexOf(')')\n closingParens++\n }\n\n return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n const code = match.input.charCodeAt(match.index - 1)\n\n return (\n (match.index === 0 ||\n unicodeWhitespace(code) ||\n unicodePunctuation(code)) &&\n // If it’s an email, the previous character should not be a slash.\n (!email || code !== 47)\n )\n}\n","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n * Identifier to normalize.\n * @returns {string}\n * Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n return value\n // Collapse markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, \" \")\n // Trim.\n .replace(/^ | $/g, '')\n // Some characters are considered “uppercase”, but if their lowercase\n // counterpart is uppercased will result in a different uppercase\n // character.\n // Hence, to get that form, we perform both lower- and uppercase.\n // Upper case makes sure keys will not interact with default prototypal\n // methods: no method is uppercase.\n .toLowerCase().toUpperCase();\n}","/**\n * @import {\n * CompileContext,\n * Extension as FromMarkdownExtension,\n * Handle as FromMarkdownHandle\n * } from 'mdast-util-from-markdown'\n * @import {ToMarkdownOptions} from 'mdast-util-gfm-footnote'\n * @import {\n * Handle as ToMarkdownHandle,\n * Map,\n * Options as ToMarkdownExtension\n * } from 'mdast-util-to-markdown'\n * @import {FootnoteDefinition, FootnoteReference} from 'mdast'\n */\n\nimport {ok as assert} from 'devlop'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n this.enter(\n {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n token\n )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteReference')\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteDefinition')\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n this.exit(token)\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteReference')\n const subexit = state.enter('reference')\n value += tracker.move(\n state.safe(state.associationId(node), {after: ']', before: value})\n )\n subexit()\n exit()\n value += tracker.move(']')\n return value\n}\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteCallString: enterFootnoteCallString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: enterFootnoteDefinition\n },\n exit: {\n gfmFootnoteCallString: exitFootnoteCallString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: exitFootnoteDefinition\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @param {ToMarkdownOptions | null | undefined} [options]\n * Configuration (optional).\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown(options) {\n // To do: next major: change default.\n let firstLineBlank = false\n\n if (options && options.firstLineBlank) {\n firstLineBlank = true\n }\n\n return {\n handlers: {footnoteDefinition, footnoteReference},\n // This is on by default already.\n unsafe: [{character: '[', inConstruct: ['label', 'phrasing', 'reference']}]\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {FootnoteDefinition} node\n */\n function footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteDefinition')\n const subexit = state.enter('label')\n value += tracker.move(\n state.safe(state.associationId(node), {before: value, after: ']'})\n )\n subexit()\n\n value += tracker.move(']:')\n\n if (node.children && node.children.length > 0) {\n tracker.shift(4)\n\n value += tracker.move(\n (firstLineBlank ? '\\n' : ' ') +\n state.indentLines(\n state.containerFlow(node, tracker.current()),\n firstLineBlank ? mapAll : mapExceptFirst\n )\n )\n }\n\n exit()\n\n return value\n }\n}\n\n/** @type {Map} */\nfunction mapExceptFirst(line, index, blank) {\n return index === 0 ? line : mapAll(line, index, blank)\n}\n\n/** @type {Map} */\nfunction mapAll(line, index, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: \n *\n * @type {Array}\n */\nconst constructsWithoutStrikethrough = [\n 'autolink',\n 'destinationLiteral',\n 'destinationRaw',\n 'reference',\n 'titleQuote',\n 'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: ['delete'],\n enter: {strikethrough: enterStrikethrough},\n exit: {strikethrough: exitStrikethrough}\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: '~',\n inConstruct: 'phrasing',\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: {delete: handleDelete}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, state, info) {\n const tracker = state.createTracker(info)\n const exit = state.enter('strikethrough')\n let value = tracker.move('~~')\n value += state.containerPhrasing(node, {\n ...tracker.current(),\n before: value,\n after: '~'\n })\n value += tracker.move('~~')\n exit()\n return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n return '~'\n}\n","// To do: next major: remove.\n/**\n * @typedef {Options} MarkdownTableOptions\n * Configuration.\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [alignDelimiters=true]\n * Whether to align the delimiters (default: `true`);\n * they are aligned by default:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * Pass `false` to make them staggered:\n *\n * ```markdown\n * | Alpha | B |\n * | - | - |\n * | C | Delta |\n * ```\n * @property {ReadonlyArray | string | null | undefined} [align]\n * How to align columns (default: `''`);\n * one style for all columns or styles for their respective columns;\n * each style is either `'l'` (left), `'r'` (right), or `'c'` (center);\n * other values are treated as `''`, which doesn’t place the colon in the\n * alignment row but does align left;\n * *only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean | null | undefined} [delimiterEnd=true]\n * Whether to end each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are ending delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no ending delimiters:\n *\n * ```markdown\n * | Alpha | B\n * | ----- | -----\n * | C | Delta\n * ```\n * @property {boolean | null | undefined} [delimiterStart=true]\n * Whether to begin each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are starting delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no starting delimiters:\n *\n * ```markdown\n * Alpha | B |\n * ----- | ----- |\n * C | Delta |\n * ```\n * @property {boolean | null | undefined} [padding=true]\n * Whether to add a space of padding between delimiters and cells\n * (default: `true`).\n *\n * When `true`, there is padding:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there is no padding:\n *\n * ```markdown\n * |Alpha|B |\n * |-----|-----|\n * |C |Delta|\n * ```\n * @property {((value: string) => number) | null | undefined} [stringLength]\n * Function to detect the length of table cell content (optional);\n * this is used when aligning the delimiters (`|`) between table cells;\n * full-width characters and emoji mess up delimiter alignment when viewing\n * the markdown source;\n * to fix this, you can pass this function,\n * which receives the cell content and returns its “visible” size;\n * note that what is and isn’t visible depends on where the text is displayed.\n *\n * Without such a function, the following:\n *\n * ```js\n * markdownTable([\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩‍❤️‍👩', 'Delta']\n * ])\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | - | - |\n * | 中文 | Charlie |\n * | 👩‍❤️‍👩 | Delta |\n * ```\n *\n * With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n * ```js\n * import stringWidth from 'string-width'\n *\n * markdownTable(\n * [\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩‍❤️‍👩', 'Delta']\n * ],\n * {stringLength: stringWidth}\n * )\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | ----- | ------- |\n * | 中文 | Charlie |\n * | 👩‍❤️‍👩 | Delta |\n * ```\n */\n\n/**\n * @param {string} value\n * Cell value.\n * @returns {number}\n * Cell size.\n */\nfunction defaultStringLength(value) {\n return value.length\n}\n\n/**\n * Generate a markdown\n * ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables))\n * table.\n *\n * @param {ReadonlyArray>} table\n * Table data (matrix of strings).\n * @param {Readonly | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Result.\n */\nexport function markdownTable(table, options) {\n const settings = options || {}\n // To do: next major: change to spread.\n const align = (settings.align || []).concat()\n const stringLength = settings.stringLength || defaultStringLength\n /** @type {Array} Character codes as symbols for alignment per column. */\n const alignments = []\n /** @type {Array>} Cells per row. */\n const cellMatrix = []\n /** @type {Array>} Sizes of each cell per row. */\n const sizeMatrix = []\n /** @type {Array} */\n const longestCellByColumn = []\n let mostCellsPerRow = 0\n let rowIndex = -1\n\n // This is a superfluous loop if we don’t align delimiters, but otherwise we’d\n // do superfluous work when aligning, so optimize for aligning.\n while (++rowIndex < table.length) {\n /** @type {Array} */\n const row = []\n /** @type {Array} */\n const sizes = []\n let columnIndex = -1\n\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length\n }\n\n while (++columnIndex < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex])\n\n if (settings.alignDelimiters !== false) {\n const size = stringLength(cell)\n sizes[columnIndex] = size\n\n if (\n longestCellByColumn[columnIndex] === undefined ||\n size > longestCellByColumn[columnIndex]\n ) {\n longestCellByColumn[columnIndex] = size\n }\n }\n\n row.push(cell)\n }\n\n cellMatrix[rowIndex] = row\n sizeMatrix[rowIndex] = sizes\n }\n\n // Figure out which alignments to use.\n let columnIndex = -1\n\n if (typeof align === 'object' && 'length' in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex])\n }\n } else {\n const code = toAlignment(align)\n\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code\n }\n }\n\n // Inject the alignment row.\n columnIndex = -1\n /** @type {Array} */\n const row = []\n /** @type {Array} */\n const sizes = []\n\n while (++columnIndex < mostCellsPerRow) {\n const code = alignments[columnIndex]\n let before = ''\n let after = ''\n\n if (code === 99 /* `c` */) {\n before = ':'\n after = ':'\n } else if (code === 108 /* `l` */) {\n before = ':'\n } else if (code === 114 /* `r` */) {\n after = ':'\n }\n\n // There *must* be at least one hyphen-minus in each alignment cell.\n let size =\n settings.alignDelimiters === false\n ? 1\n : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n )\n\n const cell = before + '-'.repeat(size) + after\n\n if (settings.alignDelimiters !== false) {\n size = before.length + size + after.length\n\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size\n }\n\n sizes[columnIndex] = size\n }\n\n row[columnIndex] = cell\n }\n\n // Inject the alignment row.\n cellMatrix.splice(1, 0, row)\n sizeMatrix.splice(1, 0, sizes)\n\n rowIndex = -1\n /** @type {Array} */\n const lines = []\n\n while (++rowIndex < cellMatrix.length) {\n const row = cellMatrix[rowIndex]\n const sizes = sizeMatrix[rowIndex]\n columnIndex = -1\n /** @type {Array} */\n const line = []\n\n while (++columnIndex < mostCellsPerRow) {\n const cell = row[columnIndex] || ''\n let before = ''\n let after = ''\n\n if (settings.alignDelimiters !== false) {\n const size =\n longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n const code = alignments[columnIndex]\n\n if (code === 114 /* `r` */) {\n before = ' '.repeat(size)\n } else if (code === 99 /* `c` */) {\n if (size % 2) {\n before = ' '.repeat(size / 2 + 0.5)\n after = ' '.repeat(size / 2 - 0.5)\n } else {\n before = ' '.repeat(size / 2)\n after = before\n }\n } else {\n after = ' '.repeat(size)\n }\n }\n\n if (settings.delimiterStart !== false && !columnIndex) {\n line.push('|')\n }\n\n if (\n settings.padding !== false &&\n // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(settings.alignDelimiters === false && cell === '') &&\n (settings.delimiterStart !== false || columnIndex)\n ) {\n line.push(' ')\n }\n\n if (settings.alignDelimiters !== false) {\n line.push(before)\n }\n\n line.push(cell)\n\n if (settings.alignDelimiters !== false) {\n line.push(after)\n }\n\n if (settings.padding !== false) {\n line.push(' ')\n }\n\n if (\n settings.delimiterEnd !== false ||\n columnIndex !== mostCellsPerRow - 1\n ) {\n line.push('|')\n }\n }\n\n lines.push(\n settings.delimiterEnd === false\n ? line.join('').replace(/ +$/, '')\n : line.join('')\n )\n }\n\n return lines.join('\\n')\n}\n\n/**\n * @param {string | null | undefined} [value]\n * Value to serialize.\n * @returns {string}\n * Result.\n */\nfunction serialize(value) {\n return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string | null | undefined} value\n * Value.\n * @returns {number}\n * Alignment.\n */\nfunction toAlignment(value) {\n const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n return code === 67 /* `C` */ || code === 99 /* `c` */\n ? 99 /* `c` */\n : code === 76 /* `L` */ || code === 108 /* `l` */\n ? 108 /* `l` */\n : code === 82 /* `R` */ || code === 114 /* `r` */\n ? 114 /* `r` */\n : 0\n}\n","/**\n * @import {Blockquote, Parents} from 'mdast'\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n const exit = state.enter('blockquote')\n const tracker = state.createTracker(info)\n tracker.move('> ')\n tracker.shift(2)\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return '>' + (blank ? '' : ' ') + line\n}\n","/**\n * @import {ConstructName, Unsafe} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Array} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n return (\n listInScope(stack, pattern.inConstruct, true) &&\n !listInScope(stack, pattern.notInConstruct, false)\n )\n}\n\n/**\n * @param {Array} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n if (typeof list === 'string') {\n list = [list]\n }\n\n if (!list || list.length === 0) {\n return none\n }\n\n let index = -1\n\n while (++index < list.length) {\n if (stack.includes(list[index])) {\n return true\n }\n }\n\n return false\n}\n","/**\n * @import {Break, Parents} from 'mdast'\n * @import {Info, State} from 'mdast-util-to-markdown'\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n let index = -1\n\n while (++index < state.unsafe.length) {\n // If we can’t put eols in this construct (setext headings, tables), use a\n // space instead.\n if (\n state.unsafe[index].character === '\\n' &&\n patternInScope(state.stack, state.unsafe[index])\n ) {\n return /[ \\t]/.test(info.before) ? '' : ' '\n }\n }\n\n return '\\\\\\n'\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n * Content to search in.\n * @param {string} substring\n * Substring to look for, typically one character.\n * @returns {number}\n * Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n const source = String(value)\n let index = source.indexOf(substring)\n let expected = index\n let count = 0\n let max = 0\n\n if (typeof substring !== 'string') {\n throw new TypeError('Expected substring')\n }\n\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count\n }\n } else {\n count = 1\n }\n\n expected = index + substring.length\n index = source.indexOf(substring, expected)\n }\n\n return max\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Code} from 'mdast'\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false &&\n node.value &&\n // If there’s no info…\n !node.lang &&\n // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) &&\n // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n )\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkFence(state) {\n const marker = state.options.fence || '`'\n\n if (marker !== '`' && marker !== '~') {\n throw new Error(\n 'Cannot serialize code with `' +\n marker +\n '` for `options.fence`, expected `` ` `` or `~`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {Code, Parents} from 'mdast'\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n const marker = checkFence(state)\n const raw = node.value || ''\n const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n if (formatCodeAsIndented(node, state)) {\n const exit = state.enter('codeIndented')\n const value = state.indentLines(raw, map)\n exit()\n return value\n }\n\n const tracker = state.createTracker(info)\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n const exit = state.enter('codeFenced')\n let value = tracker.move(sequence)\n\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`)\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: ' ',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`)\n value += tracker.move(' ')\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: '\\n',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n value += tracker.move('\\n')\n\n if (raw) {\n value += tracker.move(raw + '\\n')\n }\n\n value += tracker.move(sequence)\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkQuote(state) {\n const marker = state.options.quote || '\"'\n\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n 'Cannot serialize title with `' +\n marker +\n '` for `options.quote`, expected `\"`, or `\\'`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Definition, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('definition')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n )\n value += tracker.move(']: ')\n\n subexit()\n\n if (\n // If there’s no url, or…\n !node.url ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : '\\n',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n exit()\n\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkEmphasis(state) {\n const marker = state.options.emphasis || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize emphasis with `' +\n marker +\n '` for `options.emphasis`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * Encode a code point as a character reference.\n *\n * @param {number} code\n * Code point to encode.\n * @returns {string}\n * Encoded character reference.\n */\nexport function encodeCharacterReference(code) {\n return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n * Group.\n */\nexport function classifyCharacter(code) {\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return 1;\n }\n if (unicodePunctuation(code)) {\n return 2;\n }\n}","/**\n * @import {EncodeSides} from '../types.js'\n */\n\nimport {classifyCharacter} from 'micromark-util-classify-character'\n\n/**\n * Check whether to encode (as a character reference) the characters\n * surrounding an attention run.\n *\n * Which characters are around an attention run influence whether it works or\n * not.\n *\n * See for more info.\n * See this markdown in a particular renderer to see what works:\n *\n * ```markdown\n * | | A (letter inside) | B (punctuation inside) | C (whitespace inside) | D (nothing inside) |\n * | ----------------------- | ----------------- | ---------------------- | --------------------- | ------------------ |\n * | 1 (letter outside) | x*y*z | x*.*z | x* *z | x**z |\n * | 2 (punctuation outside) | .*y*. | .*.*. | .* *. | .**. |\n * | 3 (whitespace outside) | x *y* z | x *.* z | x * * z | x ** z |\n * | 4 (nothing outside) | *x* | *.* | * * | ** |\n * ```\n *\n * @param {number} outside\n * Code point on the outer side of the run.\n * @param {number} inside\n * Code point on the inner side of the run.\n * @param {'*' | '_'} marker\n * Marker of the run.\n * Underscores are handled more strictly (they form less often) than\n * asterisks.\n * @returns {EncodeSides}\n * Whether to encode characters.\n */\n// Important: punctuation must never be encoded.\n// Punctuation is solely used by markdown constructs.\n// And by encoding itself.\n// Encoding them will break constructs or double encode things.\nexport function encodeInfo(outside, inside, marker) {\n const outsideKind = classifyCharacter(outside)\n const insideKind = classifyCharacter(inside)\n\n // Letter outside:\n if (outsideKind === undefined) {\n return insideKind === undefined\n ? // Letter inside:\n // we have to encode *both* letters for `_` as it is looser.\n // it already forms for `*` (and GFMs `~`).\n marker === '_'\n ? {inside: true, outside: true}\n : {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (letter, whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: encode outer (letter)\n {inside: false, outside: true}\n }\n\n // Whitespace outside:\n if (outsideKind === 1) {\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n }\n\n // Punctuation outside:\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode inner (whitespace).\n {inside: true, outside: false}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Emphasis, Parents} from 'mdast'\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nemphasis.peek = emphasisPeek\n\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n const marker = checkEmphasis(state)\n const exit = state.enter('emphasis')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || '*'\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n * @import {VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef {Exclude | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate extends Value\n * ? Predicate\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends ReadonlyArray\n * ? MatchesOne\n * : MatchesOne\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent\n * | InternalAncestor, Max, Increment>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform `parent`.\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of `parent` still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n * Parent of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor>} BuildVisitorFromMatch\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n * Node type.\n * @template {UnistParent} Ancestor\n * Parent type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromMatch<\n * Matches,\n * Extract\n * >\n * )} BuildVisitorFromDescendants\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromDescendants<\n * InclusiveDescendant,\n * Check\n * >\n * )} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n * Node type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n * `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n * Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n /** @type {boolean | null | undefined} */\n let reverse\n /** @type {Test} */\n let test\n /** @type {Visitor} */\n let visitor\n\n if (\n typeof testOrVisitor === 'function' &&\n typeof visitorOrReverse !== 'function'\n ) {\n test = undefined\n visitor = testOrVisitor\n reverse = visitorOrReverse\n } else {\n // @ts-expect-error: assume the overload with test was given.\n test = testOrVisitor\n // @ts-expect-error: assume the overload with test was given.\n visitor = visitorOrReverse\n reverse = maybeReverse\n }\n\n visitParents(tree, test, overload, reverse)\n\n /**\n * @param {UnistNode} node\n * @param {Array} parents\n */\n function overload(node, parents) {\n const parent = parents[parents.length - 1]\n const index = parent ? parent.children.indexOf(node) : undefined\n return visitor(node, index, parent)\n }\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n * Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized `value`.\n */\nexport function toString(value, options) {\n const settings = options || emptyOptions\n const includeImageAlt =\n typeof settings.includeImageAlt === 'boolean'\n ? settings.includeImageAlt\n : true\n const includeHtml =\n typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n if (node(value)) {\n if ('value' in value) {\n return value.type === 'html' && !includeHtml ? '' : value.value\n }\n\n if (includeImageAlt && 'alt' in value && value.alt) {\n return value.alt\n }\n\n if ('children' in value) {\n return all(value.children, includeImageAlt, includeHtml)\n }\n }\n\n if (Array.isArray(value)) {\n return all(value, includeImageAlt, includeHtml)\n }\n\n return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array} values\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n /** @type {Array} */\n const result = []\n let index = -1\n\n while (++index < values.length) {\n result[index] = one(values[index], includeImageAlt, includeHtml)\n }\n\n return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n * Thing.\n * @returns {value is Nodes}\n * Whether `value` is a node.\n */\nfunction node(value) {\n return Boolean(value && typeof value === 'object')\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Heading} from 'mdast'\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n let literalWithBreak = false\n\n // Look for literals with a line break.\n // Note that this also\n visit(node, function (node) {\n if (\n ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n node.type === 'break'\n ) {\n literalWithBreak = true\n return EXIT\n }\n })\n\n return Boolean(\n (!node.depth || node.depth < 3) &&\n toString(node) &&\n (state.options.setext || literalWithBreak)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Heading, Parents} from 'mdast'\n */\n\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1)\n const tracker = state.createTracker(info)\n\n if (formatHeadingAsSetext(node, state)) {\n const exit = state.enter('headingSetext')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...tracker.current(),\n before: '\\n',\n after: '\\n'\n })\n subexit()\n exit()\n\n return (\n value +\n '\\n' +\n (rank === 1 ? '=' : '-').repeat(\n // The whole size…\n value.length -\n // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n )\n )\n }\n\n const sequence = '#'.repeat(rank)\n const exit = state.enter('headingAtx')\n const subexit = state.enter('phrasing')\n\n // Note: for proper tracking, we should reset the output positions when there\n // is no content returned, because then the space is not output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n tracker.move(sequence + ' ')\n\n let value = state.containerPhrasing(node, {\n before: '# ',\n after: '\\n',\n ...tracker.current()\n })\n\n if (/^[\\t ]/.test(value)) {\n // To do: what effect has the character reference on tracking?\n value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1)\n }\n\n value = value ? sequence + ' ' + value : sequence\n\n if (state.options.closeAtx) {\n value += ' ' + sequence\n }\n\n subexit()\n exit()\n\n return value\n}\n","/**\n * @import {Html} from 'mdast'\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n return '<'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Image, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('image')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n value += tracker.move(\n state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n )\n value += tracker.move('](')\n\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n exit()\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n return '!'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {ImageReference, Parents} from 'mdast'\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('imageReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n const alt = state.safe(node.alt, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(alt + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !alt || alt !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n return '!'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {InlineCode, Parents} from 'mdast'\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n let value = node.value || ''\n let sequence = '`'\n let index = -1\n\n // If there is a single grave accent on its own in the code, use a fence of\n // two.\n // If there are two in a row, use one.\n while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n sequence += '`'\n }\n\n // If this is not just spaces or eols (tabs don’t count), and either the\n // first or last character are a space, eol, or tick, then pad with spaces.\n if (\n /[^ \\r\\n]/.test(value) &&\n ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n ) {\n value = ' ' + value + ' '\n }\n\n // We have a potential problem: certain characters after eols could result in\n // blocks being seen.\n // For example, if someone injected the string `'\\n# b'`, then that would\n // result in an ATX heading.\n // We can’t escape characters in `inlineCode`, but because eols are\n // transformed to spaces when going from markdown to HTML anyway, we can swap\n // them out.\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index]\n const expression = state.compilePattern(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n // Only look for `atBreak`s.\n // Btw: note that `atBreak` patterns will always start the regex at LF or\n // CR.\n if (!pattern.atBreak) continue\n\n while ((match = expression.exec(value))) {\n let position = match.index\n\n // Support CRLF (patterns only look for one of the characters).\n if (\n value.charCodeAt(position) === 10 /* `\\n` */ &&\n value.charCodeAt(position - 1) === 13 /* `\\r` */\n ) {\n position--\n }\n\n value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n }\n }\n\n return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n return '`'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Link} from 'mdast'\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n const raw = toString(node)\n\n return Boolean(\n !state.options.resourceLink &&\n // If there’s a url…\n node.url &&\n // And there’s a no title…\n !node.title &&\n // And the content of `node` is a single text node…\n node.children &&\n node.children.length === 1 &&\n node.children[0].type === 'text' &&\n // And if the url is the same as the content…\n (raw === node.url || 'mailto:' + raw === node.url) &&\n // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) &&\n // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Link, Parents} from 'mdast'\n * @import {Exit} from '../types.js'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const tracker = state.createTracker(info)\n /** @type {Exit} */\n let exit\n /** @type {Exit} */\n let subexit\n\n if (formatLinkAsAutolink(node, state)) {\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n exit = state.enter('autolink')\n let value = tracker.move('<')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '>',\n ...tracker.current()\n })\n )\n value += tracker.move('>')\n exit()\n state.stack = stack\n return value\n }\n\n exit = state.enter('link')\n subexit = state.enter('label')\n let value = tracker.move('[')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '](',\n ...tracker.current()\n })\n )\n value += tracker.move('](')\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n\n exit()\n return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {LinkReference, Parents} from 'mdast'\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('linkReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n const text = state.containerPhrasing(node, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(text + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !text || text !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n return '['\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkBullet(state) {\n const marker = state.options.bullet || '*'\n\n if (marker !== '*' && marker !== '+' && marker !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bullet`, expected `*`, `+`, or `-`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkBulletOther(state) {\n const bullet = checkBullet(state)\n const bulletOther = state.options.bulletOther\n\n if (!bulletOther) {\n return bullet === '*' ? '-' : '*'\n }\n\n if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n bulletOther +\n '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n )\n }\n\n if (bulletOther === bullet) {\n throw new Error(\n 'Expected `bullet` (`' +\n bullet +\n '`) and `bulletOther` (`' +\n bulletOther +\n '`) to be different'\n )\n }\n\n return bulletOther\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || '.'\n\n if (marker !== '.' && marker !== ')') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bulletOrdered`, expected `.` or `)`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkRule(state) {\n const marker = state.options.rule || '*'\n\n if (marker !== '*' && marker !== '-' && marker !== '_') {\n throw new Error(\n 'Cannot serialize rules with `' +\n marker +\n '` for `options.rule`, expected `*`, `-`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {List, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n const exit = state.enter('list')\n const bulletCurrent = state.bulletCurrent\n /** @type {string} */\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n /** @type {string} */\n const bulletOther = node.ordered\n ? bullet === '.'\n ? ')'\n : '.'\n : checkBulletOther(state)\n let useDifferentMarker =\n parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : undefined\n\n // If there’s an empty first list item directly in two list items,\n // we have to use a different bullet:\n //\n // ```markdown\n // * - *\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === '*' || bullet === '-') &&\n // Empty first list item:\n firstListItem &&\n (!firstListItem.children || !firstListItem.children[0]) &&\n // Directly in two other list items:\n state.stack[state.stack.length - 1] === 'list' &&\n state.stack[state.stack.length - 2] === 'listItem' &&\n state.stack[state.stack.length - 3] === 'list' &&\n state.stack[state.stack.length - 4] === 'listItem' &&\n // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 &&\n state.indexStack[state.indexStack.length - 2] === 0 &&\n state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true\n }\n\n // If there’s a thematic break at the start of the first list item,\n // we have to use a different bullet:\n //\n // ```markdown\n // * ---\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1\n\n while (++index < node.children.length) {\n const item = node.children[index]\n\n if (\n item &&\n item.type === 'listItem' &&\n item.children &&\n item.children[0] &&\n item.children[0].type === 'thematicBreak'\n ) {\n useDifferentMarker = true\n break\n }\n }\n }\n }\n\n if (useDifferentMarker) {\n bullet = bulletOther\n }\n\n state.bulletCurrent = bullet\n const value = state.containerFlow(node, info)\n state.bulletLastUsed = bullet\n state.bulletCurrent = bulletCurrent\n exit()\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkListItemIndent(state) {\n const style = state.options.listItemIndent || 'one'\n\n if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n throw new Error(\n 'Cannot serialize items with `' +\n style +\n '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n )\n }\n\n return style\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {ListItem, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state)\n let bullet = state.bulletCurrent || checkBullet(state)\n\n // Add the marker value for ordered lists.\n if (parent && parent.type === 'list' && parent.ordered) {\n bullet =\n (typeof parent.start === 'number' && parent.start > -1\n ? parent.start\n : 1) +\n (state.options.incrementListMarker === false\n ? 0\n : parent.children.indexOf(node)) +\n bullet\n }\n\n let size = bullet.length + 1\n\n if (\n listItemIndent === 'tab' ||\n (listItemIndent === 'mixed' &&\n ((parent && parent.type === 'list' && parent.spread) || node.spread))\n ) {\n size = Math.ceil(size / 4) * 4\n }\n\n const tracker = state.createTracker(info)\n tracker.move(bullet + ' '.repeat(size - bullet.length))\n tracker.shift(size)\n const exit = state.enter('listItem')\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n\n return value\n\n /** @type {Map} */\n function map(line, index, blank) {\n if (index) {\n return (blank ? '' : ' '.repeat(size)) + line\n }\n\n return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n }\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Paragraph, Parents} from 'mdast'\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n const exit = state.enter('paragraph')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, info)\n subexit()\n exit()\n return value\n}\n","/**\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > 👉 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n * Thing to check, typically `Node`.\n * @returns\n * Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n /** @type {(node?: unknown) => node is Exclude} */\n (\n convert([\n 'break',\n 'delete',\n 'emphasis',\n // To do: next major: removed since footnotes were added to GFM.\n 'footnote',\n 'footnoteReference',\n 'image',\n 'imageReference',\n 'inlineCode',\n // Enabled by `mdast-util-math`:\n 'inlineMath',\n 'link',\n 'linkReference',\n // Enabled by `mdast-util-mdx`:\n 'mdxJsxTextElement',\n // Enabled by `mdast-util-mdx`:\n 'mdxTextExpression',\n 'strong',\n 'text',\n // Enabled by `mdast-util-directive`:\n 'textDirective'\n ])\n )\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Root} from 'mdast'\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n // Note: `html` nodes are ambiguous.\n const hasPhrasing = node.children.some(function (d) {\n return phrasing(d)\n })\n\n const container = hasPhrasing ? state.containerPhrasing : state.containerFlow\n return container.call(state, node, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkStrong(state) {\n const marker = state.options.strong || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize strong with `' +\n marker +\n '` for `options.strong`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Strong} from 'mdast'\n */\n\nimport {checkStrong} from '../util/check-strong.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nstrong.peek = strongPeek\n\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n const marker = checkStrong(state)\n const exit = state.enter('strong')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker + marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker + marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n return state.options.strong || '*'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Text} from 'mdast'\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n return state.safe(node.value, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3\n\n if (repetition < 3) {\n throw new Error(\n 'Cannot serialize rules with repetition `' +\n repetition +\n '` for `options.ruleRepetition`, expected `3` or more'\n )\n }\n\n return repetition\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Parents, ThematicBreak} from 'mdast'\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n const value = (\n checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n ).repeat(checkRuleRepetition(state))\n\n return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n blockquote,\n break: hardBreak,\n code,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text,\n thematicBreak\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').TableRow} TableRow\n *\n * @typedef {import('markdown-table').Options} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').State} State\n * @typedef {import('mdast-util-to-markdown').Info} Info\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n * Whether to add a space of padding between delimiters and cells (default:\n * `true`).\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n * Whether to align the delimiters (default: `true`).\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n * Function to detect the length of table cell content, used when aligning\n * the delimiters between cells (optional).\n */\n\nimport {ok as assert} from 'devlop'\nimport {markdownTable} from 'markdown-table'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM tables in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM tables.\n */\nexport function gfmTableFromMarkdown() {\n return {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n const align = token._align\n assert(align, 'expected `_align` on table')\n this.enter(\n {\n type: 'table',\n align: align.map(function (d) {\n return d === 'none' ? null : d\n }),\n children: []\n },\n token\n )\n this.data.inTable = true\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n this.exit(token)\n this.data.inTable = undefined\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n let value = this.resume()\n\n if (this.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace)\n }\n\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'inlineCode')\n node.value = value\n this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n // Pipes work, backslashes don’t (but can’t escape pipes).\n return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n const settings = options || {}\n const padding = settings.tableCellPadding\n const alignDelimiters = settings.tablePipeAlign\n const stringLength = settings.stringLength\n const around = padding ? ' ' : '|'\n\n return {\n unsafe: [\n {character: '\\r', inConstruct: 'tableCell'},\n {character: '\\n', inConstruct: 'tableCell'},\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n {atBreak: true, character: '|', after: '[\\t :-]'},\n // A pipe in a cell must be encoded.\n {character: '|', inConstruct: 'tableCell'},\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n {atBreak: true, character: ':', after: '-'},\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // \n {atBreak: true, character: '-', after: '[:|-]'}\n ],\n handlers: {\n inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {Table} node\n */\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align)\n }\n\n /**\n * This function isn’t really used normally, because we handle rows at the\n * table level.\n * But, if someone passes in a table row, this ensures we make somewhat sense.\n *\n * @type {ToMarkdownHandle}\n * @param {TableRow} node\n */\n function handleTableRow(node, _, state, info) {\n const row = handleTableRowAsData(node, state, info)\n const value = serializeData([row])\n // `markdown-table` will always add an align row\n return value.slice(0, value.indexOf('\\n'))\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {TableCell} node\n */\n function handleTableCell(node, _, state, info) {\n const exit = state.enter('tableCell')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...info,\n before: around,\n after: around\n })\n subexit()\n exit()\n return value\n }\n\n /**\n * @param {Array>} matrix\n * @param {Array | null | undefined} [align]\n */\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n })\n }\n\n /**\n * @param {Table} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array>} */\n const result = []\n const subexit = state.enter('table')\n\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @param {TableRow} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableRowAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array} */\n const result = []\n const subexit = state.enter('tableRow')\n\n while (++index < children.length) {\n // Note: the positional info as used here is incorrect.\n // Making it correct would be impossible due to aligning cells?\n // And it would need copy/pasting `markdown-table` into this project.\n result[index] = handleTableCell(children[index], node, state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {InlineCode} node\n */\n function inlineCodeWithTable(node, parent, state) {\n let value = defaultHandlers.inlineCode(node, parent, state)\n\n if (state.stack.includes('tableCell')) {\n value = value.replace(/\\|/g, '\\\\$&')\n }\n\n return value\n }\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {ok as assert} from 'devlop'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM task\n * list items in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM task list\n * items in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n handlers: {listItem: listItemWithTaskListItem}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n // We’re always in a paragraph, in a list item.\n const node = this.stack[this.stack.length - 2]\n assert(node.type === 'listItem')\n node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2]\n\n if (\n parent &&\n parent.type === 'listItem' &&\n typeof parent.checked === 'boolean'\n ) {\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'paragraph')\n const head = node.children[0]\n\n if (head && head.type === 'text') {\n const siblings = parent.children\n let index = -1\n /** @type {Paragraph | undefined} */\n let firstParaghraph\n\n while (++index < siblings.length) {\n const sibling = siblings[index]\n if (sibling.type === 'paragraph') {\n firstParaghraph = sibling\n break\n }\n }\n\n if (firstParaghraph === node) {\n // Must start with a space or a tab.\n head.value = head.value.slice(1)\n\n if (head.value.length === 0) {\n node.children.shift()\n } else if (\n node.position &&\n head.position &&\n typeof head.position.start.offset === 'number'\n ) {\n head.position.start.column++\n head.position.start.offset++\n node.position.start = Object.assign({}, head.position.start)\n }\n }\n }\n }\n\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, state, info) {\n const head = node.children[0]\n const checkable =\n typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n const tracker = state.createTracker(info)\n\n if (checkable) {\n tracker.move(checkbox)\n }\n\n let value = defaultHandlers.listItem(node, parent, state, {\n ...info,\n ...tracker.current()\n })\n\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n }\n\n return value\n\n /**\n * @param {string} $0\n * @returns {string}\n */\n function check($0) {\n return $0 + checkbox\n }\n}\n","/**\n * @import {Extension as FromMarkdownExtension} from 'mdast-util-from-markdown'\n * @import {Options} from 'mdast-util-gfm'\n * @import {Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n */\n\nimport {\n gfmAutolinkLiteralFromMarkdown,\n gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n gfmFootnoteFromMarkdown,\n gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n gfmStrikethroughFromMarkdown,\n gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n gfmTaskListItemFromMarkdown,\n gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array}\n * Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown(),\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown(),\n gfmTableFromMarkdown(),\n gfmTaskListItemFromMarkdown()\n ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown(),\n gfmFootnoteToMarkdown(options),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n }\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array} list\n * List to operate on.\n * @param {number} start\n * Index to remove/insert at (can be negative).\n * @param {number} remove\n * Number of items to remove.\n * @param {Array} items\n * Items to inject into `list`.\n * @returns {undefined}\n * Nothing.\n */\nexport function splice(list, start, remove, items) {\n const end = list.length;\n let chunkStart = 0;\n /** @type {Array} */\n let parameters;\n\n // Make start between zero and `end` (included).\n if (start < 0) {\n start = -start > end ? 0 : end + start;\n } else {\n start = start > end ? end : start;\n }\n remove = remove > 0 ? remove : 0;\n\n // No need to chunk the items if there’s only a couple (10k) items.\n if (items.length < 10000) {\n parameters = Array.from(items);\n parameters.unshift(start, remove);\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters);\n } else {\n // Delete `remove` items starting from `start`\n if (remove) list.splice(start, remove);\n\n // Insert the items in chunks to not cause stack overflows.\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 10000);\n parameters.unshift(start, 0);\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters);\n chunkStart += 10000;\n start += 10000;\n }\n }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array} list\n * List to operate on.\n * @param {Array} items\n * Items to add to `list`.\n * @returns {Array}\n * Either `list` or `items`.\n */\nexport function push(list, items) {\n if (list.length > 0) {\n splice(list, list.length, 0, items);\n return list;\n }\n return items;\n}","/**\n * @import {\n * Extension,\n * Handles,\n * HtmlExtension,\n * NormalizedExtension\n * } from 'micromark-util-types'\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {ReadonlyArray} extensions\n * List of syntax extensions.\n * @returns {NormalizedExtension}\n * A single combined extension.\n */\nexport function combineExtensions(extensions) {\n /** @type {NormalizedExtension} */\n const all = {}\n let index = -1\n\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index])\n }\n\n return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n * Extension to merge into.\n * @param {Extension} extension\n * Extension to merge.\n * @returns {undefined}\n * Nothing.\n */\nfunction syntaxExtension(all, extension) {\n /** @type {keyof Extension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n /** @type {Record} */\n const left = maybe || (all[hook] = {})\n /** @type {Record | undefined} */\n const right = extension[hook]\n /** @type {string} */\n let code\n\n if (right) {\n for (code in right) {\n if (!hasOwnProperty.call(left, code)) left[code] = []\n const value = right[code]\n constructs(\n // @ts-expect-error Looks like a list.\n left[code],\n Array.isArray(value) ? value : value ? [value] : []\n )\n }\n }\n }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array} existing\n * List of constructs to merge into.\n * @param {Array} list\n * List of constructs to merge.\n * @returns {undefined}\n * Nothing.\n */\nfunction constructs(existing, list) {\n let index = -1\n /** @type {Array} */\n const before = []\n\n while (++index < list.length) {\n // @ts-expect-error Looks like an object.\n ;(list[index].add === 'after' ? existing : before).push(list[index])\n }\n\n splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {ReadonlyArray} htmlExtensions\n * List of HTML extensions.\n * @returns {HtmlExtension}\n * Single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n /** @type {HtmlExtension} */\n const handlers = {}\n let index = -1\n\n while (++index < htmlExtensions.length) {\n htmlExtension(handlers, htmlExtensions[index])\n }\n\n return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n * Extension to merge into.\n * @param {HtmlExtension} extension\n * Extension to merge.\n * @returns {undefined}\n * Nothing.\n */\nfunction htmlExtension(all, extension) {\n /** @type {keyof HtmlExtension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n const left = maybe || (all[hook] = {})\n const right = extension[hook]\n /** @type {keyof Handles} */\n let type\n\n if (right) {\n for (type in right) {\n // @ts-expect-error assume document vs regular handler are managed correctly.\n left[type] = right[type]\n }\n }\n }\n}\n","/**\n * @import {Code, ConstructRecord, Event, Extension, Previous, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiControl, markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n};\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n};\nconst path = {\n tokenize: tokenizePath,\n partial: true\n};\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n};\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n};\nconst wwwAutolink = {\n name: 'wwwAutolink',\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nconst protocolAutolink = {\n name: 'protocolAutolink',\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n};\nconst emailAutolink = {\n name: 'emailAutolink',\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\n\n/** @type {ConstructRecord} */\nconst text = {};\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n return {\n text\n };\n}\n\n/** @type {Code} */\nlet code = 48;\n\n// Add alphanumerics.\nwhile (code < 123) {\n text[code] = emailAutolink;\n code++;\n if (code === 58) code = 65;else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\n\n// To do: perform email autolink literals on events, afterwards.\n// That’s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n const self = this;\n /** @type {boolean | undefined} */\n let dot;\n /** @type {boolean} */\n let data;\n return start;\n\n /**\n * Start of email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (!gfmAtext(code) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkEmail');\n return atext(code);\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function atext(code) {\n if (gfmAtext(code)) {\n effects.consume(code);\n return atext;\n }\n if (code === 64) {\n effects.consume(code);\n return emailDomain;\n }\n return nok(code);\n }\n\n /**\n * In email domain.\n *\n * The reference code is a bit overly complex as it handles the `@`, of which\n * there may be just one.\n * Source: \n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomain(code) {\n // Dot followed by alphanumerical (not `-` or `_`).\n if (code === 46) {\n return effects.check(emailDomainDotTrail, emailDomainAfter, emailDomainDot)(code);\n }\n\n // Alphanumerical, `-`, and `_`.\n if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n data = true;\n effects.consume(code);\n return emailDomain;\n }\n\n // To do: `/` if xmpp.\n\n // Note: normally we’d truncate trailing punctuation from the link.\n // However, email autolink literals cannot contain any of those markers,\n // except for `.`, but that can only occur if it isn’t trailing.\n // So we can ignore truncating!\n return emailDomainAfter(code);\n }\n\n /**\n * In email domain, on dot that is not a trail.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainDot(code) {\n effects.consume(code);\n dot = true;\n return emailDomain;\n }\n\n /**\n * After email domain.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainAfter(code) {\n // Domain must not be empty, must include a dot, and must end in alphabetical.\n // Source: .\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit('literalAutolinkEmail');\n effects.exit('literalAutolink');\n return ok(code);\n }\n return nok(code);\n }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n const self = this;\n return wwwStart;\n\n /**\n * Start of www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwStart(code) {\n if (code !== 87 && code !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkWww');\n // Note: we *check*, so we can discard the `www.` we parsed.\n // If it worked, we consider it as a part of the domain.\n return effects.check(wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok)(code);\n }\n\n /**\n * After a www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwAfter(code) {\n effects.exit('literalAutolinkWww');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n const self = this;\n let buffer = '';\n let seen = false;\n return protocolStart;\n\n /**\n * Start of protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolStart(code) {\n if ((code === 72 || code === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkHttp');\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n return nok(code);\n }\n\n /**\n * In protocol.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^^^^\n * ```\n *\n * @type {State}\n */\n function protocolPrefixInside(code) {\n // `5` is size of `https`\n if (asciiAlpha(code) && buffer.length < 5) {\n // @ts-expect-error: definitely number.\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n if (code === 58) {\n const protocol = buffer.toLowerCase();\n if (protocol === 'http' || protocol === 'https') {\n effects.consume(code);\n return protocolSlashesInside;\n }\n }\n return nok(code);\n }\n\n /**\n * In slashes.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^\n * ```\n *\n * @type {State}\n */\n function protocolSlashesInside(code) {\n if (code === 47) {\n effects.consume(code);\n if (seen) {\n return afterProtocol;\n }\n seen = true;\n return protocolSlashesInside;\n }\n return nok(code);\n }\n\n /**\n * After protocol, before domain.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function afterProtocol(code) {\n // To do: this is different from `markdown-rs`:\n // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n return code === null || asciiControl(code) || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || unicodePunctuation(code) ? nok(code) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code);\n }\n\n /**\n * After a protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolAfter(code) {\n effects.exit('literalAutolinkHttp');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n let size = 0;\n return wwwPrefixInside;\n\n /**\n * In www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixInside(code) {\n if ((code === 87 || code === 119) && size < 3) {\n size++;\n effects.consume(code);\n return wwwPrefixInside;\n }\n if (code === 46 && size === 3) {\n effects.consume(code);\n return wwwPrefixAfter;\n }\n return nok(code);\n }\n\n /**\n * After www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixAfter(code) {\n // If there is *anything*, we can link.\n return code === null ? nok(code) : ok(code);\n }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n /** @type {boolean | undefined} */\n let underscoreInLastSegment;\n /** @type {boolean | undefined} */\n let underscoreInLastLastSegment;\n /** @type {boolean | undefined} */\n let seen;\n return domainInside;\n\n /**\n * In domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^^^^^^^^^^\n * ```\n *\n * @type {State}\n */\n function domainInside(code) {\n // Check whether this marker, which is a trailing punctuation\n // marker, optionally followed by more trailing markers, and then\n // followed by an end.\n if (code === 46 || code === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code);\n }\n\n // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n // so that’s Unicode.\n // Instead of some new production for Unicode alphanumerics, markdown\n // already has that for Unicode punctuation and whitespace, so use those.\n // Source: .\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || code !== 45 && unicodePunctuation(code)) {\n return domainAfter(code);\n }\n seen = true;\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * In domain, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function domainAtPunctuation(code) {\n // There is an underscore in the last segment of the domain\n if (code === 95) {\n underscoreInLastSegment = true;\n }\n // Otherwise, it’s a `.`: save the last segment underscore in the\n // penultimate segment slot.\n else {\n underscoreInLastLastSegment = underscoreInLastSegment;\n underscoreInLastSegment = undefined;\n }\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * After domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^\n * ```\n *\n * @type {State} */\n function domainAfter(code) {\n // Note: that’s GH says a dot is needed, but it’s not true:\n // \n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code);\n }\n return ok(code);\n }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n * ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n let sizeOpen = 0;\n let sizeClose = 0;\n return pathInside;\n\n /**\n * In path.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^\n * ```\n *\n * @type {State}\n */\n function pathInside(code) {\n if (code === 40) {\n sizeOpen++;\n effects.consume(code);\n return pathInside;\n }\n\n // To do: `markdown-rs` also needs this.\n // If this is a paren, and there are less closings than openings,\n // we don’t check for a trail.\n if (code === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code);\n }\n\n // Check whether this trailing punctuation marker is optionally\n // followed by more trailing markers, and then followed\n // by an end.\n if (code === 33 || code === 34 || code === 38 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 60 || code === 63 || code === 93 || code === 95 || code === 126) {\n return effects.check(trail, ok, pathAtPunctuation)(code);\n }\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n effects.consume(code);\n return pathInside;\n }\n\n /**\n * In path, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com/a\"b\n * ^\n * ```\n *\n * @type {State}\n */\n function pathAtPunctuation(code) {\n // Count closing parens.\n if (code === 41) {\n sizeClose++;\n }\n effects.consume(code);\n return pathInside;\n }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n * ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n return trail;\n\n /**\n * In trail of domain or path.\n *\n * ```markdown\n * > | https://example.com\").\n * ^\n * ```\n *\n * @type {State}\n */\n function trail(code) {\n // Regular trailing punctuation.\n if (code === 33 || code === 34 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 63 || code === 95 || code === 126) {\n effects.consume(code);\n return trail;\n }\n\n // `&` followed by one or more alphabeticals and then a `;`, is\n // as a whole considered as trailing punctuation.\n // In all other cases, it is considered as continuation of the URL.\n if (code === 38) {\n effects.consume(code);\n return trailCharacterReferenceStart;\n }\n\n // Needed because we allow literals after `[`, as we fix:\n // .\n // Check that it is not followed by `(` or `[`.\n if (code === 93) {\n effects.consume(code);\n return trailBracketAfter;\n }\n if (\n // `<` is an end.\n code === 60 ||\n // So is whitespace.\n code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return nok(code);\n }\n\n /**\n * In trail, after `]`.\n *\n * > 👉 **Note**: this deviates from `cmark-gfm` to fix a bug.\n * > See end of for more.\n *\n * ```markdown\n * > | https://example.com](\n * ^\n * ```\n *\n * @type {State}\n */\n function trailBracketAfter(code) {\n // Whitespace or something that could start a resource or reference is the end.\n // Switch back to trail otherwise.\n if (code === null || code === 40 || code === 91 || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return trail(code);\n }\n\n /**\n * In character-reference like trail, after `&`.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceStart(code) {\n // When non-alpha, it’s not a trail.\n return asciiAlpha(code) ? trailCharacterReferenceInside(code) : nok(code);\n }\n\n /**\n * In character-reference like trail.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceInside(code) {\n // Switch back to trail if this is well-formed.\n if (code === 59) {\n effects.consume(code);\n return trail;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return trailCharacterReferenceInside;\n }\n\n // It’s not a trail.\n return nok(code);\n }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n return start;\n\n /**\n * Dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Must be dot.\n effects.consume(code);\n return after;\n }\n\n /**\n * After dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Not a trail if alphanumeric.\n return asciiAlphanumeric(code) ? nok(code) : ok(code);\n }\n}\n\n/**\n * See:\n * .\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n return code === null || code === 40 || code === 42 || code === 95 || code === 91 || code === 93 || code === 126 || markdownLineEndingOrSpace(code);\n}\n\n/**\n * See:\n * .\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n return !asciiAlpha(code);\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n // Do not allow a slash “inside” atext.\n // The reference code is a bit weird, but that’s what it results in.\n // Source: .\n // Other than slash, every preceding character is allowed.\n return !(code === 47 || gfmAtext(code));\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n return code === 43 || code === 45 || code === 46 || code === 95 || asciiAlphanumeric(code);\n}\n\n/**\n * @param {Array} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n let index = events.length;\n let result = false;\n while (index--) {\n const token = events[index][1];\n if ((token.type === 'labelLink' || token.type === 'labelImage') && !token._balanced) {\n result = true;\n break;\n }\n\n // If we’ve seen this token, and it was marked as not having any unbalanced\n // bracket before it, we can exit.\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false;\n break;\n }\n }\n if (events.length > 0 && !result) {\n // Mark the last token as “walked into” w/o finding\n // anything.\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n }\n return result;\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n * List of constructs, optionally with `resolveAll`s.\n * @param {Array} events\n * List of events.\n * @param {TokenizeContext} context\n * Context used by `tokenize`.\n * @returns {Array}\n * Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n /** @type {Array} */\n const called = []\n let index = -1\n\n while (++index < constructs.length) {\n const resolve = constructs[index].resolveAll\n\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { markdownSpace } from 'micromark-util-character';\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * spaces in markdown are often optional, in which case this factory can be\n * used and `ok` will be switched to whether spaces were found or not\n * * one line ending or space can be detected with `markdownSpace(code)` right\n * before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {TokenType} type\n * Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n * Max (exclusive).\n * @returns {State}\n * Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n if (markdownSpace(code)) {\n effects.enter(type);\n return prefix(code);\n }\n return ok(code);\n }\n\n /** @type {State} */\n function prefix(code) {\n if (markdownSpace(code) && size++ < limit) {\n effects.consume(code);\n return prefix;\n }\n effects.exit(type);\n return ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n partial: true,\n tokenize: tokenizeBlankLine\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n return start;\n\n /**\n * Start of blank line.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n }\n\n /**\n * At eof/eol, after optional whitespace.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n }\n}","/**\n * @import {Event, Exiter, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { blankLine } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n};\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to\n * enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n /** @type {Extension} */\n return {\n document: {\n [91]: {\n name: 'gfmFootnoteDefinition',\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n name: 'gfmFootnoteCall',\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n name: 'gfmPotentialFootnoteCall',\n add: 'after',\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n };\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {Token} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n const token = self.events[index][1];\n if (token.type === \"labelImage\") {\n labelStart = token;\n break;\n }\n\n // Exit if we’ve walked far enough.\n if (token.type === 'gfmFootnoteCall' || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n break;\n }\n }\n return start;\n\n /**\n * @type {State}\n */\n function start(code) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code);\n }\n const id = normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n }));\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return ok(code);\n }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length;\n /** @type {Token | undefined} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n if (events[index][1].type === \"labelImage\" && events[index][0] === 'enter') {\n labelStart = events[index][1];\n break;\n }\n }\n // Change the `labelImageMarker` to a `data`.\n events[index + 1][1].type = \"data\";\n events[index + 3][1].type = 'gfmFootnoteCallLabelMarker';\n\n // The whole (without `!`):\n /** @type {Token} */\n const call = {\n type: 'gfmFootnoteCall',\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n // The `^` marker\n /** @type {Token} */\n const marker = {\n type: 'gfmFootnoteCallMarker',\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n };\n // Increment the end 1 character.\n marker.end.column++;\n marker.end.offset++;\n marker.end._bufferIndex++;\n /** @type {Token} */\n const string = {\n type: 'gfmFootnoteCallString',\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n };\n /** @type {Token} */\n const chunk = {\n type: \"chunkString\",\n contentType: 'string',\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n };\n\n /** @type {Array} */\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1], events[index + 2], ['enter', call, context],\n // The `[`\n events[index + 3], events[index + 4],\n // The `^`.\n ['enter', marker, context], ['exit', marker, context],\n // Everything in between.\n ['enter', string, context], ['enter', chunk, context], ['exit', chunk, context], ['exit', string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2], events[events.length - 1], ['exit', call, context]];\n events.splice(index, events.length - index + 1, ...replacement);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let size = 0;\n /** @type {boolean} */\n let data;\n\n // Note: the implementation of `markdown-rs` is different, because it houses\n // core *and* extensions in one project.\n // Therefore, it can include footnote logic inside `label-end`.\n // We can’t do that, but luckily, we can parse footnotes in a simpler way than\n // needed for labels.\n return start;\n\n /**\n * Start of footnote label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteCall');\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return callStart;\n }\n\n /**\n * After `[`, at `^`.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callStart(code) {\n if (code !== 94) return nok(code);\n effects.enter('gfmFootnoteCallMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallMarker');\n effects.enter('gfmFootnoteCallString');\n effects.enter('chunkString').contentType = 'string';\n return callData;\n }\n\n /**\n * In label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callData(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteCallString');\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n effects.exit('gfmFootnoteCall');\n return ok;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? callEscape : callData;\n }\n\n /**\n * On character after escape.\n *\n * ```markdown\n * > | a [^b\\c] d\n * ^\n * ```\n *\n * @type {State}\n */\n function callEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return callData;\n }\n return callData(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {string} */\n let identifier;\n let size = 0;\n /** @type {boolean | undefined} */\n let data;\n return start;\n\n /**\n * Start of GFM footnote definition.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteDefinition')._container = true;\n effects.enter('gfmFootnoteDefinitionLabel');\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n return labelAtMarker;\n }\n\n /**\n * In label, at caret.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAtMarker(code) {\n if (code === 94) {\n effects.enter('gfmFootnoteDefinitionMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionMarker');\n effects.enter('gfmFootnoteDefinitionLabelString');\n effects.enter('chunkString').contentType = 'string';\n return labelInside;\n }\n return nok(code);\n }\n\n /**\n * In label.\n *\n * > 👉 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n * > definition labels.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteDefinitionLabelString');\n identifier = normalizeIdentifier(self.sliceSerialize(token));\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n effects.exit('gfmFootnoteDefinitionLabel');\n return labelAfter;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? labelEscape : labelInside;\n }\n\n /**\n * After `\\`, at a special character.\n *\n * > 👉 **Note**: `cmark-gfm` currently does not support escaped brackets:\n * > \n *\n * ```markdown\n * > | [^a\\*b]: c\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return labelInside;\n }\n return labelInside(code);\n }\n\n /**\n * After definition label.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n if (code === 58) {\n effects.enter('definitionMarker');\n effects.consume(code);\n effects.exit('definitionMarker');\n if (!defined.includes(identifier)) {\n defined.push(identifier);\n }\n\n // Any whitespace after the marker is eaten, forming indented code\n // is not possible.\n // No space is also fine, just like a block quote marker.\n return factorySpace(effects, whitespaceAfter, 'gfmFootnoteDefinitionWhitespace');\n }\n return nok(code);\n }\n\n /**\n * After definition prefix.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function whitespaceAfter(code) {\n // `markdown-rs` has a wrapping token for the prefix that is closed here.\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n /// Start of footnote definition continuation.\n ///\n /// ```markdown\n /// | [^a]: b\n /// > | c\n /// ^\n /// ```\n //\n // Either a blank line, which is okay, or an indented thing.\n return effects.check(blankLine, ok, effects.attempt(indent, ok, nok));\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit('gfmFootnoteDefinition');\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, 'gfmFootnoteDefinitionIndent', 4 + 1);\n\n /**\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === 'gfmFootnoteDefinitionIndent' && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok(code) : nok(code);\n }\n}","/**\n * @import {Options} from 'micromark-extension-gfm-strikethrough'\n * @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options={}]\n * Configuration.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions`, to\n * enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n const options_ = options || {};\n let single = options_.singleTilde;\n const tokenizer = {\n name: 'strikethrough',\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n };\n if (single === null || single === undefined) {\n single = true;\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n };\n\n /**\n * Take events and resolve strikethrough.\n *\n * @type {Resolver}\n */\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n\n // Walk through all events.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {\n let open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&\n // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n events[index][1].type = 'strikethroughSequence';\n events[open][1].type = 'strikethroughSequence';\n\n /** @type {Token} */\n const strikethrough = {\n type: 'strikethrough',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n\n /** @type {Token} */\n const text = {\n type: 'strikethroughText',\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n\n // Opening.\n /** @type {Array} */\n const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n // Between.\n splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));\n }\n\n // Closing.\n splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'strikethroughSequenceTemporary') {\n events[index][1].type = \"data\";\n }\n }\n return events;\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeStrikethrough(effects, ok, nok) {\n const previous = this.previous;\n const events = this.events;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n if (previous === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n return nok(code);\n }\n effects.enter('strikethroughSequenceTemporary');\n return more(code);\n }\n\n /** @type {State} */\n function more(code) {\n const before = classifyCharacter(previous);\n if (code === 126) {\n // If this is the third marker, exit.\n if (size > 1) return nok(code);\n effects.consume(code);\n size++;\n return more;\n }\n if (size < 2 && !single) return nok(code);\n const token = effects.exit('strikethroughSequenceTemporary');\n const after = classifyCharacter(code);\n token._open = !after || after === 2 && Boolean(before);\n token._close = !before || before === 2 && Boolean(after);\n return ok(code);\n }\n }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it’s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it’s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n /**\n * Record of changes.\n *\n * @type {Array}\n */\n this.map = [];\n }\n\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array} add\n * @returns {undefined}\n */\n add(index, remove, add) {\n addImplementation(this, index, remove, add);\n }\n\n // To do: add this when moving to `micromark`.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array} add\n // * @returns {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImplementation(this, index, remove, add, true)\n // }\n\n /**\n * Done, change the events.\n *\n * @param {Array} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function (a, b) {\n return a[0] - b[0];\n });\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (this.map.length === 0) {\n return;\n }\n\n // To do: if links are added in events, like they are in `markdown-rs`,\n // this is needed.\n // // Calculate jumps: where items in the current list move to.\n // /** @type {Array} */\n // const jumps = []\n // let index = 0\n // let addAcc = 0\n // let removeAcc = 0\n // while (index < this.map.length) {\n // const [at, remove, add] = this.map[index]\n // removeAcc += remove\n // addAcc += add.length\n // jumps.push([at, removeAcc, addAcc])\n // index += 1\n // }\n //\n // . shiftLinks(events, jumps)\n\n let index = this.map.length;\n /** @type {Array>} */\n const vecs = [];\n while (index > 0) {\n index -= 1;\n vecs.push(events.slice(this.map[index][0] + this.map[index][1]), this.map[index][2]);\n\n // Truncate rest.\n events.length = this.map[index][0];\n }\n vecs.push(events.slice());\n events.length = 0;\n let slice = vecs.pop();\n while (slice) {\n for (const element of slice) {\n events.push(element);\n }\n slice = vecs.pop();\n }\n\n // Truncate everything.\n this.map.length = 0;\n }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array} add\n * @returns {undefined}\n */\nfunction addImplementation(editMap, at, remove, add) {\n let index = 0;\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (remove === 0 && add.length === 0) {\n return;\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove;\n\n // To do: before not used by tables, use when moving to micromark.\n // if (before) {\n // add.push(...editMap.map[index][2])\n // editMap.map[index][2] = add\n // } else {\n editMap.map[index][2].push(...add);\n // }\n\n return;\n }\n index += 1;\n }\n editMap.map.push([at, remove, add]);\n}\n\n// /**\n// * Shift `previous` and `next` links according to `jumps`.\n// *\n// * This fixes links in case there are events removed or added between them.\n// *\n// * @param {Array} events\n// * @param {Array} jumps\n// */\n// function shiftLinks(events, jumps) {\n// let jumpIndex = 0\n// let index = 0\n// let add = 0\n// let rm = 0\n\n// while (index < events.length) {\n// const rmCurr = rm\n\n// while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n// add = jumps[jumpIndex][2]\n// rm = jumps[jumpIndex][1]\n// jumpIndex += 1\n// }\n\n// // Ignore items that will be removed.\n// if (rm > rmCurr) {\n// index += rm - rmCurr\n// } else {\n// // ?\n// // if let Some(link) = &events[index].link {\n// // if let Some(next) = link.next {\n// // events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n// // while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n// // add = jumps[jumpIndex].2;\n// // rm = jumps[jumpIndex].1;\n// // jumpIndex += 1;\n// // }\n// // events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n// // index = next;\n// // continue;\n// // }\n// // }\n// index += 1\n// }\n// }\n// }","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly>} events\n * List of events.\n * @param {number} index\n * Table enter event.\n * @returns {Array}\n * List of aligns.\n */\nexport function gfmTableAlign(events, index) {\n let inDelimiterRow = false;\n /** @type {Array} */\n const align = [];\n while (index < events.length) {\n const event = events[index];\n if (inDelimiterRow) {\n if (event[0] === 'enter') {\n // Start of alignment value: set a new column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n if (event[1].type === 'tableContent') {\n align.push(events[index + 1][1].type === 'tableDelimiterMarker' ? 'left' : 'none');\n }\n }\n // Exits:\n // End of alignment value: change the column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n else if (event[1].type === 'tableContent') {\n if (events[index - 1][1].type === 'tableDelimiterMarker') {\n const alignIndex = align.length - 1;\n align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right';\n }\n }\n // Done!\n else if (event[1].type === 'tableDelimiterRow') {\n break;\n }\n } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n inDelimiterRow = true;\n }\n index += 1;\n }\n return align;\n}","/**\n * @import {Event, Extension, Point, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n * Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n * Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { EditMap } from './edit-map.js';\nimport { gfmTableAlign } from './infer.js';\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * table syntax.\n */\nexport function gfmTable() {\n return {\n flow: {\n null: {\n name: 'table',\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n const self = this;\n let size = 0;\n let sizeB = 0;\n /** @type {boolean | undefined} */\n let seen;\n return start;\n\n /**\n * Start of a GFM table.\n *\n * If there is a valid table row or table head before, then we try to parse\n * another row.\n * Otherwise, we try to parse a head.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * > | | b |\n * ^\n * ```\n * @type {State}\n */\n function start(code) {\n let index = self.events.length - 1;\n while (index > -1) {\n const type = self.events[index][1].type;\n if (type === \"lineEnding\" ||\n // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === \"linePrefix\") index--;else break;\n }\n const tail = index > -1 ? self.events[index][1].type : null;\n const next = tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore;\n\n // Don’t allow lazy body rows.\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n return next(code);\n }\n\n /**\n * Before table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBefore(code) {\n effects.enter('tableHead');\n effects.enter('tableRow');\n return headRowStart(code);\n }\n\n /**\n * Before table head row, after whitespace.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowStart(code) {\n if (code === 124) {\n return headRowBreak(code);\n }\n\n // To do: micromark-js should let us parse our own whitespace in extensions,\n // like `markdown-rs`:\n //\n // ```js\n // // 4+ spaces.\n // if (markdownSpace(code)) {\n // return nok(code)\n // }\n // ```\n\n seen = true;\n // Count the first character, that isn’t a pipe, double.\n sizeB += 1;\n return headRowBreak(code);\n }\n\n /**\n * At break in table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * ^\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBreak(code) {\n if (code === null) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n // If anything other than one pipe (ignoring whitespace) was used, it’s fine.\n if (sizeB > 1) {\n sizeB = 0;\n // To do: check if this works.\n // Feel free to interrupt:\n self.interrupt = true;\n effects.exit('tableRow');\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return headDelimiterStart;\n }\n\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownSpace(code)) {\n // To do: check if this is fine.\n // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n // State::Retry(space_or_tab(tokenizer))\n return factorySpace(effects, headRowBreak, \"whitespace\")(code);\n }\n sizeB += 1;\n if (seen) {\n seen = false;\n // Header cell count.\n size += 1;\n }\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n // Whether a delimiter was seen.\n seen = true;\n return headRowBreak;\n }\n\n // Anything else is cell data.\n effects.enter(\"data\");\n return headRowData(code);\n }\n\n /**\n * In table head row data.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return headRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? headRowEscape : headRowData;\n }\n\n /**\n * In table head row escape.\n *\n * ```markdown\n * > | | a\\-b |\n * ^\n * | | ---- |\n * | | c |\n * ```\n *\n * @type {State}\n */\n function headRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return headRowData;\n }\n return headRowData(code);\n }\n\n /**\n * Before delimiter row.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterStart(code) {\n // Reset `interrupt`.\n self.interrupt = false;\n\n // Note: in `markdown-rs`, we need to handle piercing here too.\n if (self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n effects.enter('tableDelimiterRow');\n // Track if we’ve seen a `:` or `|`.\n seen = false;\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n return headDelimiterBefore(code);\n }\n\n /**\n * Before delimiter row, after optional whitespace.\n *\n * Reused when a `|` is found later, to parse another cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterBefore(code) {\n if (code === 45 || code === 58) {\n return headDelimiterValueBefore(code);\n }\n if (code === 124) {\n seen = true;\n // If we start with a pipe, we open a cell marker.\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return headDelimiterCellBefore;\n }\n\n // More whitespace / empty row not allowed at start.\n return headDelimiterNok(code);\n }\n\n /**\n * After `|`, before delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellBefore(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code);\n }\n return headDelimiterValueBefore(code);\n }\n\n /**\n * Before delimiter cell value.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterValueBefore(code) {\n // Align: left.\n if (code === 58) {\n sizeB += 1;\n seen = true;\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterLeftAlignmentAfter;\n }\n\n // Align: none.\n if (code === 45) {\n sizeB += 1;\n // To do: seems weird that this *isn’t* left aligned, but that state is used?\n return headDelimiterLeftAlignmentAfter(code);\n }\n if (code === null || markdownLineEnding(code)) {\n return headDelimiterCellAfter(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * After delimiter cell left alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | :- |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterLeftAlignmentAfter(code) {\n if (code === 45) {\n effects.enter('tableDelimiterFiller');\n return headDelimiterFiller(code);\n }\n\n // Anything else is not ok after the left-align colon.\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter cell filler.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterFiller(code) {\n if (code === 45) {\n effects.consume(code);\n return headDelimiterFiller;\n }\n\n // Align is `center` if it was `left`, `right` otherwise.\n if (code === 58) {\n seen = true;\n effects.exit('tableDelimiterFiller');\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterRightAlignmentAfter;\n }\n effects.exit('tableDelimiterFiller');\n return headDelimiterRightAlignmentAfter(code);\n }\n\n /**\n * After delimiter cell right alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterRightAlignmentAfter(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code);\n }\n return headDelimiterCellAfter(code);\n }\n\n /**\n * After delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellAfter(code) {\n if (code === 124) {\n return headDelimiterBefore(code);\n }\n if (code === null || markdownLineEnding(code)) {\n // Exit when:\n // * there was no `:` or `|` at all (it’s a thematic break or setext\n // underline instead)\n // * the header cell count is not the delimiter cell count\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code);\n }\n\n // Note: in markdown-rs`, a reset is needed here.\n effects.exit('tableDelimiterRow');\n effects.exit('tableHead');\n // To do: in `markdown-rs`, resolvers need to be registered manually.\n // effects.register_resolver(ResolveName::GfmTable)\n return ok(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter row, at a disallowed byte.\n *\n * ```markdown\n * | | a |\n * > | | x |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterNok(code) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n\n /**\n * Before table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowStart(code) {\n // Note: in `markdown-rs` we need to manually take care of a prefix,\n // but in `micromark-js` that is done for us, so if we’re here, we’re\n // never at whitespace.\n effects.enter('tableRow');\n return bodyRowBreak(code);\n }\n\n /**\n * At break in table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ^\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowBreak(code) {\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return bodyRowBreak;\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit('tableRow');\n return ok(code);\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, bodyRowBreak, \"whitespace\")(code);\n }\n\n // Anything else is cell content.\n effects.enter(\"data\");\n return bodyRowData(code);\n }\n\n /**\n * In table body row data.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return bodyRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? bodyRowEscape : bodyRowData;\n }\n\n /**\n * In table body row escape.\n *\n * ```markdown\n * | | a |\n * | | ---- |\n * > | | b\\-c |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return bodyRowData;\n }\n return bodyRowData(code);\n }\n}\n\n/** @type {Resolver} */\n\nfunction resolveTable(events, context) {\n let index = -1;\n let inFirstCellAwaitingPipe = true;\n /** @type {RowKind} */\n let rowKind = 0;\n /** @type {Range} */\n let lastCell = [0, 0, 0, 0];\n /** @type {Range} */\n let cell = [0, 0, 0, 0];\n let afterHeadAwaitingFirstBodyRow = false;\n let lastTableEnd = 0;\n /** @type {Token | undefined} */\n let currentTable;\n /** @type {Token | undefined} */\n let currentBody;\n /** @type {Token | undefined} */\n let currentCell;\n const map = new EditMap();\n while (++index < events.length) {\n const event = events[index];\n const token = event[1];\n if (event[0] === 'enter') {\n // Start of head.\n if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = false;\n\n // Inject previous (body end and) table end.\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n currentBody = undefined;\n lastTableEnd = 0;\n }\n\n // Inject table start.\n currentTable = {\n type: 'table',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentTable, context]]);\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n inFirstCellAwaitingPipe = true;\n currentCell = undefined;\n lastCell = [0, 0, 0, 0];\n cell = [0, index + 1, 0, 0];\n\n // Inject table body start.\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false;\n currentBody = {\n type: 'tableBody',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentBody, context]]);\n }\n rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1;\n }\n // Cell data.\n else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n inFirstCellAwaitingPipe = false;\n\n // First value in cell.\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n lastCell = [0, 0, 0, 0];\n }\n cell[2] = index;\n }\n } else if (token.type === 'tableCellDivider') {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false;\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n }\n lastCell = cell;\n cell = [lastCell[1], index, 0, 0];\n }\n }\n }\n // Exit events.\n else if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = true;\n lastTableEnd = index;\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n lastTableEnd = index;\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, index, currentCell);\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map, context, cell, rowKind, index, currentCell);\n }\n rowKind = 0;\n } else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n cell[3] = index;\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n }\n map.consume(context.events);\n\n // To do: move this into `html`, when events are exposed there.\n // That’s what `markdown-rs` does.\n // That needs updates to `mdast-util-gfm-table`.\n index = -1;\n while (++index < context.events.length) {\n const event = context.events[index];\n if (event[0] === 'enter' && event[1].type === 'table') {\n event[1]._align = gfmTableAlign(context.events, index);\n }\n }\n return events;\n}\n\n/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly} context\n * @param {Readonly} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n const groupName = rowKind === 1 ? 'tableHeader' : rowKind === 2 ? 'tableDelimiter' : 'tableData';\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n const valueName = 'tableContent';\n\n // Insert an exit for the previous cell, if there is one.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n map.add(range[0], 0, [['exit', previousCell, context]]);\n }\n\n // Insert enter of this cell.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^^^^-- this cell\n // ```\n const now = getPoint(context.events, range[1]);\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n };\n map.add(range[1], 0, [['enter', previousCell, context]]);\n\n // Insert text start at first data start and end at last data end, and\n // remove events between.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2]);\n const relatedEnd = getPoint(context.events, range[3]);\n /** @type {Token} */\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n };\n map.add(range[2], 0, [['enter', valueToken, context]]);\n if (rowKind !== 2) {\n // Fix positional info on remaining events\n const start = context.events[range[2]];\n const end = context.events[range[3]];\n start[1].end = Object.assign({}, end[1].end);\n start[1].type = \"chunkText\";\n start[1].contentType = \"text\";\n\n // Remove if needed.\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1;\n const b = range[3] - range[2] - 1;\n map.add(a, b, []);\n }\n }\n map.add(range[3] + 1, 0, [['exit', valueToken, context]]);\n }\n\n // Insert an exit for the last cell, if at the row end.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^^^-- this cell (the last one contains two “between” parts)\n // ```\n if (rowEnd !== undefined) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n map.add(rowEnd, 0, [['exit', previousCell, context]]);\n previousCell = undefined;\n }\n return previousCell;\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {Readonly} map\n * @param {Readonly} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n /** @type {Array} */\n const exits = [];\n const related = getPoint(context.events, index);\n if (tableBody) {\n tableBody.end = Object.assign({}, related);\n exits.push(['exit', tableBody, context]);\n }\n table.end = Object.assign({}, related);\n exits.push(['exit', table, context]);\n map.add(index + 1, 0, exits);\n}\n\n/**\n * @param {Readonly>} events\n * @param {number} index\n * @returns {Readonly}\n */\nfunction getPoint(events, index) {\n const event = events[index];\n const side = event[0] === 'enter' ? 'start' : 'end';\n return event[1][side];\n}","/**\n * @import {Extension, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nconst tasklistCheck = {\n name: 'tasklistCheck',\n tokenize: tokenizeTasklistCheck\n};\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n const self = this;\n return open;\n\n /**\n * At start of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null ||\n // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem) {\n return nok(code);\n }\n effects.enter('taskListCheck');\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n return inside;\n }\n\n /**\n * In task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // Currently we match how GH works in files.\n // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n if (markdownLineEndingOrSpace(code)) {\n effects.enter('taskListCheckValueUnchecked');\n effects.consume(code);\n effects.exit('taskListCheckValueUnchecked');\n return close;\n }\n if (code === 88 || code === 120) {\n effects.enter('taskListCheckValueChecked');\n effects.consume(code);\n effects.exit('taskListCheckValueChecked');\n return close;\n }\n return nok(code);\n }\n\n /**\n * At close of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function close(code) {\n if (code === 93) {\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n effects.exit('taskListCheck');\n return after;\n }\n return nok(code);\n }\n\n /**\n * @type {State}\n */\n function after(code) {\n // EOL in paragraph means there must be something else after it.\n if (markdownLineEnding(code)) {\n return ok(code);\n }\n\n // Space or tab?\n // Check what comes after.\n if (markdownSpace(code)) {\n return effects.check({\n tokenize: spaceThenNonSpace\n }, ok, nok)(code);\n }\n\n // EOF, or non-whitespace, both wrong.\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n return factorySpace(effects, after, \"whitespace\");\n\n /**\n * After whitespace, after task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // EOF means there was nothing, so bad.\n // EOL means there’s content after it, so good.\n // Impossible to have more spaces.\n // Anything else is good.\n return code === null ? nok(code) : ok(code);\n }\n}","/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n combineExtensions,\n combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n gfmAutolinkLiteral,\n gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n gfmStrikethrough,\n gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n gfmTaskListItem,\n gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * syntax.\n */\nexport function gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral(),\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable(),\n gfmTaskListItem()\n ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n return combineHtmlExtensions([\n gfmAutolinkLiteralHtml(),\n gfmFootnoteHtml(options),\n gfmStrikethroughHtml(),\n gfmTableHtml(),\n gfmTagfilterHtml(),\n gfmTaskListItemHtml()\n ])\n}\n","/**\n * @import {Root} from 'mdast'\n * @import {Options} from 'remark-gfm'\n * @import {} from 'remark-parse'\n * @import {} from 'remark-stringify'\n * @import {Processor} from 'unified'\n */\n\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\nimport {gfm} from 'micromark-extension-gfm'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Add support GFM (autolink literals, footnotes, strikethrough, tables,\n * tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkGfm(options) {\n // @ts-expect-error: TS is wrong about `this`.\n // eslint-disable-next-line unicorn/no-this-assignment\n const self = /** @type {Processor} */ (this)\n const settings = options || emptyOptions\n const data = self.data()\n\n const micromarkExtensions =\n data.micromarkExtensions || (data.micromarkExtensions = [])\n const fromMarkdownExtensions =\n data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n const toMarkdownExtensions =\n data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n micromarkExtensions.push(gfm(settings))\n fromMarkdownExtensions.push(gfmFromMarkdown())\n toMarkdownExtensions.push(gfmToMarkdown(settings))\n}\n","// This module is generated by `script/`.\n/* eslint-disable no-control-regex, no-misleading-character-class, no-useless-escape */\nexport const regex = /[\\0-\\x1F!-,\\.\\/:-@\\[-\\^`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u0590\\u05BE\\u05C0\\u05C3\\u05C6\\u05C8-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u060F\\u061B-\\u061F\\u066A-\\u066D\\u06D4\\u06DD\\u06DE\\u06E9\\u06FD\\u06FE\\u0700-\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07F6-\\u07F9\\u07FB\\u07FC\\u07FE\\u07FF\\u082E-\\u083F\\u085C-\\u085F\\u086B-\\u089F\\u08B5\\u08C8-\\u08D2\\u08E2\\u0964\\u0965\\u0970\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09F2-\\u09FB\\u09FD\\u09FF\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF0-\\u0AF8\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B54\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B70\\u0B72-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BF0-\\u0BFF\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5B-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C7F\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0CFF\\u0D0D\\u0D11\\u0D45\\u0D49\\u0D4F-\\u0D53\\u0D58-\\u0D5E\\u0D64\\u0D65\\u0D70-\\u0D79\\u0D80\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DE5\\u0DF0\\u0DF1\\u0DF4-\\u0E00\\u0E3B-\\u0E3F\\u0E4F\\u0E5A-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F17\\u0F1A-\\u0F1F\\u0F2A-\\u0F34\\u0F36\\u0F38\\u0F3A-\\u0F3D\\u0F48\\u0F6D-\\u0F70\\u0F85\\u0F98\\u0FBD-\\u0FC5\\u0FC7-\\u0FFF\\u104A-\\u104F\\u109E\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u1360-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16ED\\u16F9-\\u16FF\\u170D\\u1715-\\u171F\\u1735-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17D4-\\u17D6\\u17D8-\\u17DB\\u17DE\\u17DF\\u17EA-\\u180A\\u180E\\u180F\\u181A-\\u181F\\u1879-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F\\u192C-\\u192F\\u193C-\\u1945\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DA-\\u19FF\\u1A1C-\\u1A1F\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1AA6\\u1AA8-\\u1AAF\\u1AC1-\\u1AFF\\u1B4C-\\u1B4F\\u1B5A-\\u1B6A\\u1B74-\\u1B7F\\u1BF4-\\u1BFF\\u1C38-\\u1C3F\\u1C4A-\\u1C4C\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CCF\\u1CD3\\u1CFB-\\u1CFF\\u1DFA\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u203E\\u2041-\\u2053\\u2055-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u20CF\\u20F1-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u215F\\u2189-\\u24B5\\u24EA-\\u2BFF\\u2C2F\\u2C5F\\u2CE5-\\u2CEA\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E00-\\u2E2E\\u2E30-\\u3004\\u3008-\\u3020\\u3030\\u3036\\u3037\\u303D-\\u3040\\u3097\\u3098\\u309B\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\u9FFD-\\u9FFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA62C-\\uA63F\\uA673\\uA67E\\uA6F2-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7C0\\uA7C1\\uA7CB-\\uA7F4\\uA828-\\uA82B\\uA82D-\\uA83F\\uA874-\\uA87F\\uA8C6-\\uA8CF\\uA8DA-\\uA8DF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA954-\\uA95F\\uA97D-\\uA97F\\uA9C1-\\uA9CE\\uA9DA-\\uA9DF\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A-\\uAA5F\\uAA77-\\uAA79\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAF0\\uAAF1\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABEB\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFDFF\\uFE10-\\uFE1F\\uFE30-\\uFE32\\uFE35-\\uFE4C\\uFE50-\\uFE6F\\uFE75\\uFEFD-\\uFF0F\\uFF1A-\\uFF20\\uFF3B-\\uFF3E\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDD3F\\uDD75-\\uDDFC\\uDDFE-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEDF\\uDEE1-\\uDEFF\\uDF20-\\uDF2C\\uDF4B-\\uDF4F\\uDF7B-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0\\uDFD6-\\uDFFF]|\\uD801[\\uDC9E\\uDC9F\\uDCAA-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE04\\uDE07-\\uDE0B\\uDE14\\uDE18\\uDE36\\uDE37\\uDE3B-\\uDE3E\\uDE40-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE7-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD28-\\uDD2F\\uDD3A-\\uDE7F\\uDEAA\\uDEAD-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF51-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC47-\\uDC65\\uDC70-\\uDC7E\\uDCBB-\\uDCCF\\uDCE9-\\uDCEF\\uDCFA-\\uDCFF\\uDD35\\uDD40-\\uDD43\\uDD48-\\uDD4F\\uDD74\\uDD75\\uDD77-\\uDD7F\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE38-\\uDE3D\\uDE3F-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEEB-\\uDEEF\\uDEFA-\\uDEFF\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A\\uDF45\\uDF46\\uDF49\\uDF4A\\uDF4E\\uDF4F\\uDF51-\\uDF56\\uDF58-\\uDF5C\\uDF64\\uDF65\\uDF6D-\\uDF6F\\uDF75-\\uDFFF]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A-\\uDC5D\\uDC62-\\uDC7F\\uDCC6\\uDCC8-\\uDCCF\\uDCDA-\\uDD7F\\uDDB6\\uDDB7\\uDDC1-\\uDDD7\\uDDDE-\\uDDFF\\uDE41-\\uDE43\\uDE45-\\uDE4F\\uDE5A-\\uDE7F\\uDEB9-\\uDEBF\\uDECA-\\uDEFF\\uDF1B\\uDF1C\\uDF2C-\\uDF2F\\uDF3A-\\uDFFF]|\\uD806[\\uDC3B-\\uDC9F\\uDCEA-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD36\\uDD39\\uDD3A\\uDD44-\\uDD4F\\uDD5A-\\uDD9F\\uDDA8\\uDDA9\\uDDD8\\uDDD9\\uDDE2\\uDDE5-\\uDDFF\\uDE3F-\\uDE46\\uDE48-\\uDE4F\\uDE9A-\\uDE9C\\uDE9E-\\uDEBF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC37\\uDC41-\\uDC4F\\uDC5A-\\uDC71\\uDC90\\uDC91\\uDCA8\\uDCB7-\\uDCFF\\uDD07\\uDD0A\\uDD37-\\uDD39\\uDD3B\\uDD3E\\uDD48-\\uDD4F\\uDD5A-\\uDD5F\\uDD66\\uDD69\\uDD8F\\uDD92\\uDD99-\\uDD9F\\uDDAA-\\uDEDF\\uDEF7-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC6F-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80B\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82B\\uD82D\\uD82E\\uD830-\\uD833\\uD837\\uD839\\uD83D\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDB3F\\uDB41-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F\\uDE6A-\\uDECF\\uDEEE\\uDEEF\\uDEF5-\\uDEFF\\uDF37-\\uDF3F\\uDF44-\\uDF4F\\uDF5A-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4E\\uDF88-\\uDF8E\\uDFA0-\\uDFDF\\uDFE2\\uDFE5-\\uDFEF\\uDFF2-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82C[\\uDD1F-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDC9C\\uDC9F-\\uDFFF]|\\uD834[\\uDC00-\\uDD64\\uDD6A-\\uDD6C\\uDD73-\\uDD7A\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDE41\\uDE45-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC\\uDFCD]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85-\\uDE9A\\uDEA0\\uDEB0-\\uDFFF]|\\uD838[\\uDC07\\uDC19\\uDC1A\\uDC22\\uDC25\\uDC2B-\\uDCFF\\uDD2D-\\uDD2F\\uDD3E\\uDD3F\\uDD4A-\\uDD4D\\uDD4F-\\uDEBF\\uDEFA-\\uDFFF]|\\uD83A[\\uDCC5-\\uDCCF\\uDCD7-\\uDCFF\\uDD4C-\\uDD4F\\uDD5A-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD83C[\\uDC00-\\uDD2F\\uDD4A-\\uDD4F\\uDD6A-\\uDD6F\\uDD8A-\\uDFFF]|\\uD83E[\\uDC00-\\uDFEF\\uDFFA-\\uDFFF]|\\uD869[\\uDEDE-\\uDEFF]|\\uD86D[\\uDF35-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|\\uDB40[\\uDC00-\\uDCFF\\uDDF0-\\uDFFF]/g\n","import { regex } from './regex.js'\n\nconst own = Object.hasOwnProperty\n\n/**\n * Slugger.\n */\nexport default class BananaSlug {\n /**\n * Create a new slug class.\n */\n constructor () {\n /** @type {Record} */\n // eslint-disable-next-line no-unused-expressions\n this.occurrences\n\n this.reset()\n }\n\n /**\n * Generate a unique slug.\n *\n * Tracks previously generated slugs: repeated calls with the same value\n * will result in different slugs.\n * Use the `slug` function to get same slugs.\n *\n * @param {string} value\n * String of text to slugify\n * @param {boolean} [maintainCase=false]\n * Keep the current case, otherwise make all lowercase\n * @return {string}\n * A unique slug string\n */\n slug (value, maintainCase) {\n const self = this\n let result = slug(value, maintainCase === true)\n const originalSlug = result\n\n while (own.call(self.occurrences, result)) {\n self.occurrences[originalSlug]++\n result = originalSlug + '-' + self.occurrences[originalSlug]\n }\n\n self.occurrences[result] = 0\n\n return result\n }\n\n /**\n * Reset - Forget all previous slugs\n *\n * @return void\n */\n reset () {\n this.occurrences = Object.create(null)\n }\n}\n\n/**\n * Generate a slug.\n *\n * Does not track previously generated slugs: repeated calls with the same value\n * will result in the exact same slug.\n * Use the `GithubSlugger` class to get unique slugs.\n *\n * @param {string} value\n * String of text to slugify\n * @param {boolean} [maintainCase=false]\n * Keep the current case, otherwise make all lowercase\n * @return {string}\n * A unique slug string\n */\nexport function slug (value, maintainCase) {\n if (typeof value !== 'string') return ''\n if (!maintainCase) value = value.toLowerCase()\n return value.replace(regex, '').replace(/ /g, '-')\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n/**\n * Get the rank (`1` to `6`) of headings (`h1` to `h6`).\n *\n * @param {Nodes} node\n * Node to check.\n * @returns {number | undefined}\n * Rank of the heading or `undefined` if not a heading.\n */\nexport function headingRank(node) {\n const name = node.type === 'element' ? node.tagName.toLowerCase() : ''\n const code =\n name.length === 2 && name.charCodeAt(0) === 104 /* `h` */\n ? name.charCodeAt(1)\n : 0\n return code > 48 /* `0` */ && code < 55 /* `7` */\n ? code - 48 /* `0` */\n : undefined\n}\n","/**\n * @import {Nodes, Parents} from 'hast'\n */\n\n/**\n * Get the plain-text value of a hast node.\n *\n * @param {Nodes} node\n * Node to serialize.\n * @returns {string}\n * Serialized node.\n */\nexport function toString(node) {\n // “The concatenation of data of all the Text node descendants of the context\n // object, in tree order.”\n if ('children' in node) {\n return all(node)\n }\n\n // “Context object’s data.”\n return 'value' in node ? node.value : ''\n}\n\n/**\n * @param {Nodes} node\n * Node.\n * @returns {string}\n * Serialized node.\n */\nfunction one(node) {\n if (node.type === 'text') {\n return node.value\n }\n\n return 'children' in node ? all(node) : ''\n}\n\n/**\n * @param {Parents} node\n * Node.\n * @returns {string}\n * Serialized node.\n */\nfunction all(node) {\n let index = -1\n /** @type {Array} */\n const result = []\n\n while (++index < node.children.length) {\n result[index] = one(node.children[index])\n }\n\n return result.join('')\n}\n","/**\n * @typedef {import('hast').Root} Root\n */\n\n/**\n * @typedef Options\n * Configuration (optional).\n * @property {string} [prefix='']\n * Prefix to add in front of `id`s (default: `''`).\n */\n\nimport GithubSlugger from 'github-slugger'\nimport {headingRank} from 'hast-util-heading-rank'\nimport {toString} from 'hast-util-to-string'\nimport {visit} from 'unist-util-visit'\n\n/** @type {Options} */\nconst emptyOptions = {}\nconst slugs = new GithubSlugger()\n\n/**\n * Add `id`s to headings.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns\n * Transform.\n */\nexport default function rehypeSlug(options) {\n const settings = options || emptyOptions\n const prefix = settings.prefix || ''\n\n /**\n * @param {Root} tree\n * Tree.\n * @returns {undefined}\n * Nothing.\n */\n return function (tree) {\n slugs.reset()\n\n visit(tree, 'element', function (node) {\n if (headingRank(node) && !node.properties.id) {\n node.properties.id = prefix + slugs.slug(toString(node))\n }\n })\n }\n}\n","import type { PluggableList, Plugin } from \"unified\";\nimport type { Root as MdastRoot } from \"mdast\";\nimport type { Root as HastRoot, Element } from \"hast\";\nimport type { VFile } from \"vfile\";\nimport remarkGfm from \"remark-gfm\";\nimport rehypeSlug from \"rehype-slug\";\nimport { findAndReplace } from \"mdast-util-find-and-replace\";\nimport { visit } from \"unist-util-visit\";\nimport type { QuartzTransformerPlugin, BuildCtx } from \"@quartz-community/types\";\nimport type { ExampleTransformerOptions } from \"./types\";\n\nconst defaultOptions: ExampleTransformerOptions = {\n highlightToken: \"==\",\n headingClass: \"example-plugin-heading\",\n enableGfm: true,\n addHeadingSlugs: true,\n};\n\nconst escapeRegExp = (value: string) => value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\nconst remarkHighlightToken = (token: string): Plugin<[], MdastRoot> => {\n const escapedToken = escapeRegExp(token);\n const pattern = new RegExp(`${escapedToken}([^\\n]+?)${escapedToken}`, \"g\");\n return () => (tree: MdastRoot, _file: VFile) => {\n findAndReplace(tree, [\n [\n pattern,\n (_match: string, value: string) => ({\n type: \"strong\",\n children: [{ type: \"text\", value }],\n }),\n ],\n ]);\n };\n};\n\nconst rehypeHeadingClass = (className: string): Plugin<[], HastRoot> => {\n return () => (tree: HastRoot, _file: VFile) => {\n visit(tree, \"element\", (node: Element) => {\n if (!/^h[1-6]$/.test(node.tagName)) {\n return;\n }\n\n const existing = node.properties?.className;\n const classes: string[] = Array.isArray(existing)\n ? existing.filter((value): value is string => typeof value === \"string\")\n : typeof existing === \"string\"\n ? [existing]\n : [];\n node.properties = {\n ...node.properties,\n className: [...classes, className],\n };\n });\n };\n};\n\n/**\n * Example transformer showing remark/rehype usage and resource injection.\n */\nexport const ExampleTransformer: QuartzTransformerPlugin> = (\n userOptions?: Partial,\n) => {\n const options = { ...defaultOptions, ...userOptions };\n return {\n name: \"ExampleTransformer\",\n textTransform(_ctx: BuildCtx, src: string) {\n return src.endsWith(\"\\n\") ? src : `${src}\\n`;\n },\n markdownPlugins(): PluggableList {\n const plugins: PluggableList = [remarkHighlightToken(options.highlightToken)];\n if (options.enableGfm) {\n plugins.unshift(remarkGfm);\n }\n return plugins;\n },\n htmlPlugins(): PluggableList {\n const plugins: PluggableList = [rehypeHeadingClass(options.headingClass)];\n if (options.addHeadingSlugs) {\n plugins.unshift(rehypeSlug);\n }\n return plugins;\n },\n externalResources() {\n return {\n css: [\n {\n content: `.${options.headingClass} { letter-spacing: 0.02em; }`,\n inline: true,\n },\n ],\n js: [\n {\n contentType: \"inline\",\n loadTime: \"afterDOMReady\",\n script: \"document.documentElement.dataset.exampleTransformer = 'true'\",\n },\n ],\n additionalHead: [],\n };\n },\n };\n};\n","import type { QuartzFilterPlugin, ProcessedContent, BuildCtx } from \"@quartz-community/types\";\nimport type { ExampleFilterOptions } from \"./types\";\n\nconst defaultOptions: ExampleFilterOptions = {\n allowDrafts: false,\n excludeTags: [\"private\"],\n excludePathPrefixes: [\"_drafts/\", \"_private/\"],\n};\n\nconst normalizeTag = (tag: unknown) => (typeof tag === \"string\" ? tag.trim().toLowerCase() : \"\");\n\nconst includesTag = (tags: unknown, excludedTags: string[]) => {\n if (!Array.isArray(tags)) {\n return false;\n }\n\n const normalizedExcluded = excludedTags.map((tag) => tag.toLowerCase());\n return tags.some((tag) => normalizedExcluded.includes(normalizeTag(tag)));\n};\n\n/**\n * Example filter that removes drafts, tagged pages, and excluded path prefixes.\n */\nexport const ExampleFilter: QuartzFilterPlugin> = (\n userOptions?: Partial,\n) => {\n const options = { ...defaultOptions, ...userOptions };\n return {\n name: \"ExampleFilter\",\n shouldPublish(_ctx: BuildCtx, [_tree, vfile]: ProcessedContent) {\n const frontmatter = (vfile.data?.frontmatter ?? {}) as {\n draft?: boolean | string;\n tags?: string[];\n };\n const isDraft = frontmatter.draft === true || frontmatter.draft === \"true\";\n if (isDraft && !options.allowDrafts) {\n return false;\n }\n\n if (includesTag(frontmatter.tags, options.excludeTags)) {\n return false;\n }\n\n const filePath = typeof vfile.data?.filePath === \"string\" ? vfile.data.filePath : \"\";\n const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n if (options.excludePathPrefixes.some((prefix) => normalizedPath.startsWith(prefix))) {\n return false;\n }\n\n return true;\n },\n };\n};\n","import path from \"node:path\";\nimport fs from \"node:fs/promises\";\nimport type {\n QuartzEmitterPlugin,\n ProcessedContent,\n BuildCtx,\n FilePath,\n FullSlug,\n} from \"@quartz-community/types\";\nimport type { ExampleEmitterOptions } from \"./types\";\n\nconst defaultOptions: ExampleEmitterOptions = {\n manifestSlug: \"plugin-manifest\",\n includeFrontmatter: true,\n metadata: {\n generator: \"Quartz Plugin Template\",\n },\n};\n\nconst joinSegments = (...segments: string[]) =>\n segments\n .filter((segment) => segment.length > 0)\n .join(\"/\")\n .replace(/\\/+/g, \"/\") as FilePath;\n\nconst writeFile = async (\n outputDir: string,\n slug: FullSlug,\n ext: `.${string}` | \"\",\n content: string,\n) => {\n const outputPath = joinSegments(outputDir, `${slug}${ext}`) as FilePath;\n await fs.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.writeFile(outputPath, content);\n return outputPath;\n};\n\n/**\n * Example emitter that writes a JSON manifest of content metadata.\n */\nexport const ExampleEmitter: QuartzEmitterPlugin> = (\n userOptions?: Partial,\n) => {\n const options = { ...defaultOptions, ...userOptions };\n const emitManifest = async (ctx: BuildCtx, content: ProcessedContent[]) => {\n const manifest = {\n ...options.metadata,\n generatedAt: new Date().toISOString(),\n pages: content.map(([_tree, vfile]) => {\n const frontmatter = (vfile.data?.frontmatter ?? {}) as {\n title?: string;\n tags?: string[];\n [key: string]: unknown;\n };\n return {\n slug: vfile.data?.slug ?? null,\n title: frontmatter.title ?? null,\n tags: frontmatter.tags ?? null,\n filePath: vfile.data?.filePath ?? null,\n frontmatter: options.includeFrontmatter ? frontmatter : undefined,\n };\n }),\n };\n\n let json = `${JSON.stringify(manifest, null, 2)}\\n`;\n if (options.transformManifest) {\n json = options.transformManifest(json);\n }\n\n const output = await writeFile(\n ctx.argv.output,\n options.manifestSlug as FullSlug,\n \".json\",\n json,\n );\n return [output];\n };\n\n return {\n name: \"ExampleEmitter\",\n async emit(ctx, content, _resources) {\n return emitManifest(ctx, content);\n },\n async *partialEmit(ctx, content, _resources, _changeEvents) {\n const outputPaths = await emitManifest(ctx, content);\n for (const outputPath of outputPaths) {\n yield outputPath;\n }\n },\n };\n};\n",".example-component {\n padding: 8px 16px;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-radius: 4px;\n font-weight: 600;\n display: inline-block;\n}","function l(){let e=window.location.pathname;return e.startsWith(\"/\")&&(e=e.slice(1)),e.endsWith(\"/\")&&(e=e.slice(0,-1)),e||\"index\"}function r(){let e=document.querySelectorAll(\".example-component\");if(e.length===0)return;let t=[];function o(n){(n.ctrlKey||n.metaKey)&&n.shiftKey&&n.key.toLowerCase()===\"e\"&&(n.preventDefault(),console.log(\"[ExampleComponent] Keyboard shortcut triggered!\"))}document.addEventListener(\"keydown\",o),t.push(()=>document.removeEventListener(\"keydown\",o));for(let n of e){let i=()=>{console.log(\"[ExampleComponent] Clicked!\")};n.addEventListener(\"click\",i),t.push(()=>n.removeEventListener(\"click\",i))}typeof window<\"u\"&&window.addCleanup&&window.addCleanup(()=>{t.forEach(n=>n())}),console.log(\"[ExampleComponent] Initialized with\",e.length,\"component(s)\")}document.addEventListener(\"nav\",e=>{let t=e.detail?.url||l();console.log(\"[ExampleComponent] Navigation to:\",t),r()});document.addEventListener(\"render\",()=>{console.log(\"[ExampleComponent] Render event - re-initializing\"),r()});document.addEventListener(\"prenav\",()=>{let e=document.querySelector(\".example-component\");e&&sessionStorage.setItem(\"exampleScrollTop\",e.scrollTop?.toString()||\"0\")});\n","import type {\n QuartzComponent,\n QuartzComponentProps,\n QuartzComponentConstructor,\n} from \"@quartz-community/types\";\nimport { classNames } from \"../util/lang\";\nimport style from \"./styles/example.scss\";\n// @ts-expect-error - inline script import handled by Quartz bundler\nimport script from \"./scripts/example.inline.ts\";\n\nexport interface ExampleComponentOptions {\n prefix?: string;\n suffix?: string;\n className?: string;\n}\n\nexport default ((opts?: ExampleComponentOptions) => {\n const { prefix = \"\", suffix = \"\", className = \"example-component\" } = opts ?? {};\n\n const Component: QuartzComponent = (props: QuartzComponentProps) => {\n const frontmatter = props.fileData?.frontmatter as { title?: string } | undefined;\n const title = frontmatter?.title ?? \"Untitled\";\n const fullText = `${prefix}${title}${suffix}`;\n\n return
{fullText}
;\n };\n\n Component.css = style;\n Component.afterDOMLoaded = script;\n\n return Component;\n}) satisfies QuartzComponentConstructor;\n","#stacked-pages-container:not(.binder-active) {\n display: none;\n}\n#stacked-pages-container.binder-active {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n z-index: 99;\n display: flex;\n justify-content: space-between;\n align-items: stretch;\n}\n\nbody.has-binder-left .page {\n padding-left: 40px;\n}\n\nbody.has-binder-right .page {\n padding-right: 40px;\n}\n\n.binder-strip {\n pointer-events: auto;\n display: flex;\n flex-direction: column;\n gap: 0;\n padding: 0;\n justify-content: stretch;\n align-items: stretch;\n z-index: 100;\n width: 40px;\n height: 100%;\n}\n\n.binder-strip-left {\n align-self: flex-start;\n}\n\n.binder-strip-right {\n align-self: flex-end;\n margin-left: auto;\n}\n\n.binder-tab {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 8px 0;\n cursor: pointer;\n background: var(--lightgray);\n border: 1px solid var(--lightgray);\n transition: background 0.15s ease, transform 0.15s ease, border-color 0.15s ease;\n width: 100%;\n flex: 1;\n position: relative;\n writing-mode: vertical-lr;\n overflow: hidden;\n}\n.binder-tab:hover {\n background: var(--light);\n}\n\n.binder-tab.binder-tab-active {\n background: var(--light);\n z-index: 101;\n cursor: default;\n}\n.binder-tab.binder-tab-active.binder-tab-left {\n border-right: none;\n border-left: 3px solid var(--secondary);\n border-radius: 6px 0 0 6px;\n}\n.binder-tab.binder-tab-active.binder-tab-right {\n border-left: none;\n border-right: 3px solid var(--secondary);\n border-radius: 0 6px 6px 0;\n}\n\n.binder-tab:not(.binder-tab-active) {\n color: var(--gray);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-left {\n border-radius: 6px 0 0 6px;\n border-right: 2px solid var(--secondary);\n border-left: 1px solid var(--lightgray);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-left:hover {\n transform: translateX(4px);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-right {\n border-radius: 0 6px 6px 0;\n border-left: 2px solid var(--secondary);\n border-right: 1px solid var(--lightgray);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-right:hover {\n transform: translateX(-4px);\n}\n\n.binder-spine {\n display: none;\n}\n\n.binder-label {\n font-size: 1rem;\n line-height: 1.2;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--darkgray);\n user-select: none;\n transform: rotate(180deg);\n text-align: left;\n}\n\n.binder-tab-active .binder-label {\n font-weight: bold;\n color: var(--dark);\n}\n\n.binder-close {\n appearance: none;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 1rem;\n line-height: 1;\n color: var(--gray);\n padding: 2px;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.15s ease, color 0.15s ease;\n transform: rotate(180deg);\n}\n.binder-close:hover {\n color: var(--dark);\n background: rgba(0, 0, 0, 0.05);\n border-radius: 4px;\n}\n\n.binder-tab:hover .binder-close {\n opacity: 1;\n}","var y=Object.hasOwnProperty;function h(){return typeof document>\"u\"?\"\":document.body?.dataset?.basepath??\"\"}function o(u,D){let n=D??h(),F=u.startsWith(\"/\")?u:\"/\"+u;return n+F}var B=\"stacked-pages-state\";function d(){let u=window.location.pathname;return u.startsWith(\"/\")&&(u=u.slice(1)),u.endsWith(\"/\")&&(u=u.slice(0,-1)),u||\"index\"}function m(){return document.querySelector(\"h1\")?.textContent?.trim()||document.title||d()}function s(){try{let u=sessionStorage.getItem(B);if(u){let D=JSON.parse(u);if(Array.isArray(D.tabs)&&typeof D.activeIndex==\"number\")return D}}catch{}return{tabs:[],activeIndex:-1}}function E(u){try{sessionStorage.setItem(B,JSON.stringify(u))}catch{}}function f(u){return{maxTabs:parseInt(u.dataset.maxTabs||\"8\",10),mobileBreakpoint:parseInt(u.dataset.mobileBreakpoint||\"800\",10),showSpines:u.dataset.showSpines!==\"false\",animate:u.dataset.animate!==\"false\"}}function A(u,D){let n=f(u);if(window.innerWidth0){let t=document.createElement(\"div\");t.className=\"binder-strip binder-strip-left\";for(let e=0;e0){let t=document.createElement(\"div\");t.className=\"binder-strip binder-strip-right\";for(let e=0;e0),document.body.classList.toggle(\"has-binder-right\",r.length>0)}function c(u,D,n,F,r){let t=document.createElement(\"div\");if(t.className=`binder-tab binder-tab-${n}`,t.dataset.index=String(D),D===F.activeIndex&&t.classList.add(\"binder-tab-active\"),r.showSpines){let i=document.createElement(\"div\");i.className=\"binder-spine\",t.appendChild(i)}let e=document.createElement(\"span\");if(e.className=\"binder-label\",e.textContent=u.title,t.appendChild(e),F.tabs.length>=2){let i=document.createElement(\"button\");i.className=\"binder-close\",i.textContent=\"\\xD7\",i.setAttribute(\"aria-label\",`Close ${u.title}`),i.addEventListener(\"click\",C=>{C.stopPropagation(),p(D)}),t.appendChild(i)}return t.addEventListener(\"click\",()=>{g(D)}),t}function g(u){let D=s();if(u<0||u>=D.tabs.length)return;let n=D.tabs[u];if(!n)return;D.activeIndex=u,E(D);let F=new URL(o(n.slug),window.location.origin);window.spaNavigate?window.spaNavigate(F,!1):window.location.href=F.toString()}function p(u){let D=s();if(D.tabs.length<2)return;let n=u===D.activeIndex;D.tabs.splice(u,1),n?(D.activeIndex=Math.min(u,D.tabs.length-1),E(D),g(D.activeIndex)):(ue.slug===D);if(t>=0)F.tabs[t].title=n,F.activeIndex=t;else{let e={slug:D,title:n},i=F.activeIndex+1;for(F.tabs.splice(i,0,e),F.activeIndex=i;F.tabs.length>r.maxTabs;)F.activeIndex>0?(F.tabs.shift(),F.activeIndex--):F.tabs.pop()}E(F),A(u,F)}function a(){let u=document.getElementById(\"stacked-pages-container\");u&&A(u,s())}function v(){b();let u=()=>a();window.addEventListener(\"resize\",u),window.addCleanup&&window.addCleanup(()=>window.removeEventListener(\"resize\",u))}typeof document<\"u\"&&(document.addEventListener(\"nav\",()=>{v()}),document.addEventListener(\"render\",()=>{a()}));\n","import type {\n QuartzComponent,\n QuartzComponentProps,\n QuartzComponentConstructor,\n} from \"@quartz-community/types\";\n\nimport style from \"./styles/stacked.scss\";\n// @ts-expect-error - inline script import handled by Quartz bundler\nimport script from \"./scripts/stacked.inline.ts\";\n\nexport interface StackedPagesComponentOptions {\n maxTabs?: number;\n mobileBreakpoint?: number;\n showSpines?: boolean;\n animateTransitions?: boolean;\n}\n\nexport default ((opts?: StackedPagesComponentOptions) => {\n const {\n maxTabs = 8,\n mobileBreakpoint = 800,\n showSpines = true,\n animateTransitions = true,\n } = opts ?? {};\n\n const Component: QuartzComponent = (_props: QuartzComponentProps) => {\n return (\n \n );\n };\n\n Component.css = style;\n Component.afterDOMLoaded = script;\n\n return Component;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file +{"version":3,"sources":["../node_modules/ccount/index.js","../node_modules/devlop/lib/default.js","../node_modules/micromark-util-character/index.js","../node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","../node_modules/unist-util-is/lib/index.js","../node_modules/unist-util-visit-parents/lib/color.node.js","../node_modules/unist-util-visit-parents/lib/index.js","../node_modules/mdast-util-find-and-replace/lib/index.js","../node_modules/mdast-util-gfm-autolink-literal/lib/index.js","../node_modules/micromark-util-normalize-identifier/index.js","../node_modules/mdast-util-gfm-footnote/lib/index.js","../node_modules/mdast-util-gfm-strikethrough/lib/index.js","../node_modules/markdown-table/index.js","../node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","../node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","../node_modules/mdast-util-to-markdown/lib/handle/break.js","../node_modules/longest-streak/index.js","../node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","../node_modules/mdast-util-to-markdown/lib/util/check-fence.js","../node_modules/mdast-util-to-markdown/lib/handle/code.js","../node_modules/mdast-util-to-markdown/lib/util/check-quote.js","../node_modules/mdast-util-to-markdown/lib/handle/definition.js","../node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","../node_modules/mdast-util-to-markdown/lib/util/encode-character-reference.js","../node_modules/micromark-util-classify-character/index.js","../node_modules/mdast-util-to-markdown/lib/util/encode-info.js","../node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","../node_modules/unist-util-visit/lib/index.js","../node_modules/mdast-util-to-string/lib/index.js","../node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","../node_modules/mdast-util-to-markdown/lib/handle/heading.js","../node_modules/mdast-util-to-markdown/lib/handle/html.js","../node_modules/mdast-util-to-markdown/lib/handle/image.js","../node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","../node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","../node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","../node_modules/mdast-util-to-markdown/lib/handle/link.js","../node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule.js","../node_modules/mdast-util-to-markdown/lib/handle/list.js","../node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","../node_modules/mdast-util-to-markdown/lib/handle/list-item.js","../node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","../node_modules/mdast-util-phrasing/lib/index.js","../node_modules/mdast-util-to-markdown/lib/handle/root.js","../node_modules/mdast-util-to-markdown/lib/util/check-strong.js","../node_modules/mdast-util-to-markdown/lib/handle/strong.js","../node_modules/mdast-util-to-markdown/lib/handle/text.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","../node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","../node_modules/mdast-util-to-markdown/lib/handle/index.js","../node_modules/mdast-util-gfm-table/lib/index.js","../node_modules/mdast-util-gfm-task-list-item/lib/index.js","../node_modules/mdast-util-gfm/lib/index.js","../node_modules/micromark-util-chunked/index.js","../node_modules/micromark-util-combine-extensions/index.js","../node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","../node_modules/micromark-util-resolve-all/index.js","../node_modules/micromark-factory-space/index.js","../node_modules/micromark-core-commonmark/lib/blank-line.js","../node_modules/micromark-extension-gfm-footnote/lib/syntax.js","../node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","../node_modules/micromark-extension-gfm-table/lib/edit-map.js","../node_modules/micromark-extension-gfm-table/lib/infer.js","../node_modules/micromark-extension-gfm-table/lib/syntax.js","../node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","../node_modules/micromark-extension-gfm/index.js","../node_modules/remark-gfm/lib/index.js","../node_modules/github-slugger/regex.js","../node_modules/github-slugger/index.js","../node_modules/hast-util-heading-rank/lib/index.js","../node_modules/hast-util-to-string/lib/index.js","../node_modules/rehype-slug/lib/index.js","../src/transformer.ts","../src/filter.ts","../src/emitter.ts","../node_modules/@quartz-community/utils/src/lang.ts","../src/components/styles/example.scss","../src/components/scripts/example.inline.ts","../node_modules/preact/src/constants.js","../node_modules/preact/src/options.js","../node_modules/preact/src/diff/catch-error.js","../node_modules/preact/src/component.js","../node_modules/preact/src/diff/props.js","../node_modules/preact/src/create-context.js","../node_modules/preact/jsx-runtime/src/index.js","../src/components/ExampleComponent.tsx","../src/components/styles/stacked.scss","../src/components/scripts/stacked.inline.ts","../src/components/StackedPages.tsx"],"names":["code","regex","ok","index","all","node","d","is","visit","list","replace","_","domain","path","trail","exit","row","sizes","columnIndex","value","map","subexit","text","constructs","previous","a","b","emptyOptions","toString","one","defaultOptions","slug","options","__e","error","vnode","oldVNode","errorInfo","component","ctor","handled","__","__c","constructor","getDerivedStateFromError","setState","__d","componentDidCatch","__E","e","Promise","prototype","then","bind","resolve","setTimeout","Math","random","vnodeId","createVNode","type","props","key","isStaticChildren","__source","__self","ref","i","normalizedProps","__k","__b","__v","__i","__u","u"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","export function deprecate(fn) {\n return fn\n}\n\nexport function equal() {}\n\nexport function ok() {}\n\nexport function unreachable() {}\n","/**\n * @import {Code} from 'micromark-util-types'\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function asciiControl(code) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code !== null && (code < 32 || code === 127)\n );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEnding(code) {\n return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownSpace(code) {\n return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * Expression.\n * @returns {(code: Code) => boolean}\n * Check.\n */\nfunction regexCheck(regex) {\n return check;\n\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code\n * Character code.\n * @returns {boolean}\n * Whether the character code matches the bound regex.\n */\n function check(code) {\n return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n }\n}","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @import {Node, Parent} from 'unist'\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array | ReadonlyArray | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n * (>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test)\n ? anyFactory(test)\n : // Cast because `ReadonlyArray` goes into the above but `isArray`\n // narrows to `Array`.\n propertiesFactory(/** @type {Props} */ (test))\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propertiesFactory(check) {\n const checkAsRecord = /** @type {Record} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @param {string} d\n * @returns {string}\n */\nexport function color(d) {\n return '\\u001B[33m' + d + '\\u001B[39m'\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n */\n\n/**\n * @typedef {Exclude | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate extends Value\n * ? Predicate\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends ReadonlyArray\n * ? MatchesOne\n * : Check extends Array\n * ? MatchesOne\n * : MatchesOne\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent\n * | InternalAncestor, Max, Increment>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {InternalAncestor, Child>} Ancestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor, Check>, Ancestor, Check>>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n * Tree type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} test\n * `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n * Handle each node.\n * @param {boolean | null | undefined} [reverse]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n /** @type {Test} */\n let check\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n } else {\n // @ts-expect-error visitor given, so `test` isn’t a visitor.\n check = test\n }\n\n const is = convert(check)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {UnistNode} node\n * @param {number | undefined} index\n * @param {Array} parents\n */\n function factory(node, index, parents) {\n const value = /** @type {Record} */ (\n node && typeof node === 'object' ? node : {}\n )\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {Readonly} */\n let result = empty\n /** @type {Readonly} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n // @ts-expect-error: `visitor` is now a visitor.\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if ('children' in node && node.children) {\n const nodeAsParent = /** @type {UnistParent} */ (node)\n\n if (nodeAsParent.children && result[0] !== SKIP) {\n offset = (reverse ? nodeAsParent.children.length : -1) + step\n grandparents = parents.concat(nodeAsParent)\n\n while (offset > -1 && offset < nodeAsParent.children.length) {\n const child = nodeAsParent.children[offset]\n\n subresult = factory(child, offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n }\n\n return result\n }\n }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {Readonly}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @import {Nodes, Parents, PhrasingContent, Root, Text} from 'mdast'\n * @import {BuildVisitor, Test, VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef RegExpMatchObject\n * Info on the match.\n * @property {number} index\n * The index of the search at which the result was found.\n * @property {string} input\n * A copy of the search string in the text node.\n * @property {[...Array, Text]} stack\n * All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n * Pattern to find.\n *\n * Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array} FindAndReplaceList\n * Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n * Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n * Thing to replace with.\n *\n * @callback ReplaceFunction\n * Callback called when a search matches.\n * @param {...any} parameters\n * The parameters are the result of corresponding search expression:\n *\n * * `value` (`string`) — whole match\n * * `...capture` (`Array`) — matches from regex capture groups\n * * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array | PhrasingContent | string | false | null | undefined}\n * Thing to replace with.\n *\n * * when `null`, `undefined`, `''`, remove the match\n * * …or when `false`, do not replace at all\n * * …or when `string`, replace with a text node of that value\n * * …or when `Node` or `Array`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n * Normalized find and replace.\n *\n * @typedef {Array} Pairs\n * All find and replaced.\n *\n * @typedef Options\n * Configuration.\n * @property {Test | null | undefined} [ignore]\n * Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n * Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n * Patterns to find.\n * @param {Options | null | undefined} [options]\n * Configuration (when `find` is not `Find`).\n * @returns {undefined}\n * Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n const settings = options || {}\n const ignored = convert(settings.ignore || [])\n const pairs = toPairs(list)\n let pairIndex = -1\n\n while (++pairIndex < pairs.length) {\n visitParents(tree, 'text', visitor)\n }\n\n /** @type {BuildVisitor} */\n function visitor(node, parents) {\n let index = -1\n /** @type {Parents | undefined} */\n let grandparent\n\n while (++index < parents.length) {\n const parent = parents[index]\n /** @type {Array | undefined} */\n const siblings = grandparent ? grandparent.children : undefined\n\n if (\n ignored(\n parent,\n siblings ? siblings.indexOf(parent) : undefined,\n grandparent\n )\n ) {\n return\n }\n\n grandparent = parent\n }\n\n if (grandparent) {\n return handler(node, parents)\n }\n }\n\n /**\n * Handle a text node which is not in an ignored parent.\n *\n * @param {Text} node\n * Text node.\n * @param {Array} parents\n * Parents.\n * @returns {VisitorResult}\n * Result.\n */\n function handler(node, parents) {\n const parent = parents[parents.length - 1]\n const find = pairs[pairIndex][0]\n const replace = pairs[pairIndex][1]\n let start = 0\n /** @type {Array} */\n const siblings = parent.children\n const index = siblings.indexOf(node)\n let change = false\n /** @type {Array} */\n let nodes = []\n\n find.lastIndex = 0\n\n let match = find.exec(node.value)\n\n while (match) {\n const position = match.index\n /** @type {RegExpMatchObject} */\n const matchObject = {\n index: match.index,\n input: match.input,\n stack: [...parents, node]\n }\n let value = replace(...match, matchObject)\n\n if (typeof value === 'string') {\n value = value.length > 0 ? {type: 'text', value} : undefined\n }\n\n // It wasn’t a match after all.\n if (value === false) {\n // False acts as if there was no match.\n // So we need to reset `lastIndex`, which currently being at the end of\n // the current match, to the beginning.\n find.lastIndex = position + 1\n } else {\n if (start !== position) {\n nodes.push({\n type: 'text',\n value: node.value.slice(start, position)\n })\n }\n\n if (Array.isArray(value)) {\n nodes.push(...value)\n } else if (value) {\n nodes.push(value)\n }\n\n start = position + match[0].length\n change = true\n }\n\n if (!find.global) {\n break\n }\n\n match = find.exec(node.value)\n }\n\n if (change) {\n if (start < node.value.length) {\n nodes.push({type: 'text', value: node.value.slice(start)})\n }\n\n parent.children.splice(index, 1, ...nodes)\n } else {\n nodes = [node]\n }\n\n return index + nodes.length\n }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n * Schema.\n * @returns {Pairs}\n * Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n /** @type {Pairs} */\n const result = []\n\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError('Expected find and replace tuple or list of tuples')\n }\n\n /** @type {FindAndReplaceList} */\n // @ts-expect-error: correct.\n const list =\n !tupleOrList[0] || Array.isArray(tupleOrList[0])\n ? tupleOrList\n : [tupleOrList]\n\n let index = -1\n\n while (++index < list.length) {\n const tuple = list[index]\n result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n }\n\n return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n * Find.\n * @returns {RegExp}\n * Expression.\n */\nfunction toExpression(find) {\n return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n * Replace.\n * @returns {ReplaceFunction}\n * Function.\n */\nfunction toFunction(replace) {\n return typeof replace === 'function'\n ? replace\n : function () {\n return replace\n }\n}\n","/**\n * @import {RegExpMatchObject, ReplaceFunction} from 'mdast-util-find-and-replace'\n * @import {CompileContext, Extension as FromMarkdownExtension, Handle as FromMarkdownHandle, Transform as FromMarkdownTransform} from 'mdast-util-from-markdown'\n * @import {ConstructName, Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n * @import {Link, PhrasingContent} from 'mdast'\n */\n\nimport {ccount} from 'ccount'\nimport {ok as assert} from 'devlop'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralFromMarkdown() {\n return {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralToMarkdown() {\n return {\n unsafe: [\n {\n character: '@',\n before: '[+\\\\-.\\\\w]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: '.',\n before: '[Ww]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: ':',\n before: '[ps]',\n after: '\\\\/',\n inConstruct,\n notInConstruct\n }\n ]\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token)\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'link')\n node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/gu, findEmail]\n ],\n {ignore: ['link', 'linkReference']}\n )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Array | Link | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n let prefix = ''\n\n // Not an expected previous character.\n if (!previous(match)) {\n return false\n }\n\n // Treat `www` as part of the domain.\n if (/^w/i.test(protocol)) {\n domain = protocol + domain\n protocol = ''\n prefix = 'http://'\n }\n\n if (!isCorrectDomain(domain)) {\n return false\n }\n\n const parts = splitUrl(domain + path)\n\n if (!parts[0]) return false\n\n /** @type {Link} */\n const result = {\n type: 'link',\n title: null,\n url: prefix + protocol + parts[0],\n children: [{type: 'text', value: protocol + parts[0]}]\n }\n\n if (parts[1]) {\n return [result, {type: 'text', value: parts[1]}]\n }\n\n return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) ||\n // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false\n }\n\n return {\n type: 'link',\n title: null,\n url: 'mailto:' + atext + '@' + label,\n children: [{type: 'text', value: atext + '@' + label}]\n }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n const parts = domain.split('.')\n\n if (\n parts.length < 2 ||\n (parts[parts.length - 1] &&\n (/_/.test(parts[parts.length - 1]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n (parts[parts.length - 2] &&\n (/_/.test(parts[parts.length - 2]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n ) {\n return false\n }\n\n return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n if (!trailExec) {\n return [url, undefined]\n }\n\n url = url.slice(0, trailExec.index)\n\n let trail = trailExec[0]\n let closingParenIndex = trail.indexOf(')')\n const openingParens = ccount(url, '(')\n let closingParens = ccount(url, ')')\n\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail.slice(0, closingParenIndex + 1)\n trail = trail.slice(closingParenIndex + 1)\n closingParenIndex = trail.indexOf(')')\n closingParens++\n }\n\n return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n const code = match.input.charCodeAt(match.index - 1)\n\n return (\n (match.index === 0 ||\n unicodeWhitespace(code) ||\n unicodePunctuation(code)) &&\n // If it’s an email, the previous character should not be a slash.\n (!email || code !== 47)\n )\n}\n","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n * Identifier to normalize.\n * @returns {string}\n * Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n return value\n // Collapse markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, \" \")\n // Trim.\n .replace(/^ | $/g, '')\n // Some characters are considered “uppercase”, but if their lowercase\n // counterpart is uppercased will result in a different uppercase\n // character.\n // Hence, to get that form, we perform both lower- and uppercase.\n // Upper case makes sure keys will not interact with default prototypal\n // methods: no method is uppercase.\n .toLowerCase().toUpperCase();\n}","/**\n * @import {\n * CompileContext,\n * Extension as FromMarkdownExtension,\n * Handle as FromMarkdownHandle\n * } from 'mdast-util-from-markdown'\n * @import {ToMarkdownOptions} from 'mdast-util-gfm-footnote'\n * @import {\n * Handle as ToMarkdownHandle,\n * Map,\n * Options as ToMarkdownExtension\n * } from 'mdast-util-to-markdown'\n * @import {FootnoteDefinition, FootnoteReference} from 'mdast'\n */\n\nimport {ok as assert} from 'devlop'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n this.enter(\n {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n token\n )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteReference')\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteDefinition')\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n this.exit(token)\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteReference')\n const subexit = state.enter('reference')\n value += tracker.move(\n state.safe(state.associationId(node), {after: ']', before: value})\n )\n subexit()\n exit()\n value += tracker.move(']')\n return value\n}\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteCallString: enterFootnoteCallString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: enterFootnoteDefinition\n },\n exit: {\n gfmFootnoteCallString: exitFootnoteCallString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: exitFootnoteDefinition\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @param {ToMarkdownOptions | null | undefined} [options]\n * Configuration (optional).\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown(options) {\n // To do: next major: change default.\n let firstLineBlank = false\n\n if (options && options.firstLineBlank) {\n firstLineBlank = true\n }\n\n return {\n handlers: {footnoteDefinition, footnoteReference},\n // This is on by default already.\n unsafe: [{character: '[', inConstruct: ['label', 'phrasing', 'reference']}]\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {FootnoteDefinition} node\n */\n function footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteDefinition')\n const subexit = state.enter('label')\n value += tracker.move(\n state.safe(state.associationId(node), {before: value, after: ']'})\n )\n subexit()\n\n value += tracker.move(']:')\n\n if (node.children && node.children.length > 0) {\n tracker.shift(4)\n\n value += tracker.move(\n (firstLineBlank ? '\\n' : ' ') +\n state.indentLines(\n state.containerFlow(node, tracker.current()),\n firstLineBlank ? mapAll : mapExceptFirst\n )\n )\n }\n\n exit()\n\n return value\n }\n}\n\n/** @type {Map} */\nfunction mapExceptFirst(line, index, blank) {\n return index === 0 ? line : mapAll(line, index, blank)\n}\n\n/** @type {Map} */\nfunction mapAll(line, index, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: \n *\n * @type {Array}\n */\nconst constructsWithoutStrikethrough = [\n 'autolink',\n 'destinationLiteral',\n 'destinationRaw',\n 'reference',\n 'titleQuote',\n 'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: ['delete'],\n enter: {strikethrough: enterStrikethrough},\n exit: {strikethrough: exitStrikethrough}\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: '~',\n inConstruct: 'phrasing',\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: {delete: handleDelete}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, state, info) {\n const tracker = state.createTracker(info)\n const exit = state.enter('strikethrough')\n let value = tracker.move('~~')\n value += state.containerPhrasing(node, {\n ...tracker.current(),\n before: value,\n after: '~'\n })\n value += tracker.move('~~')\n exit()\n return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n return '~'\n}\n","// To do: next major: remove.\n/**\n * @typedef {Options} MarkdownTableOptions\n * Configuration.\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [alignDelimiters=true]\n * Whether to align the delimiters (default: `true`);\n * they are aligned by default:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * Pass `false` to make them staggered:\n *\n * ```markdown\n * | Alpha | B |\n * | - | - |\n * | C | Delta |\n * ```\n * @property {ReadonlyArray | string | null | undefined} [align]\n * How to align columns (default: `''`);\n * one style for all columns or styles for their respective columns;\n * each style is either `'l'` (left), `'r'` (right), or `'c'` (center);\n * other values are treated as `''`, which doesn’t place the colon in the\n * alignment row but does align left;\n * *only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean | null | undefined} [delimiterEnd=true]\n * Whether to end each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are ending delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no ending delimiters:\n *\n * ```markdown\n * | Alpha | B\n * | ----- | -----\n * | C | Delta\n * ```\n * @property {boolean | null | undefined} [delimiterStart=true]\n * Whether to begin each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are starting delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no starting delimiters:\n *\n * ```markdown\n * Alpha | B |\n * ----- | ----- |\n * C | Delta |\n * ```\n * @property {boolean | null | undefined} [padding=true]\n * Whether to add a space of padding between delimiters and cells\n * (default: `true`).\n *\n * When `true`, there is padding:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there is no padding:\n *\n * ```markdown\n * |Alpha|B |\n * |-----|-----|\n * |C |Delta|\n * ```\n * @property {((value: string) => number) | null | undefined} [stringLength]\n * Function to detect the length of table cell content (optional);\n * this is used when aligning the delimiters (`|`) between table cells;\n * full-width characters and emoji mess up delimiter alignment when viewing\n * the markdown source;\n * to fix this, you can pass this function,\n * which receives the cell content and returns its “visible” size;\n * note that what is and isn’t visible depends on where the text is displayed.\n *\n * Without such a function, the following:\n *\n * ```js\n * markdownTable([\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩‍❤️‍👩', 'Delta']\n * ])\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | - | - |\n * | 中文 | Charlie |\n * | 👩‍❤️‍👩 | Delta |\n * ```\n *\n * With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n * ```js\n * import stringWidth from 'string-width'\n *\n * markdownTable(\n * [\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩‍❤️‍👩', 'Delta']\n * ],\n * {stringLength: stringWidth}\n * )\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | ----- | ------- |\n * | 中文 | Charlie |\n * | 👩‍❤️‍👩 | Delta |\n * ```\n */\n\n/**\n * @param {string} value\n * Cell value.\n * @returns {number}\n * Cell size.\n */\nfunction defaultStringLength(value) {\n return value.length\n}\n\n/**\n * Generate a markdown\n * ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables))\n * table.\n *\n * @param {ReadonlyArray>} table\n * Table data (matrix of strings).\n * @param {Readonly | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Result.\n */\nexport function markdownTable(table, options) {\n const settings = options || {}\n // To do: next major: change to spread.\n const align = (settings.align || []).concat()\n const stringLength = settings.stringLength || defaultStringLength\n /** @type {Array} Character codes as symbols for alignment per column. */\n const alignments = []\n /** @type {Array>} Cells per row. */\n const cellMatrix = []\n /** @type {Array>} Sizes of each cell per row. */\n const sizeMatrix = []\n /** @type {Array} */\n const longestCellByColumn = []\n let mostCellsPerRow = 0\n let rowIndex = -1\n\n // This is a superfluous loop if we don’t align delimiters, but otherwise we’d\n // do superfluous work when aligning, so optimize for aligning.\n while (++rowIndex < table.length) {\n /** @type {Array} */\n const row = []\n /** @type {Array} */\n const sizes = []\n let columnIndex = -1\n\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length\n }\n\n while (++columnIndex < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex])\n\n if (settings.alignDelimiters !== false) {\n const size = stringLength(cell)\n sizes[columnIndex] = size\n\n if (\n longestCellByColumn[columnIndex] === undefined ||\n size > longestCellByColumn[columnIndex]\n ) {\n longestCellByColumn[columnIndex] = size\n }\n }\n\n row.push(cell)\n }\n\n cellMatrix[rowIndex] = row\n sizeMatrix[rowIndex] = sizes\n }\n\n // Figure out which alignments to use.\n let columnIndex = -1\n\n if (typeof align === 'object' && 'length' in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex])\n }\n } else {\n const code = toAlignment(align)\n\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code\n }\n }\n\n // Inject the alignment row.\n columnIndex = -1\n /** @type {Array} */\n const row = []\n /** @type {Array} */\n const sizes = []\n\n while (++columnIndex < mostCellsPerRow) {\n const code = alignments[columnIndex]\n let before = ''\n let after = ''\n\n if (code === 99 /* `c` */) {\n before = ':'\n after = ':'\n } else if (code === 108 /* `l` */) {\n before = ':'\n } else if (code === 114 /* `r` */) {\n after = ':'\n }\n\n // There *must* be at least one hyphen-minus in each alignment cell.\n let size =\n settings.alignDelimiters === false\n ? 1\n : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n )\n\n const cell = before + '-'.repeat(size) + after\n\n if (settings.alignDelimiters !== false) {\n size = before.length + size + after.length\n\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size\n }\n\n sizes[columnIndex] = size\n }\n\n row[columnIndex] = cell\n }\n\n // Inject the alignment row.\n cellMatrix.splice(1, 0, row)\n sizeMatrix.splice(1, 0, sizes)\n\n rowIndex = -1\n /** @type {Array} */\n const lines = []\n\n while (++rowIndex < cellMatrix.length) {\n const row = cellMatrix[rowIndex]\n const sizes = sizeMatrix[rowIndex]\n columnIndex = -1\n /** @type {Array} */\n const line = []\n\n while (++columnIndex < mostCellsPerRow) {\n const cell = row[columnIndex] || ''\n let before = ''\n let after = ''\n\n if (settings.alignDelimiters !== false) {\n const size =\n longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n const code = alignments[columnIndex]\n\n if (code === 114 /* `r` */) {\n before = ' '.repeat(size)\n } else if (code === 99 /* `c` */) {\n if (size % 2) {\n before = ' '.repeat(size / 2 + 0.5)\n after = ' '.repeat(size / 2 - 0.5)\n } else {\n before = ' '.repeat(size / 2)\n after = before\n }\n } else {\n after = ' '.repeat(size)\n }\n }\n\n if (settings.delimiterStart !== false && !columnIndex) {\n line.push('|')\n }\n\n if (\n settings.padding !== false &&\n // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(settings.alignDelimiters === false && cell === '') &&\n (settings.delimiterStart !== false || columnIndex)\n ) {\n line.push(' ')\n }\n\n if (settings.alignDelimiters !== false) {\n line.push(before)\n }\n\n line.push(cell)\n\n if (settings.alignDelimiters !== false) {\n line.push(after)\n }\n\n if (settings.padding !== false) {\n line.push(' ')\n }\n\n if (\n settings.delimiterEnd !== false ||\n columnIndex !== mostCellsPerRow - 1\n ) {\n line.push('|')\n }\n }\n\n lines.push(\n settings.delimiterEnd === false\n ? line.join('').replace(/ +$/, '')\n : line.join('')\n )\n }\n\n return lines.join('\\n')\n}\n\n/**\n * @param {string | null | undefined} [value]\n * Value to serialize.\n * @returns {string}\n * Result.\n */\nfunction serialize(value) {\n return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string | null | undefined} value\n * Value.\n * @returns {number}\n * Alignment.\n */\nfunction toAlignment(value) {\n const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n return code === 67 /* `C` */ || code === 99 /* `c` */\n ? 99 /* `c` */\n : code === 76 /* `L` */ || code === 108 /* `l` */\n ? 108 /* `l` */\n : code === 82 /* `R` */ || code === 114 /* `r` */\n ? 114 /* `r` */\n : 0\n}\n","/**\n * @import {Blockquote, Parents} from 'mdast'\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n const exit = state.enter('blockquote')\n const tracker = state.createTracker(info)\n tracker.move('> ')\n tracker.shift(2)\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return '>' + (blank ? '' : ' ') + line\n}\n","/**\n * @import {ConstructName, Unsafe} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Array} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n return (\n listInScope(stack, pattern.inConstruct, true) &&\n !listInScope(stack, pattern.notInConstruct, false)\n )\n}\n\n/**\n * @param {Array} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n if (typeof list === 'string') {\n list = [list]\n }\n\n if (!list || list.length === 0) {\n return none\n }\n\n let index = -1\n\n while (++index < list.length) {\n if (stack.includes(list[index])) {\n return true\n }\n }\n\n return false\n}\n","/**\n * @import {Break, Parents} from 'mdast'\n * @import {Info, State} from 'mdast-util-to-markdown'\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n let index = -1\n\n while (++index < state.unsafe.length) {\n // If we can’t put eols in this construct (setext headings, tables), use a\n // space instead.\n if (\n state.unsafe[index].character === '\\n' &&\n patternInScope(state.stack, state.unsafe[index])\n ) {\n return /[ \\t]/.test(info.before) ? '' : ' '\n }\n }\n\n return '\\\\\\n'\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n * Content to search in.\n * @param {string} substring\n * Substring to look for, typically one character.\n * @returns {number}\n * Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n const source = String(value)\n let index = source.indexOf(substring)\n let expected = index\n let count = 0\n let max = 0\n\n if (typeof substring !== 'string') {\n throw new TypeError('Expected substring')\n }\n\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count\n }\n } else {\n count = 1\n }\n\n expected = index + substring.length\n index = source.indexOf(substring, expected)\n }\n\n return max\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Code} from 'mdast'\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false &&\n node.value &&\n // If there’s no info…\n !node.lang &&\n // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) &&\n // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n )\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkFence(state) {\n const marker = state.options.fence || '`'\n\n if (marker !== '`' && marker !== '~') {\n throw new Error(\n 'Cannot serialize code with `' +\n marker +\n '` for `options.fence`, expected `` ` `` or `~`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {Code, Parents} from 'mdast'\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n const marker = checkFence(state)\n const raw = node.value || ''\n const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n if (formatCodeAsIndented(node, state)) {\n const exit = state.enter('codeIndented')\n const value = state.indentLines(raw, map)\n exit()\n return value\n }\n\n const tracker = state.createTracker(info)\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n const exit = state.enter('codeFenced')\n let value = tracker.move(sequence)\n\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`)\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: ' ',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`)\n value += tracker.move(' ')\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: '\\n',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n value += tracker.move('\\n')\n\n if (raw) {\n value += tracker.move(raw + '\\n')\n }\n\n value += tracker.move(sequence)\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkQuote(state) {\n const marker = state.options.quote || '\"'\n\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n 'Cannot serialize title with `' +\n marker +\n '` for `options.quote`, expected `\"`, or `\\'`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Definition, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('definition')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n )\n value += tracker.move(']: ')\n\n subexit()\n\n if (\n // If there’s no url, or…\n !node.url ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : '\\n',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n exit()\n\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkEmphasis(state) {\n const marker = state.options.emphasis || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize emphasis with `' +\n marker +\n '` for `options.emphasis`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * Encode a code point as a character reference.\n *\n * @param {number} code\n * Code point to encode.\n * @returns {string}\n * Encoded character reference.\n */\nexport function encodeCharacterReference(code) {\n return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n * Group.\n */\nexport function classifyCharacter(code) {\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return 1;\n }\n if (unicodePunctuation(code)) {\n return 2;\n }\n}","/**\n * @import {EncodeSides} from '../types.js'\n */\n\nimport {classifyCharacter} from 'micromark-util-classify-character'\n\n/**\n * Check whether to encode (as a character reference) the characters\n * surrounding an attention run.\n *\n * Which characters are around an attention run influence whether it works or\n * not.\n *\n * See for more info.\n * See this markdown in a particular renderer to see what works:\n *\n * ```markdown\n * | | A (letter inside) | B (punctuation inside) | C (whitespace inside) | D (nothing inside) |\n * | ----------------------- | ----------------- | ---------------------- | --------------------- | ------------------ |\n * | 1 (letter outside) | x*y*z | x*.*z | x* *z | x**z |\n * | 2 (punctuation outside) | .*y*. | .*.*. | .* *. | .**. |\n * | 3 (whitespace outside) | x *y* z | x *.* z | x * * z | x ** z |\n * | 4 (nothing outside) | *x* | *.* | * * | ** |\n * ```\n *\n * @param {number} outside\n * Code point on the outer side of the run.\n * @param {number} inside\n * Code point on the inner side of the run.\n * @param {'*' | '_'} marker\n * Marker of the run.\n * Underscores are handled more strictly (they form less often) than\n * asterisks.\n * @returns {EncodeSides}\n * Whether to encode characters.\n */\n// Important: punctuation must never be encoded.\n// Punctuation is solely used by markdown constructs.\n// And by encoding itself.\n// Encoding them will break constructs or double encode things.\nexport function encodeInfo(outside, inside, marker) {\n const outsideKind = classifyCharacter(outside)\n const insideKind = classifyCharacter(inside)\n\n // Letter outside:\n if (outsideKind === undefined) {\n return insideKind === undefined\n ? // Letter inside:\n // we have to encode *both* letters for `_` as it is looser.\n // it already forms for `*` (and GFMs `~`).\n marker === '_'\n ? {inside: true, outside: true}\n : {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (letter, whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: encode outer (letter)\n {inside: false, outside: true}\n }\n\n // Whitespace outside:\n if (outsideKind === 1) {\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n }\n\n // Punctuation outside:\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode inner (whitespace).\n {inside: true, outside: false}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Emphasis, Parents} from 'mdast'\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nemphasis.peek = emphasisPeek\n\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n const marker = checkEmphasis(state)\n const exit = state.enter('emphasis')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || '*'\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n * @import {VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef {Exclude | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate extends Value\n * ? Predicate\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends ReadonlyArray\n * ? MatchesOne\n * : MatchesOne\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent\n * | InternalAncestor, Max, Increment>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform `parent`.\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of `parent` still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n * Parent of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor>} BuildVisitorFromMatch\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n * Node type.\n * @template {UnistParent} Ancestor\n * Parent type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromMatch<\n * Matches,\n * Extract\n * >\n * )} BuildVisitorFromDescendants\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromDescendants<\n * InclusiveDescendant,\n * Check\n * >\n * )} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n * Node type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n * `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n * Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n /** @type {boolean | null | undefined} */\n let reverse\n /** @type {Test} */\n let test\n /** @type {Visitor} */\n let visitor\n\n if (\n typeof testOrVisitor === 'function' &&\n typeof visitorOrReverse !== 'function'\n ) {\n test = undefined\n visitor = testOrVisitor\n reverse = visitorOrReverse\n } else {\n // @ts-expect-error: assume the overload with test was given.\n test = testOrVisitor\n // @ts-expect-error: assume the overload with test was given.\n visitor = visitorOrReverse\n reverse = maybeReverse\n }\n\n visitParents(tree, test, overload, reverse)\n\n /**\n * @param {UnistNode} node\n * @param {Array} parents\n */\n function overload(node, parents) {\n const parent = parents[parents.length - 1]\n const index = parent ? parent.children.indexOf(node) : undefined\n return visitor(node, index, parent)\n }\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n * Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized `value`.\n */\nexport function toString(value, options) {\n const settings = options || emptyOptions\n const includeImageAlt =\n typeof settings.includeImageAlt === 'boolean'\n ? settings.includeImageAlt\n : true\n const includeHtml =\n typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n if (node(value)) {\n if ('value' in value) {\n return value.type === 'html' && !includeHtml ? '' : value.value\n }\n\n if (includeImageAlt && 'alt' in value && value.alt) {\n return value.alt\n }\n\n if ('children' in value) {\n return all(value.children, includeImageAlt, includeHtml)\n }\n }\n\n if (Array.isArray(value)) {\n return all(value, includeImageAlt, includeHtml)\n }\n\n return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array} values\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n /** @type {Array} */\n const result = []\n let index = -1\n\n while (++index < values.length) {\n result[index] = one(values[index], includeImageAlt, includeHtml)\n }\n\n return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n * Thing.\n * @returns {value is Nodes}\n * Whether `value` is a node.\n */\nfunction node(value) {\n return Boolean(value && typeof value === 'object')\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Heading} from 'mdast'\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n let literalWithBreak = false\n\n // Look for literals with a line break.\n // Note that this also\n visit(node, function (node) {\n if (\n ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n node.type === 'break'\n ) {\n literalWithBreak = true\n return EXIT\n }\n })\n\n return Boolean(\n (!node.depth || node.depth < 3) &&\n toString(node) &&\n (state.options.setext || literalWithBreak)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Heading, Parents} from 'mdast'\n */\n\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1)\n const tracker = state.createTracker(info)\n\n if (formatHeadingAsSetext(node, state)) {\n const exit = state.enter('headingSetext')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...tracker.current(),\n before: '\\n',\n after: '\\n'\n })\n subexit()\n exit()\n\n return (\n value +\n '\\n' +\n (rank === 1 ? '=' : '-').repeat(\n // The whole size…\n value.length -\n // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n )\n )\n }\n\n const sequence = '#'.repeat(rank)\n const exit = state.enter('headingAtx')\n const subexit = state.enter('phrasing')\n\n // Note: for proper tracking, we should reset the output positions when there\n // is no content returned, because then the space is not output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n tracker.move(sequence + ' ')\n\n let value = state.containerPhrasing(node, {\n before: '# ',\n after: '\\n',\n ...tracker.current()\n })\n\n if (/^[\\t ]/.test(value)) {\n // To do: what effect has the character reference on tracking?\n value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1)\n }\n\n value = value ? sequence + ' ' + value : sequence\n\n if (state.options.closeAtx) {\n value += ' ' + sequence\n }\n\n subexit()\n exit()\n\n return value\n}\n","/**\n * @import {Html} from 'mdast'\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n return '<'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Image, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('image')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n value += tracker.move(\n state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n )\n value += tracker.move('](')\n\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n exit()\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n return '!'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {ImageReference, Parents} from 'mdast'\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('imageReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n const alt = state.safe(node.alt, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(alt + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !alt || alt !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n return '!'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {InlineCode, Parents} from 'mdast'\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n let value = node.value || ''\n let sequence = '`'\n let index = -1\n\n // If there is a single grave accent on its own in the code, use a fence of\n // two.\n // If there are two in a row, use one.\n while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n sequence += '`'\n }\n\n // If this is not just spaces or eols (tabs don’t count), and either the\n // first or last character are a space, eol, or tick, then pad with spaces.\n if (\n /[^ \\r\\n]/.test(value) &&\n ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n ) {\n value = ' ' + value + ' '\n }\n\n // We have a potential problem: certain characters after eols could result in\n // blocks being seen.\n // For example, if someone injected the string `'\\n# b'`, then that would\n // result in an ATX heading.\n // We can’t escape characters in `inlineCode`, but because eols are\n // transformed to spaces when going from markdown to HTML anyway, we can swap\n // them out.\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index]\n const expression = state.compilePattern(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n // Only look for `atBreak`s.\n // Btw: note that `atBreak` patterns will always start the regex at LF or\n // CR.\n if (!pattern.atBreak) continue\n\n while ((match = expression.exec(value))) {\n let position = match.index\n\n // Support CRLF (patterns only look for one of the characters).\n if (\n value.charCodeAt(position) === 10 /* `\\n` */ &&\n value.charCodeAt(position - 1) === 13 /* `\\r` */\n ) {\n position--\n }\n\n value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n }\n }\n\n return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n return '`'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Link} from 'mdast'\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n const raw = toString(node)\n\n return Boolean(\n !state.options.resourceLink &&\n // If there’s a url…\n node.url &&\n // And there’s a no title…\n !node.title &&\n // And the content of `node` is a single text node…\n node.children &&\n node.children.length === 1 &&\n node.children[0].type === 'text' &&\n // And if the url is the same as the content…\n (raw === node.url || 'mailto:' + raw === node.url) &&\n // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) &&\n // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Link, Parents} from 'mdast'\n * @import {Exit} from '../types.js'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const tracker = state.createTracker(info)\n /** @type {Exit} */\n let exit\n /** @type {Exit} */\n let subexit\n\n if (formatLinkAsAutolink(node, state)) {\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n exit = state.enter('autolink')\n let value = tracker.move('<')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '>',\n ...tracker.current()\n })\n )\n value += tracker.move('>')\n exit()\n state.stack = stack\n return value\n }\n\n exit = state.enter('link')\n subexit = state.enter('label')\n let value = tracker.move('[')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '](',\n ...tracker.current()\n })\n )\n value += tracker.move('](')\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n\n exit()\n return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {LinkReference, Parents} from 'mdast'\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('linkReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n const text = state.containerPhrasing(node, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(text + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !text || text !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n return '['\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkBullet(state) {\n const marker = state.options.bullet || '*'\n\n if (marker !== '*' && marker !== '+' && marker !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bullet`, expected `*`, `+`, or `-`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkBulletOther(state) {\n const bullet = checkBullet(state)\n const bulletOther = state.options.bulletOther\n\n if (!bulletOther) {\n return bullet === '*' ? '-' : '*'\n }\n\n if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n bulletOther +\n '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n )\n }\n\n if (bulletOther === bullet) {\n throw new Error(\n 'Expected `bullet` (`' +\n bullet +\n '`) and `bulletOther` (`' +\n bulletOther +\n '`) to be different'\n )\n }\n\n return bulletOther\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || '.'\n\n if (marker !== '.' && marker !== ')') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bulletOrdered`, expected `.` or `)`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkRule(state) {\n const marker = state.options.rule || '*'\n\n if (marker !== '*' && marker !== '-' && marker !== '_') {\n throw new Error(\n 'Cannot serialize rules with `' +\n marker +\n '` for `options.rule`, expected `*`, `-`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {List, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n const exit = state.enter('list')\n const bulletCurrent = state.bulletCurrent\n /** @type {string} */\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n /** @type {string} */\n const bulletOther = node.ordered\n ? bullet === '.'\n ? ')'\n : '.'\n : checkBulletOther(state)\n let useDifferentMarker =\n parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : undefined\n\n // If there’s an empty first list item directly in two list items,\n // we have to use a different bullet:\n //\n // ```markdown\n // * - *\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === '*' || bullet === '-') &&\n // Empty first list item:\n firstListItem &&\n (!firstListItem.children || !firstListItem.children[0]) &&\n // Directly in two other list items:\n state.stack[state.stack.length - 1] === 'list' &&\n state.stack[state.stack.length - 2] === 'listItem' &&\n state.stack[state.stack.length - 3] === 'list' &&\n state.stack[state.stack.length - 4] === 'listItem' &&\n // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 &&\n state.indexStack[state.indexStack.length - 2] === 0 &&\n state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true\n }\n\n // If there’s a thematic break at the start of the first list item,\n // we have to use a different bullet:\n //\n // ```markdown\n // * ---\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1\n\n while (++index < node.children.length) {\n const item = node.children[index]\n\n if (\n item &&\n item.type === 'listItem' &&\n item.children &&\n item.children[0] &&\n item.children[0].type === 'thematicBreak'\n ) {\n useDifferentMarker = true\n break\n }\n }\n }\n }\n\n if (useDifferentMarker) {\n bullet = bulletOther\n }\n\n state.bulletCurrent = bullet\n const value = state.containerFlow(node, info)\n state.bulletLastUsed = bullet\n state.bulletCurrent = bulletCurrent\n exit()\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkListItemIndent(state) {\n const style = state.options.listItemIndent || 'one'\n\n if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n throw new Error(\n 'Cannot serialize items with `' +\n style +\n '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n )\n }\n\n return style\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {ListItem, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state)\n let bullet = state.bulletCurrent || checkBullet(state)\n\n // Add the marker value for ordered lists.\n if (parent && parent.type === 'list' && parent.ordered) {\n bullet =\n (typeof parent.start === 'number' && parent.start > -1\n ? parent.start\n : 1) +\n (state.options.incrementListMarker === false\n ? 0\n : parent.children.indexOf(node)) +\n bullet\n }\n\n let size = bullet.length + 1\n\n if (\n listItemIndent === 'tab' ||\n (listItemIndent === 'mixed' &&\n ((parent && parent.type === 'list' && parent.spread) || node.spread))\n ) {\n size = Math.ceil(size / 4) * 4\n }\n\n const tracker = state.createTracker(info)\n tracker.move(bullet + ' '.repeat(size - bullet.length))\n tracker.shift(size)\n const exit = state.enter('listItem')\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n\n return value\n\n /** @type {Map} */\n function map(line, index, blank) {\n if (index) {\n return (blank ? '' : ' '.repeat(size)) + line\n }\n\n return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n }\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Paragraph, Parents} from 'mdast'\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n const exit = state.enter('paragraph')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, info)\n subexit()\n exit()\n return value\n}\n","/**\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > 👉 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n * Thing to check, typically `Node`.\n * @returns\n * Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n /** @type {(node?: unknown) => node is Exclude} */\n (\n convert([\n 'break',\n 'delete',\n 'emphasis',\n // To do: next major: removed since footnotes were added to GFM.\n 'footnote',\n 'footnoteReference',\n 'image',\n 'imageReference',\n 'inlineCode',\n // Enabled by `mdast-util-math`:\n 'inlineMath',\n 'link',\n 'linkReference',\n // Enabled by `mdast-util-mdx`:\n 'mdxJsxTextElement',\n // Enabled by `mdast-util-mdx`:\n 'mdxTextExpression',\n 'strong',\n 'text',\n // Enabled by `mdast-util-directive`:\n 'textDirective'\n ])\n )\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Root} from 'mdast'\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n // Note: `html` nodes are ambiguous.\n const hasPhrasing = node.children.some(function (d) {\n return phrasing(d)\n })\n\n const container = hasPhrasing ? state.containerPhrasing : state.containerFlow\n return container.call(state, node, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkStrong(state) {\n const marker = state.options.strong || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize strong with `' +\n marker +\n '` for `options.strong`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Strong} from 'mdast'\n */\n\nimport {checkStrong} from '../util/check-strong.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nstrong.peek = strongPeek\n\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n const marker = checkStrong(state)\n const exit = state.enter('strong')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker + marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker + marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n return state.options.strong || '*'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Text} from 'mdast'\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n return state.safe(node.value, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3\n\n if (repetition < 3) {\n throw new Error(\n 'Cannot serialize rules with repetition `' +\n repetition +\n '` for `options.ruleRepetition`, expected `3` or more'\n )\n }\n\n return repetition\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Parents, ThematicBreak} from 'mdast'\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n const value = (\n checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n ).repeat(checkRuleRepetition(state))\n\n return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n blockquote,\n break: hardBreak,\n code,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text,\n thematicBreak\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').TableRow} TableRow\n *\n * @typedef {import('markdown-table').Options} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').State} State\n * @typedef {import('mdast-util-to-markdown').Info} Info\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n * Whether to add a space of padding between delimiters and cells (default:\n * `true`).\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n * Whether to align the delimiters (default: `true`).\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n * Function to detect the length of table cell content, used when aligning\n * the delimiters between cells (optional).\n */\n\nimport {ok as assert} from 'devlop'\nimport {markdownTable} from 'markdown-table'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM tables in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM tables.\n */\nexport function gfmTableFromMarkdown() {\n return {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n const align = token._align\n assert(align, 'expected `_align` on table')\n this.enter(\n {\n type: 'table',\n align: align.map(function (d) {\n return d === 'none' ? null : d\n }),\n children: []\n },\n token\n )\n this.data.inTable = true\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n this.exit(token)\n this.data.inTable = undefined\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n let value = this.resume()\n\n if (this.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace)\n }\n\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'inlineCode')\n node.value = value\n this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n // Pipes work, backslashes don’t (but can’t escape pipes).\n return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n const settings = options || {}\n const padding = settings.tableCellPadding\n const alignDelimiters = settings.tablePipeAlign\n const stringLength = settings.stringLength\n const around = padding ? ' ' : '|'\n\n return {\n unsafe: [\n {character: '\\r', inConstruct: 'tableCell'},\n {character: '\\n', inConstruct: 'tableCell'},\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n {atBreak: true, character: '|', after: '[\\t :-]'},\n // A pipe in a cell must be encoded.\n {character: '|', inConstruct: 'tableCell'},\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n {atBreak: true, character: ':', after: '-'},\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // \n {atBreak: true, character: '-', after: '[:|-]'}\n ],\n handlers: {\n inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {Table} node\n */\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align)\n }\n\n /**\n * This function isn’t really used normally, because we handle rows at the\n * table level.\n * But, if someone passes in a table row, this ensures we make somewhat sense.\n *\n * @type {ToMarkdownHandle}\n * @param {TableRow} node\n */\n function handleTableRow(node, _, state, info) {\n const row = handleTableRowAsData(node, state, info)\n const value = serializeData([row])\n // `markdown-table` will always add an align row\n return value.slice(0, value.indexOf('\\n'))\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {TableCell} node\n */\n function handleTableCell(node, _, state, info) {\n const exit = state.enter('tableCell')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...info,\n before: around,\n after: around\n })\n subexit()\n exit()\n return value\n }\n\n /**\n * @param {Array>} matrix\n * @param {Array | null | undefined} [align]\n */\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n })\n }\n\n /**\n * @param {Table} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array>} */\n const result = []\n const subexit = state.enter('table')\n\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @param {TableRow} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableRowAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array} */\n const result = []\n const subexit = state.enter('tableRow')\n\n while (++index < children.length) {\n // Note: the positional info as used here is incorrect.\n // Making it correct would be impossible due to aligning cells?\n // And it would need copy/pasting `markdown-table` into this project.\n result[index] = handleTableCell(children[index], node, state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {InlineCode} node\n */\n function inlineCodeWithTable(node, parent, state) {\n let value = defaultHandlers.inlineCode(node, parent, state)\n\n if (state.stack.includes('tableCell')) {\n value = value.replace(/\\|/g, '\\\\$&')\n }\n\n return value\n }\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {ok as assert} from 'devlop'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM task\n * list items in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM task list\n * items in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n handlers: {listItem: listItemWithTaskListItem}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n // We’re always in a paragraph, in a list item.\n const node = this.stack[this.stack.length - 2]\n assert(node.type === 'listItem')\n node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2]\n\n if (\n parent &&\n parent.type === 'listItem' &&\n typeof parent.checked === 'boolean'\n ) {\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'paragraph')\n const head = node.children[0]\n\n if (head && head.type === 'text') {\n const siblings = parent.children\n let index = -1\n /** @type {Paragraph | undefined} */\n let firstParaghraph\n\n while (++index < siblings.length) {\n const sibling = siblings[index]\n if (sibling.type === 'paragraph') {\n firstParaghraph = sibling\n break\n }\n }\n\n if (firstParaghraph === node) {\n // Must start with a space or a tab.\n head.value = head.value.slice(1)\n\n if (head.value.length === 0) {\n node.children.shift()\n } else if (\n node.position &&\n head.position &&\n typeof head.position.start.offset === 'number'\n ) {\n head.position.start.column++\n head.position.start.offset++\n node.position.start = Object.assign({}, head.position.start)\n }\n }\n }\n }\n\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, state, info) {\n const head = node.children[0]\n const checkable =\n typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n const tracker = state.createTracker(info)\n\n if (checkable) {\n tracker.move(checkbox)\n }\n\n let value = defaultHandlers.listItem(node, parent, state, {\n ...info,\n ...tracker.current()\n })\n\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n }\n\n return value\n\n /**\n * @param {string} $0\n * @returns {string}\n */\n function check($0) {\n return $0 + checkbox\n }\n}\n","/**\n * @import {Extension as FromMarkdownExtension} from 'mdast-util-from-markdown'\n * @import {Options} from 'mdast-util-gfm'\n * @import {Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n */\n\nimport {\n gfmAutolinkLiteralFromMarkdown,\n gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n gfmFootnoteFromMarkdown,\n gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n gfmStrikethroughFromMarkdown,\n gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n gfmTaskListItemFromMarkdown,\n gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array}\n * Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown(),\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown(),\n gfmTableFromMarkdown(),\n gfmTaskListItemFromMarkdown()\n ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown(),\n gfmFootnoteToMarkdown(options),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n }\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array} list\n * List to operate on.\n * @param {number} start\n * Index to remove/insert at (can be negative).\n * @param {number} remove\n * Number of items to remove.\n * @param {Array} items\n * Items to inject into `list`.\n * @returns {undefined}\n * Nothing.\n */\nexport function splice(list, start, remove, items) {\n const end = list.length;\n let chunkStart = 0;\n /** @type {Array} */\n let parameters;\n\n // Make start between zero and `end` (included).\n if (start < 0) {\n start = -start > end ? 0 : end + start;\n } else {\n start = start > end ? end : start;\n }\n remove = remove > 0 ? remove : 0;\n\n // No need to chunk the items if there’s only a couple (10k) items.\n if (items.length < 10000) {\n parameters = Array.from(items);\n parameters.unshift(start, remove);\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters);\n } else {\n // Delete `remove` items starting from `start`\n if (remove) list.splice(start, remove);\n\n // Insert the items in chunks to not cause stack overflows.\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 10000);\n parameters.unshift(start, 0);\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters);\n chunkStart += 10000;\n start += 10000;\n }\n }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array} list\n * List to operate on.\n * @param {Array} items\n * Items to add to `list`.\n * @returns {Array}\n * Either `list` or `items`.\n */\nexport function push(list, items) {\n if (list.length > 0) {\n splice(list, list.length, 0, items);\n return list;\n }\n return items;\n}","/**\n * @import {\n * Extension,\n * Handles,\n * HtmlExtension,\n * NormalizedExtension\n * } from 'micromark-util-types'\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {ReadonlyArray} extensions\n * List of syntax extensions.\n * @returns {NormalizedExtension}\n * A single combined extension.\n */\nexport function combineExtensions(extensions) {\n /** @type {NormalizedExtension} */\n const all = {}\n let index = -1\n\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index])\n }\n\n return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n * Extension to merge into.\n * @param {Extension} extension\n * Extension to merge.\n * @returns {undefined}\n * Nothing.\n */\nfunction syntaxExtension(all, extension) {\n /** @type {keyof Extension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n /** @type {Record} */\n const left = maybe || (all[hook] = {})\n /** @type {Record | undefined} */\n const right = extension[hook]\n /** @type {string} */\n let code\n\n if (right) {\n for (code in right) {\n if (!hasOwnProperty.call(left, code)) left[code] = []\n const value = right[code]\n constructs(\n // @ts-expect-error Looks like a list.\n left[code],\n Array.isArray(value) ? value : value ? [value] : []\n )\n }\n }\n }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array} existing\n * List of constructs to merge into.\n * @param {Array} list\n * List of constructs to merge.\n * @returns {undefined}\n * Nothing.\n */\nfunction constructs(existing, list) {\n let index = -1\n /** @type {Array} */\n const before = []\n\n while (++index < list.length) {\n // @ts-expect-error Looks like an object.\n ;(list[index].add === 'after' ? existing : before).push(list[index])\n }\n\n splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {ReadonlyArray} htmlExtensions\n * List of HTML extensions.\n * @returns {HtmlExtension}\n * Single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n /** @type {HtmlExtension} */\n const handlers = {}\n let index = -1\n\n while (++index < htmlExtensions.length) {\n htmlExtension(handlers, htmlExtensions[index])\n }\n\n return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n * Extension to merge into.\n * @param {HtmlExtension} extension\n * Extension to merge.\n * @returns {undefined}\n * Nothing.\n */\nfunction htmlExtension(all, extension) {\n /** @type {keyof HtmlExtension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n const left = maybe || (all[hook] = {})\n const right = extension[hook]\n /** @type {keyof Handles} */\n let type\n\n if (right) {\n for (type in right) {\n // @ts-expect-error assume document vs regular handler are managed correctly.\n left[type] = right[type]\n }\n }\n }\n}\n","/**\n * @import {Code, ConstructRecord, Event, Extension, Previous, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiControl, markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n};\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n};\nconst path = {\n tokenize: tokenizePath,\n partial: true\n};\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n};\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n};\nconst wwwAutolink = {\n name: 'wwwAutolink',\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nconst protocolAutolink = {\n name: 'protocolAutolink',\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n};\nconst emailAutolink = {\n name: 'emailAutolink',\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\n\n/** @type {ConstructRecord} */\nconst text = {};\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n return {\n text\n };\n}\n\n/** @type {Code} */\nlet code = 48;\n\n// Add alphanumerics.\nwhile (code < 123) {\n text[code] = emailAutolink;\n code++;\n if (code === 58) code = 65;else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\n\n// To do: perform email autolink literals on events, afterwards.\n// That’s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n const self = this;\n /** @type {boolean | undefined} */\n let dot;\n /** @type {boolean} */\n let data;\n return start;\n\n /**\n * Start of email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (!gfmAtext(code) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkEmail');\n return atext(code);\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function atext(code) {\n if (gfmAtext(code)) {\n effects.consume(code);\n return atext;\n }\n if (code === 64) {\n effects.consume(code);\n return emailDomain;\n }\n return nok(code);\n }\n\n /**\n * In email domain.\n *\n * The reference code is a bit overly complex as it handles the `@`, of which\n * there may be just one.\n * Source: \n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomain(code) {\n // Dot followed by alphanumerical (not `-` or `_`).\n if (code === 46) {\n return effects.check(emailDomainDotTrail, emailDomainAfter, emailDomainDot)(code);\n }\n\n // Alphanumerical, `-`, and `_`.\n if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n data = true;\n effects.consume(code);\n return emailDomain;\n }\n\n // To do: `/` if xmpp.\n\n // Note: normally we’d truncate trailing punctuation from the link.\n // However, email autolink literals cannot contain any of those markers,\n // except for `.`, but that can only occur if it isn’t trailing.\n // So we can ignore truncating!\n return emailDomainAfter(code);\n }\n\n /**\n * In email domain, on dot that is not a trail.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainDot(code) {\n effects.consume(code);\n dot = true;\n return emailDomain;\n }\n\n /**\n * After email domain.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainAfter(code) {\n // Domain must not be empty, must include a dot, and must end in alphabetical.\n // Source: .\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit('literalAutolinkEmail');\n effects.exit('literalAutolink');\n return ok(code);\n }\n return nok(code);\n }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n const self = this;\n return wwwStart;\n\n /**\n * Start of www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwStart(code) {\n if (code !== 87 && code !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkWww');\n // Note: we *check*, so we can discard the `www.` we parsed.\n // If it worked, we consider it as a part of the domain.\n return effects.check(wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok)(code);\n }\n\n /**\n * After a www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwAfter(code) {\n effects.exit('literalAutolinkWww');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n const self = this;\n let buffer = '';\n let seen = false;\n return protocolStart;\n\n /**\n * Start of protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolStart(code) {\n if ((code === 72 || code === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkHttp');\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n return nok(code);\n }\n\n /**\n * In protocol.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^^^^\n * ```\n *\n * @type {State}\n */\n function protocolPrefixInside(code) {\n // `5` is size of `https`\n if (asciiAlpha(code) && buffer.length < 5) {\n // @ts-expect-error: definitely number.\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n if (code === 58) {\n const protocol = buffer.toLowerCase();\n if (protocol === 'http' || protocol === 'https') {\n effects.consume(code);\n return protocolSlashesInside;\n }\n }\n return nok(code);\n }\n\n /**\n * In slashes.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^\n * ```\n *\n * @type {State}\n */\n function protocolSlashesInside(code) {\n if (code === 47) {\n effects.consume(code);\n if (seen) {\n return afterProtocol;\n }\n seen = true;\n return protocolSlashesInside;\n }\n return nok(code);\n }\n\n /**\n * After protocol, before domain.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function afterProtocol(code) {\n // To do: this is different from `markdown-rs`:\n // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n return code === null || asciiControl(code) || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || unicodePunctuation(code) ? nok(code) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code);\n }\n\n /**\n * After a protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolAfter(code) {\n effects.exit('literalAutolinkHttp');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n let size = 0;\n return wwwPrefixInside;\n\n /**\n * In www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixInside(code) {\n if ((code === 87 || code === 119) && size < 3) {\n size++;\n effects.consume(code);\n return wwwPrefixInside;\n }\n if (code === 46 && size === 3) {\n effects.consume(code);\n return wwwPrefixAfter;\n }\n return nok(code);\n }\n\n /**\n * After www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixAfter(code) {\n // If there is *anything*, we can link.\n return code === null ? nok(code) : ok(code);\n }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n /** @type {boolean | undefined} */\n let underscoreInLastSegment;\n /** @type {boolean | undefined} */\n let underscoreInLastLastSegment;\n /** @type {boolean | undefined} */\n let seen;\n return domainInside;\n\n /**\n * In domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^^^^^^^^^^\n * ```\n *\n * @type {State}\n */\n function domainInside(code) {\n // Check whether this marker, which is a trailing punctuation\n // marker, optionally followed by more trailing markers, and then\n // followed by an end.\n if (code === 46 || code === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code);\n }\n\n // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n // so that’s Unicode.\n // Instead of some new production for Unicode alphanumerics, markdown\n // already has that for Unicode punctuation and whitespace, so use those.\n // Source: .\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || code !== 45 && unicodePunctuation(code)) {\n return domainAfter(code);\n }\n seen = true;\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * In domain, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function domainAtPunctuation(code) {\n // There is an underscore in the last segment of the domain\n if (code === 95) {\n underscoreInLastSegment = true;\n }\n // Otherwise, it’s a `.`: save the last segment underscore in the\n // penultimate segment slot.\n else {\n underscoreInLastLastSegment = underscoreInLastSegment;\n underscoreInLastSegment = undefined;\n }\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * After domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^\n * ```\n *\n * @type {State} */\n function domainAfter(code) {\n // Note: that’s GH says a dot is needed, but it’s not true:\n // \n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code);\n }\n return ok(code);\n }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n * ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n let sizeOpen = 0;\n let sizeClose = 0;\n return pathInside;\n\n /**\n * In path.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^\n * ```\n *\n * @type {State}\n */\n function pathInside(code) {\n if (code === 40) {\n sizeOpen++;\n effects.consume(code);\n return pathInside;\n }\n\n // To do: `markdown-rs` also needs this.\n // If this is a paren, and there are less closings than openings,\n // we don’t check for a trail.\n if (code === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code);\n }\n\n // Check whether this trailing punctuation marker is optionally\n // followed by more trailing markers, and then followed\n // by an end.\n if (code === 33 || code === 34 || code === 38 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 60 || code === 63 || code === 93 || code === 95 || code === 126) {\n return effects.check(trail, ok, pathAtPunctuation)(code);\n }\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n effects.consume(code);\n return pathInside;\n }\n\n /**\n * In path, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com/a\"b\n * ^\n * ```\n *\n * @type {State}\n */\n function pathAtPunctuation(code) {\n // Count closing parens.\n if (code === 41) {\n sizeClose++;\n }\n effects.consume(code);\n return pathInside;\n }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n * ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n return trail;\n\n /**\n * In trail of domain or path.\n *\n * ```markdown\n * > | https://example.com\").\n * ^\n * ```\n *\n * @type {State}\n */\n function trail(code) {\n // Regular trailing punctuation.\n if (code === 33 || code === 34 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 63 || code === 95 || code === 126) {\n effects.consume(code);\n return trail;\n }\n\n // `&` followed by one or more alphabeticals and then a `;`, is\n // as a whole considered as trailing punctuation.\n // In all other cases, it is considered as continuation of the URL.\n if (code === 38) {\n effects.consume(code);\n return trailCharacterReferenceStart;\n }\n\n // Needed because we allow literals after `[`, as we fix:\n // .\n // Check that it is not followed by `(` or `[`.\n if (code === 93) {\n effects.consume(code);\n return trailBracketAfter;\n }\n if (\n // `<` is an end.\n code === 60 ||\n // So is whitespace.\n code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return nok(code);\n }\n\n /**\n * In trail, after `]`.\n *\n * > 👉 **Note**: this deviates from `cmark-gfm` to fix a bug.\n * > See end of for more.\n *\n * ```markdown\n * > | https://example.com](\n * ^\n * ```\n *\n * @type {State}\n */\n function trailBracketAfter(code) {\n // Whitespace or something that could start a resource or reference is the end.\n // Switch back to trail otherwise.\n if (code === null || code === 40 || code === 91 || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return trail(code);\n }\n\n /**\n * In character-reference like trail, after `&`.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceStart(code) {\n // When non-alpha, it’s not a trail.\n return asciiAlpha(code) ? trailCharacterReferenceInside(code) : nok(code);\n }\n\n /**\n * In character-reference like trail.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceInside(code) {\n // Switch back to trail if this is well-formed.\n if (code === 59) {\n effects.consume(code);\n return trail;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return trailCharacterReferenceInside;\n }\n\n // It’s not a trail.\n return nok(code);\n }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n return start;\n\n /**\n * Dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Must be dot.\n effects.consume(code);\n return after;\n }\n\n /**\n * After dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Not a trail if alphanumeric.\n return asciiAlphanumeric(code) ? nok(code) : ok(code);\n }\n}\n\n/**\n * See:\n * .\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n return code === null || code === 40 || code === 42 || code === 95 || code === 91 || code === 93 || code === 126 || markdownLineEndingOrSpace(code);\n}\n\n/**\n * See:\n * .\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n return !asciiAlpha(code);\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n // Do not allow a slash “inside” atext.\n // The reference code is a bit weird, but that’s what it results in.\n // Source: .\n // Other than slash, every preceding character is allowed.\n return !(code === 47 || gfmAtext(code));\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n return code === 43 || code === 45 || code === 46 || code === 95 || asciiAlphanumeric(code);\n}\n\n/**\n * @param {Array} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n let index = events.length;\n let result = false;\n while (index--) {\n const token = events[index][1];\n if ((token.type === 'labelLink' || token.type === 'labelImage') && !token._balanced) {\n result = true;\n break;\n }\n\n // If we’ve seen this token, and it was marked as not having any unbalanced\n // bracket before it, we can exit.\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false;\n break;\n }\n }\n if (events.length > 0 && !result) {\n // Mark the last token as “walked into” w/o finding\n // anything.\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n }\n return result;\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n * List of constructs, optionally with `resolveAll`s.\n * @param {Array} events\n * List of events.\n * @param {TokenizeContext} context\n * Context used by `tokenize`.\n * @returns {Array}\n * Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n /** @type {Array} */\n const called = []\n let index = -1\n\n while (++index < constructs.length) {\n const resolve = constructs[index].resolveAll\n\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { markdownSpace } from 'micromark-util-character';\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * spaces in markdown are often optional, in which case this factory can be\n * used and `ok` will be switched to whether spaces were found or not\n * * one line ending or space can be detected with `markdownSpace(code)` right\n * before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {TokenType} type\n * Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n * Max (exclusive).\n * @returns {State}\n * Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n if (markdownSpace(code)) {\n effects.enter(type);\n return prefix(code);\n }\n return ok(code);\n }\n\n /** @type {State} */\n function prefix(code) {\n if (markdownSpace(code) && size++ < limit) {\n effects.consume(code);\n return prefix;\n }\n effects.exit(type);\n return ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n partial: true,\n tokenize: tokenizeBlankLine\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n return start;\n\n /**\n * Start of blank line.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n }\n\n /**\n * At eof/eol, after optional whitespace.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n }\n}","/**\n * @import {Event, Exiter, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { blankLine } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n};\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to\n * enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n /** @type {Extension} */\n return {\n document: {\n [91]: {\n name: 'gfmFootnoteDefinition',\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n name: 'gfmFootnoteCall',\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n name: 'gfmPotentialFootnoteCall',\n add: 'after',\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n };\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {Token} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n const token = self.events[index][1];\n if (token.type === \"labelImage\") {\n labelStart = token;\n break;\n }\n\n // Exit if we’ve walked far enough.\n if (token.type === 'gfmFootnoteCall' || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n break;\n }\n }\n return start;\n\n /**\n * @type {State}\n */\n function start(code) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code);\n }\n const id = normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n }));\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return ok(code);\n }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length;\n /** @type {Token | undefined} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n if (events[index][1].type === \"labelImage\" && events[index][0] === 'enter') {\n labelStart = events[index][1];\n break;\n }\n }\n // Change the `labelImageMarker` to a `data`.\n events[index + 1][1].type = \"data\";\n events[index + 3][1].type = 'gfmFootnoteCallLabelMarker';\n\n // The whole (without `!`):\n /** @type {Token} */\n const call = {\n type: 'gfmFootnoteCall',\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n // The `^` marker\n /** @type {Token} */\n const marker = {\n type: 'gfmFootnoteCallMarker',\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n };\n // Increment the end 1 character.\n marker.end.column++;\n marker.end.offset++;\n marker.end._bufferIndex++;\n /** @type {Token} */\n const string = {\n type: 'gfmFootnoteCallString',\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n };\n /** @type {Token} */\n const chunk = {\n type: \"chunkString\",\n contentType: 'string',\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n };\n\n /** @type {Array} */\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1], events[index + 2], ['enter', call, context],\n // The `[`\n events[index + 3], events[index + 4],\n // The `^`.\n ['enter', marker, context], ['exit', marker, context],\n // Everything in between.\n ['enter', string, context], ['enter', chunk, context], ['exit', chunk, context], ['exit', string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2], events[events.length - 1], ['exit', call, context]];\n events.splice(index, events.length - index + 1, ...replacement);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let size = 0;\n /** @type {boolean} */\n let data;\n\n // Note: the implementation of `markdown-rs` is different, because it houses\n // core *and* extensions in one project.\n // Therefore, it can include footnote logic inside `label-end`.\n // We can’t do that, but luckily, we can parse footnotes in a simpler way than\n // needed for labels.\n return start;\n\n /**\n * Start of footnote label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteCall');\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return callStart;\n }\n\n /**\n * After `[`, at `^`.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callStart(code) {\n if (code !== 94) return nok(code);\n effects.enter('gfmFootnoteCallMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallMarker');\n effects.enter('gfmFootnoteCallString');\n effects.enter('chunkString').contentType = 'string';\n return callData;\n }\n\n /**\n * In label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callData(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteCallString');\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n effects.exit('gfmFootnoteCall');\n return ok;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? callEscape : callData;\n }\n\n /**\n * On character after escape.\n *\n * ```markdown\n * > | a [^b\\c] d\n * ^\n * ```\n *\n * @type {State}\n */\n function callEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return callData;\n }\n return callData(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {string} */\n let identifier;\n let size = 0;\n /** @type {boolean | undefined} */\n let data;\n return start;\n\n /**\n * Start of GFM footnote definition.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteDefinition')._container = true;\n effects.enter('gfmFootnoteDefinitionLabel');\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n return labelAtMarker;\n }\n\n /**\n * In label, at caret.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAtMarker(code) {\n if (code === 94) {\n effects.enter('gfmFootnoteDefinitionMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionMarker');\n effects.enter('gfmFootnoteDefinitionLabelString');\n effects.enter('chunkString').contentType = 'string';\n return labelInside;\n }\n return nok(code);\n }\n\n /**\n * In label.\n *\n * > 👉 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n * > definition labels.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteDefinitionLabelString');\n identifier = normalizeIdentifier(self.sliceSerialize(token));\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n effects.exit('gfmFootnoteDefinitionLabel');\n return labelAfter;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? labelEscape : labelInside;\n }\n\n /**\n * After `\\`, at a special character.\n *\n * > 👉 **Note**: `cmark-gfm` currently does not support escaped brackets:\n * > \n *\n * ```markdown\n * > | [^a\\*b]: c\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return labelInside;\n }\n return labelInside(code);\n }\n\n /**\n * After definition label.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n if (code === 58) {\n effects.enter('definitionMarker');\n effects.consume(code);\n effects.exit('definitionMarker');\n if (!defined.includes(identifier)) {\n defined.push(identifier);\n }\n\n // Any whitespace after the marker is eaten, forming indented code\n // is not possible.\n // No space is also fine, just like a block quote marker.\n return factorySpace(effects, whitespaceAfter, 'gfmFootnoteDefinitionWhitespace');\n }\n return nok(code);\n }\n\n /**\n * After definition prefix.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function whitespaceAfter(code) {\n // `markdown-rs` has a wrapping token for the prefix that is closed here.\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n /// Start of footnote definition continuation.\n ///\n /// ```markdown\n /// | [^a]: b\n /// > | c\n /// ^\n /// ```\n //\n // Either a blank line, which is okay, or an indented thing.\n return effects.check(blankLine, ok, effects.attempt(indent, ok, nok));\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit('gfmFootnoteDefinition');\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, 'gfmFootnoteDefinitionIndent', 4 + 1);\n\n /**\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === 'gfmFootnoteDefinitionIndent' && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok(code) : nok(code);\n }\n}","/**\n * @import {Options} from 'micromark-extension-gfm-strikethrough'\n * @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options={}]\n * Configuration.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions`, to\n * enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n const options_ = options || {};\n let single = options_.singleTilde;\n const tokenizer = {\n name: 'strikethrough',\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n };\n if (single === null || single === undefined) {\n single = true;\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n };\n\n /**\n * Take events and resolve strikethrough.\n *\n * @type {Resolver}\n */\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n\n // Walk through all events.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {\n let open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&\n // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n events[index][1].type = 'strikethroughSequence';\n events[open][1].type = 'strikethroughSequence';\n\n /** @type {Token} */\n const strikethrough = {\n type: 'strikethrough',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n\n /** @type {Token} */\n const text = {\n type: 'strikethroughText',\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n\n // Opening.\n /** @type {Array} */\n const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n // Between.\n splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));\n }\n\n // Closing.\n splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'strikethroughSequenceTemporary') {\n events[index][1].type = \"data\";\n }\n }\n return events;\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeStrikethrough(effects, ok, nok) {\n const previous = this.previous;\n const events = this.events;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n if (previous === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n return nok(code);\n }\n effects.enter('strikethroughSequenceTemporary');\n return more(code);\n }\n\n /** @type {State} */\n function more(code) {\n const before = classifyCharacter(previous);\n if (code === 126) {\n // If this is the third marker, exit.\n if (size > 1) return nok(code);\n effects.consume(code);\n size++;\n return more;\n }\n if (size < 2 && !single) return nok(code);\n const token = effects.exit('strikethroughSequenceTemporary');\n const after = classifyCharacter(code);\n token._open = !after || after === 2 && Boolean(before);\n token._close = !before || before === 2 && Boolean(after);\n return ok(code);\n }\n }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it’s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it’s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n /**\n * Record of changes.\n *\n * @type {Array}\n */\n this.map = [];\n }\n\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array} add\n * @returns {undefined}\n */\n add(index, remove, add) {\n addImplementation(this, index, remove, add);\n }\n\n // To do: add this when moving to `micromark`.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array} add\n // * @returns {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImplementation(this, index, remove, add, true)\n // }\n\n /**\n * Done, change the events.\n *\n * @param {Array} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function (a, b) {\n return a[0] - b[0];\n });\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (this.map.length === 0) {\n return;\n }\n\n // To do: if links are added in events, like they are in `markdown-rs`,\n // this is needed.\n // // Calculate jumps: where items in the current list move to.\n // /** @type {Array} */\n // const jumps = []\n // let index = 0\n // let addAcc = 0\n // let removeAcc = 0\n // while (index < this.map.length) {\n // const [at, remove, add] = this.map[index]\n // removeAcc += remove\n // addAcc += add.length\n // jumps.push([at, removeAcc, addAcc])\n // index += 1\n // }\n //\n // . shiftLinks(events, jumps)\n\n let index = this.map.length;\n /** @type {Array>} */\n const vecs = [];\n while (index > 0) {\n index -= 1;\n vecs.push(events.slice(this.map[index][0] + this.map[index][1]), this.map[index][2]);\n\n // Truncate rest.\n events.length = this.map[index][0];\n }\n vecs.push(events.slice());\n events.length = 0;\n let slice = vecs.pop();\n while (slice) {\n for (const element of slice) {\n events.push(element);\n }\n slice = vecs.pop();\n }\n\n // Truncate everything.\n this.map.length = 0;\n }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array} add\n * @returns {undefined}\n */\nfunction addImplementation(editMap, at, remove, add) {\n let index = 0;\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (remove === 0 && add.length === 0) {\n return;\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove;\n\n // To do: before not used by tables, use when moving to micromark.\n // if (before) {\n // add.push(...editMap.map[index][2])\n // editMap.map[index][2] = add\n // } else {\n editMap.map[index][2].push(...add);\n // }\n\n return;\n }\n index += 1;\n }\n editMap.map.push([at, remove, add]);\n}\n\n// /**\n// * Shift `previous` and `next` links according to `jumps`.\n// *\n// * This fixes links in case there are events removed or added between them.\n// *\n// * @param {Array} events\n// * @param {Array} jumps\n// */\n// function shiftLinks(events, jumps) {\n// let jumpIndex = 0\n// let index = 0\n// let add = 0\n// let rm = 0\n\n// while (index < events.length) {\n// const rmCurr = rm\n\n// while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n// add = jumps[jumpIndex][2]\n// rm = jumps[jumpIndex][1]\n// jumpIndex += 1\n// }\n\n// // Ignore items that will be removed.\n// if (rm > rmCurr) {\n// index += rm - rmCurr\n// } else {\n// // ?\n// // if let Some(link) = &events[index].link {\n// // if let Some(next) = link.next {\n// // events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n// // while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n// // add = jumps[jumpIndex].2;\n// // rm = jumps[jumpIndex].1;\n// // jumpIndex += 1;\n// // }\n// // events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n// // index = next;\n// // continue;\n// // }\n// // }\n// index += 1\n// }\n// }\n// }","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly>} events\n * List of events.\n * @param {number} index\n * Table enter event.\n * @returns {Array}\n * List of aligns.\n */\nexport function gfmTableAlign(events, index) {\n let inDelimiterRow = false;\n /** @type {Array} */\n const align = [];\n while (index < events.length) {\n const event = events[index];\n if (inDelimiterRow) {\n if (event[0] === 'enter') {\n // Start of alignment value: set a new column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n if (event[1].type === 'tableContent') {\n align.push(events[index + 1][1].type === 'tableDelimiterMarker' ? 'left' : 'none');\n }\n }\n // Exits:\n // End of alignment value: change the column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n else if (event[1].type === 'tableContent') {\n if (events[index - 1][1].type === 'tableDelimiterMarker') {\n const alignIndex = align.length - 1;\n align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right';\n }\n }\n // Done!\n else if (event[1].type === 'tableDelimiterRow') {\n break;\n }\n } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n inDelimiterRow = true;\n }\n index += 1;\n }\n return align;\n}","/**\n * @import {Event, Extension, Point, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n * Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n * Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { EditMap } from './edit-map.js';\nimport { gfmTableAlign } from './infer.js';\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * table syntax.\n */\nexport function gfmTable() {\n return {\n flow: {\n null: {\n name: 'table',\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n const self = this;\n let size = 0;\n let sizeB = 0;\n /** @type {boolean | undefined} */\n let seen;\n return start;\n\n /**\n * Start of a GFM table.\n *\n * If there is a valid table row or table head before, then we try to parse\n * another row.\n * Otherwise, we try to parse a head.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * > | | b |\n * ^\n * ```\n * @type {State}\n */\n function start(code) {\n let index = self.events.length - 1;\n while (index > -1) {\n const type = self.events[index][1].type;\n if (type === \"lineEnding\" ||\n // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === \"linePrefix\") index--;else break;\n }\n const tail = index > -1 ? self.events[index][1].type : null;\n const next = tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore;\n\n // Don’t allow lazy body rows.\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n return next(code);\n }\n\n /**\n * Before table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBefore(code) {\n effects.enter('tableHead');\n effects.enter('tableRow');\n return headRowStart(code);\n }\n\n /**\n * Before table head row, after whitespace.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowStart(code) {\n if (code === 124) {\n return headRowBreak(code);\n }\n\n // To do: micromark-js should let us parse our own whitespace in extensions,\n // like `markdown-rs`:\n //\n // ```js\n // // 4+ spaces.\n // if (markdownSpace(code)) {\n // return nok(code)\n // }\n // ```\n\n seen = true;\n // Count the first character, that isn’t a pipe, double.\n sizeB += 1;\n return headRowBreak(code);\n }\n\n /**\n * At break in table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * ^\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBreak(code) {\n if (code === null) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n // If anything other than one pipe (ignoring whitespace) was used, it’s fine.\n if (sizeB > 1) {\n sizeB = 0;\n // To do: check if this works.\n // Feel free to interrupt:\n self.interrupt = true;\n effects.exit('tableRow');\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return headDelimiterStart;\n }\n\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownSpace(code)) {\n // To do: check if this is fine.\n // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n // State::Retry(space_or_tab(tokenizer))\n return factorySpace(effects, headRowBreak, \"whitespace\")(code);\n }\n sizeB += 1;\n if (seen) {\n seen = false;\n // Header cell count.\n size += 1;\n }\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n // Whether a delimiter was seen.\n seen = true;\n return headRowBreak;\n }\n\n // Anything else is cell data.\n effects.enter(\"data\");\n return headRowData(code);\n }\n\n /**\n * In table head row data.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return headRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? headRowEscape : headRowData;\n }\n\n /**\n * In table head row escape.\n *\n * ```markdown\n * > | | a\\-b |\n * ^\n * | | ---- |\n * | | c |\n * ```\n *\n * @type {State}\n */\n function headRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return headRowData;\n }\n return headRowData(code);\n }\n\n /**\n * Before delimiter row.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterStart(code) {\n // Reset `interrupt`.\n self.interrupt = false;\n\n // Note: in `markdown-rs`, we need to handle piercing here too.\n if (self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n effects.enter('tableDelimiterRow');\n // Track if we’ve seen a `:` or `|`.\n seen = false;\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n return headDelimiterBefore(code);\n }\n\n /**\n * Before delimiter row, after optional whitespace.\n *\n * Reused when a `|` is found later, to parse another cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterBefore(code) {\n if (code === 45 || code === 58) {\n return headDelimiterValueBefore(code);\n }\n if (code === 124) {\n seen = true;\n // If we start with a pipe, we open a cell marker.\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return headDelimiterCellBefore;\n }\n\n // More whitespace / empty row not allowed at start.\n return headDelimiterNok(code);\n }\n\n /**\n * After `|`, before delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellBefore(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code);\n }\n return headDelimiterValueBefore(code);\n }\n\n /**\n * Before delimiter cell value.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterValueBefore(code) {\n // Align: left.\n if (code === 58) {\n sizeB += 1;\n seen = true;\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterLeftAlignmentAfter;\n }\n\n // Align: none.\n if (code === 45) {\n sizeB += 1;\n // To do: seems weird that this *isn’t* left aligned, but that state is used?\n return headDelimiterLeftAlignmentAfter(code);\n }\n if (code === null || markdownLineEnding(code)) {\n return headDelimiterCellAfter(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * After delimiter cell left alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | :- |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterLeftAlignmentAfter(code) {\n if (code === 45) {\n effects.enter('tableDelimiterFiller');\n return headDelimiterFiller(code);\n }\n\n // Anything else is not ok after the left-align colon.\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter cell filler.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterFiller(code) {\n if (code === 45) {\n effects.consume(code);\n return headDelimiterFiller;\n }\n\n // Align is `center` if it was `left`, `right` otherwise.\n if (code === 58) {\n seen = true;\n effects.exit('tableDelimiterFiller');\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterRightAlignmentAfter;\n }\n effects.exit('tableDelimiterFiller');\n return headDelimiterRightAlignmentAfter(code);\n }\n\n /**\n * After delimiter cell right alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterRightAlignmentAfter(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code);\n }\n return headDelimiterCellAfter(code);\n }\n\n /**\n * After delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellAfter(code) {\n if (code === 124) {\n return headDelimiterBefore(code);\n }\n if (code === null || markdownLineEnding(code)) {\n // Exit when:\n // * there was no `:` or `|` at all (it’s a thematic break or setext\n // underline instead)\n // * the header cell count is not the delimiter cell count\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code);\n }\n\n // Note: in markdown-rs`, a reset is needed here.\n effects.exit('tableDelimiterRow');\n effects.exit('tableHead');\n // To do: in `markdown-rs`, resolvers need to be registered manually.\n // effects.register_resolver(ResolveName::GfmTable)\n return ok(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter row, at a disallowed byte.\n *\n * ```markdown\n * | | a |\n * > | | x |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterNok(code) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n\n /**\n * Before table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowStart(code) {\n // Note: in `markdown-rs` we need to manually take care of a prefix,\n // but in `micromark-js` that is done for us, so if we’re here, we’re\n // never at whitespace.\n effects.enter('tableRow');\n return bodyRowBreak(code);\n }\n\n /**\n * At break in table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ^\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowBreak(code) {\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return bodyRowBreak;\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit('tableRow');\n return ok(code);\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, bodyRowBreak, \"whitespace\")(code);\n }\n\n // Anything else is cell content.\n effects.enter(\"data\");\n return bodyRowData(code);\n }\n\n /**\n * In table body row data.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return bodyRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? bodyRowEscape : bodyRowData;\n }\n\n /**\n * In table body row escape.\n *\n * ```markdown\n * | | a |\n * | | ---- |\n * > | | b\\-c |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return bodyRowData;\n }\n return bodyRowData(code);\n }\n}\n\n/** @type {Resolver} */\n\nfunction resolveTable(events, context) {\n let index = -1;\n let inFirstCellAwaitingPipe = true;\n /** @type {RowKind} */\n let rowKind = 0;\n /** @type {Range} */\n let lastCell = [0, 0, 0, 0];\n /** @type {Range} */\n let cell = [0, 0, 0, 0];\n let afterHeadAwaitingFirstBodyRow = false;\n let lastTableEnd = 0;\n /** @type {Token | undefined} */\n let currentTable;\n /** @type {Token | undefined} */\n let currentBody;\n /** @type {Token | undefined} */\n let currentCell;\n const map = new EditMap();\n while (++index < events.length) {\n const event = events[index];\n const token = event[1];\n if (event[0] === 'enter') {\n // Start of head.\n if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = false;\n\n // Inject previous (body end and) table end.\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n currentBody = undefined;\n lastTableEnd = 0;\n }\n\n // Inject table start.\n currentTable = {\n type: 'table',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentTable, context]]);\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n inFirstCellAwaitingPipe = true;\n currentCell = undefined;\n lastCell = [0, 0, 0, 0];\n cell = [0, index + 1, 0, 0];\n\n // Inject table body start.\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false;\n currentBody = {\n type: 'tableBody',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentBody, context]]);\n }\n rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1;\n }\n // Cell data.\n else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n inFirstCellAwaitingPipe = false;\n\n // First value in cell.\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n lastCell = [0, 0, 0, 0];\n }\n cell[2] = index;\n }\n } else if (token.type === 'tableCellDivider') {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false;\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n }\n lastCell = cell;\n cell = [lastCell[1], index, 0, 0];\n }\n }\n }\n // Exit events.\n else if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = true;\n lastTableEnd = index;\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n lastTableEnd = index;\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, index, currentCell);\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map, context, cell, rowKind, index, currentCell);\n }\n rowKind = 0;\n } else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n cell[3] = index;\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n }\n map.consume(context.events);\n\n // To do: move this into `html`, when events are exposed there.\n // That’s what `markdown-rs` does.\n // That needs updates to `mdast-util-gfm-table`.\n index = -1;\n while (++index < context.events.length) {\n const event = context.events[index];\n if (event[0] === 'enter' && event[1].type === 'table') {\n event[1]._align = gfmTableAlign(context.events, index);\n }\n }\n return events;\n}\n\n/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly} context\n * @param {Readonly} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n const groupName = rowKind === 1 ? 'tableHeader' : rowKind === 2 ? 'tableDelimiter' : 'tableData';\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n const valueName = 'tableContent';\n\n // Insert an exit for the previous cell, if there is one.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n map.add(range[0], 0, [['exit', previousCell, context]]);\n }\n\n // Insert enter of this cell.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^^^^-- this cell\n // ```\n const now = getPoint(context.events, range[1]);\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n };\n map.add(range[1], 0, [['enter', previousCell, context]]);\n\n // Insert text start at first data start and end at last data end, and\n // remove events between.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2]);\n const relatedEnd = getPoint(context.events, range[3]);\n /** @type {Token} */\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n };\n map.add(range[2], 0, [['enter', valueToken, context]]);\n if (rowKind !== 2) {\n // Fix positional info on remaining events\n const start = context.events[range[2]];\n const end = context.events[range[3]];\n start[1].end = Object.assign({}, end[1].end);\n start[1].type = \"chunkText\";\n start[1].contentType = \"text\";\n\n // Remove if needed.\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1;\n const b = range[3] - range[2] - 1;\n map.add(a, b, []);\n }\n }\n map.add(range[3] + 1, 0, [['exit', valueToken, context]]);\n }\n\n // Insert an exit for the last cell, if at the row end.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^^^-- this cell (the last one contains two “between” parts)\n // ```\n if (rowEnd !== undefined) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n map.add(rowEnd, 0, [['exit', previousCell, context]]);\n previousCell = undefined;\n }\n return previousCell;\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {Readonly} map\n * @param {Readonly} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n /** @type {Array} */\n const exits = [];\n const related = getPoint(context.events, index);\n if (tableBody) {\n tableBody.end = Object.assign({}, related);\n exits.push(['exit', tableBody, context]);\n }\n table.end = Object.assign({}, related);\n exits.push(['exit', table, context]);\n map.add(index + 1, 0, exits);\n}\n\n/**\n * @param {Readonly>} events\n * @param {number} index\n * @returns {Readonly}\n */\nfunction getPoint(events, index) {\n const event = events[index];\n const side = event[0] === 'enter' ? 'start' : 'end';\n return event[1][side];\n}","/**\n * @import {Extension, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nconst tasklistCheck = {\n name: 'tasklistCheck',\n tokenize: tokenizeTasklistCheck\n};\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n const self = this;\n return open;\n\n /**\n * At start of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null ||\n // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem) {\n return nok(code);\n }\n effects.enter('taskListCheck');\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n return inside;\n }\n\n /**\n * In task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // Currently we match how GH works in files.\n // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n if (markdownLineEndingOrSpace(code)) {\n effects.enter('taskListCheckValueUnchecked');\n effects.consume(code);\n effects.exit('taskListCheckValueUnchecked');\n return close;\n }\n if (code === 88 || code === 120) {\n effects.enter('taskListCheckValueChecked');\n effects.consume(code);\n effects.exit('taskListCheckValueChecked');\n return close;\n }\n return nok(code);\n }\n\n /**\n * At close of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function close(code) {\n if (code === 93) {\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n effects.exit('taskListCheck');\n return after;\n }\n return nok(code);\n }\n\n /**\n * @type {State}\n */\n function after(code) {\n // EOL in paragraph means there must be something else after it.\n if (markdownLineEnding(code)) {\n return ok(code);\n }\n\n // Space or tab?\n // Check what comes after.\n if (markdownSpace(code)) {\n return effects.check({\n tokenize: spaceThenNonSpace\n }, ok, nok)(code);\n }\n\n // EOF, or non-whitespace, both wrong.\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n return factorySpace(effects, after, \"whitespace\");\n\n /**\n * After whitespace, after task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // EOF means there was nothing, so bad.\n // EOL means there’s content after it, so good.\n // Impossible to have more spaces.\n // Anything else is good.\n return code === null ? nok(code) : ok(code);\n }\n}","/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n combineExtensions,\n combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n gfmAutolinkLiteral,\n gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n gfmStrikethrough,\n gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n gfmTaskListItem,\n gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * syntax.\n */\nexport function gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral(),\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable(),\n gfmTaskListItem()\n ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n return combineHtmlExtensions([\n gfmAutolinkLiteralHtml(),\n gfmFootnoteHtml(options),\n gfmStrikethroughHtml(),\n gfmTableHtml(),\n gfmTagfilterHtml(),\n gfmTaskListItemHtml()\n ])\n}\n","/**\n * @import {Root} from 'mdast'\n * @import {Options} from 'remark-gfm'\n * @import {} from 'remark-parse'\n * @import {} from 'remark-stringify'\n * @import {Processor} from 'unified'\n */\n\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\nimport {gfm} from 'micromark-extension-gfm'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Add support GFM (autolink literals, footnotes, strikethrough, tables,\n * tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkGfm(options) {\n // @ts-expect-error: TS is wrong about `this`.\n // eslint-disable-next-line unicorn/no-this-assignment\n const self = /** @type {Processor} */ (this)\n const settings = options || emptyOptions\n const data = self.data()\n\n const micromarkExtensions =\n data.micromarkExtensions || (data.micromarkExtensions = [])\n const fromMarkdownExtensions =\n data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n const toMarkdownExtensions =\n data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n micromarkExtensions.push(gfm(settings))\n fromMarkdownExtensions.push(gfmFromMarkdown())\n toMarkdownExtensions.push(gfmToMarkdown(settings))\n}\n","// This module is generated by `script/`.\n/* eslint-disable no-control-regex, no-misleading-character-class, no-useless-escape */\nexport const regex = /[\\0-\\x1F!-,\\.\\/:-@\\[-\\^`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u0590\\u05BE\\u05C0\\u05C3\\u05C6\\u05C8-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u060F\\u061B-\\u061F\\u066A-\\u066D\\u06D4\\u06DD\\u06DE\\u06E9\\u06FD\\u06FE\\u0700-\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07F6-\\u07F9\\u07FB\\u07FC\\u07FE\\u07FF\\u082E-\\u083F\\u085C-\\u085F\\u086B-\\u089F\\u08B5\\u08C8-\\u08D2\\u08E2\\u0964\\u0965\\u0970\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09F2-\\u09FB\\u09FD\\u09FF\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF0-\\u0AF8\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B54\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B70\\u0B72-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BF0-\\u0BFF\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5B-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C7F\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0CFF\\u0D0D\\u0D11\\u0D45\\u0D49\\u0D4F-\\u0D53\\u0D58-\\u0D5E\\u0D64\\u0D65\\u0D70-\\u0D79\\u0D80\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DE5\\u0DF0\\u0DF1\\u0DF4-\\u0E00\\u0E3B-\\u0E3F\\u0E4F\\u0E5A-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F17\\u0F1A-\\u0F1F\\u0F2A-\\u0F34\\u0F36\\u0F38\\u0F3A-\\u0F3D\\u0F48\\u0F6D-\\u0F70\\u0F85\\u0F98\\u0FBD-\\u0FC5\\u0FC7-\\u0FFF\\u104A-\\u104F\\u109E\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u1360-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16ED\\u16F9-\\u16FF\\u170D\\u1715-\\u171F\\u1735-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17D4-\\u17D6\\u17D8-\\u17DB\\u17DE\\u17DF\\u17EA-\\u180A\\u180E\\u180F\\u181A-\\u181F\\u1879-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F\\u192C-\\u192F\\u193C-\\u1945\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DA-\\u19FF\\u1A1C-\\u1A1F\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1AA6\\u1AA8-\\u1AAF\\u1AC1-\\u1AFF\\u1B4C-\\u1B4F\\u1B5A-\\u1B6A\\u1B74-\\u1B7F\\u1BF4-\\u1BFF\\u1C38-\\u1C3F\\u1C4A-\\u1C4C\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CCF\\u1CD3\\u1CFB-\\u1CFF\\u1DFA\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u203E\\u2041-\\u2053\\u2055-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u20CF\\u20F1-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u215F\\u2189-\\u24B5\\u24EA-\\u2BFF\\u2C2F\\u2C5F\\u2CE5-\\u2CEA\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E00-\\u2E2E\\u2E30-\\u3004\\u3008-\\u3020\\u3030\\u3036\\u3037\\u303D-\\u3040\\u3097\\u3098\\u309B\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\u9FFD-\\u9FFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA62C-\\uA63F\\uA673\\uA67E\\uA6F2-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7C0\\uA7C1\\uA7CB-\\uA7F4\\uA828-\\uA82B\\uA82D-\\uA83F\\uA874-\\uA87F\\uA8C6-\\uA8CF\\uA8DA-\\uA8DF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA954-\\uA95F\\uA97D-\\uA97F\\uA9C1-\\uA9CE\\uA9DA-\\uA9DF\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A-\\uAA5F\\uAA77-\\uAA79\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAF0\\uAAF1\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABEB\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFDFF\\uFE10-\\uFE1F\\uFE30-\\uFE32\\uFE35-\\uFE4C\\uFE50-\\uFE6F\\uFE75\\uFEFD-\\uFF0F\\uFF1A-\\uFF20\\uFF3B-\\uFF3E\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDD3F\\uDD75-\\uDDFC\\uDDFE-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEDF\\uDEE1-\\uDEFF\\uDF20-\\uDF2C\\uDF4B-\\uDF4F\\uDF7B-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0\\uDFD6-\\uDFFF]|\\uD801[\\uDC9E\\uDC9F\\uDCAA-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE04\\uDE07-\\uDE0B\\uDE14\\uDE18\\uDE36\\uDE37\\uDE3B-\\uDE3E\\uDE40-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE7-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD28-\\uDD2F\\uDD3A-\\uDE7F\\uDEAA\\uDEAD-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF51-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC47-\\uDC65\\uDC70-\\uDC7E\\uDCBB-\\uDCCF\\uDCE9-\\uDCEF\\uDCFA-\\uDCFF\\uDD35\\uDD40-\\uDD43\\uDD48-\\uDD4F\\uDD74\\uDD75\\uDD77-\\uDD7F\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE38-\\uDE3D\\uDE3F-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEEB-\\uDEEF\\uDEFA-\\uDEFF\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A\\uDF45\\uDF46\\uDF49\\uDF4A\\uDF4E\\uDF4F\\uDF51-\\uDF56\\uDF58-\\uDF5C\\uDF64\\uDF65\\uDF6D-\\uDF6F\\uDF75-\\uDFFF]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A-\\uDC5D\\uDC62-\\uDC7F\\uDCC6\\uDCC8-\\uDCCF\\uDCDA-\\uDD7F\\uDDB6\\uDDB7\\uDDC1-\\uDDD7\\uDDDE-\\uDDFF\\uDE41-\\uDE43\\uDE45-\\uDE4F\\uDE5A-\\uDE7F\\uDEB9-\\uDEBF\\uDECA-\\uDEFF\\uDF1B\\uDF1C\\uDF2C-\\uDF2F\\uDF3A-\\uDFFF]|\\uD806[\\uDC3B-\\uDC9F\\uDCEA-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD36\\uDD39\\uDD3A\\uDD44-\\uDD4F\\uDD5A-\\uDD9F\\uDDA8\\uDDA9\\uDDD8\\uDDD9\\uDDE2\\uDDE5-\\uDDFF\\uDE3F-\\uDE46\\uDE48-\\uDE4F\\uDE9A-\\uDE9C\\uDE9E-\\uDEBF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC37\\uDC41-\\uDC4F\\uDC5A-\\uDC71\\uDC90\\uDC91\\uDCA8\\uDCB7-\\uDCFF\\uDD07\\uDD0A\\uDD37-\\uDD39\\uDD3B\\uDD3E\\uDD48-\\uDD4F\\uDD5A-\\uDD5F\\uDD66\\uDD69\\uDD8F\\uDD92\\uDD99-\\uDD9F\\uDDAA-\\uDEDF\\uDEF7-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC6F-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80B\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82B\\uD82D\\uD82E\\uD830-\\uD833\\uD837\\uD839\\uD83D\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDB3F\\uDB41-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F\\uDE6A-\\uDECF\\uDEEE\\uDEEF\\uDEF5-\\uDEFF\\uDF37-\\uDF3F\\uDF44-\\uDF4F\\uDF5A-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4E\\uDF88-\\uDF8E\\uDFA0-\\uDFDF\\uDFE2\\uDFE5-\\uDFEF\\uDFF2-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82C[\\uDD1F-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDC9C\\uDC9F-\\uDFFF]|\\uD834[\\uDC00-\\uDD64\\uDD6A-\\uDD6C\\uDD73-\\uDD7A\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDE41\\uDE45-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC\\uDFCD]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85-\\uDE9A\\uDEA0\\uDEB0-\\uDFFF]|\\uD838[\\uDC07\\uDC19\\uDC1A\\uDC22\\uDC25\\uDC2B-\\uDCFF\\uDD2D-\\uDD2F\\uDD3E\\uDD3F\\uDD4A-\\uDD4D\\uDD4F-\\uDEBF\\uDEFA-\\uDFFF]|\\uD83A[\\uDCC5-\\uDCCF\\uDCD7-\\uDCFF\\uDD4C-\\uDD4F\\uDD5A-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD83C[\\uDC00-\\uDD2F\\uDD4A-\\uDD4F\\uDD6A-\\uDD6F\\uDD8A-\\uDFFF]|\\uD83E[\\uDC00-\\uDFEF\\uDFFA-\\uDFFF]|\\uD869[\\uDEDE-\\uDEFF]|\\uD86D[\\uDF35-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|\\uDB40[\\uDC00-\\uDCFF\\uDDF0-\\uDFFF]/g\n","import { regex } from './regex.js'\n\nconst own = Object.hasOwnProperty\n\n/**\n * Slugger.\n */\nexport default class BananaSlug {\n /**\n * Create a new slug class.\n */\n constructor () {\n /** @type {Record} */\n // eslint-disable-next-line no-unused-expressions\n this.occurrences\n\n this.reset()\n }\n\n /**\n * Generate a unique slug.\n *\n * Tracks previously generated slugs: repeated calls with the same value\n * will result in different slugs.\n * Use the `slug` function to get same slugs.\n *\n * @param {string} value\n * String of text to slugify\n * @param {boolean} [maintainCase=false]\n * Keep the current case, otherwise make all lowercase\n * @return {string}\n * A unique slug string\n */\n slug (value, maintainCase) {\n const self = this\n let result = slug(value, maintainCase === true)\n const originalSlug = result\n\n while (own.call(self.occurrences, result)) {\n self.occurrences[originalSlug]++\n result = originalSlug + '-' + self.occurrences[originalSlug]\n }\n\n self.occurrences[result] = 0\n\n return result\n }\n\n /**\n * Reset - Forget all previous slugs\n *\n * @return void\n */\n reset () {\n this.occurrences = Object.create(null)\n }\n}\n\n/**\n * Generate a slug.\n *\n * Does not track previously generated slugs: repeated calls with the same value\n * will result in the exact same slug.\n * Use the `GithubSlugger` class to get unique slugs.\n *\n * @param {string} value\n * String of text to slugify\n * @param {boolean} [maintainCase=false]\n * Keep the current case, otherwise make all lowercase\n * @return {string}\n * A unique slug string\n */\nexport function slug (value, maintainCase) {\n if (typeof value !== 'string') return ''\n if (!maintainCase) value = value.toLowerCase()\n return value.replace(regex, '').replace(/ /g, '-')\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n/**\n * Get the rank (`1` to `6`) of headings (`h1` to `h6`).\n *\n * @param {Nodes} node\n * Node to check.\n * @returns {number | undefined}\n * Rank of the heading or `undefined` if not a heading.\n */\nexport function headingRank(node) {\n const name = node.type === 'element' ? node.tagName.toLowerCase() : ''\n const code =\n name.length === 2 && name.charCodeAt(0) === 104 /* `h` */\n ? name.charCodeAt(1)\n : 0\n return code > 48 /* `0` */ && code < 55 /* `7` */\n ? code - 48 /* `0` */\n : undefined\n}\n","/**\n * @import {Nodes, Parents} from 'hast'\n */\n\n/**\n * Get the plain-text value of a hast node.\n *\n * @param {Nodes} node\n * Node to serialize.\n * @returns {string}\n * Serialized node.\n */\nexport function toString(node) {\n // “The concatenation of data of all the Text node descendants of the context\n // object, in tree order.”\n if ('children' in node) {\n return all(node)\n }\n\n // “Context object’s data.”\n return 'value' in node ? node.value : ''\n}\n\n/**\n * @param {Nodes} node\n * Node.\n * @returns {string}\n * Serialized node.\n */\nfunction one(node) {\n if (node.type === 'text') {\n return node.value\n }\n\n return 'children' in node ? all(node) : ''\n}\n\n/**\n * @param {Parents} node\n * Node.\n * @returns {string}\n * Serialized node.\n */\nfunction all(node) {\n let index = -1\n /** @type {Array} */\n const result = []\n\n while (++index < node.children.length) {\n result[index] = one(node.children[index])\n }\n\n return result.join('')\n}\n","/**\n * @typedef {import('hast').Root} Root\n */\n\n/**\n * @typedef Options\n * Configuration (optional).\n * @property {string} [prefix='']\n * Prefix to add in front of `id`s (default: `''`).\n */\n\nimport GithubSlugger from 'github-slugger'\nimport {headingRank} from 'hast-util-heading-rank'\nimport {toString} from 'hast-util-to-string'\nimport {visit} from 'unist-util-visit'\n\n/** @type {Options} */\nconst emptyOptions = {}\nconst slugs = new GithubSlugger()\n\n/**\n * Add `id`s to headings.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns\n * Transform.\n */\nexport default function rehypeSlug(options) {\n const settings = options || emptyOptions\n const prefix = settings.prefix || ''\n\n /**\n * @param {Root} tree\n * Tree.\n * @returns {undefined}\n * Nothing.\n */\n return function (tree) {\n slugs.reset()\n\n visit(tree, 'element', function (node) {\n if (headingRank(node) && !node.properties.id) {\n node.properties.id = prefix + slugs.slug(toString(node))\n }\n })\n }\n}\n","import type { PluggableList, Plugin } from \"unified\";\nimport type { Root as MdastRoot } from \"mdast\";\nimport type { Root as HastRoot, Element } from \"hast\";\nimport type { VFile } from \"vfile\";\nimport remarkGfm from \"remark-gfm\";\nimport rehypeSlug from \"rehype-slug\";\nimport { findAndReplace } from \"mdast-util-find-and-replace\";\nimport { visit } from \"unist-util-visit\";\nimport type { QuartzTransformerPlugin, BuildCtx } from \"@quartz-community/types\";\nimport type { ExampleTransformerOptions } from \"./types\";\n\nconst defaultOptions: ExampleTransformerOptions = {\n highlightToken: \"==\",\n headingClass: \"example-plugin-heading\",\n enableGfm: true,\n addHeadingSlugs: true,\n};\n\nconst escapeRegExp = (value: string) => value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\nconst remarkHighlightToken = (token: string): Plugin<[], MdastRoot> => {\n const escapedToken = escapeRegExp(token);\n const pattern = new RegExp(`${escapedToken}([^\\n]+?)${escapedToken}`, \"g\");\n return () => (tree: MdastRoot, _file: VFile) => {\n findAndReplace(tree, [\n [\n pattern,\n (_match: string, value: string) => ({\n type: \"strong\",\n children: [{ type: \"text\", value }],\n }),\n ],\n ]);\n };\n};\n\nconst rehypeHeadingClass = (className: string): Plugin<[], HastRoot> => {\n return () => (tree: HastRoot, _file: VFile) => {\n visit(tree, \"element\", (node: Element) => {\n if (!/^h[1-6]$/.test(node.tagName)) {\n return;\n }\n\n const existing = node.properties?.className;\n const classes: string[] = Array.isArray(existing)\n ? existing.filter((value): value is string => typeof value === \"string\")\n : typeof existing === \"string\"\n ? [existing]\n : [];\n node.properties = {\n ...node.properties,\n className: [...classes, className],\n };\n });\n };\n};\n\n/**\n * Example transformer showing remark/rehype usage and resource injection.\n */\nexport const ExampleTransformer: QuartzTransformerPlugin> = (\n userOptions?: Partial,\n) => {\n const options = { ...defaultOptions, ...userOptions };\n return {\n name: \"ExampleTransformer\",\n textTransform(_ctx: BuildCtx, src: string) {\n return src.endsWith(\"\\n\") ? src : `${src}\\n`;\n },\n markdownPlugins(): PluggableList {\n const plugins: PluggableList = [remarkHighlightToken(options.highlightToken)];\n if (options.enableGfm) {\n plugins.unshift(remarkGfm);\n }\n return plugins;\n },\n htmlPlugins(): PluggableList {\n const plugins: PluggableList = [rehypeHeadingClass(options.headingClass)];\n if (options.addHeadingSlugs) {\n plugins.unshift(rehypeSlug);\n }\n return plugins;\n },\n externalResources() {\n return {\n css: [\n {\n content: `.${options.headingClass} { letter-spacing: 0.02em; }`,\n inline: true,\n },\n ],\n js: [\n {\n contentType: \"inline\",\n loadTime: \"afterDOMReady\",\n script: \"document.documentElement.dataset.exampleTransformer = 'true'\",\n },\n ],\n additionalHead: [],\n };\n },\n };\n};\n","import type { QuartzFilterPlugin, ProcessedContent, BuildCtx } from \"@quartz-community/types\";\nimport type { ExampleFilterOptions } from \"./types\";\n\nconst defaultOptions: ExampleFilterOptions = {\n allowDrafts: false,\n excludeTags: [\"private\"],\n excludePathPrefixes: [\"_drafts/\", \"_private/\"],\n};\n\nconst normalizeTag = (tag: unknown) => (typeof tag === \"string\" ? tag.trim().toLowerCase() : \"\");\n\nconst includesTag = (tags: unknown, excludedTags: string[]) => {\n if (!Array.isArray(tags)) {\n return false;\n }\n\n const normalizedExcluded = excludedTags.map((tag) => tag.toLowerCase());\n return tags.some((tag) => normalizedExcluded.includes(normalizeTag(tag)));\n};\n\n/**\n * Example filter that removes drafts, tagged pages, and excluded path prefixes.\n */\nexport const ExampleFilter: QuartzFilterPlugin> = (\n userOptions?: Partial,\n) => {\n const options = { ...defaultOptions, ...userOptions };\n return {\n name: \"ExampleFilter\",\n shouldPublish(_ctx: BuildCtx, [_tree, vfile]: ProcessedContent) {\n const frontmatter = (vfile.data?.frontmatter ?? {}) as {\n draft?: boolean | string;\n tags?: string[];\n };\n const isDraft = frontmatter.draft === true || frontmatter.draft === \"true\";\n if (isDraft && !options.allowDrafts) {\n return false;\n }\n\n if (includesTag(frontmatter.tags, options.excludeTags)) {\n return false;\n }\n\n const filePath = typeof vfile.data?.filePath === \"string\" ? vfile.data.filePath : \"\";\n const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n if (options.excludePathPrefixes.some((prefix) => normalizedPath.startsWith(prefix))) {\n return false;\n }\n\n return true;\n },\n };\n};\n","import path from \"node:path\";\nimport fs from \"node:fs/promises\";\nimport type {\n QuartzEmitterPlugin,\n ProcessedContent,\n BuildCtx,\n FilePath,\n FullSlug,\n} from \"@quartz-community/types\";\nimport type { ExampleEmitterOptions } from \"./types\";\n\nconst defaultOptions: ExampleEmitterOptions = {\n manifestSlug: \"plugin-manifest\",\n includeFrontmatter: true,\n metadata: {\n generator: \"Quartz Plugin Template\",\n },\n};\n\nconst joinSegments = (...segments: string[]) =>\n segments\n .filter((segment) => segment.length > 0)\n .join(\"/\")\n .replace(/\\/+/g, \"/\") as FilePath;\n\nconst writeFile = async (\n outputDir: string,\n slug: FullSlug,\n ext: `.${string}` | \"\",\n content: string,\n) => {\n const outputPath = joinSegments(outputDir, `${slug}${ext}`) as FilePath;\n await fs.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.writeFile(outputPath, content);\n return outputPath;\n};\n\n/**\n * Example emitter that writes a JSON manifest of content metadata.\n */\nexport const ExampleEmitter: QuartzEmitterPlugin> = (\n userOptions?: Partial,\n) => {\n const options = { ...defaultOptions, ...userOptions };\n const emitManifest = async (ctx: BuildCtx, content: ProcessedContent[]) => {\n const manifest = {\n ...options.metadata,\n generatedAt: new Date().toISOString(),\n pages: content.map(([_tree, vfile]) => {\n const frontmatter = (vfile.data?.frontmatter ?? {}) as {\n title?: string;\n tags?: string[];\n [key: string]: unknown;\n };\n return {\n slug: vfile.data?.slug ?? null,\n title: frontmatter.title ?? null,\n tags: frontmatter.tags ?? null,\n filePath: vfile.data?.filePath ?? null,\n frontmatter: options.includeFrontmatter ? frontmatter : undefined,\n };\n }),\n };\n\n let json = `${JSON.stringify(manifest, null, 2)}\\n`;\n if (options.transformManifest) {\n json = options.transformManifest(json);\n }\n\n const output = await writeFile(\n ctx.argv.output,\n options.manifestSlug as FullSlug,\n \".json\",\n json,\n );\n return [output];\n };\n\n return {\n name: \"ExampleEmitter\",\n async emit(ctx, content, _resources) {\n return emitManifest(ctx, content);\n },\n async *partialEmit(ctx, content, _resources, _changeEvents) {\n const outputPaths = await emitManifest(ctx, content);\n for (const outputPath of outputPaths) {\n yield outputPath;\n }\n },\n };\n};\n","export function capitalize(s: string): string {\n return s.substring(0, 1).toUpperCase() + s.substring(1);\n}\n\nexport function classNames(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n",".example-component {\n padding: 8px 16px;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-radius: 4px;\n font-weight: 600;\n display: inline-block;\n}","function l(){let e=window.location.pathname;return e.startsWith(\"/\")&&(e=e.slice(1)),e.endsWith(\"/\")&&(e=e.slice(0,-1)),e||\"index\"}function r(){let e=document.querySelectorAll(\".example-component\");if(e.length===0)return;let t=[];function o(n){(n.ctrlKey||n.metaKey)&&n.shiftKey&&n.key.toLowerCase()===\"e\"&&(n.preventDefault(),console.log(\"[ExampleComponent] Keyboard shortcut triggered!\"))}document.addEventListener(\"keydown\",o),t.push(()=>document.removeEventListener(\"keydown\",o));for(let n of e){let i=()=>{console.log(\"[ExampleComponent] Clicked!\")};n.addEventListener(\"click\",i),t.push(()=>n.removeEventListener(\"click\",i))}typeof window<\"u\"&&window.addCleanup&&window.addCleanup(()=>{t.forEach(n=>n())}),console.log(\"[ExampleComponent] Initialized with\",e.length,\"component(s)\")}document.addEventListener(\"nav\",e=>{let t=e.detail?.url||l();console.log(\"[ExampleComponent] Navigation to:\",t),r()});document.addEventListener(\"render\",()=>{console.log(\"[ExampleComponent] Render event - re-initializing\"),r()});document.addEventListener(\"prenav\",()=>{let e=document.querySelector(\".example-component\");e&&sessionStorage.setItem(\"exampleScrollTop\",e.scrollTop?.toString()||\"0\")});\n","/** Normal hydration that attaches to a DOM tree but does not diff it. */\nexport const MODE_HYDRATE = 1 << 5;\n/** Signifies this VNode suspended on the previous render */\nexport const MODE_SUSPENDED = 1 << 7;\n/** Indicates that this node needs to be inserted while patching children */\nexport const INSERT_VNODE = 1 << 2;\n/** Indicates a VNode has been matched with another VNode in the diff */\nexport const MATCHED = 1 << 1;\n\n/** Reset all mode flags */\nexport const RESET_MODE = ~(MODE_HYDRATE | MODE_SUSPENDED);\n\nexport const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nexport const XHTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\nexport const MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n\nexport const NULL = null;\nexport const UNDEFINED = undefined;\nexport const EMPTY_OBJ = /** @type {any} */ ({});\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL =\n\t/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n","import { _catchError } from './diff/catch-error';\n\n/**\n * The `option` object can potentially contain callback functions\n * that are called during various stages of our renderer. This is the\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\n * for a full list of available option hooks (most editors/IDEs allow you to\n * ctrl+click or cmd+click on mac the type definition below).\n * @type {import('./internal').Options}\n */\nconst options = {\n\t_catchError\n};\n\nexport default options;\n","import { NULL } from '../constants';\n\n/**\n * Find the closest error boundary to a thrown error and call it\n * @param {object} error The thrown value\n * @param {import('../internal').VNode} vnode The vnode that threw the error that was caught (except\n * for unmounting when this parameter is the highest parent that was being\n * unmounted)\n * @param {import('../internal').VNode} [oldVNode]\n * @param {import('../internal').ErrorInfo} [errorInfo]\n */\nexport function _catchError(error, vnode, oldVNode, errorInfo) {\n\t/** @type {import('../internal').Component} */\n\tlet component,\n\t\t/** @type {import('../internal').ComponentType} */\n\t\tctor,\n\t\t/** @type {boolean} */\n\t\thandled;\n\n\tfor (; (vnode = vnode._parent); ) {\n\t\tif ((component = vnode._component) && !component._processingException) {\n\t\t\ttry {\n\t\t\t\tctor = component.constructor;\n\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != NULL) {\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\tif (component.componentDidCatch != NULL) {\n\t\t\t\t\tcomponent.componentDidCatch(error, errorInfo || {});\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\n\t\t\t\tif (handled) {\n\t\t\t\t\treturn (component._pendingError = component);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow error;\n}\n","import { assign } from './util';\nimport { diff, commitRoot } from './diff/index';\nimport options from './options';\nimport { Fragment } from './create-element';\nimport { MODE_HYDRATE, NULL } from './constants';\n\n/**\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\n * trigger rendering\n * @param {object} props The initial component props\n * @param {object} context The initial context from parent components'\n * getChildContext\n */\nexport function BaseComponent(props, context) {\n\tthis.props = props;\n\tthis.context = context;\n}\n\n/**\n * Update component state and schedule a re-render.\n * @this {import('./internal').Component}\n * @param {object | ((s: object, p: object) => object)} update A hash of state\n * properties to update with new values or a function that given the current\n * state and props returns a new partial state\n * @param {() => void} [callback] A function to be called once component state is\n * updated\n */\nBaseComponent.prototype.setState = function (update, callback) {\n\t// only clone state when copying to nextState the first time.\n\tlet s;\n\tif (this._nextState != NULL && this._nextState != this.state) {\n\t\ts = this._nextState;\n\t} else {\n\t\ts = this._nextState = assign({}, this.state);\n\t}\n\n\tif (typeof update == 'function') {\n\t\t// Some libraries like `immer` mark the current state as readonly,\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\n\t\tupdate = update(assign({}, s), this.props);\n\t}\n\n\tif (update) {\n\t\tassign(s, update);\n\t}\n\n\t// Skip update if updater function returned null\n\tif (update == NULL) return;\n\n\tif (this._vnode) {\n\t\tif (callback) {\n\t\t\tthis._stateCallbacks.push(callback);\n\t\t}\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Immediately perform a synchronous re-render of the component\n * @this {import('./internal').Component}\n * @param {() => void} [callback] A function to be called after component is\n * re-rendered\n */\nBaseComponent.prototype.forceUpdate = function (callback) {\n\tif (this._vnode) {\n\t\t// Set render mode so that we can differentiate where the render request\n\t\t// is coming from. We need this because forceUpdate should never call\n\t\t// shouldComponentUpdate\n\t\tthis._force = true;\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n * Virtual DOM is generally constructed via [JSX](https://jasonformat.com/wtf-is-jsx).\n * @param {object} props Props (eg: JSX attributes) received from parent\n * element/component\n * @param {object} state The component's current state\n * @param {object} context Context object, as returned by the nearest\n * ancestor's `getChildContext()`\n * @returns {ComponentChildren | void}\n */\nBaseComponent.prototype.render = Fragment;\n\n/**\n * @param {import('./internal').VNode} vnode\n * @param {number | null} [childIndex]\n */\nexport function getDomSibling(vnode, childIndex) {\n\tif (childIndex == NULL) {\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\n\t\treturn vnode._parent\n\t\t\t? getDomSibling(vnode._parent, vnode._index + 1)\n\t\t\t: NULL;\n\t}\n\n\tlet sibling;\n\tfor (; childIndex < vnode._children.length; childIndex++) {\n\t\tsibling = vnode._children[childIndex];\n\n\t\tif (sibling != NULL && sibling._dom != NULL) {\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\n\t\t\treturn sibling._dom;\n\t\t}\n\t}\n\n\t// If we get here, we have not found a DOM node in this vnode's children.\n\t// We must resume from this vnode's sibling (in it's parent _children array)\n\t// Only climb up and search the parent if we aren't searching through a DOM\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\n\t// the search)\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : NULL;\n}\n\n/**\n * Trigger in-place re-rendering of a component.\n * @param {import('./internal').Component} component The component to rerender\n */\nfunction renderComponent(component) {\n\tif (component._parentDom && component._dirty) {\n\t\tlet oldVNode = component._vnode,\n\t\t\toldDom = oldVNode._dom,\n\t\t\tcommitQueue = [],\n\t\t\trefQueue = [],\n\t\t\tnewVNode = assign({}, oldVNode);\n\t\tnewVNode._original = oldVNode._original + 1;\n\t\tif (options.vnode) options.vnode(newVNode);\n\n\t\tdiff(\n\t\t\tcomponent._parentDom,\n\t\t\tnewVNode,\n\t\t\toldVNode,\n\t\t\tcomponent._globalContext,\n\t\t\tcomponent._parentDom.namespaceURI,\n\t\t\toldVNode._flags & MODE_HYDRATE ? [oldDom] : NULL,\n\t\t\tcommitQueue,\n\t\t\toldDom == NULL ? getDomSibling(oldVNode) : oldDom,\n\t\t\t!!(oldVNode._flags & MODE_HYDRATE),\n\t\t\trefQueue\n\t\t);\n\n\t\tnewVNode._original = oldVNode._original;\n\t\tnewVNode._parent._children[newVNode._index] = newVNode;\n\t\tcommitRoot(commitQueue, newVNode, refQueue);\n\t\toldVNode._dom = oldVNode._parent = null;\n\n\t\tif (newVNode._dom != oldDom) {\n\t\t\tupdateParentDomPointers(newVNode);\n\t\t}\n\t}\n}\n\n/**\n * @param {import('./internal').VNode} vnode\n */\nfunction updateParentDomPointers(vnode) {\n\tif ((vnode = vnode._parent) != NULL && vnode._component != NULL) {\n\t\tvnode._dom = vnode._component.base = NULL;\n\t\tvnode._children.some(child => {\n\t\t\tif (child != NULL && child._dom != NULL) {\n\t\t\t\treturn (vnode._dom = vnode._component.base = child._dom);\n\t\t\t}\n\t\t});\n\n\t\treturn updateParentDomPointers(vnode);\n\t}\n}\n\n/**\n * The render queue\n * @type {Array}\n */\nlet rerenderQueue = [];\n\n/*\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\n * do, and when their effects will be applied. See the links below for some further reading on designing\n * asynchronous APIs.\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\n */\n\nlet prevDebounce;\n\nconst defer =\n\ttypeof Promise == 'function'\n\t\t? Promise.prototype.then.bind(Promise.resolve())\n\t\t: setTimeout;\n\n/**\n * Enqueue a rerender of a component\n * @param {import('./internal').Component} c The component to rerender\n */\nexport function enqueueRender(c) {\n\tif (\n\t\t(!c._dirty &&\n\t\t\t(c._dirty = true) &&\n\t\t\trerenderQueue.push(c) &&\n\t\t\t!process._rerenderCount++) ||\n\t\tprevDebounce != options.debounceRendering\n\t) {\n\t\tprevDebounce = options.debounceRendering;\n\t\t(prevDebounce || defer)(process);\n\t}\n}\n\n/**\n * @param {import('./internal').Component} a\n * @param {import('./internal').Component} b\n */\nconst depthSort = (a, b) => a._vnode._depth - b._vnode._depth;\n\n/** Flush the render queue by rerendering all queued components */\nfunction process() {\n\ttry {\n\t\tlet c,\n\t\t\tl = 1;\n\n\t\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\n\t\t// process() calls from getting scheduled while `queue` is still being consumed.\n\t\twhile (rerenderQueue.length) {\n\t\t\t// Keep the rerender queue sorted by (depth, insertion order). The queue\n\t\t\t// will initially be sorted on the first iteration only if it has more than 1 item.\n\t\t\t//\n\t\t\t// New items can be added to the queue e.g. when rerendering a provider, so we want to\n\t\t\t// keep the order from top to bottom with those new items so we can handle them in a\n\t\t\t// single pass\n\t\t\tif (rerenderQueue.length > l) {\n\t\t\t\trerenderQueue.sort(depthSort);\n\t\t\t}\n\n\t\t\tc = rerenderQueue.shift();\n\t\t\tl = rerenderQueue.length;\n\n\t\t\trenderComponent(c);\n\t\t}\n\t} finally {\n\t\trerenderQueue.length = process._rerenderCount = 0;\n\t}\n}\n\nprocess._rerenderCount = 0;\n","import { IS_NON_DIMENSIONAL, NULL, SVG_NAMESPACE } from '../constants';\nimport options from '../options';\n\n// Per-instance unique key for event clock stamps. Each Preact copy on the page\n// gets its own random suffix so that `_dispatched` / `_attached` properties on\n// shared event objects and handler functions cannot collide across instances.\n// ~1 in 60M collision odds - if you have that many praect versions on the page,\n// you deserve some weird bugs.\n// In 11 we can replace this with a\n// Symbol\nlet _id = Math.random().toString(8),\n\tEVENT_DISPATCHED = '__d' + _id,\n\tEVENT_ATTACHED = '__a' + _id;\n\nfunction setStyle(style, key, value) {\n\tif (key[0] == '-') {\n\t\tstyle.setProperty(key, value == NULL ? '' : value);\n\t} else if (value == NULL) {\n\t\tstyle[key] = '';\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\n\t\tstyle[key] = value;\n\t} else {\n\t\tstyle[key] = value + 'px';\n\t}\n}\n\nconst CAPTURE_REGEX = /(PointerCapture)$|Capture$/i;\n\n// A logical clock to solve issues like https://github.com/preactjs/preact/issues/3927.\n// When the DOM performs an event it leaves micro-ticks in between bubbling up which means that\n// an event can trigger on a newly reated DOM-node while the event bubbles up.\n//\n// Originally inspired by Vue\n// (https://github.com/vuejs/core/blob/caeb8a68811a1b0f79/packages/runtime-dom/src/modules/events.ts#L90-L101),\n// but modified to use a logical clock instead of Date.now() in case event handlers get attached\n// and events get dispatched during the same millisecond.\n//\n// The clock is incremented after each new event dispatch. This allows 1 000 000 new events\n// per second for over 280 years before the value reaches Number.MAX_SAFE_INTEGER (2**53 - 1).\nlet eventClock = 0;\n\n/**\n * Set a property value on a DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to modify\n * @param {string} name The name of the property to set\n * @param {*} value The value to set the property to\n * @param {*} oldValue The old value the property had\n * @param {string} namespace Whether or not this DOM node is an SVG node or not\n */\nexport function setProperty(dom, name, value, oldValue, namespace) {\n\tlet useCapture;\n\n\to: if (name == 'style') {\n\t\tif (typeof value == 'string') {\n\t\t\tdom.style.cssText = value;\n\t\t} else {\n\t\t\tif (typeof oldValue == 'string') {\n\t\t\t\tdom.style.cssText = oldValue = '';\n\t\t\t}\n\n\t\t\tif (oldValue) {\n\t\t\t\tfor (name in oldValue) {\n\t\t\t\t\tif (!(value && name in value)) {\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\tfor (name in value) {\n\t\t\t\t\tif (!oldValue || value[name] != oldValue[name]) {\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n\telse if (name[0] == 'o' && name[1] == 'n') {\n\t\tuseCapture = name != (name = name.replace(CAPTURE_REGEX, '$1'));\n\t\tconst lowerCaseName = name.toLowerCase();\n\n\t\t// Infer correct casing for DOM built-in events:\n\t\tif (lowerCaseName in dom || name == 'onFocusOut' || name == 'onFocusIn')\n\t\t\tname = lowerCaseName.slice(2);\n\t\telse name = name.slice(2);\n\n\t\tif (!dom._listeners) dom._listeners = {};\n\t\tdom._listeners[name + useCapture] = value;\n\n\t\tif (value) {\n\t\t\tif (!oldValue) {\n\t\t\t\tvalue[EVENT_ATTACHED] = eventClock;\n\t\t\t\tdom.addEventListener(\n\t\t\t\t\tname,\n\t\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\t\tuseCapture\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tvalue[EVENT_ATTACHED] = oldValue[EVENT_ATTACHED];\n\t\t\t}\n\t\t} else {\n\t\t\tdom.removeEventListener(\n\t\t\t\tname,\n\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\tuseCapture\n\t\t\t);\n\t\t}\n\t} else {\n\t\tif (namespace == SVG_NAMESPACE) {\n\t\t\t// Normalize incorrect prop usage for SVG:\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\n\t\t\t// - className --> class\n\t\t\tname = name.replace(/xlink(H|:h)/, 'h').replace(/sName$/, 's');\n\t\t} else if (\n\t\t\tname != 'width' &&\n\t\t\tname != 'height' &&\n\t\t\tname != 'href' &&\n\t\t\tname != 'list' &&\n\t\t\tname != 'form' &&\n\t\t\t// Default value in browsers is `-1` and an empty string is\n\t\t\t// cast to `0` instead\n\t\t\tname != 'tabIndex' &&\n\t\t\tname != 'download' &&\n\t\t\tname != 'rowSpan' &&\n\t\t\tname != 'colSpan' &&\n\t\t\tname != 'role' &&\n\t\t\tname != 'popover' &&\n\t\t\tname in dom\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdom[name] = value == NULL ? '' : value;\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\n\t\t\t\tbreak o;\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\t// aria- and data- attributes have no boolean representation.\n\t\t// A `false` value is different from the attribute not being\n\t\t// present, so we can't remove it. For non-boolean aria\n\t\t// attributes we could treat false as a removal, but the\n\t\t// amount of exceptions would cost too many bytes. On top of\n\t\t// that other frameworks generally stringify `false`.\n\n\t\tif (typeof value == 'function') {\n\t\t\t// never serialize functions as attribute values\n\t\t} else if (value != NULL && (value !== false || name[4] == '-')) {\n\t\t\tdom.setAttribute(name, name == 'popover' && value == true ? '' : value);\n\t\t} else {\n\t\t\tdom.removeAttribute(name);\n\t\t}\n\t}\n}\n\n/**\n * Create an event proxy function.\n * @param {boolean} useCapture Is the event handler for the capture phase.\n * @private\n */\nfunction createEventProxy(useCapture) {\n\t/**\n\t * Proxy an event to hooked event handlers\n\t * @param {import('../internal').PreactEvent} e The event object from the browser\n\t * @private\n\t */\n\treturn function (e) {\n\t\tif (this._listeners) {\n\t\t\tconst eventHandler = this._listeners[e.type + useCapture];\n\t\t\tif (e[EVENT_DISPATCHED] == NULL) {\n\t\t\t\te[EVENT_DISPATCHED] = eventClock++;\n\n\t\t\t\t// When `e[EVENT_DISPATCHED]` is smaller than the time when the targeted event\n\t\t\t\t// handler was attached we know we have bubbled up to an element that was added\n\t\t\t\t// during patching the DOM.\n\t\t\t} else if (e[EVENT_DISPATCHED] < eventHandler[EVENT_ATTACHED]) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn eventHandler(options.event ? options.event(e) : e);\n\t\t}\n\t};\n}\n\nconst eventProxy = createEventProxy(false);\nconst eventProxyCapture = createEventProxy(true);\n","import { enqueueRender } from './component';\nimport { NULL } from './constants';\n\nexport let i = 0;\n\nexport function createContext(defaultValue) {\n\tfunction Context(props) {\n\t\tif (!this.getChildContext) {\n\t\t\t/** @type {Set | null} */\n\t\t\tlet subs = new Set();\n\t\t\tlet ctx = {};\n\t\t\tctx[Context._id] = this;\n\n\t\t\tthis.getChildContext = () => ctx;\n\n\t\t\tthis.componentWillUnmount = () => {\n\t\t\t\tsubs = NULL;\n\t\t\t};\n\n\t\t\tthis.shouldComponentUpdate = function (_props) {\n\t\t\t\t// @ts-expect-error even\n\t\t\t\tif (this.props.value != _props.value) {\n\t\t\t\t\tsubs.forEach(c => {\n\t\t\t\t\t\tc._force = true;\n\t\t\t\t\t\tenqueueRender(c);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.sub = c => {\n\t\t\t\tsubs.add(c);\n\t\t\t\tlet old = c.componentWillUnmount;\n\t\t\t\tc.componentWillUnmount = () => {\n\t\t\t\t\tif (subs) {\n\t\t\t\t\t\tsubs.delete(c);\n\t\t\t\t\t}\n\t\t\t\t\tif (old) old.call(c);\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\n\t\treturn props.children;\n\t}\n\n\tContext._id = '__cC' + i++;\n\tContext._defaultValue = defaultValue;\n\n\t/** @type {import('./internal').FunctionComponent} */\n\tContext.Consumer = (props, contextValue) => {\n\t\treturn props.children(contextValue);\n\t};\n\n\t// we could also get rid of _contextRef entirely\n\tContext.Provider =\n\t\tContext._contextRef =\n\t\tContext.Consumer.contextType =\n\t\t\tContext;\n\n\treturn Context;\n}\n","import { options, Fragment } from 'preact';\nimport { encodeEntities } from './utils';\nimport { IS_NON_DIMENSIONAL } from '../../src/constants';\n\nlet vnodeId = 0;\n\nconst isArray = Array.isArray;\n\n/**\n * @fileoverview\n * This file exports various methods that implement Babel's \"automatic\" JSX runtime API:\n * - jsx(type, props, key)\n * - jsxs(type, props, key)\n * - jsxDEV(type, props, key, __source, __self)\n *\n * The implementation of createVNode here is optimized for performance.\n * Benchmarks: https://esbench.com/bench/5f6b54a0b4632100a7dcd2b3\n */\n\n/**\n * JSX.Element factory used by Babel's {runtime:\"automatic\"} JSX transform\n * @param {VNode['type']} type\n * @param {VNode['props']} props\n * @param {VNode['key']} [key]\n * @param {unknown} [isStaticChildren]\n * @param {unknown} [__source]\n * @param {unknown} [__self]\n */\nfunction createVNode(type, props, key, isStaticChildren, __source, __self) {\n\tif (!props) props = {};\n\t// We'll want to preserve `ref` in props to get rid of the need for\n\t// forwardRef components in the future, but that should happen via\n\t// a separate PR.\n\tlet normalizedProps = props,\n\t\tref,\n\t\ti;\n\n\tif ('ref' in normalizedProps) {\n\t\tnormalizedProps = {};\n\t\tfor (i in props) {\n\t\t\tif (i == 'ref') {\n\t\t\t\tref = props[i];\n\t\t\t} else {\n\t\t\t\tnormalizedProps[i] = props[i];\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @type {VNode & { __source: any; __self: any }} */\n\tconst vnode = {\n\t\ttype,\n\t\tprops: normalizedProps,\n\t\tkey,\n\t\tref,\n\t\t_children: null,\n\t\t_parent: null,\n\t\t_depth: 0,\n\t\t_dom: null,\n\t\t_component: null,\n\t\tconstructor: undefined,\n\t\t_original: --vnodeId,\n\t\t_index: -1,\n\t\t_flags: 0,\n\t\t__source,\n\t\t__self\n\t};\n\n\t// If a Component VNode, check for and apply defaultProps.\n\t// Note: `type` is often a String, and can be `undefined` in development.\n\tif (typeof type === 'function' && (ref = type.defaultProps)) {\n\t\tfor (i in ref)\n\t\t\tif (normalizedProps[i] === undefined) {\n\t\t\t\tnormalizedProps[i] = ref[i];\n\t\t\t}\n\t}\n\n\tif (options.vnode) options.vnode(vnode);\n\treturn vnode;\n}\n\n/**\n * Create a template vnode. This function is not expected to be\n * used directly, but rather through a precompile JSX transform\n * @param {string[]} templates\n * @param {Array} exprs\n * @returns {VNode}\n */\nfunction jsxTemplate(templates, ...exprs) {\n\tconst vnode = createVNode(Fragment, { tpl: templates, exprs });\n\t// Bypass render to string top level Fragment optimization\n\tvnode.key = vnode._vnode;\n\treturn vnode;\n}\n\nconst JS_TO_CSS = {};\nconst CSS_REGEX = /[A-Z]/g;\n\n/**\n * Unwrap potential signals.\n * @param {*} value\n * @returns {*}\n */\nfunction normalizeAttrValue(value) {\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.valueOf === 'function'\n\t\t? value.valueOf()\n\t\t: value;\n}\n\n/**\n * Serialize an HTML attribute to a string. This function is not\n * expected to be used directly, but rather through a precompile\n * JSX transform\n * @param {string} name The attribute name\n * @param {*} value The attribute value\n * @returns {string}\n */\nfunction jsxAttr(name, value) {\n\tif (options.attr) {\n\t\tconst result = options.attr(name, value);\n\t\tif (typeof result === 'string') return result;\n\t}\n\n\tvalue = normalizeAttrValue(value);\n\n\tif (name === 'ref' || name === 'key') return '';\n\tif (name === 'style' && typeof value === 'object') {\n\t\tlet str = '';\n\t\tfor (let prop in value) {\n\t\t\tlet val = value[prop];\n\t\t\tif (val != null && val !== '') {\n\t\t\t\tconst name =\n\t\t\t\t\tprop[0] == '-'\n\t\t\t\t\t\t? prop\n\t\t\t\t\t\t: JS_TO_CSS[prop] ||\n\t\t\t\t\t\t\t(JS_TO_CSS[prop] = prop.replace(CSS_REGEX, '-$&').toLowerCase());\n\n\t\t\t\tlet suffix = ';';\n\t\t\t\tif (\n\t\t\t\t\ttypeof val === 'number' &&\n\t\t\t\t\t// Exclude custom-attributes\n\t\t\t\t\t!name.startsWith('--') &&\n\t\t\t\t\t!IS_NON_DIMENSIONAL.test(name)\n\t\t\t\t) {\n\t\t\t\t\tsuffix = 'px;';\n\t\t\t\t}\n\t\t\t\tstr = str + name + ':' + val + suffix;\n\t\t\t}\n\t\t}\n\t\treturn name + '=\"' + encodeEntities(str) + '\"';\n\t}\n\n\tif (\n\t\tvalue == null ||\n\t\tvalue === false ||\n\t\ttypeof value === 'function' ||\n\t\ttypeof value === 'object'\n\t) {\n\t\treturn '';\n\t} else if (value === true) return name;\n\n\treturn name + '=\"' + encodeEntities('' + value) + '\"';\n}\n\n/**\n * Escape a dynamic child passed to `jsxTemplate`. This function\n * is not expected to be used directly, but rather through a\n * precompile JSX transform\n * @param {*} value\n * @returns {string | null | VNode | Array}\n */\nfunction jsxEscape(value) {\n\tif (\n\t\tvalue == null ||\n\t\ttypeof value === 'boolean' ||\n\t\ttypeof value === 'function'\n\t) {\n\t\treturn null;\n\t}\n\n\tif (typeof value === 'object') {\n\t\t// Check for VNode\n\t\tif (value.constructor === undefined) return value;\n\n\t\tif (isArray(value)) {\n\t\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\t\tvalue[i] = jsxEscape(value[i]);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t}\n\n\treturn encodeEntities('' + value);\n}\n\nexport {\n\tcreateVNode as jsx,\n\tcreateVNode as jsxs,\n\tcreateVNode as jsxDEV,\n\tFragment,\n\t// precompiled JSX transform\n\tjsxTemplate,\n\tjsxAttr,\n\tjsxEscape\n};\n","import type {\n QuartzComponent,\n QuartzComponentProps,\n QuartzComponentConstructor,\n} from \"@quartz-community/types\";\nimport { classNames } from \"../util/lang\";\nimport style from \"./styles/example.scss\";\n// @ts-expect-error - inline script import handled by Quartz bundler\nimport script from \"./scripts/example.inline.ts\";\n\nexport interface ExampleComponentOptions {\n prefix?: string;\n suffix?: string;\n className?: string;\n}\n\nexport default ((opts?: ExampleComponentOptions) => {\n const { prefix = \"\", suffix = \"\", className = \"example-component\" } = opts ?? {};\n\n const Component: QuartzComponent = (props: QuartzComponentProps) => {\n const frontmatter = props.fileData?.frontmatter as { title?: string } | undefined;\n const title = frontmatter?.title ?? \"Untitled\";\n const fullText = `${prefix}${title}${suffix}`;\n\n return
{fullText}
;\n };\n\n Component.css = style;\n Component.afterDOMLoaded = script;\n\n return Component;\n}) satisfies QuartzComponentConstructor;\n","#stacked-pages-container:not(.binder-active) {\n display: none;\n}\n#stacked-pages-container.binder-active {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n z-index: 99;\n display: flex;\n justify-content: space-between;\n align-items: stretch;\n}\n\nbody.has-binder-left .page {\n padding-left: 40px;\n}\n\nbody.has-binder-right .page {\n padding-right: 40px;\n}\n\n.binder-strip {\n pointer-events: auto;\n display: flex;\n flex-direction: column;\n gap: 0;\n padding: 0;\n justify-content: stretch;\n align-items: stretch;\n z-index: 100;\n width: 40px;\n height: 100%;\n}\n\n.binder-strip-left {\n align-self: flex-start;\n}\n\n.binder-strip-right {\n align-self: flex-end;\n margin-left: auto;\n}\n\n.binder-tab {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 8px 0;\n cursor: pointer;\n background: var(--lightgray);\n border: 1px solid var(--lightgray);\n transition: background 0.15s ease, transform 0.15s ease, border-color 0.15s ease;\n width: 100%;\n flex: 1;\n position: relative;\n writing-mode: vertical-lr;\n overflow: hidden;\n}\n.binder-tab:hover {\n background: var(--light);\n}\n\n.binder-tab.binder-tab-active {\n background: var(--light);\n z-index: 101;\n cursor: default;\n}\n.binder-tab.binder-tab-active.binder-tab-left {\n border-right: none;\n border-left: 3px solid var(--secondary);\n border-radius: 6px 0 0 6px;\n}\n.binder-tab.binder-tab-active.binder-tab-right {\n border-left: none;\n border-right: 3px solid var(--secondary);\n border-radius: 0 6px 6px 0;\n}\n\n.binder-tab:not(.binder-tab-active) {\n color: var(--gray);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-left {\n border-radius: 6px 0 0 6px;\n border-right: 2px solid var(--secondary);\n border-left: 1px solid var(--lightgray);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-left:hover {\n transform: translateX(4px);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-right {\n border-radius: 0 6px 6px 0;\n border-left: 2px solid var(--secondary);\n border-right: 1px solid var(--lightgray);\n}\n.binder-tab:not(.binder-tab-active).binder-tab-right:hover {\n transform: translateX(-4px);\n}\n\n.binder-spine {\n display: none;\n}\n\n.binder-label {\n font-size: 1rem;\n line-height: 1.2;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--darkgray);\n user-select: none;\n transform: rotate(180deg);\n text-align: left;\n}\n\n.binder-tab-active .binder-label {\n font-weight: bold;\n color: var(--dark);\n}\n\n.binder-close {\n appearance: none;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 1rem;\n line-height: 1;\n color: var(--gray);\n padding: 2px;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.15s ease, color 0.15s ease;\n transform: rotate(180deg);\n}\n.binder-close:hover {\n color: var(--dark);\n background: rgba(0, 0, 0, 0.05);\n border-radius: 4px;\n}\n\n.binder-tab:hover .binder-close {\n opacity: 1;\n}","var y=Object.hasOwnProperty;function h(){return typeof document>\"u\"?\"\":document.body?.dataset?.basepath??\"\"}function o(u,D){let n=D??h(),F=u.startsWith(\"/\")?u:\"/\"+u;return n+F}var B=\"stacked-pages-state\";function d(){let u=window.location.pathname;return u.startsWith(\"/\")&&(u=u.slice(1)),u.endsWith(\"/\")&&(u=u.slice(0,-1)),u||\"index\"}function m(){return document.querySelector(\"h1\")?.textContent?.trim()||document.title||d()}function s(){try{let u=sessionStorage.getItem(B);if(u){let D=JSON.parse(u);if(Array.isArray(D.tabs)&&typeof D.activeIndex==\"number\")return D}}catch{}return{tabs:[],activeIndex:-1}}function E(u){try{sessionStorage.setItem(B,JSON.stringify(u))}catch{}}function f(u){return{maxTabs:parseInt(u.dataset.maxTabs||\"8\",10),mobileBreakpoint:parseInt(u.dataset.mobileBreakpoint||\"800\",10),showSpines:u.dataset.showSpines!==\"false\",animate:u.dataset.animate!==\"false\"}}function A(u,D){let n=f(u);if(window.innerWidth0){let t=document.createElement(\"div\");t.className=\"binder-strip binder-strip-left\";for(let e=0;e0){let t=document.createElement(\"div\");t.className=\"binder-strip binder-strip-right\";for(let e=0;e0),document.body.classList.toggle(\"has-binder-right\",r.length>0)}function c(u,D,n,F,r){let t=document.createElement(\"div\");if(t.className=`binder-tab binder-tab-${n}`,t.dataset.index=String(D),D===F.activeIndex&&t.classList.add(\"binder-tab-active\"),r.showSpines){let i=document.createElement(\"div\");i.className=\"binder-spine\",t.appendChild(i)}let e=document.createElement(\"span\");if(e.className=\"binder-label\",e.textContent=u.title,t.appendChild(e),F.tabs.length>=2){let i=document.createElement(\"button\");i.className=\"binder-close\",i.textContent=\"\\xD7\",i.setAttribute(\"aria-label\",`Close ${u.title}`),i.addEventListener(\"click\",C=>{C.stopPropagation(),p(D)}),t.appendChild(i)}return t.addEventListener(\"click\",()=>{g(D)}),t}function g(u){let D=s();if(u<0||u>=D.tabs.length)return;let n=D.tabs[u];if(!n)return;D.activeIndex=u,E(D);let F=new URL(o(n.slug),window.location.origin);window.spaNavigate?window.spaNavigate(F,!1):window.location.href=F.toString()}function p(u){let D=s();if(D.tabs.length<2)return;let n=u===D.activeIndex;D.tabs.splice(u,1),n?(D.activeIndex=Math.min(u,D.tabs.length-1),E(D),g(D.activeIndex)):(ue.slug===D);if(t>=0)F.tabs[t].title=n,F.activeIndex=t;else{let e={slug:D,title:n},i=F.activeIndex+1;for(F.tabs.splice(i,0,e),F.activeIndex=i;F.tabs.length>r.maxTabs;)F.activeIndex>0?(F.tabs.shift(),F.activeIndex--):F.tabs.pop()}E(F),A(u,F)}function a(){let u=document.getElementById(\"stacked-pages-container\");u&&A(u,s())}function v(){b();let u=()=>a();window.addEventListener(\"resize\",u),window.addCleanup&&window.addCleanup(()=>window.removeEventListener(\"resize\",u))}typeof document<\"u\"&&(document.addEventListener(\"nav\",()=>{v()}),document.addEventListener(\"render\",()=>{a()}));\n","import type {\n QuartzComponent,\n QuartzComponentProps,\n QuartzComponentConstructor,\n} from \"@quartz-community/types\";\n\nimport style from \"./styles/stacked.scss\";\n// @ts-expect-error - inline script import handled by Quartz bundler\nimport script from \"./scripts/stacked.inline.ts\";\n\nexport interface StackedPagesComponentOptions {\n maxTabs?: number;\n mobileBreakpoint?: number;\n showSpines?: boolean;\n animateTransitions?: boolean;\n}\n\nexport default ((opts?: StackedPagesComponentOptions) => {\n const {\n maxTabs = 8,\n mobileBreakpoint = 800,\n showSpines = true,\n animateTransitions = true,\n } = opts ?? {};\n\n const Component: QuartzComponent = (_props: QuartzComponentProps) => {\n return (\n \n );\n };\n\n Component.css = style;\n Component.afterDOMLoaded = script;\n\n return Component;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file