My text.
\n \nMy text.
\n \n${e.children.map(t).join("")}
`:`Unsupported markdown: ${e.type}`}return r.map(t).join("")}function Or(n){return Intl.Segmenter?[...new Intl.Segmenter().segment(n)].map(r=>r.segment):[...n]}function Dr(n,r){const t=Or(r.content);return ft(n,[],t,r.type)}function ft(n,r,t,e){if(t.length===0)return[{content:r.join(""),type:e},{content:"",type:e}];const[i,...l]=t,u=[...r,i];return n([{content:u.join(""),type:e}])?ft(n,u,l,e):(r.length===0&&i&&(r.push(i),t.shift()),[{content:r.join(""),type:e},{content:t.join(""),type:e}])}function Pr(n,r){if(n.some(({content:t})=>t.includes(` `)))throw new Error("splitLineToFitWidth does not support newlines in the line");return Bn(n,r)}function Bn(n,r,t=[],e=[]){if(n.length===0)return e.length>0&&t.push(e),t.length>0?t:[];let i="";n[0].content===" "&&(i=" ",n.shift());const l=n.shift()??{content:" ",type:"normal"},u=[...e];if(i!==""&&u.push({content:i,type:"normal"}),u.push(l),r(u))return Bn(n,r,t,u);if(e.length>0)t.push(e),n.unshift(l);else if(l.content){const[a,c]=Dr(r,l);t.push([a]),c.content&&n.unshift(c)}return Bn(n,r,t)}function _r(n,r){r&&n.attr("style",r)}function Mr(n,r,t,e,i=!1){const l=n.append("foreignObject"),u=l.append("xhtml:div"),a=r.label,c=r.isNode?"nodeLabel":"edgeLabel";u.html(` "+a+""),_r(u,r.labelStyle),u.style("display","table-cell"),u.style("white-space","nowrap"),u.style("max-width",t+"px"),u.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&u.attr("class","labelBkg");let p=u.node().getBoundingClientRect();return p.width===t&&(u.style("display","table"),u.style("white-space","break-spaces"),u.style("width",t+"px"),p=u.node().getBoundingClientRect()),l.style("width",p.width),l.style("height",p.height),l.node()}function xt(n,r,t){return n.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",r*t-.1+"em").attr("dy",t+"em")}function jr(n,r,t){const e=n.append("text"),i=xt(e,1,r);gt(i,t);const l=i.node().getComputedTextLength();return e.remove(),l}function Rr(n,r,t,e=!1){const l=r.append("g"),u=l.insert("rect").attr("class","background"),a=l.append("text").attr("y","-10.1");let c=0;for(const p of t){const h=g=>jr(l,1.1,g)<=n,x=h(p)?[p]:Pr(p,h);for(const g of x){const f=xt(a,c,1.1);gt(f,g),c++}}if(e){const p=a.node().getBBox(),h=2;return u.attr("x",-h).attr("y",-h).attr("width",p.width+2*h).attr("height",p.height+2*h),l.node()}else return a.node()}function gt(n,r){n.text(""),r.forEach((t,e)=>{const i=n.append("tspan").attr("font-style",t.type==="emphasis"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",t.type==="strong"?"bold":"normal");e===0?i.text(t.content):i.text(" "+t.content)})}const Nr=(n,r="",{style:t="",isTitle:e=!1,classes:i="",useHtmlLabels:l=!0,isNode:u=!0,width:a=200,addSvgBackground:c=!1}={})=>{if(At.info("createText",r,t,e,i,l,u,c),l){const p=Lr(r),h={isNode:u,label:zt(p).replace(/fa[blrs]?:fa-[\w-]+/g,g=>``),labelStyle:t.replace("fill:","color:")};return Mr(n,h,a,i,c)}else{const p=Br(r);return Rr(a,n,p,c)}};export{Nr as c}; -//# sourceMappingURL=createText-285e50b4-28eea7d2.js.map +//# sourceMappingURL=createText-285e50b4-9349820e.js.map diff --git a/docs/assets/createText-285e50b4-28eea7d2.js.map b/docs/assets/createText-285e50b4-9349820e.js.map similarity index 99% rename from docs/assets/createText-285e50b4-28eea7d2.js.map rename to docs/assets/createText-285e50b4-9349820e.js.map index 0008c361..69a17358 100644 --- a/docs/assets/createText-285e50b4-28eea7d2.js.map +++ b/docs/assets/createText-285e50b4-9349820e.js.map @@ -1 +1 @@ -{"version":3,"file":"createText-285e50b4-28eea7d2.js","sources":["../../node_modules/mdast-util-to-string/lib/index.js","../../node_modules/micromark-util-chunked/index.js","../../node_modules/micromark-util-combine-extensions/index.js","../../node_modules/micromark-util-character/lib/unicode-punctuation-regex.js","../../node_modules/micromark-util-character/index.js","../../node_modules/micromark-factory-space/index.js","../../node_modules/micromark/lib/initialize/content.js","../../node_modules/micromark/lib/initialize/document.js","../../node_modules/micromark-util-classify-character/index.js","../../node_modules/micromark-util-resolve-all/index.js","../../node_modules/micromark-core-commonmark/lib/attention.js","../../node_modules/micromark-core-commonmark/lib/autolink.js","../../node_modules/micromark-core-commonmark/lib/blank-line.js","../../node_modules/micromark-core-commonmark/lib/block-quote.js","../../node_modules/micromark-core-commonmark/lib/character-escape.js","../../node_modules/decode-named-character-reference/index.dom.js","../../node_modules/micromark-core-commonmark/lib/character-reference.js","../../node_modules/micromark-core-commonmark/lib/code-fenced.js","../../node_modules/micromark-core-commonmark/lib/code-indented.js","../../node_modules/micromark-core-commonmark/lib/code-text.js","../../node_modules/micromark-util-subtokenize/index.js","../../node_modules/micromark-core-commonmark/lib/content.js","../../node_modules/micromark-factory-destination/index.js","../../node_modules/micromark-factory-label/index.js","../../node_modules/micromark-factory-title/index.js","../../node_modules/micromark-factory-whitespace/index.js","../../node_modules/micromark-util-normalize-identifier/index.js","../../node_modules/micromark-core-commonmark/lib/definition.js","../../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../../node_modules/micromark-core-commonmark/lib/heading-atx.js","../../node_modules/micromark-util-html-tag-name/index.js","../../node_modules/micromark-core-commonmark/lib/html-flow.js","../../node_modules/micromark-core-commonmark/lib/html-text.js","../../node_modules/micromark-core-commonmark/lib/label-end.js","../../node_modules/micromark-core-commonmark/lib/label-start-image.js","../../node_modules/micromark-core-commonmark/lib/label-start-link.js","../../node_modules/micromark-core-commonmark/lib/line-ending.js","../../node_modules/micromark-core-commonmark/lib/thematic-break.js","../../node_modules/micromark-core-commonmark/lib/list.js","../../node_modules/micromark-core-commonmark/lib/setext-underline.js","../../node_modules/micromark/lib/initialize/flow.js","../../node_modules/micromark/lib/initialize/text.js","../../node_modules/micromark/lib/create-tokenizer.js","../../node_modules/micromark/lib/constructs.js","../../node_modules/micromark/lib/parse.js","../../node_modules/micromark/lib/preprocess.js","../../node_modules/micromark/lib/postprocess.js","../../node_modules/micromark-util-decode-numeric-character-reference/index.js","../../node_modules/micromark-util-decode-string/index.js","../../node_modules/unist-util-stringify-position/lib/index.js","../../node_modules/mdast-util-from-markdown/lib/index.js","../../node_modules/mermaid/dist/createText-285e50b4.js"],"sourcesContent":["/**\n * @typedef {import('mdast').Root|import('mdast').Content} Node\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s.\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML.\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} */\n\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('attentionSequence')\n marker = code\n return sequence(code)\n }\n /** @type {State} */\n\n function sequence(code) {\n if (code === marker) {\n effects.consume(code)\n return sequence\n }\n\n const token = effects.exit('attentionSequence')\n const after = classifyCharacter(code)\n const open =\n !after || (after === 2 && before) || attentionMarkers.includes(code)\n const close =\n !before || (before === 2 && after) || attentionMarkers.includes(previous)\n token._open = Boolean(marker === 42 ? open : open && (before || !close))\n token._close = Boolean(marker === 42 ? close : close && (after || !open))\n return ok(code)\n }\n}\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {void}\n */\n\nfunction movePoint(point, offset) {\n point.column += offset\n point.offset += offset\n point._bufferIndex += offset\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n asciiAtext,\n asciiControl\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 1\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('autolink')\n effects.enter('autolinkMarker')\n effects.consume(code)\n effects.exit('autolinkMarker')\n effects.enter('autolinkProtocol')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n return schemeOrEmailAtext\n }\n\n return asciiAtext(code) ? emailAtext(code) : nok(code)\n }\n /** @type {State} */\n\n function schemeOrEmailAtext(code) {\n return code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)\n ? schemeInsideOrEmailAtext(code)\n : emailAtext(code)\n }\n /** @type {State} */\n\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code)\n return urlInside\n }\n\n if (\n (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&\n size++ < 32\n ) {\n effects.consume(code)\n return schemeInsideOrEmailAtext\n }\n\n return emailAtext(code)\n }\n /** @type {State} */\n\n function urlInside(code) {\n if (code === 62) {\n effects.exit('autolinkProtocol')\n return end(code)\n }\n\n if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n return nok(code)\n }\n\n effects.consume(code)\n return urlInside\n }\n /** @type {State} */\n\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code)\n size = 0\n return emailAtSignOrDot\n }\n\n if (asciiAtext(code)) {\n effects.consume(code)\n return emailAtext\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)\n }\n /** @type {State} */\n\n function emailLabel(code) {\n if (code === 46) {\n effects.consume(code)\n size = 0\n return emailAtSignOrDot\n }\n\n if (code === 62) {\n // Exit, then change the type.\n effects.exit('autolinkProtocol').type = 'autolinkEmail'\n return end(code)\n }\n\n return emailValue(code)\n }\n /** @type {State} */\n\n function emailValue(code) {\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n effects.consume(code)\n return code === 45 ? emailValue : emailLabel\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function end(code) {\n effects.enter('autolinkMarker')\n effects.consume(code)\n effects.exit('autolinkMarker')\n effects.exit('autolink')\n return ok\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const blankLine = {\n tokenize: tokenizeBlankLine,\n partial: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeBlankLine(effects, ok, nok) {\n return factorySpace(effects, afterWhitespace, 'linePrefix')\n /** @type {State} */\n\n function afterWhitespace(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownSpace} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const blockQuote = {\n name: 'blockQuote',\n tokenize: tokenizeBlockQuoteStart,\n continuation: {\n tokenize: tokenizeBlockQuoteContinuation\n },\n exit\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n if (code === 62) {\n const state = self.containerState\n\n if (!state.open) {\n effects.enter('blockQuote', {\n _container: true\n })\n state.open = true\n }\n\n effects.enter('blockQuotePrefix')\n effects.enter('blockQuoteMarker')\n effects.consume(code)\n effects.exit('blockQuoteMarker')\n return after\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function after(code) {\n if (markdownSpace(code)) {\n effects.enter('blockQuotePrefixWhitespace')\n effects.consume(code)\n effects.exit('blockQuotePrefixWhitespace')\n effects.exit('blockQuotePrefix')\n return ok\n }\n\n effects.exit('blockQuotePrefix')\n return ok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n return factorySpace(\n effects,\n effects.attempt(blockQuote, ok, nok),\n 'linePrefix',\n this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n )\n}\n/** @type {Exiter} */\n\nfunction exit(effects) {\n effects.exit('blockQuote')\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {asciiPunctuation} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('characterEscape')\n effects.enter('escapeMarker')\n effects.consume(code)\n effects.exit('escapeMarker')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (asciiPunctuation(code)) {\n effects.enter('characterEscapeValue')\n effects.consume(code)\n effects.exit('characterEscapeValue')\n effects.exit('characterEscape')\n return ok\n }\n\n return nok(code)\n }\n}\n","/// \n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n const characterReference = '&' + value + ';'\n element.innerHTML = characterReference\n const char = element.textContent\n\n // Some named character references do not require the closing semicolon\n // (`¬`, for instance), which leads to situations where parsing the assumed\n // named reference of `¬it;` will result in the string `¬it;`.\n // When we encounter a trailing semicolon after parsing, and the character\n // reference to decode was not a semicolon (`;`), we can assume that the\n // matching was not complete.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n return false\n }\n\n // If the decoded string is equal to the input, the character reference was\n // not valid.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n return char === characterReference ? false : char\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {\n asciiAlphanumeric,\n asciiDigit,\n asciiHexDigit\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this\n let size = 0\n /** @type {number} */\n\n let max\n /** @type {(code: Code) => code is number} */\n\n let test\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('characterReference')\n effects.enter('characterReferenceMarker')\n effects.consume(code)\n effects.exit('characterReferenceMarker')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 35) {\n effects.enter('characterReferenceMarkerNumeric')\n effects.consume(code)\n effects.exit('characterReferenceMarkerNumeric')\n return numeric\n }\n\n effects.enter('characterReferenceValue')\n max = 31\n test = asciiAlphanumeric\n return value(code)\n }\n /** @type {State} */\n\n function numeric(code) {\n if (code === 88 || code === 120) {\n effects.enter('characterReferenceMarkerHexadecimal')\n effects.consume(code)\n effects.exit('characterReferenceMarkerHexadecimal')\n effects.enter('characterReferenceValue')\n max = 6\n test = asciiHexDigit\n return value\n }\n\n effects.enter('characterReferenceValue')\n max = 7\n test = asciiDigit\n return value(code)\n }\n /** @type {State} */\n\n function value(code) {\n /** @type {Token} */\n let token\n\n if (code === 59 && size) {\n token = effects.exit('characterReferenceValue')\n\n if (\n test === asciiAlphanumeric &&\n !decodeNamedCharacterReference(self.sliceSerialize(token))\n ) {\n return nok(code)\n }\n\n effects.enter('characterReferenceMarker')\n effects.consume(code)\n effects.exit('characterReferenceMarker')\n effects.exit('characterReference')\n return ok\n }\n\n if (test(code) && size++ < max) {\n effects.consume(code)\n return value\n }\n\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const codeFenced = {\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced,\n concrete: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this\n /** @type {Construct} */\n\n const closingFenceConstruct = {\n tokenize: tokenizeClosingFence,\n partial: true\n }\n /** @type {Construct} */\n\n const nonLazyLine = {\n tokenize: tokenizeNonLazyLine,\n partial: true\n }\n const tail = this.events[this.events.length - 1]\n const initialPrefix =\n tail && tail[1].type === 'linePrefix'\n ? tail[2].sliceSerialize(tail[1], true).length\n : 0\n let sizeOpen = 0\n /** @type {NonNullable} */\n\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('codeFenced')\n effects.enter('codeFencedFence')\n effects.enter('codeFencedFenceSequence')\n marker = code\n return sequenceOpen(code)\n }\n /** @type {State} */\n\n function sequenceOpen(code) {\n if (code === marker) {\n effects.consume(code)\n sizeOpen++\n return sequenceOpen\n }\n\n effects.exit('codeFencedFenceSequence')\n return sizeOpen < 3\n ? nok(code)\n : factorySpace(effects, infoOpen, 'whitespace')(code)\n }\n /** @type {State} */\n\n function infoOpen(code) {\n if (code === null || markdownLineEnding(code)) {\n return openAfter(code)\n }\n\n effects.enter('codeFencedFenceInfo')\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return info(code)\n }\n /** @type {State} */\n\n function info(code) {\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit('chunkString')\n effects.exit('codeFencedFenceInfo')\n return factorySpace(effects, infoAfter, 'whitespace')(code)\n }\n\n if (code === 96 && code === marker) return nok(code)\n effects.consume(code)\n return info\n }\n /** @type {State} */\n\n function infoAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n return openAfter(code)\n }\n\n effects.enter('codeFencedFenceMeta')\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return meta(code)\n }\n /** @type {State} */\n\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n effects.exit('codeFencedFenceMeta')\n return openAfter(code)\n }\n\n if (code === 96 && code === marker) return nok(code)\n effects.consume(code)\n return meta\n }\n /** @type {State} */\n\n function openAfter(code) {\n effects.exit('codeFencedFence')\n return self.interrupt ? ok(code) : contentStart(code)\n }\n /** @type {State} */\n\n function contentStart(code) {\n if (code === null) {\n return after(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.attempt(\n nonLazyLine,\n effects.attempt(\n closingFenceConstruct,\n after,\n initialPrefix\n ? factorySpace(\n effects,\n contentStart,\n 'linePrefix',\n initialPrefix + 1\n )\n : contentStart\n ),\n after\n )(code)\n }\n\n effects.enter('codeFlowValue')\n return contentContinue(code)\n }\n /** @type {State} */\n\n function contentContinue(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue')\n return contentStart(code)\n }\n\n effects.consume(code)\n return contentContinue\n }\n /** @type {State} */\n\n function after(code) {\n effects.exit('codeFenced')\n return ok(code)\n }\n /** @type {Tokenizer} */\n\n function tokenizeNonLazyLine(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return lineStart\n }\n /** @type {State} */\n\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n }\n }\n /** @type {Tokenizer} */\n\n function tokenizeClosingFence(effects, ok, nok) {\n let size = 0\n return factorySpace(\n effects,\n closingSequenceStart,\n 'linePrefix',\n this.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )\n /** @type {State} */\n\n function closingSequenceStart(code) {\n effects.enter('codeFencedFence')\n effects.enter('codeFencedFenceSequence')\n return closingSequence(code)\n }\n /** @type {State} */\n\n function closingSequence(code) {\n if (code === marker) {\n effects.consume(code)\n size++\n return closingSequence\n }\n\n if (size < sizeOpen) return nok(code)\n effects.exit('codeFencedFenceSequence')\n return factorySpace(effects, closingSequenceEnd, 'whitespace')(code)\n }\n /** @type {State} */\n\n function closingSequenceEnd(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFencedFence')\n return ok(code)\n }\n\n return nok(code)\n }\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const codeIndented = {\n name: 'codeIndented',\n tokenize: tokenizeCodeIndented\n}\n/** @type {Construct} */\n\nconst indentedContent = {\n tokenize: tokenizeIndentedContent,\n partial: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCodeIndented(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('codeIndented')\n return factorySpace(effects, afterStartPrefix, 'linePrefix', 4 + 1)(code)\n }\n /** @type {State} */\n\n function afterStartPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'linePrefix' &&\n tail[2].sliceSerialize(tail[1], true).length >= 4\n ? afterPrefix(code)\n : nok(code)\n }\n /** @type {State} */\n\n function afterPrefix(code) {\n if (code === null) {\n return after(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.attempt(indentedContent, afterPrefix, after)(code)\n }\n\n effects.enter('codeFlowValue')\n return content(code)\n }\n /** @type {State} */\n\n function content(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue')\n return afterPrefix(code)\n }\n\n effects.consume(code)\n return content\n }\n /** @type {State} */\n\n function after(code) {\n effects.exit('codeIndented')\n return ok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeIndentedContent(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n // If this is a lazy line, it can’t be code.\n if (self.parser.lazy[self.now().line]) {\n return nok(code)\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return start\n }\n\n return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n }\n /** @type {State} */\n\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'linePrefix' &&\n tail[2].sliceSerialize(tail[1], true).length >= 4\n ? ok(code)\n : markdownLineEnding(code)\n ? start(code)\n : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const codeText = {\n name: 'codeText',\n tokenize: tokenizeCodeText,\n resolve: resolveCodeText,\n previous\n}\n/** @type {Resolver} */\n\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4\n let headEnterIndex = 3\n /** @type {number} */\n\n let index\n /** @type {number|undefined} */\n\n let enter // If we start and end with an EOL or a space.\n\n if (\n (events[headEnterIndex][1].type === 'lineEnding' ||\n events[headEnterIndex][1].type === 'space') &&\n (events[tailExitIndex][1].type === 'lineEnding' ||\n events[tailExitIndex][1].type === 'space')\n ) {\n index = headEnterIndex // And we have data.\n\n while (++index < tailExitIndex) {\n if (events[index][1].type === 'codeTextData') {\n // Then we have padding.\n events[headEnterIndex][1].type = 'codeTextPadding'\n events[tailExitIndex][1].type = 'codeTextPadding'\n headEnterIndex += 2\n tailExitIndex -= 2\n break\n }\n }\n } // Merge adjacent spaces and data.\n\n index = headEnterIndex - 1\n tailExitIndex++\n\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') {\n enter = index\n }\n } else if (\n index === tailExitIndex ||\n events[index][1].type === 'lineEnding'\n ) {\n events[enter][1].type = 'codeTextData'\n\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n tailExitIndex -= index - enter - 2\n index = enter + 2\n }\n\n enter = undefined\n }\n }\n\n return events\n}\n/** @type {Previous} */\n\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return (\n code !== 96 ||\n this.events[this.events.length - 1][1].type === 'characterEscape'\n )\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this\n let sizeOpen = 0\n /** @type {number} */\n\n let size\n /** @type {Token} */\n\n let token\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('codeText')\n effects.enter('codeTextSequence')\n return openingSequence(code)\n }\n /** @type {State} */\n\n function openingSequence(code) {\n if (code === 96) {\n effects.consume(code)\n sizeOpen++\n return openingSequence\n }\n\n effects.exit('codeTextSequence')\n return gap(code)\n }\n /** @type {State} */\n\n function gap(code) {\n // EOF.\n if (code === null) {\n return nok(code)\n } // Closing fence?\n // Could also be data.\n\n if (code === 96) {\n token = effects.enter('codeTextSequence')\n size = 0\n return closingSequence(code)\n } // Tabs don’t work, and virtual spaces don’t make sense.\n\n if (code === 32) {\n effects.enter('space')\n effects.consume(code)\n effects.exit('space')\n return gap\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return gap\n } // Data.\n\n effects.enter('codeTextData')\n return data(code)\n } // In code.\n\n /** @type {State} */\n\n function data(code) {\n if (\n code === null ||\n code === 32 ||\n code === 96 ||\n markdownLineEnding(code)\n ) {\n effects.exit('codeTextData')\n return gap(code)\n }\n\n effects.consume(code)\n return data\n } // Closing fence.\n\n /** @type {State} */\n\n function closingSequence(code) {\n // More.\n if (code === 96) {\n effects.consume(code)\n size++\n return closingSequence\n } // Done!\n\n if (size === sizeOpen) {\n effects.exit('codeTextSequence')\n effects.exit('codeText')\n return ok(code)\n } // More or less accents: mark as data.\n\n token.type = 'codeTextData'\n return data(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n */\nimport {splice} from 'micromark-util-chunked'\n\n/**\n * Tokenize subcontent.\n *\n * @param {Event[]} events\n * @returns {boolean}\n */\nexport function subtokenize(events) {\n /** @type {Record} */\n const jumps = {}\n let index = -1\n /** @type {Event} */\n\n let event\n /** @type {number|undefined} */\n\n let lineIndex\n /** @type {number} */\n\n let otherIndex\n /** @type {Event} */\n\n let otherEvent\n /** @type {Event[]} */\n\n let parameters\n /** @type {Event[]} */\n\n let subevents\n /** @type {boolean|undefined} */\n\n let more\n\n while (++index < events.length) {\n while (index in jumps) {\n index = jumps[index]\n }\n\n event = events[index] // Add a hook for the GFM tasklist extension, which needs to know if text\n // is in the first content of a list item.\n\n if (\n index &&\n event[1].type === 'chunkFlow' &&\n events[index - 1][1].type === 'listItemPrefix'\n ) {\n subevents = event[1]._tokenizer.events\n otherIndex = 0\n\n if (\n otherIndex < subevents.length &&\n subevents[otherIndex][1].type === 'lineEndingBlank'\n ) {\n otherIndex += 2\n }\n\n if (\n otherIndex < subevents.length &&\n subevents[otherIndex][1].type === 'content'\n ) {\n while (++otherIndex < subevents.length) {\n if (subevents[otherIndex][1].type === 'content') {\n break\n }\n\n if (subevents[otherIndex][1].type === 'chunkText') {\n subevents[otherIndex][1]._isInFirstContentOfListItem = true\n otherIndex++\n }\n }\n }\n } // Enter.\n\n if (event[0] === 'enter') {\n if (event[1].contentType) {\n Object.assign(jumps, subcontent(events, index))\n index = jumps[index]\n more = true\n }\n } // Exit.\n else if (event[1]._container) {\n otherIndex = index\n lineIndex = undefined\n\n while (otherIndex--) {\n otherEvent = events[otherIndex]\n\n if (\n otherEvent[1].type === 'lineEnding' ||\n otherEvent[1].type === 'lineEndingBlank'\n ) {\n if (otherEvent[0] === 'enter') {\n if (lineIndex) {\n events[lineIndex][1].type = 'lineEndingBlank'\n }\n\n otherEvent[1].type = 'lineEnding'\n lineIndex = otherIndex\n }\n } else {\n break\n }\n }\n\n if (lineIndex) {\n // Fix position.\n event[1].end = Object.assign({}, events[lineIndex][1].start) // Switch container exit w/ line endings.\n\n parameters = events.slice(lineIndex, index)\n parameters.unshift(event)\n splice(events, lineIndex, index - lineIndex + 1, parameters)\n }\n }\n }\n\n return !more\n}\n/**\n * Tokenize embedded tokens.\n *\n * @param {Event[]} events\n * @param {number} eventIndex\n * @returns {Record}\n */\n\nfunction subcontent(events, eventIndex) {\n const token = events[eventIndex][1]\n const context = events[eventIndex][2]\n let startPosition = eventIndex - 1\n /** @type {number[]} */\n\n const startPositions = []\n const tokenizer =\n token._tokenizer || context.parser[token.contentType](token.start)\n const childEvents = tokenizer.events\n /** @type {[number, number][]} */\n\n const jumps = []\n /** @type {Record} */\n\n const gaps = {}\n /** @type {Chunk[]} */\n\n let stream\n /** @type {Token|undefined} */\n\n let previous\n let index = -1\n /** @type {Token|undefined} */\n\n let current = token\n let adjust = 0\n let start = 0\n const breaks = [start] // Loop forward through the linked tokens to pass them in order to the\n // subtokenizer.\n\n while (current) {\n // Find the position of the event for this token.\n while (events[++startPosition][1] !== current) {\n // Empty.\n }\n\n startPositions.push(startPosition)\n\n if (!current._tokenizer) {\n stream = context.sliceStream(current)\n\n if (!current.next) {\n stream.push(null)\n }\n\n if (previous) {\n tokenizer.defineSkip(current.start)\n }\n\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = true\n }\n\n tokenizer.write(stream)\n\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = undefined\n }\n } // Unravel the next token.\n\n previous = current\n current = current.next\n } // Now, loop back through all events (and linked tokens), to figure out which\n // parts belong where.\n\n current = token\n\n while (++index < childEvents.length) {\n if (\n // Find a void token that includes a break.\n childEvents[index][0] === 'exit' &&\n childEvents[index - 1][0] === 'enter' &&\n childEvents[index][1].type === childEvents[index - 1][1].type &&\n childEvents[index][1].start.line !== childEvents[index][1].end.line\n ) {\n start = index + 1\n breaks.push(start) // Help GC.\n\n current._tokenizer = undefined\n current.previous = undefined\n current = current.next\n }\n } // Help GC.\n\n tokenizer.events = [] // If there’s one more token (which is the cases for lines that end in an\n // EOF), that’s perfect: the last point we found starts it.\n // If there isn’t then make sure any remaining content is added to it.\n\n if (current) {\n // Help GC.\n current._tokenizer = undefined\n current.previous = undefined\n } else {\n breaks.pop()\n } // Now splice the events from the subtokenizer into the current events,\n // moving back to front so that splice indices aren’t affected.\n\n index = breaks.length\n\n while (index--) {\n const slice = childEvents.slice(breaks[index], breaks[index + 1])\n const start = startPositions.pop()\n jumps.unshift([start, start + slice.length - 1])\n splice(events, start, 2, slice)\n }\n\n index = -1\n\n while (++index < jumps.length) {\n gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]\n adjust += jumps[index][1] - jumps[index][0] - 1\n }\n\n return gaps\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {subtokenize} from 'micromark-util-subtokenize'\n\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n tokenize: tokenizeContent,\n resolve: resolveContent\n}\n/** @type {Construct} */\n\nconst continuationConstruct = {\n tokenize: tokenizeContinuation,\n partial: true\n}\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\n\nfunction resolveContent(events) {\n subtokenize(events)\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeContent(effects, ok) {\n /** @type {Token} */\n let previous\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('content')\n previous = effects.enter('chunkContent', {\n contentType: 'content'\n })\n return data(code)\n }\n /** @type {State} */\n\n function data(code) {\n if (code === null) {\n return contentEnd(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.check(\n continuationConstruct,\n contentContinue,\n contentEnd\n )(code)\n } // Data.\n\n effects.consume(code)\n return data\n }\n /** @type {State} */\n\n function contentEnd(code) {\n effects.exit('chunkContent')\n effects.exit('content')\n return ok(code)\n }\n /** @type {State} */\n\n function contentContinue(code) {\n effects.consume(code)\n effects.exit('chunkContent')\n previous.next = effects.enter('chunkContent', {\n contentType: 'content',\n previous\n })\n previous = previous.next\n return data\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeContinuation(effects, ok, nok) {\n const self = this\n return startLookahead\n /** @type {State} */\n\n function startLookahead(code) {\n effects.exit('chunkContent')\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, prefixed, 'linePrefix')\n }\n /** @type {State} */\n\n function prefixed(code) {\n if (code === null || markdownLineEnding(code)) {\n return nok(code)\n }\n\n const tail = self.events[self.events.length - 1]\n\n if (\n !self.parser.constructs.disable.null.includes('codeIndented') &&\n tail &&\n tail[1].type === 'linePrefix' &&\n tail[2].sliceSerialize(tail[1], true).length >= 4\n ) {\n return ok(code)\n }\n\n return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\nimport {\n asciiControl,\n markdownLineEndingOrSpace,\n markdownLineEnding\n} from 'micromark-util-character'\n\n/**\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {string} type\n * @param {string} literalType\n * @param {string} literalMarkerType\n * @param {string} rawType\n * @param {string} stringType\n * @param {number} [max=Infinity]\n * @returns {State}\n */\n// eslint-disable-next-line max-params\nexport function factoryDestination(\n effects,\n ok,\n nok,\n type,\n literalType,\n literalMarkerType,\n rawType,\n stringType,\n max\n) {\n const limit = max || Number.POSITIVE_INFINITY\n let balance = 0\n return start\n /** @type {State} */\n\n function start(code) {\n if (code === 60) {\n effects.enter(type)\n effects.enter(literalType)\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n return destinationEnclosedBefore\n }\n\n if (code === null || code === 41 || asciiControl(code)) {\n return nok(code)\n }\n\n effects.enter(type)\n effects.enter(rawType)\n effects.enter(stringType)\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return destinationRaw(code)\n }\n /** @type {State} */\n\n function destinationEnclosedBefore(code) {\n if (code === 62) {\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n effects.exit(literalType)\n effects.exit(type)\n return ok\n }\n\n effects.enter(stringType)\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return destinationEnclosed(code)\n }\n /** @type {State} */\n\n function destinationEnclosed(code) {\n if (code === 62) {\n effects.exit('chunkString')\n effects.exit(stringType)\n return destinationEnclosedBefore(code)\n }\n\n if (code === null || code === 60 || markdownLineEnding(code)) {\n return nok(code)\n }\n\n effects.consume(code)\n return code === 92 ? destinationEnclosedEscape : destinationEnclosed\n }\n /** @type {State} */\n\n function destinationEnclosedEscape(code) {\n if (code === 60 || code === 62 || code === 92) {\n effects.consume(code)\n return destinationEnclosed\n }\n\n return destinationEnclosed(code)\n }\n /** @type {State} */\n\n function destinationRaw(code) {\n if (code === 40) {\n if (++balance > limit) return nok(code)\n effects.consume(code)\n return destinationRaw\n }\n\n if (code === 41) {\n if (!balance--) {\n effects.exit('chunkString')\n effects.exit(stringType)\n effects.exit(rawType)\n effects.exit(type)\n return ok(code)\n }\n\n effects.consume(code)\n return destinationRaw\n }\n\n if (code === null || markdownLineEndingOrSpace(code)) {\n if (balance) return nok(code)\n effects.exit('chunkString')\n effects.exit(stringType)\n effects.exit(rawType)\n effects.exit(type)\n return ok(code)\n }\n\n if (asciiControl(code)) return nok(code)\n effects.consume(code)\n return code === 92 ? destinationRawEscape : destinationRaw\n }\n /** @type {State} */\n\n function destinationRawEscape(code) {\n if (code === 40 || code === 41 || code === 92) {\n effects.consume(code)\n return destinationRaw\n }\n\n return destinationRaw(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n\n/**\n * @this {TokenizeContext}\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {string} type\n * @param {string} markerType\n * @param {string} stringType\n * @returns {State}\n */\n// eslint-disable-next-line max-params\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n const self = this\n let size = 0\n /** @type {boolean} */\n\n let data\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.enter(stringType)\n return atBreak\n }\n /** @type {State} */\n\n function atBreak(code) {\n if (\n code === null ||\n code === 91 ||\n (code === 93 && !data) ||\n /* To do: remove in the future once we’ve switched from\n * `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n * which doesn’t need this */\n\n /* Hidden footnotes hook */\n\n /* c8 ignore next 3 */\n (code === 94 &&\n !size &&\n '_hiddenFootnoteSupport' in self.parser.constructs) ||\n size > 999\n ) {\n return nok(code)\n }\n\n if (code === 93) {\n effects.exit(stringType)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return atBreak\n }\n\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return label(code)\n }\n /** @type {State} */\n\n function label(code) {\n if (\n code === null ||\n code === 91 ||\n code === 93 ||\n markdownLineEnding(code) ||\n size++ > 999\n ) {\n effects.exit('chunkString')\n return atBreak(code)\n }\n\n effects.consume(code)\n data = data || !markdownSpace(code)\n return code === 92 ? labelEscape : label\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 label\n }\n\n return label(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/**\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {string} type\n * @param {string} markerType\n * @param {string} stringType\n * @returns {State}\n */\n// eslint-disable-next-line max-params\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n /** @type {NonNullable} */\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n marker = code === 40 ? 41 : code\n return atFirstTitleBreak\n }\n /** @type {State} */\n\n function atFirstTitleBreak(code) {\n if (code === marker) {\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n\n effects.enter(stringType)\n return atTitleBreak(code)\n }\n /** @type {State} */\n\n function atTitleBreak(code) {\n if (code === marker) {\n effects.exit(stringType)\n return atFirstTitleBreak(marker)\n }\n\n if (code === null) {\n return nok(code)\n } // Note: blank lines can’t exist in content.\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, atTitleBreak, 'linePrefix')\n }\n\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return title(code)\n }\n /** @type {State} */\n\n function title(code) {\n if (code === marker || code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n return atTitleBreak(code)\n }\n\n effects.consume(code)\n return code === 92 ? titleEscape : title\n }\n /** @type {State} */\n\n function titleEscape(code) {\n if (code === marker || code === 92) {\n effects.consume(code)\n return title\n }\n\n return title(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n\n/**\n * @param {Effects} effects\n * @param {State} ok\n */\nexport function factoryWhitespace(effects, ok) {\n /** @type {boolean} */\n let seen\n return start\n /** @type {State} */\n\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n seen = true\n return start\n }\n\n if (markdownSpace(code)) {\n return factorySpace(\n effects,\n start,\n seen ? 'linePrefix' : 'lineSuffix'\n )(code)\n }\n\n return ok(code)\n }\n}\n","/**\n * Normalize an identifier (such as used in definitions).\n *\n * @param {string} value\n * @returns {string}\n */\nexport function normalizeIdentifier(value) {\n return (\n value // Collapse Markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, ' ') // Trim.\n .replace(/^ | $/g, '') // 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()\n .toUpperCase()\n )\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factorySpace} from 'micromark-factory-space'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const definition = {\n name: 'definition',\n tokenize: tokenizeDefinition\n}\n/** @type {Construct} */\n\nconst titleConstruct = {\n tokenize: tokenizeTitle,\n partial: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeDefinition(effects, ok, nok) {\n const self = this\n /** @type {string} */\n\n let identifier\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('definition')\n return factoryLabel.call(\n self,\n effects,\n labelAfter,\n nok,\n 'definitionLabel',\n 'definitionLabelMarker',\n 'definitionLabelString'\n )(code)\n }\n /** @type {State} */\n\n function labelAfter(code) {\n identifier = normalizeIdentifier(\n self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n )\n\n if (code === 58) {\n effects.enter('definitionMarker')\n effects.consume(code)\n effects.exit('definitionMarker') // Note: blank lines can’t exist in content.\n\n return factoryWhitespace(\n effects,\n factoryDestination(\n effects,\n effects.attempt(\n titleConstruct,\n factorySpace(effects, after, 'whitespace'),\n factorySpace(effects, after, 'whitespace')\n ),\n nok,\n 'definitionDestination',\n 'definitionDestinationLiteral',\n 'definitionDestinationLiteralMarker',\n 'definitionDestinationRaw',\n 'definitionDestinationString'\n )\n )\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function after(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('definition')\n\n if (!self.parser.defined.includes(identifier)) {\n self.parser.defined.push(identifier)\n }\n\n return ok(code)\n }\n\n return nok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeTitle(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, before)(code)\n : nok(code)\n }\n /** @type {State} */\n\n function before(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(\n effects,\n factorySpace(effects, after, 'whitespace'),\n nok,\n 'definitionTitle',\n 'definitionTitleMarker',\n 'definitionTitleString'\n )(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function after(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('hardBreakEscape')\n effects.enter('escapeMarker')\n effects.consume(code)\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (markdownLineEnding(code)) {\n effects.exit('escapeMarker')\n effects.exit('hardBreakEscape')\n return ok(code)\n }\n\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n\n/** @type {Construct} */\nexport const headingAtx = {\n name: 'headingAtx',\n tokenize: tokenizeHeadingAtx,\n resolve: resolveHeadingAtx\n}\n/** @type {Resolver} */\n\nfunction resolveHeadingAtx(events, context) {\n let contentEnd = events.length - 2\n let contentStart = 3\n /** @type {Token} */\n\n let content\n /** @type {Token} */\n\n let text // Prefix whitespace, part of the opening.\n\n if (events[contentStart][1].type === 'whitespace') {\n contentStart += 2\n } // Suffix whitespace, part of the closing.\n\n if (\n contentEnd - 2 > contentStart &&\n events[contentEnd][1].type === 'whitespace'\n ) {\n contentEnd -= 2\n }\n\n if (\n events[contentEnd][1].type === 'atxHeadingSequence' &&\n (contentStart === contentEnd - 1 ||\n (contentEnd - 4 > contentStart &&\n events[contentEnd - 2][1].type === 'whitespace'))\n ) {\n contentEnd -= contentStart + 1 === contentEnd ? 2 : 4\n }\n\n if (contentEnd > contentStart) {\n content = {\n type: 'atxHeadingText',\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end\n }\n text = {\n type: 'chunkText',\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end,\n // @ts-expect-error Constants are fine to assign.\n contentType: 'text'\n }\n splice(events, contentStart, contentEnd - contentStart + 1, [\n ['enter', content, context],\n ['enter', text, context],\n ['exit', text, context],\n ['exit', content, context]\n ])\n }\n\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n const self = this\n let size = 0\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('atxHeading')\n effects.enter('atxHeadingSequence')\n return fenceOpenInside(code)\n }\n /** @type {State} */\n\n function fenceOpenInside(code) {\n if (code === 35 && size++ < 6) {\n effects.consume(code)\n return fenceOpenInside\n }\n\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingSequence')\n return self.interrupt ? ok(code) : headingBreak(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function headingBreak(code) {\n if (code === 35) {\n effects.enter('atxHeadingSequence')\n return sequence(code)\n }\n\n if (code === null || markdownLineEnding(code)) {\n effects.exit('atxHeading')\n return ok(code)\n }\n\n if (markdownSpace(code)) {\n return factorySpace(effects, headingBreak, 'whitespace')(code)\n }\n\n effects.enter('atxHeadingText')\n return data(code)\n }\n /** @type {State} */\n\n function sequence(code) {\n if (code === 35) {\n effects.consume(code)\n return sequence\n }\n\n effects.exit('atxHeadingSequence')\n return headingBreak(code)\n }\n /** @type {State} */\n\n function data(code) {\n if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingText')\n return headingBreak(code)\n }\n\n effects.consume(code)\n return data\n }\n}\n","/**\n * List of lowercase HTML tag names which when parsing HTML (flow), result\n * in more relaxed rules (condition 6): because they are known blocks, the\n * HTML-like syntax doesn’t have to be strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * .\n */\nexport const htmlBlockNames = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n]\n\n/**\n * List of lowercase HTML tag names which when parsing HTML (flow), result in\n * HTML that can include lines w/o exiting, until a closing tag also in this\n * list is found (condition 1).\n *\n * This module is copied from:\n * .\n *\n * Note that `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\nimport {htmlBlockNames, htmlRawNames} from 'micromark-util-html-tag-name'\nimport {blankLine} from './blank-line.js'\n/** @type {Construct} */\n\nexport const htmlFlow = {\n name: 'htmlFlow',\n tokenize: tokenizeHtmlFlow,\n resolveTo: resolveToHtmlFlow,\n concrete: true\n}\n/** @type {Construct} */\n\nconst nextBlankConstruct = {\n tokenize: tokenizeNextBlank,\n partial: true\n}\n/** @type {Resolver} */\n\nfunction resolveToHtmlFlow(events) {\n let index = events.length\n\n while (index--) {\n if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {\n break\n }\n }\n\n if (index > 1 && events[index - 2][1].type === 'linePrefix') {\n // Add the prefix start to the HTML token.\n events[index][1].start = events[index - 2][1].start // Add the prefix start to the HTML line token.\n\n events[index + 1][1].start = events[index - 2][1].start // Remove the line prefix.\n\n events.splice(index - 2, 2)\n }\n\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n const self = this\n /** @type {number} */\n\n let kind\n /** @type {boolean} */\n\n let startTag\n /** @type {string} */\n\n let buffer\n /** @type {number} */\n\n let index\n /** @type {Code} */\n\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('htmlFlow')\n effects.enter('htmlFlowData')\n effects.consume(code)\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 33) {\n effects.consume(code)\n return declarationStart\n }\n\n if (code === 47) {\n effects.consume(code)\n return tagCloseStart\n }\n\n if (code === 63) {\n effects.consume(code)\n kind = 3 // While we’re in an instruction instead of a declaration, we’re on a `?`\n // right now, so we do need to search for `>`, similar to declarations.\n\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n buffer = String.fromCharCode(code)\n startTag = true\n return tagName\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function declarationStart(code) {\n if (code === 45) {\n effects.consume(code)\n kind = 2\n return commentOpenInside\n }\n\n if (code === 91) {\n effects.consume(code)\n kind = 5\n buffer = 'CDATA['\n index = 0\n return cdataOpenInside\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n kind = 4\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code)\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function cdataOpenInside(code) {\n if (code === buffer.charCodeAt(index++)) {\n effects.consume(code)\n return index === buffer.length\n ? self.interrupt\n ? ok\n : continuation\n : cdataOpenInside\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n buffer = String.fromCharCode(code)\n return tagName\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagName(code) {\n if (\n code === null ||\n code === 47 ||\n code === 62 ||\n markdownLineEndingOrSpace(code)\n ) {\n if (\n code !== 47 &&\n startTag &&\n htmlRawNames.includes(buffer.toLowerCase())\n ) {\n kind = 1\n return self.interrupt ? ok(code) : continuation(code)\n }\n\n if (htmlBlockNames.includes(buffer.toLowerCase())) {\n kind = 6\n\n if (code === 47) {\n effects.consume(code)\n return basicSelfClosing\n }\n\n return self.interrupt ? ok(code) : continuation(code)\n }\n\n kind = 7 // Do not support complete HTML when interrupting\n\n return self.interrupt && !self.parser.lazy[self.now().line]\n ? nok(code)\n : startTag\n ? completeAttributeNameBefore(code)\n : completeClosingTagAfter(code)\n }\n\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n buffer += String.fromCharCode(code)\n return tagName\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function basicSelfClosing(code) {\n if (code === 62) {\n effects.consume(code)\n return self.interrupt ? ok : continuation\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function completeClosingTagAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeClosingTagAfter\n }\n\n return completeEnd(code)\n }\n /** @type {State} */\n\n function completeAttributeNameBefore(code) {\n if (code === 47) {\n effects.consume(code)\n return completeEnd\n }\n\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code)\n return completeAttributeName\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeNameBefore\n }\n\n return completeEnd(code)\n }\n /** @type {State} */\n\n function completeAttributeName(code) {\n if (\n code === 45 ||\n code === 46 ||\n code === 58 ||\n code === 95 ||\n asciiAlphanumeric(code)\n ) {\n effects.consume(code)\n return completeAttributeName\n }\n\n return completeAttributeNameAfter(code)\n }\n /** @type {State} */\n\n function completeAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeNameAfter\n }\n\n return completeAttributeNameBefore(code)\n }\n /** @type {State} */\n\n function completeAttributeValueBefore(code) {\n if (\n code === null ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96\n ) {\n return nok(code)\n }\n\n if (code === 34 || code === 39) {\n effects.consume(code)\n marker = code\n return completeAttributeValueQuoted\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n\n marker = null\n return completeAttributeValueUnquoted(code)\n }\n /** @type {State} */\n\n function completeAttributeValueQuoted(code) {\n if (code === null || markdownLineEnding(code)) {\n return nok(code)\n }\n\n if (code === marker) {\n effects.consume(code)\n return completeAttributeValueQuotedAfter\n }\n\n effects.consume(code)\n return completeAttributeValueQuoted\n }\n /** @type {State} */\n\n function completeAttributeValueUnquoted(code) {\n if (\n code === null ||\n code === 34 ||\n code === 39 ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96 ||\n markdownLineEndingOrSpace(code)\n ) {\n return completeAttributeNameAfter(code)\n }\n\n effects.consume(code)\n return completeAttributeValueUnquoted\n }\n /** @type {State} */\n\n function completeAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownSpace(code)) {\n return completeAttributeNameBefore(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function completeEnd(code) {\n if (code === 62) {\n effects.consume(code)\n return completeAfter\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function completeAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAfter\n }\n\n return code === null || markdownLineEnding(code)\n ? continuation(code)\n : nok(code)\n }\n /** @type {State} */\n\n function continuation(code) {\n if (code === 45 && kind === 2) {\n effects.consume(code)\n return continuationCommentInside\n }\n\n if (code === 60 && kind === 1) {\n effects.consume(code)\n return continuationRawTagOpen\n }\n\n if (code === 62 && kind === 4) {\n effects.consume(code)\n return continuationClose\n }\n\n if (code === 63 && kind === 3) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n if (code === 93 && kind === 5) {\n effects.consume(code)\n return continuationCharacterDataInside\n }\n\n if (markdownLineEnding(code) && (kind === 6 || kind === 7)) {\n return effects.check(\n nextBlankConstruct,\n continuationClose,\n continuationAtLineEnding\n )(code)\n }\n\n if (code === null || markdownLineEnding(code)) {\n return continuationAtLineEnding(code)\n }\n\n effects.consume(code)\n return continuation\n }\n /** @type {State} */\n\n function continuationAtLineEnding(code) {\n effects.exit('htmlFlowData')\n return htmlContinueStart(code)\n }\n /** @type {State} */\n\n function htmlContinueStart(code) {\n if (code === null) {\n return done(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.attempt(\n {\n tokenize: htmlLineEnd,\n partial: true\n },\n htmlContinueStart,\n done\n )(code)\n }\n\n effects.enter('htmlFlowData')\n return continuation(code)\n }\n /** @type {Tokenizer} */\n\n function htmlLineEnd(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return lineStart\n }\n /** @type {State} */\n\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n }\n }\n /** @type {State} */\n\n function continuationCommentInside(code) {\n if (code === 45) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code)\n buffer = ''\n return continuationRawEndTag\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationRawEndTag(code) {\n if (code === 62 && htmlRawNames.includes(buffer.toLowerCase())) {\n effects.consume(code)\n return continuationClose\n }\n\n if (asciiAlpha(code) && buffer.length < 8) {\n effects.consume(code)\n buffer += String.fromCharCode(code)\n return continuationRawEndTag\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationCharacterDataInside(code) {\n if (code === 93) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code)\n return continuationClose\n } // More dashes.\n\n if (code === 45 && kind === 2) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('htmlFlowData')\n return done(code)\n }\n\n effects.consume(code)\n return continuationClose\n }\n /** @type {State} */\n\n function done(code) {\n effects.exit('htmlFlow')\n return ok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeNextBlank(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.exit('htmlFlowData')\n effects.enter('lineEndingBlank')\n effects.consume(code)\n effects.exit('lineEndingBlank')\n return effects.attempt(blankLine, ok, nok)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this\n /** @type {NonNullable|undefined} */\n\n let marker\n /** @type {string} */\n\n let buffer\n /** @type {number} */\n\n let index\n /** @type {State} */\n\n let returnState\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('htmlText')\n effects.enter('htmlTextData')\n effects.consume(code)\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 33) {\n effects.consume(code)\n return declarationOpen\n }\n\n if (code === 47) {\n effects.consume(code)\n return tagCloseStart\n }\n\n if (code === 63) {\n effects.consume(code)\n return instruction\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n return tagOpen\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code)\n return commentOpen\n }\n\n if (code === 91) {\n effects.consume(code)\n buffer = 'CDATA['\n index = 0\n return cdataOpen\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n return declaration\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function commentOpen(code) {\n if (code === 45) {\n effects.consume(code)\n return commentStart\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function commentStart(code) {\n if (code === null || code === 62) {\n return nok(code)\n }\n\n if (code === 45) {\n effects.consume(code)\n return commentStartDash\n }\n\n return comment(code)\n }\n /** @type {State} */\n\n function commentStartDash(code) {\n if (code === null || code === 62) {\n return nok(code)\n }\n\n return comment(code)\n }\n /** @type {State} */\n\n function comment(code) {\n if (code === null) {\n return nok(code)\n }\n\n if (code === 45) {\n effects.consume(code)\n return commentClose\n }\n\n if (markdownLineEnding(code)) {\n returnState = comment\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return comment\n }\n /** @type {State} */\n\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code)\n return end\n }\n\n return comment(code)\n }\n /** @type {State} */\n\n function cdataOpen(code) {\n if (code === buffer.charCodeAt(index++)) {\n effects.consume(code)\n return index === buffer.length ? cdata : cdataOpen\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function cdata(code) {\n if (code === null) {\n return nok(code)\n }\n\n if (code === 93) {\n effects.consume(code)\n return cdataClose\n }\n\n if (markdownLineEnding(code)) {\n returnState = cdata\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return cdata\n }\n /** @type {State} */\n\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code)\n return cdataEnd\n }\n\n return cdata(code)\n }\n /** @type {State} */\n\n function cdataEnd(code) {\n if (code === 62) {\n return end(code)\n }\n\n if (code === 93) {\n effects.consume(code)\n return cdataEnd\n }\n\n return cdata(code)\n }\n /** @type {State} */\n\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code)\n }\n\n if (markdownLineEnding(code)) {\n returnState = declaration\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return declaration\n }\n /** @type {State} */\n\n function instruction(code) {\n if (code === null) {\n return nok(code)\n }\n\n if (code === 63) {\n effects.consume(code)\n return instructionClose\n }\n\n if (markdownLineEnding(code)) {\n returnState = instruction\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return instruction\n }\n /** @type {State} */\n\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code)\n }\n /** @type {State} */\n\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n return tagClose\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagClose(code) {\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n return tagClose\n }\n\n return tagCloseBetween(code)\n }\n /** @type {State} */\n\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagCloseBetween\n }\n\n return end(code)\n }\n /** @type {State} */\n\n function tagOpen(code) {\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n return tagOpen\n }\n\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code)\n return end\n }\n\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code)\n return tagOpenAttributeName\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenBetween\n }\n\n return end(code)\n }\n /** @type {State} */\n\n function tagOpenAttributeName(code) {\n if (\n code === 45 ||\n code === 46 ||\n code === 58 ||\n code === 95 ||\n asciiAlphanumeric(code)\n ) {\n effects.consume(code)\n return tagOpenAttributeName\n }\n\n return tagOpenAttributeNameAfter(code)\n }\n /** @type {State} */\n\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenAttributeNameAfter\n }\n\n return tagOpenBetween(code)\n }\n /** @type {State} */\n\n function tagOpenAttributeValueBefore(code) {\n if (\n code === null ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96\n ) {\n return nok(code)\n }\n\n if (code === 34 || code === 39) {\n effects.consume(code)\n marker = code\n return tagOpenAttributeValueQuoted\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n\n effects.consume(code)\n marker = undefined\n return tagOpenAttributeValueUnquoted\n }\n /** @type {State} */\n\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code)\n return tagOpenAttributeValueQuotedAfter\n }\n\n if (code === null) {\n return nok(code)\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return tagOpenAttributeValueQuoted\n }\n /** @type {State} */\n\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 62 || code === 47 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagOpenAttributeValueUnquoted(code) {\n if (\n code === null ||\n code === 34 ||\n code === 39 ||\n code === 60 ||\n code === 61 ||\n code === 96\n ) {\n return nok(code)\n }\n\n if (code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n\n effects.consume(code)\n return tagOpenAttributeValueUnquoted\n } // We can’t have blank lines in content, so no need to worry about empty\n // tokens.\n\n /** @type {State} */\n\n function atLineEnding(code) {\n effects.exit('htmlTextData')\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(\n effects,\n afterPrefix,\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )\n }\n /** @type {State} */\n\n function afterPrefix(code) {\n effects.enter('htmlTextData')\n return returnState(code)\n }\n /** @type {State} */\n\n function end(code) {\n if (code === 62) {\n effects.consume(code)\n effects.exit('htmlTextData')\n effects.exit('htmlText')\n return ok\n }\n\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {resolveAll} from 'micromark-util-resolve-all'\n\n/** @type {Construct} */\nexport const labelEnd = {\n name: 'labelEnd',\n tokenize: tokenizeLabelEnd,\n resolveTo: resolveToLabelEnd,\n resolveAll: resolveAllLabelEnd\n}\n/** @type {Construct} */\n\nconst resourceConstruct = {\n tokenize: tokenizeResource\n}\n/** @type {Construct} */\n\nconst fullReferenceConstruct = {\n tokenize: tokenizeFullReference\n}\n/** @type {Construct} */\n\nconst collapsedReferenceConstruct = {\n tokenize: tokenizeCollapsedReference\n}\n/** @type {Resolver} */\n\nfunction resolveAllLabelEnd(events) {\n let index = -1\n /** @type {Token} */\n\n let token\n\n while (++index < events.length) {\n token = events[index][1]\n\n if (\n token.type === 'labelImage' ||\n token.type === 'labelLink' ||\n token.type === 'labelEnd'\n ) {\n // Remove the marker.\n events.splice(index + 1, token.type === 'labelImage' ? 4 : 2)\n token.type = 'data'\n index++\n }\n }\n\n return events\n}\n/** @type {Resolver} */\n\nfunction resolveToLabelEnd(events, context) {\n let index = events.length\n let offset = 0\n /** @type {Token} */\n\n let token\n /** @type {number|undefined} */\n\n let open\n /** @type {number|undefined} */\n\n let close\n /** @type {Event[]} */\n\n let media // Find an opening.\n\n while (index--) {\n token = events[index][1]\n\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (\n token.type === 'link' ||\n (token.type === 'labelLink' && token._inactive)\n ) {\n break\n } // Mark other link openings as inactive, as we can’t have links in\n // links.\n\n if (events[index][0] === 'enter' && token.type === 'labelLink') {\n token._inactive = true\n }\n } else if (close) {\n if (\n events[index][0] === 'enter' &&\n (token.type === 'labelImage' || token.type === 'labelLink') &&\n !token._balanced\n ) {\n open = index\n\n if (token.type !== 'labelLink') {\n offset = 2\n break\n }\n }\n } else if (token.type === 'labelEnd') {\n close = index\n }\n }\n\n const group = {\n type: events[open][1].type === 'labelLink' ? 'link' : 'image',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n }\n const label = {\n type: 'label',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[close][1].end)\n }\n const text = {\n type: 'labelText',\n start: Object.assign({}, events[open + offset + 2][1].end),\n end: Object.assign({}, events[close - 2][1].start)\n }\n media = [\n ['enter', group, context],\n ['enter', label, context]\n ] // Opening marker.\n\n media = push(media, events.slice(open + 1, open + offset + 3)) // Text open.\n\n media = push(media, [['enter', text, context]]) // Between.\n\n media = push(\n media,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(open + offset + 4, close - 3),\n context\n )\n ) // Text close, marker close, label close.\n\n media = push(media, [\n ['exit', text, context],\n events[close - 2],\n events[close - 1],\n ['exit', label, context]\n ]) // Reference, resource, or so.\n\n media = push(media, events.slice(close + 1)) // Media close.\n\n media = push(media, [['exit', group, context]])\n splice(events, open, events.length, media)\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this\n let index = self.events.length\n /** @type {Token} */\n\n let labelStart\n /** @type {boolean} */\n\n let defined // Find an opening.\n\n while (index--) {\n if (\n (self.events[index][1].type === 'labelImage' ||\n self.events[index][1].type === 'labelLink') &&\n !self.events[index][1]._balanced\n ) {\n labelStart = self.events[index][1]\n break\n }\n }\n\n return start\n /** @type {State} */\n\n function start(code) {\n if (!labelStart) {\n return nok(code)\n } // It’s a balanced bracket, but contains a link.\n\n if (labelStart._inactive) return balanced(code)\n defined = self.parser.defined.includes(\n normalizeIdentifier(\n self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })\n )\n )\n effects.enter('labelEnd')\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelEnd')\n return afterLabelEnd\n }\n /** @type {State} */\n\n function afterLabelEnd(code) {\n // Resource: `[asd](fgh)`.\n if (code === 40) {\n return effects.attempt(\n resourceConstruct,\n ok,\n defined ? ok : balanced\n )(code)\n } // Collapsed (`[asd][]`) or full (`[asd][fgh]`) reference?\n\n if (code === 91) {\n return effects.attempt(\n fullReferenceConstruct,\n ok,\n defined\n ? effects.attempt(collapsedReferenceConstruct, ok, balanced)\n : balanced\n )(code)\n } // Shortcut reference: `[asd]`?\n\n return defined ? ok(code) : balanced(code)\n }\n /** @type {State} */\n\n function balanced(code) {\n labelStart._balanced = true\n return nok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeResource(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('resource')\n effects.enter('resourceMarker')\n effects.consume(code)\n effects.exit('resourceMarker')\n return factoryWhitespace(effects, open)\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 41) {\n return end(code)\n }\n\n return factoryDestination(\n effects,\n destinationAfter,\n nok,\n 'resourceDestination',\n 'resourceDestinationLiteral',\n 'resourceDestinationLiteralMarker',\n 'resourceDestinationRaw',\n 'resourceDestinationString',\n 32\n )(code)\n }\n /** @type {State} */\n\n function destinationAfter(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, between)(code)\n : end(code)\n }\n /** @type {State} */\n\n function between(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(\n effects,\n factoryWhitespace(effects, end),\n nok,\n 'resourceTitle',\n 'resourceTitleMarker',\n 'resourceTitleString'\n )(code)\n }\n\n return end(code)\n }\n /** @type {State} */\n\n function end(code) {\n if (code === 41) {\n effects.enter('resourceMarker')\n effects.consume(code)\n effects.exit('resourceMarker')\n effects.exit('resource')\n return ok\n }\n\n return nok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeFullReference(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n return factoryLabel.call(\n self,\n effects,\n afterLabel,\n nok,\n 'reference',\n 'referenceMarker',\n 'referenceString'\n )(code)\n }\n /** @type {State} */\n\n function afterLabel(code) {\n return self.parser.defined.includes(\n normalizeIdentifier(\n self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n )\n )\n ? ok(code)\n : nok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCollapsedReference(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('reference')\n effects.enter('referenceMarker')\n effects.consume(code)\n effects.exit('referenceMarker')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 93) {\n effects.enter('referenceMarker')\n effects.consume(code)\n effects.exit('referenceMarker')\n effects.exit('reference')\n return ok\n }\n\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {labelEnd} from './label-end.js'\n/** @type {Construct} */\n\nexport const labelStartImage = {\n name: 'labelStartImage',\n tokenize: tokenizeLabelStartImage,\n resolveAll: labelEnd.resolveAll\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('labelImage')\n effects.enter('labelImageMarker')\n effects.consume(code)\n effects.exit('labelImageMarker')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 91) {\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelImage')\n return after\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function after(code) {\n /* To do: remove in the future once we’ve switched from\n * `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n * which doesn’t need this */\n\n /* Hidden footnotes hook */\n\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n ? nok(code)\n : ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {labelEnd} from './label-end.js'\n/** @type {Construct} */\n\nexport const labelStartLink = {\n name: 'labelStartLink',\n tokenize: tokenizeLabelStartLink,\n resolveAll: labelEnd.resolveAll\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('labelLink')\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelLink')\n return after\n }\n /** @type {State} */\n\n function after(code) {\n /* To do: remove in the future once we’ve switched from\n * `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n * which doesn’t need this */\n\n /* Hidden footnotes hook. */\n\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n ? nok(code)\n : ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLineEnding(effects, ok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, ok, 'linePrefix')\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const thematicBreak = {\n name: 'thematicBreak',\n tokenize: tokenizeThematicBreak\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeThematicBreak(effects, ok, nok) {\n let size = 0\n /** @type {NonNullable} */\n\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('thematicBreak')\n marker = code\n return atBreak(code)\n }\n /** @type {State} */\n\n function atBreak(code) {\n if (code === marker) {\n effects.enter('thematicBreakSequence')\n return sequence(code)\n }\n\n if (markdownSpace(code)) {\n return factorySpace(effects, atBreak, 'whitespace')(code)\n }\n\n if (size < 3 || (code !== null && !markdownLineEnding(code))) {\n return nok(code)\n }\n\n effects.exit('thematicBreak')\n return ok(code)\n }\n /** @type {State} */\n\n function sequence(code) {\n if (code === marker) {\n effects.consume(code)\n size++\n return sequence\n }\n\n effects.exit('thematicBreakSequence')\n return atBreak(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n/**\n * @typedef {Record & {marker: Code, type: string, size: number}} ListContainerState\n * @typedef {TokenizeContext & {containerState: ListContainerState}} TokenizeContextWithState\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {asciiDigit, markdownSpace} from 'micromark-util-character'\nimport {blankLine} from './blank-line.js'\nimport {thematicBreak} from './thematic-break.js'\n/** @type {Construct} */\n\nexport const list = {\n name: 'list',\n tokenize: tokenizeListStart,\n continuation: {\n tokenize: tokenizeListContinuation\n },\n exit: tokenizeListEnd\n}\n/** @type {Construct} */\n\nconst listItemPrefixWhitespaceConstruct = {\n tokenize: tokenizeListItemPrefixWhitespace,\n partial: true\n}\n/** @type {Construct} */\n\nconst indentConstruct = {\n tokenize: tokenizeIndent,\n partial: true\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListStart(effects, ok, nok) {\n const self = this\n const tail = self.events[self.events.length - 1]\n let initialSize =\n tail && tail[1].type === 'linePrefix'\n ? tail[2].sliceSerialize(tail[1], true).length\n : 0\n let size = 0\n return start\n /** @type {State} */\n\n function start(code) {\n const kind =\n self.containerState.type ||\n (code === 42 || code === 43 || code === 45\n ? 'listUnordered'\n : 'listOrdered')\n\n if (\n kind === 'listUnordered'\n ? !self.containerState.marker || code === self.containerState.marker\n : asciiDigit(code)\n ) {\n if (!self.containerState.type) {\n self.containerState.type = kind\n effects.enter(kind, {\n _container: true\n })\n }\n\n if (kind === 'listUnordered') {\n effects.enter('listItemPrefix')\n return code === 42 || code === 45\n ? effects.check(thematicBreak, nok, atMarker)(code)\n : atMarker(code)\n }\n\n if (!self.interrupt || code === 49) {\n effects.enter('listItemPrefix')\n effects.enter('listItemValue')\n return inside(code)\n }\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function inside(code) {\n if (asciiDigit(code) && ++size < 10) {\n effects.consume(code)\n return inside\n }\n\n if (\n (!self.interrupt || size < 2) &&\n (self.containerState.marker\n ? code === self.containerState.marker\n : code === 41 || code === 46)\n ) {\n effects.exit('listItemValue')\n return atMarker(code)\n }\n\n return nok(code)\n }\n /**\n * @type {State}\n **/\n\n function atMarker(code) {\n effects.enter('listItemMarker')\n effects.consume(code)\n effects.exit('listItemMarker')\n self.containerState.marker = self.containerState.marker || code\n return effects.check(\n blankLine, // Can’t be empty when interrupting.\n self.interrupt ? nok : onBlank,\n effects.attempt(\n listItemPrefixWhitespaceConstruct,\n endOfPrefix,\n otherPrefix\n )\n )\n }\n /** @type {State} */\n\n function onBlank(code) {\n self.containerState.initialBlankLine = true\n initialSize++\n return endOfPrefix(code)\n }\n /** @type {State} */\n\n function otherPrefix(code) {\n if (markdownSpace(code)) {\n effects.enter('listItemPrefixWhitespace')\n effects.consume(code)\n effects.exit('listItemPrefixWhitespace')\n return endOfPrefix\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function endOfPrefix(code) {\n self.containerState.size =\n initialSize +\n self.sliceSerialize(effects.exit('listItemPrefix'), true).length\n return ok(code)\n }\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListContinuation(effects, ok, nok) {\n const self = this\n self.containerState._closeFlow = undefined\n return effects.check(blankLine, onBlank, notBlank)\n /** @type {State} */\n\n function onBlank(code) {\n self.containerState.furtherBlankLines =\n self.containerState.furtherBlankLines ||\n self.containerState.initialBlankLine // We have a blank line.\n // Still, try to consume at most the items size.\n\n return factorySpace(\n effects,\n ok,\n 'listItemIndent',\n self.containerState.size + 1\n )(code)\n }\n /** @type {State} */\n\n function notBlank(code) {\n if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n self.containerState.furtherBlankLines = undefined\n self.containerState.initialBlankLine = undefined\n return notInCurrentItem(code)\n }\n\n self.containerState.furtherBlankLines = undefined\n self.containerState.initialBlankLine = undefined\n return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)\n }\n /** @type {State} */\n\n function notInCurrentItem(code) {\n // While we do continue, we signal that the flow should be closed.\n self.containerState._closeFlow = true // As we’re closing flow, we’re no longer interrupting.\n\n self.interrupt = undefined\n return factorySpace(\n effects,\n effects.attempt(list, ok, nok),\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )(code)\n }\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this\n return factorySpace(\n effects,\n afterPrefix,\n 'listItemIndent',\n self.containerState.size + 1\n )\n /** @type {State} */\n\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'listItemIndent' &&\n tail[2].sliceSerialize(tail[1], true).length === self.containerState.size\n ? ok(code)\n : nok(code)\n }\n}\n/**\n * @type {Exiter}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListEnd(effects) {\n effects.exit(this.containerState.type)\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n const self = this\n return factorySpace(\n effects,\n afterPrefix,\n 'listItemPrefixWhitespace',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4 + 1\n )\n /** @type {State} */\n\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return !markdownSpace(code) &&\n tail &&\n tail[1].type === 'listItemPrefixWhitespace'\n ? ok(code)\n : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const setextUnderline = {\n name: 'setextUnderline',\n tokenize: tokenizeSetextUnderline,\n resolveTo: resolveToSetextUnderline\n}\n/** @type {Resolver} */\n\nfunction resolveToSetextUnderline(events, context) {\n let index = events.length\n /** @type {number|undefined} */\n\n let content\n /** @type {number|undefined} */\n\n let text\n /** @type {number|undefined} */\n\n let definition // Find the opening of the content.\n // It’ll always exist: we don’t tokenize if it isn’t there.\n\n while (index--) {\n if (events[index][0] === 'enter') {\n if (events[index][1].type === 'content') {\n content = index\n break\n }\n\n if (events[index][1].type === 'paragraph') {\n text = index\n }\n } // Exit\n else {\n if (events[index][1].type === 'content') {\n // Remove the content end (if needed we’ll add it later)\n events.splice(index, 1)\n }\n\n if (!definition && events[index][1].type === 'definition') {\n definition = index\n }\n }\n }\n\n const heading = {\n type: 'setextHeading',\n start: Object.assign({}, events[text][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n } // Change the paragraph to setext heading text.\n\n events[text][1].type = 'setextHeadingText' // If we have definitions in the content, we’ll keep on having content,\n // but we need move it.\n\n if (definition) {\n events.splice(text, 0, ['enter', heading, context])\n events.splice(definition + 1, 0, ['exit', events[content][1], context])\n events[content][1].end = Object.assign({}, events[definition][1].end)\n } else {\n events[content][1] = heading\n } // Add the heading exit at the end.\n\n events.push(['exit', heading, context])\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n const self = this\n let index = self.events.length\n /** @type {NonNullable} */\n\n let marker\n /** @type {boolean} */\n\n let paragraph // Find an opening.\n\n while (index--) {\n // Skip enter/exit of line ending, line prefix, and content.\n // We can now either have a definition or a paragraph.\n if (\n self.events[index][1].type !== 'lineEnding' &&\n self.events[index][1].type !== 'linePrefix' &&\n self.events[index][1].type !== 'content'\n ) {\n paragraph = self.events[index][1].type === 'paragraph'\n break\n }\n }\n\n return start\n /** @type {State} */\n\n function start(code) {\n if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n effects.enter('setextHeadingLine')\n effects.enter('setextHeadingLineSequence')\n marker = code\n return closingSequence(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function closingSequence(code) {\n if (code === marker) {\n effects.consume(code)\n return closingSequence\n }\n\n effects.exit('setextHeadingLineSequence')\n return factorySpace(effects, closingSequenceEnd, 'lineSuffix')(code)\n }\n /** @type {State} */\n\n function closingSequenceEnd(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('setextHeadingLine')\n return ok(code)\n }\n\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {blankLine, content} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {InitialConstruct} */\nexport const flow = {\n tokenize: initializeFlow\n}\n/** @type {Initializer} */\n\nfunction initializeFlow(effects) {\n const self = this\n const initial = effects.attempt(\n // Try to parse a blank line.\n blankLine,\n atBlankEnding, // Try to parse initial flow (essentially, only code).\n effects.attempt(\n this.parser.constructs.flowInitial,\n afterConstruct,\n factorySpace(\n effects,\n effects.attempt(\n this.parser.constructs.flow,\n afterConstruct,\n effects.attempt(content, afterConstruct)\n ),\n 'linePrefix'\n )\n )\n )\n return initial\n /** @type {State} */\n\n function atBlankEnding(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('lineEndingBlank')\n effects.consume(code)\n effects.exit('lineEndingBlank')\n self.currentConstruct = undefined\n return initial\n }\n /** @type {State} */\n\n function afterConstruct(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n self.currentConstruct = undefined\n return initial\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nexport const resolver = {\n resolveAll: createResolver()\n}\nexport const string = initializeFactory('string')\nexport const text = initializeFactory('text')\n/**\n * @param {'string'|'text'} field\n * @returns {InitialConstruct}\n */\n\nfunction initializeFactory(field) {\n return {\n tokenize: initializeText,\n resolveAll: createResolver(\n field === 'text' ? resolveAllLineSuffixes : undefined\n )\n }\n /** @type {Initializer} */\n\n function initializeText(effects) {\n const self = this\n const constructs = this.parser.constructs[field]\n const text = effects.attempt(constructs, start, notText)\n return start\n /** @type {State} */\n\n function start(code) {\n return atBreak(code) ? text(code) : notText(code)\n }\n /** @type {State} */\n\n function notText(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('data')\n effects.consume(code)\n return data\n }\n /** @type {State} */\n\n function data(code) {\n if (atBreak(code)) {\n effects.exit('data')\n return text(code)\n } // Data.\n\n effects.consume(code)\n return data\n }\n /**\n * @param {Code} code\n * @returns {boolean}\n */\n\n function atBreak(code) {\n if (code === null) {\n return true\n }\n\n const list = constructs[code]\n let index = -1\n\n if (list) {\n while (++index < list.length) {\n const item = list[index]\n\n if (!item.previous || item.previous.call(self, self.previous)) {\n return true\n }\n }\n }\n\n return false\n }\n }\n}\n/**\n * @param {Resolver} [extraResolver]\n * @returns {Resolver}\n */\n\nfunction createResolver(extraResolver) {\n return resolveAllText\n /** @type {Resolver} */\n\n function resolveAllText(events, context) {\n let index = -1\n /** @type {number|undefined} */\n\n let enter // A rather boring computation (to merge adjacent `data` events) which\n // improves mm performance by 29%.\n\n while (++index <= events.length) {\n if (enter === undefined) {\n if (events[index] && events[index][1].type === 'data') {\n enter = index\n index++\n }\n } else if (!events[index] || events[index][1].type !== 'data') {\n // Don’t do anything if there is one data token.\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n index = enter + 2\n }\n\n enter = undefined\n }\n }\n\n return extraResolver ? extraResolver(events, context) : events\n }\n}\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\n\nfunction resolveAllLineSuffixes(events, context) {\n let eventIndex = 0 // Skip first.\n\n while (++eventIndex <= events.length) {\n if (\n (eventIndex === events.length ||\n events[eventIndex][1].type === 'lineEnding') &&\n events[eventIndex - 1][1].type === 'data'\n ) {\n const data = events[eventIndex - 1][1]\n const chunks = context.sliceStream(data)\n let index = chunks.length\n let bufferIndex = -1\n let size = 0\n /** @type {boolean|undefined} */\n\n let tabs\n\n while (index--) {\n const chunk = chunks[index]\n\n if (typeof chunk === 'string') {\n bufferIndex = chunk.length\n\n while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n size++\n bufferIndex--\n }\n\n if (bufferIndex) break\n bufferIndex = -1\n } // Number\n else if (chunk === -2) {\n tabs = true\n size++\n } else if (chunk === -1) {\n // Empty\n } else {\n // Replacement character, exit.\n index++\n break\n }\n }\n\n if (size) {\n const token = {\n type:\n eventIndex === events.length || tabs || size < 2\n ? 'lineSuffix'\n : 'hardBreakTrailing',\n start: {\n line: data.end.line,\n column: data.end.column - size,\n offset: data.end.offset - size,\n _index: data.start._index + index,\n _bufferIndex: index\n ? bufferIndex\n : data.start._bufferIndex + bufferIndex\n },\n end: Object.assign({}, data.end)\n }\n data.end = Object.assign({}, token.start)\n\n if (data.start.offset === data.end.offset) {\n Object.assign(data, token)\n } else {\n events.splice(\n eventIndex,\n 0,\n ['enter', token, context],\n ['exit', token, context]\n )\n eventIndex += 2\n }\n }\n\n eventIndex++\n }\n }\n\n return events\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n */\n\n/**\n * @typedef Info\n * @property {() => void} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {void}\n */\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {resolveAll} from 'micromark-util-resolve-all'\n\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit} [from]\n * @returns {TokenizeContext}\n */\nexport function createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = Object.assign(\n from\n ? Object.assign({}, from)\n : {\n line: 1,\n column: 1,\n offset: 0\n },\n {\n _index: 0,\n _bufferIndex: -1\n }\n )\n /** @type {Record} */\n\n const columnStart = {}\n /** @type {Array} */\n\n const resolveAllConstructs = []\n /** @type {Array} */\n\n let chunks = []\n /** @type {Array} */\n\n let stack = []\n /** @type {boolean|undefined} */\n\n let consumed = true\n /**\n * Tools used for tokenizing.\n *\n * @type {Effects}\n */\n\n const effects = {\n consume,\n enter,\n exit,\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n interrupt: constructFactory(onsuccessfulcheck, {\n interrupt: true\n })\n }\n /**\n * State and tools for resolving and serializing.\n *\n * @type {TokenizeContext}\n */\n\n const context = {\n previous: null,\n code: null,\n containerState: {},\n events: [],\n parser,\n sliceStream,\n sliceSerialize,\n now,\n defineSkip,\n write\n }\n /**\n * The state function.\n *\n * @type {State|void}\n */\n\n let state = initialize.tokenize.call(context, effects)\n /**\n * Track which character we expect to be consumed, to catch bugs.\n *\n * @type {Code}\n */\n\n let expectedCode\n\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize)\n }\n\n return context\n /** @type {TokenizeContext['write']} */\n\n function write(slice) {\n chunks = push(chunks, slice)\n main() // Exit if we’re not done, resolve might change stuff.\n\n if (chunks[chunks.length - 1] !== null) {\n return []\n }\n\n addResult(initialize, 0) // Otherwise, resolve, and exit.\n\n context.events = resolveAll(resolveAllConstructs, context.events, context)\n return context.events\n } //\n // Tools.\n //\n\n /** @type {TokenizeContext['sliceSerialize']} */\n\n function sliceSerialize(token, expandTabs) {\n return serializeChunks(sliceStream(token), expandTabs)\n }\n /** @type {TokenizeContext['sliceStream']} */\n\n function sliceStream(token) {\n return sliceChunks(chunks, token)\n }\n /** @type {TokenizeContext['now']} */\n\n function now() {\n return Object.assign({}, point)\n }\n /** @type {TokenizeContext['defineSkip']} */\n\n function defineSkip(value) {\n columnStart[value.line] = value.column\n accountForPotentialSkip()\n } //\n // State management.\n //\n\n /**\n * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n * `consume`).\n * Here is where we walk through the chunks, which either include strings of\n * several characters, or numerical character codes.\n * The reason to do this in a loop instead of a call is so the stack can\n * drain.\n *\n * @returns {void}\n */\n\n function main() {\n /** @type {number} */\n let chunkIndex\n\n while (point._index < chunks.length) {\n const chunk = chunks[point._index] // If we’re in a buffer chunk, loop through it.\n\n if (typeof chunk === 'string') {\n chunkIndex = point._index\n\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0\n }\n\n while (\n point._index === chunkIndex &&\n point._bufferIndex < chunk.length\n ) {\n go(chunk.charCodeAt(point._bufferIndex))\n }\n } else {\n go(chunk)\n }\n }\n }\n /**\n * Deal with one code.\n *\n * @param {Code} code\n * @returns {void}\n */\n\n function go(code) {\n consumed = undefined\n expectedCode = code\n state = state(code)\n }\n /** @type {Effects['consume']} */\n\n function consume(code) {\n if (markdownLineEnding(code)) {\n point.line++\n point.column = 1\n point.offset += code === -3 ? 2 : 1\n accountForPotentialSkip()\n } else if (code !== -1) {\n point.column++\n point.offset++\n } // Not in a string chunk.\n\n if (point._bufferIndex < 0) {\n point._index++\n } else {\n point._bufferIndex++ // At end of string chunk.\n // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n // strings.\n\n if (point._bufferIndex === chunks[point._index].length) {\n point._bufferIndex = -1\n point._index++\n }\n } // Expose the previous character.\n\n context.previous = code // Mark as consumed.\n\n consumed = true\n }\n /** @type {Effects['enter']} */\n\n function enter(type, fields) {\n /** @type {Token} */\n // @ts-expect-error Patch instead of assign required fields to help GC.\n const token = fields || {}\n token.type = type\n token.start = now()\n context.events.push(['enter', token, context])\n stack.push(token)\n return token\n }\n /** @type {Effects['exit']} */\n\n function exit(type) {\n const token = stack.pop()\n token.end = now()\n context.events.push(['exit', token, context])\n return token\n }\n /**\n * Use results.\n *\n * @type {ReturnHandle}\n */\n\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from)\n }\n /**\n * Discard results.\n *\n * @type {ReturnHandle}\n */\n\n function onsuccessfulcheck(_, info) {\n info.restore()\n }\n /**\n * Factory to attempt/check/interrupt.\n *\n * @param {ReturnHandle} onreturn\n * @param {Record} [fields]\n */\n\n function constructFactory(onreturn, fields) {\n return hook\n /**\n * Handle either an object mapping codes to constructs, a list of\n * constructs, or a single construct.\n *\n * @param {Construct|Array|ConstructRecord} constructs\n * @param {State} returnState\n * @param {State} [bogusState]\n * @returns {State}\n */\n\n function hook(constructs, returnState, bogusState) {\n /** @type {Array} */\n let listOfConstructs\n /** @type {number} */\n\n let constructIndex\n /** @type {Construct} */\n\n let currentConstruct\n /** @type {Info} */\n\n let info\n return Array.isArray(constructs)\n ? /* c8 ignore next 1 */\n handleListOfConstructs(constructs)\n : 'tokenize' in constructs // @ts-expect-error Looks like a construct.\n ? handleListOfConstructs([constructs])\n : handleMapOfConstructs(constructs)\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * @returns {State}\n */\n\n function handleMapOfConstructs(map) {\n return start\n /** @type {State} */\n\n function start(code) {\n const def = code !== null && map[code]\n const all = code !== null && map.null\n const list = [\n // To do: add more extension tests.\n\n /* c8 ignore next 2 */\n ...(Array.isArray(def) ? def : def ? [def] : []),\n ...(Array.isArray(all) ? all : all ? [all] : [])\n ]\n return handleListOfConstructs(list)(code)\n }\n }\n /**\n * Handle a list of construct.\n *\n * @param {Array} list\n * @returns {State}\n */\n\n function handleListOfConstructs(list) {\n listOfConstructs = list\n constructIndex = 0\n\n if (list.length === 0) {\n return bogusState\n }\n\n return handleConstruct(list[constructIndex])\n }\n /**\n * Handle a single construct.\n *\n * @param {Construct} construct\n * @returns {State}\n */\n\n function handleConstruct(construct) {\n return start\n /** @type {State} */\n\n function start(code) {\n // To do: not needed to store if there is no bogus state, probably?\n // Currently doesn’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n // by not storing.\n info = store()\n currentConstruct = construct\n\n if (!construct.partial) {\n context.currentConstruct = construct\n }\n\n if (\n construct.name &&\n context.parser.constructs.disable.null.includes(construct.name)\n ) {\n return nok(code)\n }\n\n return construct.tokenize.call(\n // If we do have fields, create an object w/ `context` as its\n // prototype.\n // This allows a “live binding”, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context,\n effects,\n ok,\n nok\n )(code)\n }\n }\n /** @type {State} */\n\n function ok(code) {\n consumed = true\n onreturn(currentConstruct, info)\n return returnState\n }\n /** @type {State} */\n\n function nok(code) {\n consumed = true\n info.restore()\n\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex])\n }\n\n return bogusState\n }\n }\n }\n /**\n * @param {Construct} construct\n * @param {number} from\n * @returns {void}\n */\n\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct)\n }\n\n if (construct.resolve) {\n splice(\n context.events,\n from,\n context.events.length - from,\n construct.resolve(context.events.slice(from), context)\n )\n }\n\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context)\n }\n }\n /**\n * Store state.\n *\n * @returns {Info}\n */\n\n function store() {\n const startPoint = now()\n const startPrevious = context.previous\n const startCurrentConstruct = context.currentConstruct\n const startEventsIndex = context.events.length\n const startStack = Array.from(stack)\n return {\n restore,\n from: startEventsIndex\n }\n /**\n * Restore state.\n *\n * @returns {void}\n */\n\n function restore() {\n point = startPoint\n context.previous = startPrevious\n context.currentConstruct = startCurrentConstruct\n context.events.length = startEventsIndex\n stack = startStack\n accountForPotentialSkip()\n }\n }\n /**\n * Move the current point a bit forward in the line when it’s on a column\n * skip.\n *\n * @returns {void}\n */\n\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line]\n point.offset += columnStart[point.line] - 1\n }\n }\n}\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array} chunks\n * @param {Pick} token\n * @returns {Array}\n */\n\nfunction sliceChunks(chunks, token) {\n const startIndex = token.start._index\n const startBufferIndex = token.start._bufferIndex\n const endIndex = token.end._index\n const endBufferIndex = token.end._bufferIndex\n /** @type {Array} */\n\n let view\n\n if (startIndex === endIndex) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n } else {\n view = chunks.slice(startIndex, endIndex)\n\n if (startBufferIndex > -1) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view[0] = view[0].slice(startBufferIndex)\n }\n\n if (endBufferIndex > 0) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view.push(chunks[endIndex].slice(0, endBufferIndex))\n }\n }\n\n return view\n}\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array} chunks\n * @param {boolean} [expandTabs=false]\n * @returns {string}\n */\n\nfunction serializeChunks(chunks, expandTabs) {\n let index = -1\n /** @type {Array} */\n\n const result = []\n /** @type {boolean|undefined} */\n\n let atTab\n\n while (++index < chunks.length) {\n const chunk = chunks[index]\n /** @type {string} */\n\n let value\n\n if (typeof chunk === 'string') {\n value = chunk\n } else\n switch (chunk) {\n case -5: {\n value = '\\r'\n break\n }\n\n case -4: {\n value = '\\n'\n break\n }\n\n case -3: {\n value = '\\r' + '\\n'\n break\n }\n\n case -2: {\n value = expandTabs ? ' ' : '\\t'\n break\n }\n\n case -1: {\n if (!expandTabs && atTab) continue\n value = ' '\n break\n }\n\n default: {\n // Currently only replacement character.\n value = String.fromCharCode(chunk)\n }\n }\n\n atTab = chunk === -2\n result.push(value)\n }\n\n return result.join('')\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\nimport {\n attention,\n autolink,\n blockQuote,\n characterEscape,\n characterReference,\n codeFenced,\n codeIndented,\n codeText,\n definition,\n hardBreakEscape,\n headingAtx,\n htmlFlow,\n htmlText,\n labelEnd,\n labelStartImage,\n labelStartLink,\n lineEnding,\n list,\n setextUnderline,\n thematicBreak\n} from 'micromark-core-commonmark'\nimport {resolver as resolveText} from './initialize/text.js'\n/** @type {Extension['document']} */\n\nexport const document = {\n [42]: list,\n [43]: list,\n [45]: list,\n [48]: list,\n [49]: list,\n [50]: list,\n [51]: list,\n [52]: list,\n [53]: list,\n [54]: list,\n [55]: list,\n [56]: list,\n [57]: list,\n [62]: blockQuote\n}\n/** @type {Extension['contentInitial']} */\n\nexport const contentInitial = {\n [91]: definition\n}\n/** @type {Extension['flowInitial']} */\n\nexport const flowInitial = {\n [-2]: codeIndented,\n [-1]: codeIndented,\n [32]: codeIndented\n}\n/** @type {Extension['flow']} */\n\nexport const flow = {\n [35]: headingAtx,\n [42]: thematicBreak,\n [45]: [setextUnderline, thematicBreak],\n [60]: htmlFlow,\n [61]: setextUnderline,\n [95]: thematicBreak,\n [96]: codeFenced,\n [126]: codeFenced\n}\n/** @type {Extension['string']} */\n\nexport const string = {\n [38]: characterReference,\n [92]: characterEscape\n}\n/** @type {Extension['text']} */\n\nexport const text = {\n [-5]: lineEnding,\n [-4]: lineEnding,\n [-3]: lineEnding,\n [33]: labelStartImage,\n [38]: characterReference,\n [42]: attention,\n [60]: [autolink, htmlText],\n [91]: labelStartLink,\n [92]: [hardBreakEscape, characterEscape],\n [93]: labelEnd,\n [95]: attention,\n [96]: codeText\n}\n/** @type {Extension['insideSpan']} */\n\nexport const insideSpan = {\n null: [attention, resolveText]\n}\n/** @type {Extension['attentionMarkers']} */\n\nexport const attentionMarkers = {\n null: [42, 95]\n}\n/** @type {Extension['disable']} */\n\nexport const disable = {\n null: []\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Create} Create\n */\nimport {combineExtensions} from 'micromark-util-combine-extensions'\nimport {content} from './initialize/content.js'\nimport {document} from './initialize/document.js'\nimport {flow} from './initialize/flow.js'\nimport {text, string} from './initialize/text.js'\nimport {createTokenizer} from './create-tokenizer.js'\nimport * as defaultConstructs from './constructs.js'\n/**\n * @param {ParseOptions} [options]\n * @returns {ParseContext}\n */\n\nexport function parse(options = {}) {\n /** @type {FullNormalizedExtension} */\n // @ts-expect-error `defaultConstructs` is full, so the result will be too.\n const constructs = combineExtensions(\n // @ts-expect-error Same as above.\n [defaultConstructs].concat(options.extensions || [])\n )\n /** @type {ParseContext} */\n\n const parser = {\n defined: [],\n lazy: {},\n constructs,\n content: create(content),\n document: create(document),\n flow: create(flow),\n string: create(string),\n text: create(text)\n }\n return parser\n /**\n * @param {InitialConstruct} initial\n */\n\n function create(initial) {\n return creator\n /** @type {Create} */\n\n function creator(from) {\n return createTokenizer(parser, initial, from)\n }\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding} [encoding]\n * @param {boolean} [end=false]\n * @returns {Array}\n */\nconst search = /[\\0\\t\\n\\r]/g\n/**\n * @returns {Preprocessor}\n */\n\nexport function preprocess() {\n let column = 1\n let buffer = ''\n /** @type {boolean|undefined} */\n\n let start = true\n /** @type {boolean|undefined} */\n\n let atCarriageReturn\n return preprocessor\n /** @type {Preprocessor} */\n\n function preprocessor(value, encoding, end) {\n /** @type {Array} */\n const chunks = []\n /** @type {RegExpMatchArray|null} */\n\n let match\n /** @type {number} */\n\n let next\n /** @type {number} */\n\n let startPosition\n /** @type {number} */\n\n let endPosition\n /** @type {Code} */\n\n let code // @ts-expect-error `Buffer` does allow an encoding.\n\n value = buffer + value.toString(encoding)\n startPosition = 0\n buffer = ''\n\n if (start) {\n if (value.charCodeAt(0) === 65279) {\n startPosition++\n }\n\n start = undefined\n }\n\n while (startPosition < value.length) {\n search.lastIndex = startPosition\n match = search.exec(value)\n endPosition =\n match && match.index !== undefined ? match.index : value.length\n code = value.charCodeAt(endPosition)\n\n if (!match) {\n buffer = value.slice(startPosition)\n break\n }\n\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3)\n atCarriageReturn = undefined\n } else {\n if (atCarriageReturn) {\n chunks.push(-5)\n atCarriageReturn = undefined\n }\n\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition))\n column += endPosition - startPosition\n }\n\n switch (code) {\n case 0: {\n chunks.push(65533)\n column++\n break\n }\n\n case 9: {\n next = Math.ceil(column / 4) * 4\n chunks.push(-2)\n\n while (column++ < next) chunks.push(-1)\n\n break\n }\n\n case 10: {\n chunks.push(-4)\n column = 1\n break\n }\n\n default: {\n atCarriageReturn = true\n column = 1\n }\n }\n }\n\n startPosition = endPosition + 1\n }\n\n if (end) {\n if (atCarriageReturn) chunks.push(-5)\n if (buffer) chunks.push(buffer)\n chunks.push(null)\n }\n\n return chunks\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\nimport {subtokenize} from 'micromark-util-subtokenize'\n/**\n * @param {Array} events\n * @returns {Array}\n */\n\nexport function postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n\n return events\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n */\nexport function decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base)\n\n if (\n // C0 except for HT, LF, FF, CR, space\n code < 9 ||\n code === 11 ||\n (code > 13 && code < 32) || // Control character (DEL) of the basic block and C1 controls.\n (code > 126 && code < 160) || // Lone high surrogates and low surrogates.\n (code > 55295 && code < 57344) || // Noncharacters.\n (code > 64975 && code < 65008) ||\n (code & 65535) === 65535 ||\n (code & 65535) === 65534 || // Out of range\n code > 1114111\n ) {\n return '\\uFFFD'\n }\n\n return String.fromCharCode(code)\n}\n","import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n/**\n * Utility to decode markdown strings (which occur in places such as fenced\n * code info strings, destinations, labels, and titles).\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * @returns {string}\n */\n\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode)\n}\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\n\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1\n } // Reference.\n\n const head = $2.charCodeAt(0)\n\n if (head === 35) {\n const head = $2.charCodeAt(1)\n const hex = head === 120 || head === 88\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n }\n\n return decodeNamedCharacterReference($2) || $0\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').HTML} HTML\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Root | Content} Node\n * @typedef {Extract} Parent\n *\n * @typedef {Omit & {type: 'fragment', children: Array}} Fragment\n */\n\n/**\n * @callback Transform\n * Extra transform, to change the AST afterwards.\n * @param {Root} tree\n * Tree to transform.\n * @returns {Root | undefined | null | void}\n * New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n * Handle a token.\n * @param {CompileContext} this\n * Context.\n * @param {Token} token\n * Current token.\n * @returns {void}\n * Nothing.\n *\n * @typedef {Record} Handles\n * Token types mapping to handles\n *\n * @callback OnEnterError\n * Handle the case where the `right` token is open, but it is closed (by the\n * `left` token) or because we reached the end of the document.\n * @param {Omit} this\n * Context.\n * @param {Token | undefined} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {void}\n * Nothing.\n *\n * @callback OnExitError\n * Handle the case where the `right` token is open but it is closed by\n * exiting the `left` token.\n * @param {Omit} this\n * Context.\n * @param {Token} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {void}\n * Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n * Open token on the stack, with an optional error handler for when\n * that token isn’t closed properly.\n */\n\n/**\n * @typedef Config\n * Configuration.\n *\n * We have our defaults, but extensions will add more.\n * @property {Array} canContainEols\n * Token types where line endings are used.\n * @property {Handles} enter\n * Opening handles.\n * @property {Handles} exit\n * Closing handles.\n * @property {Array} transforms\n * Tree transforms.\n *\n * @typedef {Partial} Extension\n * Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n * mdast compiler context.\n * @property {Array} stack\n * Stack of nodes.\n * @property {Array} tokenStack\n * Stack of tokens.\n * @property {(key: Key) => CompileData[Key]} getData\n * Get data from the key/value store.\n * @property {(key: Key, value?: CompileData[Key]) => void} setData\n * Set data into the key/value store.\n * @property {(this: CompileContext) => void} buffer\n * Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n * Stop capturing and access the output data.\n * @property {(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter\n * Enter a token.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit\n * Exit a token.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n * Get the string value of a token.\n * @property {Config} config\n * Configuration.\n *\n * @typedef FromMarkdownOptions\n * Configuration for how to build mdast.\n * @property {Array> | null | undefined} [mdastExtensions]\n * Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n * Configuration.\n */\n\n// To do: micromark: create a registry of tokens?\n// To do: next major: don’t return given `Node` from `enter`.\n// To do: next major: remove setter/getter.\n\nimport {toString} from 'mdast-util-to-string'\nimport {parse} from 'micromark/lib/parse.js'\nimport {preprocess} from 'micromark/lib/preprocess.js'\nimport {postprocess} from 'micromark/lib/postprocess.js'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nimport {decodeString} from 'micromark-util-decode-string'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {stringifyPosition} from 'unist-util-stringify-position'\nconst own = {}.hasOwnProperty\n\n/**\n * @param value\n * Markdown to parse.\n * @param encoding\n * Character encoding for when `value` is `Buffer`.\n * @param options\n * Configuration.\n * @returns\n * mdast tree.\n */\nexport const fromMarkdown =\n /**\n * @type {(\n * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) &\n * ((value: Value, options?: Options | null | undefined) => Root)\n * )}\n */\n\n /**\n * @param {Value} value\n * @param {Encoding | Options | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n */\n function (value, encoding, options) {\n if (typeof encoding !== 'string') {\n options = encoding\n encoding = undefined\n }\n return compiler(options)(\n postprocess(\n parse(options).document().write(preprocess()(value, encoding, true))\n )\n )\n }\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n }\n configure(config, (options || {}).mdastExtensions || [])\n\n /** @type {CompileData} */\n const data = {}\n return compile\n\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n function compile(events) {\n /** @type {Root} */\n let tree = {\n type: 'root',\n children: []\n }\n /** @type {Omit} */\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n setData,\n getData\n }\n /** @type {Array} */\n const listStack = []\n let index = -1\n while (++index < events.length) {\n // We preprocess lists to add `listItem` tokens, and to infer whether\n // items the list itself are spread out.\n if (\n events[index][1].type === 'listOrdered' ||\n events[index][1].type === 'listUnordered'\n ) {\n if (events[index][0] === 'enter') {\n listStack.push(index)\n } else {\n const tail = listStack.pop()\n index = prepareList(events, tail, index)\n }\n }\n }\n index = -1\n while (++index < events.length) {\n const handler = config[events[index][0]]\n if (own.call(handler, events[index][1].type)) {\n handler[events[index][1].type].call(\n Object.assign(\n {\n sliceSerialize: events[index][2].sliceSerialize\n },\n context\n ),\n events[index][1]\n )\n }\n }\n\n // Handle tokens still being open.\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1]\n const handler = tail[1] || defaultOnError\n handler.call(context, undefined, tail[0])\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(\n events.length > 0\n ? events[0][1].start\n : {\n line: 1,\n column: 1,\n offset: 0\n }\n ),\n end: point(\n events.length > 0\n ? events[events.length - 2][1].end\n : {\n line: 1,\n column: 1,\n offset: 0\n }\n )\n }\n\n // Call transforms.\n index = -1\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree\n }\n return tree\n }\n\n /**\n * @param {Array} events\n * @param {number} start\n * @param {number} length\n * @returns {number}\n */\n function prepareList(events, start, length) {\n let index = start - 1\n let containerBalance = -1\n let listSpread = false\n /** @type {Token | undefined} */\n let listItem\n /** @type {number | undefined} */\n let lineIndex\n /** @type {number | undefined} */\n let firstBlankLineIndex\n /** @type {boolean | undefined} */\n let atMarker\n while (++index <= length) {\n const event = events[index]\n if (\n event[1].type === 'listUnordered' ||\n event[1].type === 'listOrdered' ||\n event[1].type === 'blockQuote'\n ) {\n if (event[0] === 'enter') {\n containerBalance++\n } else {\n containerBalance--\n }\n atMarker = undefined\n } else if (event[1].type === 'lineEndingBlank') {\n if (event[0] === 'enter') {\n if (\n listItem &&\n !atMarker &&\n !containerBalance &&\n !firstBlankLineIndex\n ) {\n firstBlankLineIndex = index\n }\n atMarker = undefined\n }\n } else if (\n event[1].type === 'linePrefix' ||\n event[1].type === 'listItemValue' ||\n event[1].type === 'listItemMarker' ||\n event[1].type === 'listItemPrefix' ||\n event[1].type === 'listItemPrefixWhitespace'\n ) {\n // Empty.\n } else {\n atMarker = undefined\n }\n if (\n (!containerBalance &&\n event[0] === 'enter' &&\n event[1].type === 'listItemPrefix') ||\n (containerBalance === -1 &&\n event[0] === 'exit' &&\n (event[1].type === 'listUnordered' ||\n event[1].type === 'listOrdered'))\n ) {\n if (listItem) {\n let tailIndex = index\n lineIndex = undefined\n while (tailIndex--) {\n const tailEvent = events[tailIndex]\n if (\n tailEvent[1].type === 'lineEnding' ||\n tailEvent[1].type === 'lineEndingBlank'\n ) {\n if (tailEvent[0] === 'exit') continue\n if (lineIndex) {\n events[lineIndex][1].type = 'lineEndingBlank'\n listSpread = true\n }\n tailEvent[1].type = 'lineEnding'\n lineIndex = tailIndex\n } else if (\n tailEvent[1].type === 'linePrefix' ||\n tailEvent[1].type === 'blockQuotePrefix' ||\n tailEvent[1].type === 'blockQuotePrefixWhitespace' ||\n tailEvent[1].type === 'blockQuoteMarker' ||\n tailEvent[1].type === 'listItemIndent'\n ) {\n // Empty\n } else {\n break\n }\n }\n if (\n firstBlankLineIndex &&\n (!lineIndex || firstBlankLineIndex < lineIndex)\n ) {\n listItem._spread = true\n }\n\n // Fix position.\n listItem.end = Object.assign(\n {},\n lineIndex ? events[lineIndex][1].start : event[1].end\n )\n events.splice(lineIndex || index, 0, ['exit', listItem, event[2]])\n index++\n length++\n }\n\n // Create a new list item.\n if (event[1].type === 'listItemPrefix') {\n listItem = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n }\n // @ts-expect-error: `listItem` is most definitely defined, TS...\n events.splice(index, 0, ['enter', listItem, event[2]])\n index++\n length++\n firstBlankLineIndex = undefined\n atMarker = true\n }\n }\n }\n events[start][1]._spread = listSpread\n return length\n }\n\n /**\n * Set data.\n *\n * @template {keyof CompileData} Key\n * Field type.\n * @param {Key} key\n * Key of field.\n * @param {CompileData[Key]} [value]\n * New value.\n * @returns {void}\n * Nothing.\n */\n function setData(key, value) {\n data[key] = value\n }\n\n /**\n * Get data.\n *\n * @template {keyof CompileData} Key\n * Field type.\n * @param {Key} key\n * Key of field.\n * @returns {CompileData[Key]}\n * Value.\n */\n function getData(key) {\n return data[key]\n }\n\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Node} create\n * Create a node.\n * @param {Handle} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function opener(create, and) {\n return open\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {void}\n */\n function open(token) {\n enter.call(this, create(token), token)\n if (and) and.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * @returns {void}\n */\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n })\n }\n\n /**\n * @template {Node} Kind\n * Node type.\n * @this {CompileContext}\n * Context.\n * @param {Kind} node\n * Node to enter.\n * @param {Token} token\n * Corresponding token.\n * @param {OnEnterError | undefined} [errorHandler]\n * Handle the case where this token is open, but it is closed by something else.\n * @returns {Kind}\n * The given node.\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1]\n // @ts-expect-error: Assume `Node` can exist as a child of `parent`.\n parent.children.push(node)\n this.stack.push(node)\n this.tokenStack.push([token, errorHandler])\n // @ts-expect-error: `end` will be patched later.\n node.position = {\n start: point(token.start)\n }\n return node\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function closer(and) {\n return close\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {void}\n */\n function close(token) {\n if (and) and.call(this, token)\n exit.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * Context.\n * @param {Token} token\n * Corresponding token.\n * @param {OnExitError | undefined} [onExitError]\n * Handle the case where another token is open.\n * @returns {Node}\n * The closed node.\n */\n function exit(token, onExitError) {\n const node = this.stack.pop()\n const open = this.tokenStack.pop()\n if (!open) {\n throw new Error(\n 'Cannot close `' +\n token.type +\n '` (' +\n stringifyPosition({\n start: token.start,\n end: token.end\n }) +\n '): it’s not open'\n )\n } else if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0])\n } else {\n const handler = open[1] || defaultOnError\n handler.call(this, token, open[0])\n }\n }\n node.position.end = point(token.end)\n return node\n }\n\n /**\n * @this {CompileContext}\n * @returns {string}\n */\n function resume() {\n return toString(this.stack.pop())\n }\n\n //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistordered() {\n setData('expectingFirstListItemValue', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (getData('expectingFirstListItemValue')) {\n const ancestor = this.stack[this.stack.length - 2]\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10)\n setData('expectingFirstListItemValue')\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfenceinfo() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.lang = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfencemeta() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.meta = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (getData('flowCodeInside')) return\n this.buffer()\n setData('flowCodeInside', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefenced() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n setData('flowCodeInside')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodeindented() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitionlabelstring(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.label = label\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiontitlestring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.title = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiondestinationstring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.url = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1]\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length\n node.depth = depth\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadingtext() {\n setData('setextHeadingSlurpLineEnding', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1]\n node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n setData('setextHeadingSlurpLineEnding')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1]\n let tail = node.children[node.children.length - 1]\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text()\n // @ts-expect-error: we’ll add `end` later.\n tail.position = {\n start: point(token.start)\n }\n // @ts-expect-error: Assume `parent` accepts `text`.\n node.children.push(tail)\n }\n this.stack.push(tail)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitdata(token) {\n const tail = this.stack.pop()\n tail.value += this.sliceSerialize(token)\n tail.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1]\n // If we’re at a hard break, include the line ending in there.\n if (getData('atHardBreak')) {\n const tail = context.children[context.children.length - 1]\n tail.position.end = point(token.end)\n setData('atHardBreak')\n return\n }\n if (\n !getData('setextHeadingSlurpLineEnding') &&\n config.canContainEols.includes(context.type)\n ) {\n onenterdata.call(this, token)\n onexitdata.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithardbreak() {\n setData('atHardBreak', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmlflow() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmltext() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcodetext() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1]\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n // To do: clean.\n if (getData('inReference')) {\n /** @type {ReferenceType} */\n const referenceType = getData('referenceType') || 'shortcut'\n node.type += 'Reference'\n // @ts-expect-error: mutate.\n node.referenceType = referenceType\n // @ts-expect-error: mutate.\n delete node.url\n delete node.title\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier\n // @ts-expect-error: mutate.\n delete node.label\n }\n setData('referenceType')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1]\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n // To do: clean.\n if (getData('inReference')) {\n /** @type {ReferenceType} */\n const referenceType = getData('referenceType') || 'shortcut'\n node.type += 'Reference'\n // @ts-expect-error: mutate.\n node.referenceType = referenceType\n // @ts-expect-error: mutate.\n delete node.url\n delete node.title\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier\n // @ts-expect-error: mutate.\n delete node.label\n }\n setData('referenceType')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token)\n const ancestor = this.stack[this.stack.length - 2]\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n ancestor.label = decodeString(string)\n // @ts-expect-error: same as above.\n ancestor.identifier = normalizeIdentifier(string).toLowerCase()\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1]\n const value = this.resume()\n const node = this.stack[this.stack.length - 1]\n // Assume a reference.\n setData('inReference', true)\n if (node.type === 'link') {\n /** @type {Array} */\n // @ts-expect-error: Assume static phrasing content.\n const children = fragment.children\n node.children = children\n } else {\n node.alt = value\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcedestinationstring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.url = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcetitlestring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.title = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresource() {\n setData('inReference')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n setData('referenceType', 'collapsed')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitreferencestring(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n node.label = label\n // @ts-expect-error: same as above.\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n setData('referenceType', 'full')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n setData('characterReferenceType', token.type)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token)\n const type = getData('characterReferenceType')\n /** @type {string} */\n let value\n if (type) {\n value = decodeNumericCharacterReference(\n data,\n type === 'characterReferenceMarkerNumeric' ? 10 : 16\n )\n setData('characterReferenceType')\n } else {\n const result = decodeNamedCharacterReference(data)\n value = result\n }\n const tail = this.stack.pop()\n tail.value += value\n tail.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token)\n const node = this.stack[this.stack.length - 1]\n node.url = this.sliceSerialize(token)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkemail(token) {\n onexitdata.call(this, token)\n const node = this.stack[this.stack.length - 1]\n node.url = 'mailto:' + this.sliceSerialize(token)\n }\n\n //\n // Creaters.\n //\n\n /** @returns {Blockquote} */\n function blockQuote() {\n return {\n type: 'blockquote',\n children: []\n }\n }\n\n /** @returns {Code} */\n function codeFlow() {\n return {\n type: 'code',\n lang: null,\n meta: null,\n value: ''\n }\n }\n\n /** @returns {InlineCode} */\n function codeText() {\n return {\n type: 'inlineCode',\n value: ''\n }\n }\n\n /** @returns {Definition} */\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: ''\n }\n }\n\n /** @returns {Emphasis} */\n function emphasis() {\n return {\n type: 'emphasis',\n children: []\n }\n }\n\n /** @returns {Heading} */\n function heading() {\n // @ts-expect-error `depth` will be set later.\n return {\n type: 'heading',\n depth: undefined,\n children: []\n }\n }\n\n /** @returns {Break} */\n function hardBreak() {\n return {\n type: 'break'\n }\n }\n\n /** @returns {HTML} */\n function html() {\n return {\n type: 'html',\n value: ''\n }\n }\n\n /** @returns {Image} */\n function image() {\n return {\n type: 'image',\n title: null,\n url: '',\n alt: null\n }\n }\n\n /** @returns {Link} */\n function link() {\n return {\n type: 'link',\n title: null,\n url: '',\n children: []\n }\n }\n\n /**\n * @param {Token} token\n * @returns {List}\n */\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: []\n }\n }\n\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: []\n }\n }\n\n /** @returns {Paragraph} */\n function paragraph() {\n return {\n type: 'paragraph',\n children: []\n }\n }\n\n /** @returns {Strong} */\n function strong() {\n return {\n type: 'strong',\n children: []\n }\n }\n\n /** @returns {Text} */\n function text() {\n return {\n type: 'text',\n value: ''\n }\n }\n\n /** @returns {ThematicBreak} */\n function thematicBreak() {\n return {\n type: 'thematicBreak'\n }\n }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\nfunction point(d) {\n return {\n line: d.line,\n column: d.column,\n offset: d.offset\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Array>} extensions\n * @returns {void}\n */\nfunction configure(combined, extensions) {\n let index = -1\n while (++index < extensions.length) {\n const value = extensions[index]\n if (Array.isArray(value)) {\n configure(combined, value)\n } else {\n extension(combined, value)\n }\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {void}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key\n for (key in extension) {\n if (own.call(extension, key)) {\n if (key === 'canContainEols') {\n const right = extension[key]\n if (right) {\n combined[key].push(...right)\n }\n } else if (key === 'transforms') {\n const right = extension[key]\n if (right) {\n combined[key].push(...right)\n }\n } else if (key === 'enter' || key === 'exit') {\n const right = extension[key]\n if (right) {\n Object.assign(combined[key], right)\n }\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error(\n 'Cannot close `' +\n left.type +\n '` (' +\n stringifyPosition({\n start: left.start,\n end: left.end\n }) +\n '): a different token (`' +\n right.type +\n '`, ' +\n stringifyPosition({\n start: right.start,\n end: right.end\n }) +\n ') is open'\n )\n } else {\n throw new Error(\n 'Cannot close document, a token (`' +\n right.type +\n '`, ' +\n stringifyPosition({\n start: right.start,\n end: right.end\n }) +\n ') is still open'\n )\n }\n}\n","import { l as log, H as decodeEntities } from \"./mermaid-a98f434b.js\";\nimport { fromMarkdown } from \"mdast-util-from-markdown\";\nimport { dedent } from \"ts-dedent\";\nfunction preprocessMarkdown(markdown) {\n const withoutMultipleNewlines = markdown.replace(/\\n{2,}/g, \"\\n\");\n const withoutExtraSpaces = dedent(withoutMultipleNewlines);\n return withoutExtraSpaces;\n}\nfunction markdownToLines(markdown) {\n const preprocessedMarkdown = preprocessMarkdown(markdown);\n const { children } = fromMarkdown(preprocessedMarkdown);\n const lines = [[]];\n let currentLine = 0;\n function processNode(node, parentType = \"normal\") {\n if (node.type === \"text\") {\n const textLines = node.value.split(\"\\n\");\n textLines.forEach((textLine, index) => {\n if (index !== 0) {\n currentLine++;\n lines.push([]);\n }\n textLine.split(\" \").forEach((word) => {\n if (word) {\n lines[currentLine].push({ content: word, type: parentType });\n }\n });\n });\n } else if (node.type === \"strong\" || node.type === \"emphasis\") {\n node.children.forEach((contentNode) => {\n processNode(contentNode, node.type);\n });\n }\n }\n children.forEach((treeNode) => {\n if (treeNode.type === \"paragraph\") {\n treeNode.children.forEach((contentNode) => {\n processNode(contentNode);\n });\n }\n });\n return lines;\n}\nfunction markdownToHTML(markdown) {\n const { children } = fromMarkdown(markdown);\n function output(node) {\n if (node.type === \"text\") {\n return node.value.replace(/\\n/g, \"
\");\n } else if (node.type === \"strong\") {\n return `${node.children.map(output).join(\"\")}`;\n } else if (node.type === \"emphasis\") {\n return `${node.children.map(output).join(\"\")}`;\n } else if (node.type === \"paragraph\") {\n return `${node.children.map(output).join(\"\")}
`;\n }\n return `Unsupported markdown: ${node.type}`;\n }\n return children.map(output).join(\"\");\n}\nfunction splitTextToChars(text) {\n if (Intl.Segmenter) {\n return [...new Intl.Segmenter().segment(text)].map((s) => s.segment);\n }\n return [...text];\n}\nfunction splitWordToFitWidth(checkFit, word) {\n const characters = splitTextToChars(word.content);\n return splitWordToFitWidthRecursion(checkFit, [], characters, word.type);\n}\nfunction splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) {\n if (remainingChars.length === 0) {\n return [\n { content: usedChars.join(\"\"), type },\n { content: \"\", type }\n ];\n }\n const [nextChar, ...rest] = remainingChars;\n const newWord = [...usedChars, nextChar];\n if (checkFit([{ content: newWord.join(\"\"), type }])) {\n return splitWordToFitWidthRecursion(checkFit, newWord, rest, type);\n }\n if (usedChars.length === 0 && nextChar) {\n usedChars.push(nextChar);\n remainingChars.shift();\n }\n return [\n { content: usedChars.join(\"\"), type },\n { content: remainingChars.join(\"\"), type }\n ];\n}\nfunction splitLineToFitWidth(line, checkFit) {\n if (line.some(({ content }) => content.includes(\"\\n\"))) {\n throw new Error(\"splitLineToFitWidth does not support newlines in the line\");\n }\n return splitLineToFitWidthRecursion(line, checkFit);\n}\nfunction splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) {\n if (words.length === 0) {\n if (newLine.length > 0) {\n lines.push(newLine);\n }\n return lines.length > 0 ? lines : [];\n }\n let joiner = \"\";\n if (words[0].content === \" \") {\n joiner = \" \";\n words.shift();\n }\n const nextWord = words.shift() ?? { content: \" \", type: \"normal\" };\n const lineWithNextWord = [...newLine];\n if (joiner !== \"\") {\n lineWithNextWord.push({ content: joiner, type: \"normal\" });\n }\n lineWithNextWord.push(nextWord);\n if (checkFit(lineWithNextWord)) {\n return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord);\n }\n if (newLine.length > 0) {\n lines.push(newLine);\n words.unshift(nextWord);\n } else if (nextWord.content) {\n const [line, rest] = splitWordToFitWidth(checkFit, nextWord);\n lines.push([line]);\n if (rest.content) {\n words.unshift(rest);\n }\n }\n return splitLineToFitWidthRecursion(words, checkFit, lines);\n}\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\nfunction addHtmlSpan(element, node, width, classes, addBackground = false) {\n const fo = element.append(\"foreignObject\");\n const div = fo.append(\"xhtml:div\");\n const label = node.label;\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n div.html(\n `\n \" + label + \"\"\n );\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"table-cell\");\n div.style(\"white-space\", \"nowrap\");\n div.style(\"max-width\", width + \"px\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n if (addBackground) {\n div.attr(\"class\", \"labelBkg\");\n }\n let bbox = div.node().getBoundingClientRect();\n if (bbox.width === width) {\n div.style(\"display\", \"table\");\n div.style(\"white-space\", \"break-spaces\");\n div.style(\"width\", width + \"px\");\n bbox = div.node().getBoundingClientRect();\n }\n fo.style(\"width\", bbox.width);\n fo.style(\"height\", bbox.height);\n return fo.node();\n}\nfunction createTspan(textElement, lineIndex, lineHeight) {\n return textElement.append(\"tspan\").attr(\"class\", \"text-outer-tspan\").attr(\"x\", 0).attr(\"y\", lineIndex * lineHeight - 0.1 + \"em\").attr(\"dy\", lineHeight + \"em\");\n}\nfunction computeWidthOfText(parentNode, lineHeight, line) {\n const testElement = parentNode.append(\"text\");\n const testSpan = createTspan(testElement, 1, lineHeight);\n updateTextContentAndStyles(testSpan, line);\n const textLength = testSpan.node().getComputedTextLength();\n testElement.remove();\n return textLength;\n}\nfunction createFormattedText(width, g, structuredText, addBackground = false) {\n const lineHeight = 1.1;\n const labelGroup = g.append(\"g\");\n const bkg = labelGroup.insert(\"rect\").attr(\"class\", \"background\");\n const textElement = labelGroup.append(\"text\").attr(\"y\", \"-10.1\");\n let lineIndex = 0;\n for (const line of structuredText) {\n const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width;\n const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth);\n for (const preparedLine of linesUnderWidth) {\n const tspan = createTspan(textElement, lineIndex, lineHeight);\n updateTextContentAndStyles(tspan, preparedLine);\n lineIndex++;\n }\n }\n if (addBackground) {\n const bbox = textElement.node().getBBox();\n const padding = 2;\n bkg.attr(\"x\", -padding).attr(\"y\", -padding).attr(\"width\", bbox.width + 2 * padding).attr(\"height\", bbox.height + 2 * padding);\n return labelGroup.node();\n } else {\n return textElement.node();\n }\n}\nfunction updateTextContentAndStyles(tspan, wrappedLine) {\n tspan.text(\"\");\n wrappedLine.forEach((word, index) => {\n const innerTspan = tspan.append(\"tspan\").attr(\"font-style\", word.type === \"emphasis\" ? \"italic\" : \"normal\").attr(\"class\", \"text-inner-tspan\").attr(\"font-weight\", word.type === \"strong\" ? \"bold\" : \"normal\");\n if (index === 0) {\n innerTspan.text(word.content);\n } else {\n innerTspan.text(\" \" + word.content);\n }\n });\n}\nconst createText = (el, text = \"\", {\n style = \"\",\n isTitle = false,\n classes = \"\",\n useHtmlLabels = true,\n isNode = true,\n width = 200,\n addSvgBackground = false\n} = {}) => {\n log.info(\"createText\", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground);\n if (useHtmlLabels) {\n const htmlText = markdownToHTML(text);\n const node = {\n isNode,\n label: decodeEntities(htmlText).replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n ),\n labelStyle: style.replace(\"fill:\", \"color:\")\n };\n const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground);\n return vertexNode;\n } else {\n const structuredText = markdownToLines(text);\n const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground);\n return svgLabel;\n }\n};\nexport {\n createText as c\n};\n"],"names":["emptyOptions","toString","value","options","settings","includeImageAlt","includeHtml","one","node","all","values","result","index","splice","list","start","remove","items","end","chunkStart","parameters","push","hasOwnProperty","combineExtensions","extensions","syntaxExtension","extension","hook","left","right","code","constructs","existing","before","unicodePunctuationRegex","asciiAlpha","regexCheck","asciiDigit","asciiHexDigit","asciiAlphanumeric","asciiPunctuation","asciiAtext","asciiControl","markdownLineEndingOrSpace","markdownLineEnding","markdownSpace","unicodeWhitespace","unicodePunctuation","regex","check","factorySpace","effects","ok","type","max","limit","size","prefix","content","initializeContent","contentStart","afterContentStartConstruct","paragraphInitial","previous","lineStart","token","data","document","initializeDocument","containerConstruct","tokenizeContainer","self","stack","continued","childFlow","childToken","lineStartOffset","item","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","point","exitContainers","documentContinued","flowStart","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","eof","stream","seen","entry","nok","classifyCharacter","resolveAll","events","context","called","resolve","attention","tokenizeAttention","resolveAllAttention","open","group","text","openingSequence","closingSequence","use","nextEvents","offset","movePoint","attentionMarkers","marker","sequence","after","close","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","afterWhitespace","blockQuote","tokenizeBlockQuoteStart","tokenizeBlockQuoteContinuation","exit","state","characterEscape","tokenizeCharacterEscape","element","decodeNamedCharacterReference","characterReference","char","tokenizeCharacterReference","test","numeric","codeFenced","tokenizeCodeFenced","closingFenceConstruct","tokenizeClosingFence","nonLazyLine","tokenizeNonLazyLine","tail","initialPrefix","sizeOpen","sequenceOpen","infoOpen","openAfter","info","infoAfter","meta","contentContinue","closingSequenceStart","closingSequenceEnd","codeIndented","tokenizeCodeIndented","indentedContent","tokenizeIndentedContent","afterStartPrefix","afterPrefix","codeText","tokenizeCodeText","resolveCodeText","tailExitIndex","headEnterIndex","enter","gap","subtokenize","jumps","event","lineIndex","otherIndex","otherEvent","subevents","more","subcontent","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","current","adjust","breaks","slice","tokenizeContent","resolveContent","continuationConstruct","tokenizeContinuation","contentEnd","startLookahead","prefixed","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","destinationEnclosedBefore","destinationRaw","destinationEnclosed","destinationEnclosedEscape","destinationRawEscape","factoryLabel","markerType","atBreak","label","labelEscape","factoryTitle","atFirstTitleBreak","atTitleBreak","title","titleEscape","factoryWhitespace","normalizeIdentifier","definition","tokenizeDefinition","titleConstruct","tokenizeTitle","identifier","labelAfter","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","tokenizeHeadingAtx","resolveHeadingAtx","fenceOpenInside","headingBreak","htmlBlockNames","htmlRawNames","htmlFlow","tokenizeHtmlFlow","resolveToHtmlFlow","nextBlankConstruct","tokenizeNextBlank","kind","startTag","buffer","declarationStart","tagCloseStart","continuationDeclarationInside","tagName","commentOpenInside","cdataOpenInside","continuation","basicSelfClosing","completeAttributeNameBefore","completeClosingTagAfter","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCharacterDataInside","continuationAtLineEnding","htmlContinueStart","done","htmlLineEnd","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","declarationOpen","instruction","tagOpen","commentOpen","cdataOpen","declaration","commentStart","commentStartDash","comment","commentClose","atLineEnding","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","labelEnd","tokenizeLabelEnd","resolveToLabelEnd","resolveAllLabelEnd","resourceConstruct","tokenizeResource","fullReferenceConstruct","tokenizeFullReference","collapsedReferenceConstruct","tokenizeCollapsedReference","media","labelStart","defined","balanced","afterLabelEnd","destinationAfter","between","afterLabel","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","thematicBreak","tokenizeThematicBreak","tokenizeListStart","tokenizeListContinuation","tokenizeListEnd","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","initialSize","atMarker","inside","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","tokenizeSetextUnderline","resolveToSetextUnderline","heading","paragraph","flow","initializeFlow","initial","atBlankEnding","afterConstruct","resolver","createResolver","string","initializeFactory","field","initializeText","resolveAllLineSuffixes","notText","extraResolver","resolveAllText","chunks","bufferIndex","tabs","chunk","createTokenizer","parser","initialize","from","columnStart","resolveAllConstructs","consume","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","sliceStream","sliceSerialize","now","defineSkip","write","main","addResult","expandTabs","serializeChunks","sliceChunks","accountForPotentialSkip","chunkIndex","go","fields","construct","_","onreturn","bogusState","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","map","def","handleConstruct","store","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","restore","startIndex","startBufferIndex","endIndex","endBufferIndex","view","atTab","contentInitial","flowInitial","insideSpan","resolveText","disable","parse","defaultConstructs","create","creator","search","preprocess","column","atCarriageReturn","preprocessor","encoding","match","next","endPosition","postprocess","decodeNumericCharacterReference","base","characterEscapeOrReference","decodeString","decode","$0","$1","$2","head","hex","stringifyPosition","position","pos","own","fromMarkdown","compiler","config","opener","link","onenterdata","codeFlow","emphasis","hardBreak","html","image","listItem","onenterlistitemvalue","onenterlistordered","onenterreference","strong","closer","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","onexitdata","onexitcharacterreferencemarker","onexitcharacterreferencevalue","onexitcodefenced","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","onexitsetextheadinglinesequence","onexitsetextheadingtext","configure","compile","tree","resume","setData","getData","listStack","prepareList","handler","defaultOnError","length","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","key","and","errorHandler","onExitError","ancestor","depth","referenceType","fragment","children","d","combined","preprocessMarkdown","markdown","withoutMultipleNewlines","dedent","markdownToLines","preprocessedMarkdown","lines","currentLine","processNode","parentType","textLine","word","contentNode","treeNode","markdownToHTML","output","splitTextToChars","s","splitWordToFitWidth","checkFit","characters","splitWordToFitWidthRecursion","usedChars","remainingChars","nextChar","rest","newWord","splitLineToFitWidth","line","splitLineToFitWidthRecursion","words","newLine","joiner","nextWord","lineWithNextWord","applyStyle","dom","styleFn","addHtmlSpan","width","classes","addBackground","fo","div","labelClass","bbox","createTspan","textElement","lineHeight","computeWidthOfText","parentNode","testElement","testSpan","updateTextContentAndStyles","textLength","createFormattedText","g","structuredText","labelGroup","bkg","checkWidth","line2","linesUnderWidth","preparedLine","tspan","padding","wrappedLine","innerTspan","createText","el","style","isTitle","useHtmlLabels","isNode","addSvgBackground","log","decodeEntities"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51]}
\ No newline at end of file
+{"version":3,"file":"createText-285e50b4-9349820e.js","sources":["../../node_modules/mdast-util-to-string/lib/index.js","../../node_modules/micromark-util-chunked/index.js","../../node_modules/micromark-util-combine-extensions/index.js","../../node_modules/micromark-util-character/lib/unicode-punctuation-regex.js","../../node_modules/micromark-util-character/index.js","../../node_modules/micromark-factory-space/index.js","../../node_modules/micromark/lib/initialize/content.js","../../node_modules/micromark/lib/initialize/document.js","../../node_modules/micromark-util-classify-character/index.js","../../node_modules/micromark-util-resolve-all/index.js","../../node_modules/micromark-core-commonmark/lib/attention.js","../../node_modules/micromark-core-commonmark/lib/autolink.js","../../node_modules/micromark-core-commonmark/lib/blank-line.js","../../node_modules/micromark-core-commonmark/lib/block-quote.js","../../node_modules/micromark-core-commonmark/lib/character-escape.js","../../node_modules/decode-named-character-reference/index.dom.js","../../node_modules/micromark-core-commonmark/lib/character-reference.js","../../node_modules/micromark-core-commonmark/lib/code-fenced.js","../../node_modules/micromark-core-commonmark/lib/code-indented.js","../../node_modules/micromark-core-commonmark/lib/code-text.js","../../node_modules/micromark-util-subtokenize/index.js","../../node_modules/micromark-core-commonmark/lib/content.js","../../node_modules/micromark-factory-destination/index.js","../../node_modules/micromark-factory-label/index.js","../../node_modules/micromark-factory-title/index.js","../../node_modules/micromark-factory-whitespace/index.js","../../node_modules/micromark-util-normalize-identifier/index.js","../../node_modules/micromark-core-commonmark/lib/definition.js","../../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../../node_modules/micromark-core-commonmark/lib/heading-atx.js","../../node_modules/micromark-util-html-tag-name/index.js","../../node_modules/micromark-core-commonmark/lib/html-flow.js","../../node_modules/micromark-core-commonmark/lib/html-text.js","../../node_modules/micromark-core-commonmark/lib/label-end.js","../../node_modules/micromark-core-commonmark/lib/label-start-image.js","../../node_modules/micromark-core-commonmark/lib/label-start-link.js","../../node_modules/micromark-core-commonmark/lib/line-ending.js","../../node_modules/micromark-core-commonmark/lib/thematic-break.js","../../node_modules/micromark-core-commonmark/lib/list.js","../../node_modules/micromark-core-commonmark/lib/setext-underline.js","../../node_modules/micromark/lib/initialize/flow.js","../../node_modules/micromark/lib/initialize/text.js","../../node_modules/micromark/lib/create-tokenizer.js","../../node_modules/micromark/lib/constructs.js","../../node_modules/micromark/lib/parse.js","../../node_modules/micromark/lib/preprocess.js","../../node_modules/micromark/lib/postprocess.js","../../node_modules/micromark-util-decode-numeric-character-reference/index.js","../../node_modules/micromark-util-decode-string/index.js","../../node_modules/unist-util-stringify-position/lib/index.js","../../node_modules/mdast-util-from-markdown/lib/index.js","../../node_modules/mermaid/dist/createText-285e50b4.js"],"sourcesContent":["/**\n * @typedef {import('mdast').Root|import('mdast').Content} Node\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s.\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML.\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 Node}\n * Whether `value` is a node.\n */\nfunction node(value) {\n return Boolean(value && typeof value === 'object')\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 * @param {T[]} list\n * @param {number} start\n * @param {number} remove\n * @param {T[]} items\n * @returns {void}\n */\nexport function splice(list, start, remove, items) {\n const end = list.length\n let chunkStart = 0\n /** @type {unknown[]} */\n\n let parameters // Make start between zero and `end` (included).\n\n if (start < 0) {\n start = -start > end ? 0 : end + start\n } else {\n start = start > end ? end : start\n }\n\n remove = remove > 0 ? remove : 0 // No need to chunk the items if there’s only a couple (10k) items.\n\n if (items.length < 10000) {\n parameters = Array.from(items)\n parameters.unshift(start, remove) // @ts-expect-error Hush, it’s fine.\n ;[].splice.apply(list, parameters)\n } else {\n // Delete `remove` items starting from `start`\n if (remove) [].splice.apply(list, [start, remove]) // Insert the items in chunks to not cause stack overflows.\n\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 10000)\n parameters.unshift(start, 0) // @ts-expect-error Hush, it’s fine.\n ;[].splice.apply(list, parameters)\n chunkStart += 10000\n start += 10000\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 * @param {T[]} list\n * @param {T[]} items\n * @returns {T[]}\n */\n\nexport function push(list, items) {\n if (list.length > 0) {\n splice(list, list.length, 0, items)\n return list\n }\n\n return items\n}\n","/**\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine several syntax extensions into one.\n *\n * @param {Extension[]} extensions List of syntax extensions.\n * @returns {NormalizedExtension} 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 Extension to merge into.\n * @param {Extension} extension Extension to merge.\n * @returns {void}\n */\nfunction syntaxExtension(all, extension) {\n /** @type {string} */\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 {string} */\n let code\n\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 * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {unknown[]} existing\n * @param {unknown[]} list\n * @returns {void}\n */\nfunction constructs(existing, list) {\n let index = -1\n /** @type {unknown[]} */\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 several HTML extensions into one.\n *\n * @param {HtmlExtension[]} htmlExtensions List of HTML extensions.\n * @returns {HtmlExtension} A single combined 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 Extension to merge into.\n * @param {HtmlExtension} extension Extension to merge.\n * @returns {void}\n */\nfunction htmlExtension(all, extension) {\n /** @type {string} */\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 {string} */\n let type\n\n if (right) {\n for (type in right) {\n left[type] = right[type]\n }\n }\n }\n}\n","// This module is generated by `script/`.\n//\n// CommonMark handles attention (emphasis, strong) markers based on what comes\n// before or after them.\n// One such difference is if those characters are Unicode punctuation.\n// This script is generated from the Unicode data.\nexport const unicodePunctuationRegex =\n /[!-/:-@[-`{-~\\u00A1\\u00A7\\u00AB\\u00B6\\u00B7\\u00BB\\u00BF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {unicodePunctuationRegex} from './lib/unicode-punctuation-regex.js'\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\nexport const asciiAlpha = regexCheck(/[A-Za-z]/)\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\nexport const asciiDigit = regexCheck(/\\d/)\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\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/)\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\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/)\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\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/)\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\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/)\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 * @returns {code is number}\n */\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 * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * @returns {code is number}\n */\n\nexport function markdownLineEndingOrSpace(code) {\n return code !== null && (code < 0 || code === 32)\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 * @returns {code is number}\n */\n\nexport function markdownLineEnding(code) {\n return code !== null && code < -2\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 * @returns {code is number}\n */\n\nexport function markdownSpace(code) {\n return code === -2 || code === -1 || code === 32\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\nexport const unicodeWhitespace = regexCheck(/\\s/)\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// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n\nexport const unicodePunctuation = regexCheck(unicodePunctuationRegex)\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => code is number}\n */\n\nfunction regexCheck(regex) {\n return check\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code Character code\n * @returns {code is number} Whether the character code matches the bound regex\n */\n\n function check(code) {\n return code !== null && regex.test(String.fromCharCode(code))\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownSpace} from 'micromark-util-character'\n/**\n * @param {Effects} effects\n * @param {State} ok\n * @param {string} type\n * @param {number} [max=Infinity]\n * @returns {State}\n */\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 /** @type {State} */\n\n function start(code) {\n if (markdownSpace(code)) {\n effects.enter(type)\n return prefix(code)\n }\n\n return ok(code)\n }\n /** @type {State} */\n\n function prefix(code) {\n if (markdownSpace(code) && size++ < limit) {\n effects.consume(code)\n return prefix\n }\n\n effects.exit(type)\n return ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {InitialConstruct} */\nexport const content = {\n tokenize: initializeContent\n}\n/** @type {Initializer} */\n\nfunction initializeContent(effects) {\n const contentStart = effects.attempt(\n this.parser.constructs.contentInitial,\n afterContentStartConstruct,\n paragraphInitial\n )\n /** @type {Token} */\n\n let previous\n return contentStart\n /** @type {State} */\n\n function afterContentStartConstruct(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, contentStart, 'linePrefix')\n }\n /** @type {State} */\n\n function paragraphInitial(code) {\n effects.enter('paragraph')\n return lineStart(code)\n }\n /** @type {State} */\n\n function lineStart(code) {\n const token = effects.enter('chunkText', {\n contentType: 'text',\n previous\n })\n\n if (previous) {\n previous.next = token\n }\n\n previous = token\n return data(code)\n }\n /** @type {State} */\n\n function data(code) {\n if (code === null) {\n effects.exit('chunkText')\n effects.exit('paragraph')\n effects.consume(code)\n return\n }\n\n if (markdownLineEnding(code)) {\n effects.consume(code)\n effects.exit('chunkText')\n return lineStart\n } // Data.\n\n effects.consume(code)\n return data\n }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Point} Point\n */\n\n/**\n * @typedef {Record} StackState\n * @typedef {[Construct, StackState]} StackItem\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {InitialConstruct} */\n\nexport const document = {\n tokenize: initializeDocument\n}\n/** @type {Construct} */\n\nconst containerConstruct = {\n tokenize: tokenizeContainer\n}\n/** @type {Initializer} */\n\nfunction initializeDocument(effects) {\n const self = this\n /** @type {Array} */\n\n const stack = []\n let continued = 0\n /** @type {TokenizeContext|undefined} */\n\n let childFlow\n /** @type {Token|undefined} */\n\n let childToken\n /** @type {number} */\n\n let lineStartOffset\n return start\n /** @type {State} */\n\n function start(code) {\n // First we iterate through the open blocks, starting with the root\n // document, and descending through last children down to the last open\n // block.\n // Each block imposes a condition that the line must satisfy if the block is\n // to remain open.\n // For example, a block quote requires a `>` character.\n // A paragraph requires a non-blank line.\n // In this phase we may match all or just some of the open blocks.\n // But we cannot close unmatched blocks yet, because we may have a lazy\n // continuation line.\n if (continued < stack.length) {\n const item = stack[continued]\n self.containerState = item[1]\n return effects.attempt(\n item[0].continuation,\n documentContinue,\n checkNewContainers\n )(code)\n } // Done.\n\n return checkNewContainers(code)\n }\n /** @type {State} */\n\n function documentContinue(code) {\n continued++ // Note: this field is called `_closeFlow` but it also closes containers.\n // Perhaps a good idea to rename it but it’s already used in the wild by\n // extensions.\n\n if (self.containerState._closeFlow) {\n self.containerState._closeFlow = undefined\n\n if (childFlow) {\n closeFlow()\n } // Note: this algorithm for moving events around is similar to the\n // algorithm when dealing with lazy lines in `writeToChild`.\n\n const indexBeforeExits = self.events.length\n let indexBeforeFlow = indexBeforeExits\n /** @type {Point|undefined} */\n\n let point // Find the flow chunk.\n\n while (indexBeforeFlow--) {\n if (\n self.events[indexBeforeFlow][0] === 'exit' &&\n self.events[indexBeforeFlow][1].type === 'chunkFlow'\n ) {\n point = self.events[indexBeforeFlow][1].end\n break\n }\n }\n\n exitContainers(continued) // Fix positions.\n\n let index = indexBeforeExits\n\n while (index < self.events.length) {\n self.events[index][1].end = Object.assign({}, point)\n index++\n } // Inject the exits earlier (they’re still also at the end).\n\n splice(\n self.events,\n indexBeforeFlow + 1,\n 0,\n self.events.slice(indexBeforeExits)\n ) // Discard the duplicate exits.\n\n self.events.length = index\n return checkNewContainers(code)\n }\n\n return start(code)\n }\n /** @type {State} */\n\n function checkNewContainers(code) {\n // Next, after consuming the continuation markers for existing blocks, we\n // look for new block starts (e.g. `>` for a block quote).\n // If we encounter a new block start, we close any blocks unmatched in\n // step 1 before creating the new block as a child of the last matched\n // block.\n if (continued === stack.length) {\n // No need to `check` whether there’s a container, of `exitContainers`\n // would be moot.\n // We can instead immediately `attempt` to parse one.\n if (!childFlow) {\n return documentContinued(code)\n } // If we have concrete content, such as block HTML or fenced code,\n // we can’t have containers “pierce” into them, so we can immediately\n // start.\n\n if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n return flowStart(code)\n } // If we do have flow, it could still be a blank line,\n // but we’d be interrupting it w/ a new container if there’s a current\n // construct.\n\n self.interrupt = Boolean(\n childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack\n )\n } // Check if there is a new container.\n\n self.containerState = {}\n return effects.check(\n containerConstruct,\n thereIsANewContainer,\n thereIsNoNewContainer\n )(code)\n }\n /** @type {State} */\n\n function thereIsANewContainer(code) {\n if (childFlow) closeFlow()\n exitContainers(continued)\n return documentContinued(code)\n }\n /** @type {State} */\n\n function thereIsNoNewContainer(code) {\n self.parser.lazy[self.now().line] = continued !== stack.length\n lineStartOffset = self.now().offset\n return flowStart(code)\n }\n /** @type {State} */\n\n function documentContinued(code) {\n // Try new containers.\n self.containerState = {}\n return effects.attempt(\n containerConstruct,\n containerContinue,\n flowStart\n )(code)\n }\n /** @type {State} */\n\n function containerContinue(code) {\n continued++\n stack.push([self.currentConstruct, self.containerState]) // Try another.\n\n return documentContinued(code)\n }\n /** @type {State} */\n\n function flowStart(code) {\n if (code === null) {\n if (childFlow) closeFlow()\n exitContainers(0)\n effects.consume(code)\n return\n }\n\n childFlow = childFlow || self.parser.flow(self.now())\n effects.enter('chunkFlow', {\n contentType: 'flow',\n previous: childToken,\n _tokenizer: childFlow\n })\n return flowContinue(code)\n }\n /** @type {State} */\n\n function flowContinue(code) {\n if (code === null) {\n writeToChild(effects.exit('chunkFlow'), true)\n exitContainers(0)\n effects.consume(code)\n return\n }\n\n if (markdownLineEnding(code)) {\n effects.consume(code)\n writeToChild(effects.exit('chunkFlow')) // Get ready for the next line.\n\n continued = 0\n self.interrupt = undefined\n return start\n }\n\n effects.consume(code)\n return flowContinue\n }\n /**\n * @param {Token} token\n * @param {boolean} [eof]\n * @returns {void}\n */\n\n function writeToChild(token, eof) {\n const stream = self.sliceStream(token)\n if (eof) stream.push(null)\n token.previous = childToken\n if (childToken) childToken.next = token\n childToken = token\n childFlow.defineSkip(token.start)\n childFlow.write(stream) // Alright, so we just added a lazy line:\n //\n // ```markdown\n // > a\n // b.\n //\n // Or:\n //\n // > ~~~c\n // d\n //\n // Or:\n //\n // > | e |\n // f\n // ```\n //\n // The construct in the second example (fenced code) does not accept lazy\n // lines, so it marked itself as done at the end of its first line, and\n // then the content construct parses `d`.\n // Most constructs in markdown match on the first line: if the first line\n // forms a construct, a non-lazy line can’t “unmake” it.\n //\n // The construct in the third example is potentially a GFM table, and\n // those are *weird*.\n // It *could* be a table, from the first line, if the following line\n // matches a condition.\n // In this case, that second line is lazy, which “unmakes” the first line\n // and turns the whole into one content block.\n //\n // We’ve now parsed the non-lazy and the lazy line, and can figure out\n // whether the lazy line started a new flow block.\n // If it did, we exit the current containers between the two flow blocks.\n\n if (self.parser.lazy[token.start.line]) {\n let index = childFlow.events.length\n\n while (index--) {\n if (\n // The token starts before the line ending…\n childFlow.events[index][1].start.offset < lineStartOffset && // …and either is not ended yet…\n (!childFlow.events[index][1].end || // …or ends after it.\n childFlow.events[index][1].end.offset > lineStartOffset)\n ) {\n // Exit: there’s still something open, which means it’s a lazy line\n // part of something.\n return\n }\n } // Note: this algorithm for moving events around is similar to the\n // algorithm when closing flow in `documentContinue`.\n\n const indexBeforeExits = self.events.length\n let indexBeforeFlow = indexBeforeExits\n /** @type {boolean|undefined} */\n\n let seen\n /** @type {Point|undefined} */\n\n let point // Find the previous chunk (the one before the lazy line).\n\n while (indexBeforeFlow--) {\n if (\n self.events[indexBeforeFlow][0] === 'exit' &&\n self.events[indexBeforeFlow][1].type === 'chunkFlow'\n ) {\n if (seen) {\n point = self.events[indexBeforeFlow][1].end\n break\n }\n\n seen = true\n }\n }\n\n exitContainers(continued) // Fix positions.\n\n index = indexBeforeExits\n\n while (index < self.events.length) {\n self.events[index][1].end = Object.assign({}, point)\n index++\n } // Inject the exits earlier (they’re still also at the end).\n\n splice(\n self.events,\n indexBeforeFlow + 1,\n 0,\n self.events.slice(indexBeforeExits)\n ) // Discard the duplicate exits.\n\n self.events.length = index\n }\n }\n /**\n * @param {number} size\n * @returns {void}\n */\n\n function exitContainers(size) {\n let index = stack.length // Exit open containers.\n\n while (index-- > size) {\n const entry = stack[index]\n self.containerState = entry[1]\n entry[0].exit.call(self, effects)\n }\n\n stack.length = size\n }\n\n function closeFlow() {\n childFlow.write([null])\n childToken = undefined\n childFlow = undefined\n self.containerState._closeFlow = undefined\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeContainer(effects, ok, nok) {\n return factorySpace(\n effects,\n effects.attempt(this.parser.constructs.document, ok, nok),\n 'linePrefix',\n this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n )\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {\n markdownLineEndingOrSpace,\n unicodePunctuation,\n unicodeWhitespace\n} from 'micromark-util-character'\n\n/**\n * Classify whether a character code represents whitespace, punctuation, or\n * something 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 that eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * @returns {number|undefined}\n */\nexport function classifyCharacter(code) {\n if (\n code === null ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code)\n ) {\n return 1\n }\n\n if (unicodePunctuation(code)) {\n return 2\n }\n}\n","/**\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {{resolveAll?: Resolver}[]} constructs\n * @param {Event[]} events\n * @param {TokenizeContext} context\n * @returns {Event[]}\n */\nexport function resolveAll(constructs, events, context) {\n /** @type {Resolver[]} */\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 * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Point} Point\n */\nimport {push, splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n\n/** @type {Construct} */\nexport const attention = {\n name: 'attention',\n tokenize: tokenizeAttention,\n resolveAll: resolveAllAttention\n}\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n\nfunction resolveAllAttention(events, context) {\n let index = -1\n /** @type {number} */\n\n let open\n /** @type {Token} */\n\n let group\n /** @type {Token} */\n\n let text\n /** @type {Token} */\n\n let openingSequence\n /** @type {Token} */\n\n let closingSequence\n /** @type {number} */\n\n let use\n /** @type {Event[]} */\n\n let nextEvents\n /** @type {number} */\n\n let offset // Walk through all events.\n //\n // Note: performance of this is fine on an mb of normal markdown, but it’s\n // a bottleneck for malicious stuff.\n\n while (++index < events.length) {\n // Find a token that can close.\n if (\n events[index][0] === 'enter' &&\n events[index][1].type === 'attentionSequence' &&\n events[index][1]._close\n ) {\n open = index // Now walk back to find an opener.\n\n while (open--) {\n // Find a token that can open the closer.\n if (\n events[open][0] === 'exit' &&\n events[open][1].type === 'attentionSequence' &&\n events[open][1]._open && // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) ===\n context.sliceSerialize(events[index][1]).charCodeAt(0)\n ) {\n // If the opening can close or the closing can open,\n // and the close size *is not* a multiple of three,\n // but the sum of the opening and closing size *is* multiple of three,\n // then don’t match.\n if (\n (events[open][1]._close || events[index][1]._open) &&\n (events[index][1].end.offset - events[index][1].start.offset) % 3 &&\n !(\n (events[open][1].end.offset -\n events[open][1].start.offset +\n events[index][1].end.offset -\n events[index][1].start.offset) %\n 3\n )\n ) {\n continue\n } // Number of markers to use from the sequence.\n\n use =\n events[open][1].end.offset - events[open][1].start.offset > 1 &&\n events[index][1].end.offset - events[index][1].start.offset > 1\n ? 2\n : 1\n const start = Object.assign({}, events[open][1].end)\n const end = Object.assign({}, events[index][1].start)\n movePoint(start, -use)\n movePoint(end, use)\n openingSequence = {\n type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n start,\n end: Object.assign({}, events[open][1].end)\n }\n closingSequence = {\n type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n start: Object.assign({}, events[index][1].start),\n end\n }\n text = {\n type: use > 1 ? 'strongText' : 'emphasisText',\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n }\n group = {\n type: use > 1 ? 'strong' : 'emphasis',\n start: Object.assign({}, openingSequence.start),\n end: Object.assign({}, closingSequence.end)\n }\n events[open][1].end = Object.assign({}, openingSequence.start)\n events[index][1].start = Object.assign({}, closingSequence.end)\n nextEvents = [] // If there are more markers in the opening, add them before.\n\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = push(nextEvents, [\n ['enter', events[open][1], context],\n ['exit', events[open][1], context]\n ])\n } // Opening.\n\n nextEvents = push(nextEvents, [\n ['enter', group, context],\n ['enter', openingSequence, context],\n ['exit', openingSequence, context],\n ['enter', text, context]\n ]) // Between.\n\n nextEvents = push(\n nextEvents,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(open + 1, index),\n context\n )\n ) // Closing.\n\n nextEvents = push(nextEvents, [\n ['exit', text, context],\n ['enter', closingSequence, context],\n ['exit', closingSequence, context],\n ['exit', group, context]\n ]) // If there are more markers in the closing, add them after.\n\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2\n nextEvents = push(nextEvents, [\n ['enter', events[index][1], context],\n ['exit', events[index][1], context]\n ])\n } else {\n offset = 0\n }\n\n splice(events, open - 1, index - open + 3, nextEvents)\n index = open + nextEvents.length - offset - 2\n break\n }\n }\n }\n } // Remove remaining sequences.\n\n index = -1\n\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data'\n }\n }\n\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null\n const previous = this.previous\n const before = classifyCharacter(previous)\n /** @type {NonNullable} */\n\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('attentionSequence')\n marker = code\n return sequence(code)\n }\n /** @type {State} */\n\n function sequence(code) {\n if (code === marker) {\n effects.consume(code)\n return sequence\n }\n\n const token = effects.exit('attentionSequence')\n const after = classifyCharacter(code)\n const open =\n !after || (after === 2 && before) || attentionMarkers.includes(code)\n const close =\n !before || (before === 2 && after) || attentionMarkers.includes(previous)\n token._open = Boolean(marker === 42 ? open : open && (before || !close))\n token._close = Boolean(marker === 42 ? close : close && (after || !open))\n return ok(code)\n }\n}\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {void}\n */\n\nfunction movePoint(point, offset) {\n point.column += offset\n point.offset += offset\n point._bufferIndex += offset\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n asciiAtext,\n asciiControl\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 1\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('autolink')\n effects.enter('autolinkMarker')\n effects.consume(code)\n effects.exit('autolinkMarker')\n effects.enter('autolinkProtocol')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n return schemeOrEmailAtext\n }\n\n return asciiAtext(code) ? emailAtext(code) : nok(code)\n }\n /** @type {State} */\n\n function schemeOrEmailAtext(code) {\n return code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)\n ? schemeInsideOrEmailAtext(code)\n : emailAtext(code)\n }\n /** @type {State} */\n\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code)\n return urlInside\n }\n\n if (\n (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&\n size++ < 32\n ) {\n effects.consume(code)\n return schemeInsideOrEmailAtext\n }\n\n return emailAtext(code)\n }\n /** @type {State} */\n\n function urlInside(code) {\n if (code === 62) {\n effects.exit('autolinkProtocol')\n return end(code)\n }\n\n if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n return nok(code)\n }\n\n effects.consume(code)\n return urlInside\n }\n /** @type {State} */\n\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code)\n size = 0\n return emailAtSignOrDot\n }\n\n if (asciiAtext(code)) {\n effects.consume(code)\n return emailAtext\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)\n }\n /** @type {State} */\n\n function emailLabel(code) {\n if (code === 46) {\n effects.consume(code)\n size = 0\n return emailAtSignOrDot\n }\n\n if (code === 62) {\n // Exit, then change the type.\n effects.exit('autolinkProtocol').type = 'autolinkEmail'\n return end(code)\n }\n\n return emailValue(code)\n }\n /** @type {State} */\n\n function emailValue(code) {\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n effects.consume(code)\n return code === 45 ? emailValue : emailLabel\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function end(code) {\n effects.enter('autolinkMarker')\n effects.consume(code)\n effects.exit('autolinkMarker')\n effects.exit('autolink')\n return ok\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const blankLine = {\n tokenize: tokenizeBlankLine,\n partial: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeBlankLine(effects, ok, nok) {\n return factorySpace(effects, afterWhitespace, 'linePrefix')\n /** @type {State} */\n\n function afterWhitespace(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownSpace} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const blockQuote = {\n name: 'blockQuote',\n tokenize: tokenizeBlockQuoteStart,\n continuation: {\n tokenize: tokenizeBlockQuoteContinuation\n },\n exit\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n if (code === 62) {\n const state = self.containerState\n\n if (!state.open) {\n effects.enter('blockQuote', {\n _container: true\n })\n state.open = true\n }\n\n effects.enter('blockQuotePrefix')\n effects.enter('blockQuoteMarker')\n effects.consume(code)\n effects.exit('blockQuoteMarker')\n return after\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function after(code) {\n if (markdownSpace(code)) {\n effects.enter('blockQuotePrefixWhitespace')\n effects.consume(code)\n effects.exit('blockQuotePrefixWhitespace')\n effects.exit('blockQuotePrefix')\n return ok\n }\n\n effects.exit('blockQuotePrefix')\n return ok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n return factorySpace(\n effects,\n effects.attempt(blockQuote, ok, nok),\n 'linePrefix',\n this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n )\n}\n/** @type {Exiter} */\n\nfunction exit(effects) {\n effects.exit('blockQuote')\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {asciiPunctuation} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('characterEscape')\n effects.enter('escapeMarker')\n effects.consume(code)\n effects.exit('escapeMarker')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (asciiPunctuation(code)) {\n effects.enter('characterEscapeValue')\n effects.consume(code)\n effects.exit('characterEscapeValue')\n effects.exit('characterEscape')\n return ok\n }\n\n return nok(code)\n }\n}\n","/// \n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n const characterReference = '&' + value + ';'\n element.innerHTML = characterReference\n const char = element.textContent\n\n // Some named character references do not require the closing semicolon\n // (`¬`, for instance), which leads to situations where parsing the assumed\n // named reference of `¬it;` will result in the string `¬it;`.\n // When we encounter a trailing semicolon after parsing, and the character\n // reference to decode was not a semicolon (`;`), we can assume that the\n // matching was not complete.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n return false\n }\n\n // If the decoded string is equal to the input, the character reference was\n // not valid.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n return char === characterReference ? false : char\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {\n asciiAlphanumeric,\n asciiDigit,\n asciiHexDigit\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this\n let size = 0\n /** @type {number} */\n\n let max\n /** @type {(code: Code) => code is number} */\n\n let test\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('characterReference')\n effects.enter('characterReferenceMarker')\n effects.consume(code)\n effects.exit('characterReferenceMarker')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 35) {\n effects.enter('characterReferenceMarkerNumeric')\n effects.consume(code)\n effects.exit('characterReferenceMarkerNumeric')\n return numeric\n }\n\n effects.enter('characterReferenceValue')\n max = 31\n test = asciiAlphanumeric\n return value(code)\n }\n /** @type {State} */\n\n function numeric(code) {\n if (code === 88 || code === 120) {\n effects.enter('characterReferenceMarkerHexadecimal')\n effects.consume(code)\n effects.exit('characterReferenceMarkerHexadecimal')\n effects.enter('characterReferenceValue')\n max = 6\n test = asciiHexDigit\n return value\n }\n\n effects.enter('characterReferenceValue')\n max = 7\n test = asciiDigit\n return value(code)\n }\n /** @type {State} */\n\n function value(code) {\n /** @type {Token} */\n let token\n\n if (code === 59 && size) {\n token = effects.exit('characterReferenceValue')\n\n if (\n test === asciiAlphanumeric &&\n !decodeNamedCharacterReference(self.sliceSerialize(token))\n ) {\n return nok(code)\n }\n\n effects.enter('characterReferenceMarker')\n effects.consume(code)\n effects.exit('characterReferenceMarker')\n effects.exit('characterReference')\n return ok\n }\n\n if (test(code) && size++ < max) {\n effects.consume(code)\n return value\n }\n\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const codeFenced = {\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced,\n concrete: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this\n /** @type {Construct} */\n\n const closingFenceConstruct = {\n tokenize: tokenizeClosingFence,\n partial: true\n }\n /** @type {Construct} */\n\n const nonLazyLine = {\n tokenize: tokenizeNonLazyLine,\n partial: true\n }\n const tail = this.events[this.events.length - 1]\n const initialPrefix =\n tail && tail[1].type === 'linePrefix'\n ? tail[2].sliceSerialize(tail[1], true).length\n : 0\n let sizeOpen = 0\n /** @type {NonNullable} */\n\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('codeFenced')\n effects.enter('codeFencedFence')\n effects.enter('codeFencedFenceSequence')\n marker = code\n return sequenceOpen(code)\n }\n /** @type {State} */\n\n function sequenceOpen(code) {\n if (code === marker) {\n effects.consume(code)\n sizeOpen++\n return sequenceOpen\n }\n\n effects.exit('codeFencedFenceSequence')\n return sizeOpen < 3\n ? nok(code)\n : factorySpace(effects, infoOpen, 'whitespace')(code)\n }\n /** @type {State} */\n\n function infoOpen(code) {\n if (code === null || markdownLineEnding(code)) {\n return openAfter(code)\n }\n\n effects.enter('codeFencedFenceInfo')\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return info(code)\n }\n /** @type {State} */\n\n function info(code) {\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit('chunkString')\n effects.exit('codeFencedFenceInfo')\n return factorySpace(effects, infoAfter, 'whitespace')(code)\n }\n\n if (code === 96 && code === marker) return nok(code)\n effects.consume(code)\n return info\n }\n /** @type {State} */\n\n function infoAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n return openAfter(code)\n }\n\n effects.enter('codeFencedFenceMeta')\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return meta(code)\n }\n /** @type {State} */\n\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n effects.exit('codeFencedFenceMeta')\n return openAfter(code)\n }\n\n if (code === 96 && code === marker) return nok(code)\n effects.consume(code)\n return meta\n }\n /** @type {State} */\n\n function openAfter(code) {\n effects.exit('codeFencedFence')\n return self.interrupt ? ok(code) : contentStart(code)\n }\n /** @type {State} */\n\n function contentStart(code) {\n if (code === null) {\n return after(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.attempt(\n nonLazyLine,\n effects.attempt(\n closingFenceConstruct,\n after,\n initialPrefix\n ? factorySpace(\n effects,\n contentStart,\n 'linePrefix',\n initialPrefix + 1\n )\n : contentStart\n ),\n after\n )(code)\n }\n\n effects.enter('codeFlowValue')\n return contentContinue(code)\n }\n /** @type {State} */\n\n function contentContinue(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue')\n return contentStart(code)\n }\n\n effects.consume(code)\n return contentContinue\n }\n /** @type {State} */\n\n function after(code) {\n effects.exit('codeFenced')\n return ok(code)\n }\n /** @type {Tokenizer} */\n\n function tokenizeNonLazyLine(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return lineStart\n }\n /** @type {State} */\n\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n }\n }\n /** @type {Tokenizer} */\n\n function tokenizeClosingFence(effects, ok, nok) {\n let size = 0\n return factorySpace(\n effects,\n closingSequenceStart,\n 'linePrefix',\n this.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )\n /** @type {State} */\n\n function closingSequenceStart(code) {\n effects.enter('codeFencedFence')\n effects.enter('codeFencedFenceSequence')\n return closingSequence(code)\n }\n /** @type {State} */\n\n function closingSequence(code) {\n if (code === marker) {\n effects.consume(code)\n size++\n return closingSequence\n }\n\n if (size < sizeOpen) return nok(code)\n effects.exit('codeFencedFenceSequence')\n return factorySpace(effects, closingSequenceEnd, 'whitespace')(code)\n }\n /** @type {State} */\n\n function closingSequenceEnd(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFencedFence')\n return ok(code)\n }\n\n return nok(code)\n }\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const codeIndented = {\n name: 'codeIndented',\n tokenize: tokenizeCodeIndented\n}\n/** @type {Construct} */\n\nconst indentedContent = {\n tokenize: tokenizeIndentedContent,\n partial: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCodeIndented(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('codeIndented')\n return factorySpace(effects, afterStartPrefix, 'linePrefix', 4 + 1)(code)\n }\n /** @type {State} */\n\n function afterStartPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'linePrefix' &&\n tail[2].sliceSerialize(tail[1], true).length >= 4\n ? afterPrefix(code)\n : nok(code)\n }\n /** @type {State} */\n\n function afterPrefix(code) {\n if (code === null) {\n return after(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.attempt(indentedContent, afterPrefix, after)(code)\n }\n\n effects.enter('codeFlowValue')\n return content(code)\n }\n /** @type {State} */\n\n function content(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue')\n return afterPrefix(code)\n }\n\n effects.consume(code)\n return content\n }\n /** @type {State} */\n\n function after(code) {\n effects.exit('codeIndented')\n return ok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeIndentedContent(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n // If this is a lazy line, it can’t be code.\n if (self.parser.lazy[self.now().line]) {\n return nok(code)\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return start\n }\n\n return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n }\n /** @type {State} */\n\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'linePrefix' &&\n tail[2].sliceSerialize(tail[1], true).length >= 4\n ? ok(code)\n : markdownLineEnding(code)\n ? start(code)\n : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const codeText = {\n name: 'codeText',\n tokenize: tokenizeCodeText,\n resolve: resolveCodeText,\n previous\n}\n/** @type {Resolver} */\n\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4\n let headEnterIndex = 3\n /** @type {number} */\n\n let index\n /** @type {number|undefined} */\n\n let enter // If we start and end with an EOL or a space.\n\n if (\n (events[headEnterIndex][1].type === 'lineEnding' ||\n events[headEnterIndex][1].type === 'space') &&\n (events[tailExitIndex][1].type === 'lineEnding' ||\n events[tailExitIndex][1].type === 'space')\n ) {\n index = headEnterIndex // And we have data.\n\n while (++index < tailExitIndex) {\n if (events[index][1].type === 'codeTextData') {\n // Then we have padding.\n events[headEnterIndex][1].type = 'codeTextPadding'\n events[tailExitIndex][1].type = 'codeTextPadding'\n headEnterIndex += 2\n tailExitIndex -= 2\n break\n }\n }\n } // Merge adjacent spaces and data.\n\n index = headEnterIndex - 1\n tailExitIndex++\n\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') {\n enter = index\n }\n } else if (\n index === tailExitIndex ||\n events[index][1].type === 'lineEnding'\n ) {\n events[enter][1].type = 'codeTextData'\n\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n tailExitIndex -= index - enter - 2\n index = enter + 2\n }\n\n enter = undefined\n }\n }\n\n return events\n}\n/** @type {Previous} */\n\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return (\n code !== 96 ||\n this.events[this.events.length - 1][1].type === 'characterEscape'\n )\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this\n let sizeOpen = 0\n /** @type {number} */\n\n let size\n /** @type {Token} */\n\n let token\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('codeText')\n effects.enter('codeTextSequence')\n return openingSequence(code)\n }\n /** @type {State} */\n\n function openingSequence(code) {\n if (code === 96) {\n effects.consume(code)\n sizeOpen++\n return openingSequence\n }\n\n effects.exit('codeTextSequence')\n return gap(code)\n }\n /** @type {State} */\n\n function gap(code) {\n // EOF.\n if (code === null) {\n return nok(code)\n } // Closing fence?\n // Could also be data.\n\n if (code === 96) {\n token = effects.enter('codeTextSequence')\n size = 0\n return closingSequence(code)\n } // Tabs don’t work, and virtual spaces don’t make sense.\n\n if (code === 32) {\n effects.enter('space')\n effects.consume(code)\n effects.exit('space')\n return gap\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return gap\n } // Data.\n\n effects.enter('codeTextData')\n return data(code)\n } // In code.\n\n /** @type {State} */\n\n function data(code) {\n if (\n code === null ||\n code === 32 ||\n code === 96 ||\n markdownLineEnding(code)\n ) {\n effects.exit('codeTextData')\n return gap(code)\n }\n\n effects.consume(code)\n return data\n } // Closing fence.\n\n /** @type {State} */\n\n function closingSequence(code) {\n // More.\n if (code === 96) {\n effects.consume(code)\n size++\n return closingSequence\n } // Done!\n\n if (size === sizeOpen) {\n effects.exit('codeTextSequence')\n effects.exit('codeText')\n return ok(code)\n } // More or less accents: mark as data.\n\n token.type = 'codeTextData'\n return data(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n */\nimport {splice} from 'micromark-util-chunked'\n\n/**\n * Tokenize subcontent.\n *\n * @param {Event[]} events\n * @returns {boolean}\n */\nexport function subtokenize(events) {\n /** @type {Record} */\n const jumps = {}\n let index = -1\n /** @type {Event} */\n\n let event\n /** @type {number|undefined} */\n\n let lineIndex\n /** @type {number} */\n\n let otherIndex\n /** @type {Event} */\n\n let otherEvent\n /** @type {Event[]} */\n\n let parameters\n /** @type {Event[]} */\n\n let subevents\n /** @type {boolean|undefined} */\n\n let more\n\n while (++index < events.length) {\n while (index in jumps) {\n index = jumps[index]\n }\n\n event = events[index] // Add a hook for the GFM tasklist extension, which needs to know if text\n // is in the first content of a list item.\n\n if (\n index &&\n event[1].type === 'chunkFlow' &&\n events[index - 1][1].type === 'listItemPrefix'\n ) {\n subevents = event[1]._tokenizer.events\n otherIndex = 0\n\n if (\n otherIndex < subevents.length &&\n subevents[otherIndex][1].type === 'lineEndingBlank'\n ) {\n otherIndex += 2\n }\n\n if (\n otherIndex < subevents.length &&\n subevents[otherIndex][1].type === 'content'\n ) {\n while (++otherIndex < subevents.length) {\n if (subevents[otherIndex][1].type === 'content') {\n break\n }\n\n if (subevents[otherIndex][1].type === 'chunkText') {\n subevents[otherIndex][1]._isInFirstContentOfListItem = true\n otherIndex++\n }\n }\n }\n } // Enter.\n\n if (event[0] === 'enter') {\n if (event[1].contentType) {\n Object.assign(jumps, subcontent(events, index))\n index = jumps[index]\n more = true\n }\n } // Exit.\n else if (event[1]._container) {\n otherIndex = index\n lineIndex = undefined\n\n while (otherIndex--) {\n otherEvent = events[otherIndex]\n\n if (\n otherEvent[1].type === 'lineEnding' ||\n otherEvent[1].type === 'lineEndingBlank'\n ) {\n if (otherEvent[0] === 'enter') {\n if (lineIndex) {\n events[lineIndex][1].type = 'lineEndingBlank'\n }\n\n otherEvent[1].type = 'lineEnding'\n lineIndex = otherIndex\n }\n } else {\n break\n }\n }\n\n if (lineIndex) {\n // Fix position.\n event[1].end = Object.assign({}, events[lineIndex][1].start) // Switch container exit w/ line endings.\n\n parameters = events.slice(lineIndex, index)\n parameters.unshift(event)\n splice(events, lineIndex, index - lineIndex + 1, parameters)\n }\n }\n }\n\n return !more\n}\n/**\n * Tokenize embedded tokens.\n *\n * @param {Event[]} events\n * @param {number} eventIndex\n * @returns {Record}\n */\n\nfunction subcontent(events, eventIndex) {\n const token = events[eventIndex][1]\n const context = events[eventIndex][2]\n let startPosition = eventIndex - 1\n /** @type {number[]} */\n\n const startPositions = []\n const tokenizer =\n token._tokenizer || context.parser[token.contentType](token.start)\n const childEvents = tokenizer.events\n /** @type {[number, number][]} */\n\n const jumps = []\n /** @type {Record} */\n\n const gaps = {}\n /** @type {Chunk[]} */\n\n let stream\n /** @type {Token|undefined} */\n\n let previous\n let index = -1\n /** @type {Token|undefined} */\n\n let current = token\n let adjust = 0\n let start = 0\n const breaks = [start] // Loop forward through the linked tokens to pass them in order to the\n // subtokenizer.\n\n while (current) {\n // Find the position of the event for this token.\n while (events[++startPosition][1] !== current) {\n // Empty.\n }\n\n startPositions.push(startPosition)\n\n if (!current._tokenizer) {\n stream = context.sliceStream(current)\n\n if (!current.next) {\n stream.push(null)\n }\n\n if (previous) {\n tokenizer.defineSkip(current.start)\n }\n\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = true\n }\n\n tokenizer.write(stream)\n\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = undefined\n }\n } // Unravel the next token.\n\n previous = current\n current = current.next\n } // Now, loop back through all events (and linked tokens), to figure out which\n // parts belong where.\n\n current = token\n\n while (++index < childEvents.length) {\n if (\n // Find a void token that includes a break.\n childEvents[index][0] === 'exit' &&\n childEvents[index - 1][0] === 'enter' &&\n childEvents[index][1].type === childEvents[index - 1][1].type &&\n childEvents[index][1].start.line !== childEvents[index][1].end.line\n ) {\n start = index + 1\n breaks.push(start) // Help GC.\n\n current._tokenizer = undefined\n current.previous = undefined\n current = current.next\n }\n } // Help GC.\n\n tokenizer.events = [] // If there’s one more token (which is the cases for lines that end in an\n // EOF), that’s perfect: the last point we found starts it.\n // If there isn’t then make sure any remaining content is added to it.\n\n if (current) {\n // Help GC.\n current._tokenizer = undefined\n current.previous = undefined\n } else {\n breaks.pop()\n } // Now splice the events from the subtokenizer into the current events,\n // moving back to front so that splice indices aren’t affected.\n\n index = breaks.length\n\n while (index--) {\n const slice = childEvents.slice(breaks[index], breaks[index + 1])\n const start = startPositions.pop()\n jumps.unshift([start, start + slice.length - 1])\n splice(events, start, 2, slice)\n }\n\n index = -1\n\n while (++index < jumps.length) {\n gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]\n adjust += jumps[index][1] - jumps[index][0] - 1\n }\n\n return gaps\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {subtokenize} from 'micromark-util-subtokenize'\n\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n tokenize: tokenizeContent,\n resolve: resolveContent\n}\n/** @type {Construct} */\n\nconst continuationConstruct = {\n tokenize: tokenizeContinuation,\n partial: true\n}\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\n\nfunction resolveContent(events) {\n subtokenize(events)\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeContent(effects, ok) {\n /** @type {Token} */\n let previous\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('content')\n previous = effects.enter('chunkContent', {\n contentType: 'content'\n })\n return data(code)\n }\n /** @type {State} */\n\n function data(code) {\n if (code === null) {\n return contentEnd(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.check(\n continuationConstruct,\n contentContinue,\n contentEnd\n )(code)\n } // Data.\n\n effects.consume(code)\n return data\n }\n /** @type {State} */\n\n function contentEnd(code) {\n effects.exit('chunkContent')\n effects.exit('content')\n return ok(code)\n }\n /** @type {State} */\n\n function contentContinue(code) {\n effects.consume(code)\n effects.exit('chunkContent')\n previous.next = effects.enter('chunkContent', {\n contentType: 'content',\n previous\n })\n previous = previous.next\n return data\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeContinuation(effects, ok, nok) {\n const self = this\n return startLookahead\n /** @type {State} */\n\n function startLookahead(code) {\n effects.exit('chunkContent')\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, prefixed, 'linePrefix')\n }\n /** @type {State} */\n\n function prefixed(code) {\n if (code === null || markdownLineEnding(code)) {\n return nok(code)\n }\n\n const tail = self.events[self.events.length - 1]\n\n if (\n !self.parser.constructs.disable.null.includes('codeIndented') &&\n tail &&\n tail[1].type === 'linePrefix' &&\n tail[2].sliceSerialize(tail[1], true).length >= 4\n ) {\n return ok(code)\n }\n\n return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\nimport {\n asciiControl,\n markdownLineEndingOrSpace,\n markdownLineEnding\n} from 'micromark-util-character'\n\n/**\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {string} type\n * @param {string} literalType\n * @param {string} literalMarkerType\n * @param {string} rawType\n * @param {string} stringType\n * @param {number} [max=Infinity]\n * @returns {State}\n */\n// eslint-disable-next-line max-params\nexport function factoryDestination(\n effects,\n ok,\n nok,\n type,\n literalType,\n literalMarkerType,\n rawType,\n stringType,\n max\n) {\n const limit = max || Number.POSITIVE_INFINITY\n let balance = 0\n return start\n /** @type {State} */\n\n function start(code) {\n if (code === 60) {\n effects.enter(type)\n effects.enter(literalType)\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n return destinationEnclosedBefore\n }\n\n if (code === null || code === 41 || asciiControl(code)) {\n return nok(code)\n }\n\n effects.enter(type)\n effects.enter(rawType)\n effects.enter(stringType)\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return destinationRaw(code)\n }\n /** @type {State} */\n\n function destinationEnclosedBefore(code) {\n if (code === 62) {\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n effects.exit(literalType)\n effects.exit(type)\n return ok\n }\n\n effects.enter(stringType)\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return destinationEnclosed(code)\n }\n /** @type {State} */\n\n function destinationEnclosed(code) {\n if (code === 62) {\n effects.exit('chunkString')\n effects.exit(stringType)\n return destinationEnclosedBefore(code)\n }\n\n if (code === null || code === 60 || markdownLineEnding(code)) {\n return nok(code)\n }\n\n effects.consume(code)\n return code === 92 ? destinationEnclosedEscape : destinationEnclosed\n }\n /** @type {State} */\n\n function destinationEnclosedEscape(code) {\n if (code === 60 || code === 62 || code === 92) {\n effects.consume(code)\n return destinationEnclosed\n }\n\n return destinationEnclosed(code)\n }\n /** @type {State} */\n\n function destinationRaw(code) {\n if (code === 40) {\n if (++balance > limit) return nok(code)\n effects.consume(code)\n return destinationRaw\n }\n\n if (code === 41) {\n if (!balance--) {\n effects.exit('chunkString')\n effects.exit(stringType)\n effects.exit(rawType)\n effects.exit(type)\n return ok(code)\n }\n\n effects.consume(code)\n return destinationRaw\n }\n\n if (code === null || markdownLineEndingOrSpace(code)) {\n if (balance) return nok(code)\n effects.exit('chunkString')\n effects.exit(stringType)\n effects.exit(rawType)\n effects.exit(type)\n return ok(code)\n }\n\n if (asciiControl(code)) return nok(code)\n effects.consume(code)\n return code === 92 ? destinationRawEscape : destinationRaw\n }\n /** @type {State} */\n\n function destinationRawEscape(code) {\n if (code === 40 || code === 41 || code === 92) {\n effects.consume(code)\n return destinationRaw\n }\n\n return destinationRaw(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n\n/**\n * @this {TokenizeContext}\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {string} type\n * @param {string} markerType\n * @param {string} stringType\n * @returns {State}\n */\n// eslint-disable-next-line max-params\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n const self = this\n let size = 0\n /** @type {boolean} */\n\n let data\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.enter(stringType)\n return atBreak\n }\n /** @type {State} */\n\n function atBreak(code) {\n if (\n code === null ||\n code === 91 ||\n (code === 93 && !data) ||\n /* To do: remove in the future once we’ve switched from\n * `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n * which doesn’t need this */\n\n /* Hidden footnotes hook */\n\n /* c8 ignore next 3 */\n (code === 94 &&\n !size &&\n '_hiddenFootnoteSupport' in self.parser.constructs) ||\n size > 999\n ) {\n return nok(code)\n }\n\n if (code === 93) {\n effects.exit(stringType)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return atBreak\n }\n\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return label(code)\n }\n /** @type {State} */\n\n function label(code) {\n if (\n code === null ||\n code === 91 ||\n code === 93 ||\n markdownLineEnding(code) ||\n size++ > 999\n ) {\n effects.exit('chunkString')\n return atBreak(code)\n }\n\n effects.consume(code)\n data = data || !markdownSpace(code)\n return code === 92 ? labelEscape : label\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 label\n }\n\n return label(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/**\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {string} type\n * @param {string} markerType\n * @param {string} stringType\n * @returns {State}\n */\n// eslint-disable-next-line max-params\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n /** @type {NonNullable} */\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n marker = code === 40 ? 41 : code\n return atFirstTitleBreak\n }\n /** @type {State} */\n\n function atFirstTitleBreak(code) {\n if (code === marker) {\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n\n effects.enter(stringType)\n return atTitleBreak(code)\n }\n /** @type {State} */\n\n function atTitleBreak(code) {\n if (code === marker) {\n effects.exit(stringType)\n return atFirstTitleBreak(marker)\n }\n\n if (code === null) {\n return nok(code)\n } // Note: blank lines can’t exist in content.\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, atTitleBreak, 'linePrefix')\n }\n\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return title(code)\n }\n /** @type {State} */\n\n function title(code) {\n if (code === marker || code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n return atTitleBreak(code)\n }\n\n effects.consume(code)\n return code === 92 ? titleEscape : title\n }\n /** @type {State} */\n\n function titleEscape(code) {\n if (code === marker || code === 92) {\n effects.consume(code)\n return title\n }\n\n return title(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n\n/**\n * @param {Effects} effects\n * @param {State} ok\n */\nexport function factoryWhitespace(effects, ok) {\n /** @type {boolean} */\n let seen\n return start\n /** @type {State} */\n\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n seen = true\n return start\n }\n\n if (markdownSpace(code)) {\n return factorySpace(\n effects,\n start,\n seen ? 'linePrefix' : 'lineSuffix'\n )(code)\n }\n\n return ok(code)\n }\n}\n","/**\n * Normalize an identifier (such as used in definitions).\n *\n * @param {string} value\n * @returns {string}\n */\nexport function normalizeIdentifier(value) {\n return (\n value // Collapse Markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, ' ') // Trim.\n .replace(/^ | $/g, '') // 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()\n .toUpperCase()\n )\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factorySpace} from 'micromark-factory-space'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const definition = {\n name: 'definition',\n tokenize: tokenizeDefinition\n}\n/** @type {Construct} */\n\nconst titleConstruct = {\n tokenize: tokenizeTitle,\n partial: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeDefinition(effects, ok, nok) {\n const self = this\n /** @type {string} */\n\n let identifier\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('definition')\n return factoryLabel.call(\n self,\n effects,\n labelAfter,\n nok,\n 'definitionLabel',\n 'definitionLabelMarker',\n 'definitionLabelString'\n )(code)\n }\n /** @type {State} */\n\n function labelAfter(code) {\n identifier = normalizeIdentifier(\n self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n )\n\n if (code === 58) {\n effects.enter('definitionMarker')\n effects.consume(code)\n effects.exit('definitionMarker') // Note: blank lines can’t exist in content.\n\n return factoryWhitespace(\n effects,\n factoryDestination(\n effects,\n effects.attempt(\n titleConstruct,\n factorySpace(effects, after, 'whitespace'),\n factorySpace(effects, after, 'whitespace')\n ),\n nok,\n 'definitionDestination',\n 'definitionDestinationLiteral',\n 'definitionDestinationLiteralMarker',\n 'definitionDestinationRaw',\n 'definitionDestinationString'\n )\n )\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function after(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('definition')\n\n if (!self.parser.defined.includes(identifier)) {\n self.parser.defined.push(identifier)\n }\n\n return ok(code)\n }\n\n return nok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeTitle(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, before)(code)\n : nok(code)\n }\n /** @type {State} */\n\n function before(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(\n effects,\n factorySpace(effects, after, 'whitespace'),\n nok,\n 'definitionTitle',\n 'definitionTitleMarker',\n 'definitionTitleString'\n )(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function after(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('hardBreakEscape')\n effects.enter('escapeMarker')\n effects.consume(code)\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (markdownLineEnding(code)) {\n effects.exit('escapeMarker')\n effects.exit('hardBreakEscape')\n return ok(code)\n }\n\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n\n/** @type {Construct} */\nexport const headingAtx = {\n name: 'headingAtx',\n tokenize: tokenizeHeadingAtx,\n resolve: resolveHeadingAtx\n}\n/** @type {Resolver} */\n\nfunction resolveHeadingAtx(events, context) {\n let contentEnd = events.length - 2\n let contentStart = 3\n /** @type {Token} */\n\n let content\n /** @type {Token} */\n\n let text // Prefix whitespace, part of the opening.\n\n if (events[contentStart][1].type === 'whitespace') {\n contentStart += 2\n } // Suffix whitespace, part of the closing.\n\n if (\n contentEnd - 2 > contentStart &&\n events[contentEnd][1].type === 'whitespace'\n ) {\n contentEnd -= 2\n }\n\n if (\n events[contentEnd][1].type === 'atxHeadingSequence' &&\n (contentStart === contentEnd - 1 ||\n (contentEnd - 4 > contentStart &&\n events[contentEnd - 2][1].type === 'whitespace'))\n ) {\n contentEnd -= contentStart + 1 === contentEnd ? 2 : 4\n }\n\n if (contentEnd > contentStart) {\n content = {\n type: 'atxHeadingText',\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end\n }\n text = {\n type: 'chunkText',\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end,\n // @ts-expect-error Constants are fine to assign.\n contentType: 'text'\n }\n splice(events, contentStart, contentEnd - contentStart + 1, [\n ['enter', content, context],\n ['enter', text, context],\n ['exit', text, context],\n ['exit', content, context]\n ])\n }\n\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n const self = this\n let size = 0\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('atxHeading')\n effects.enter('atxHeadingSequence')\n return fenceOpenInside(code)\n }\n /** @type {State} */\n\n function fenceOpenInside(code) {\n if (code === 35 && size++ < 6) {\n effects.consume(code)\n return fenceOpenInside\n }\n\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingSequence')\n return self.interrupt ? ok(code) : headingBreak(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function headingBreak(code) {\n if (code === 35) {\n effects.enter('atxHeadingSequence')\n return sequence(code)\n }\n\n if (code === null || markdownLineEnding(code)) {\n effects.exit('atxHeading')\n return ok(code)\n }\n\n if (markdownSpace(code)) {\n return factorySpace(effects, headingBreak, 'whitespace')(code)\n }\n\n effects.enter('atxHeadingText')\n return data(code)\n }\n /** @type {State} */\n\n function sequence(code) {\n if (code === 35) {\n effects.consume(code)\n return sequence\n }\n\n effects.exit('atxHeadingSequence')\n return headingBreak(code)\n }\n /** @type {State} */\n\n function data(code) {\n if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingText')\n return headingBreak(code)\n }\n\n effects.consume(code)\n return data\n }\n}\n","/**\n * List of lowercase HTML tag names which when parsing HTML (flow), result\n * in more relaxed rules (condition 6): because they are known blocks, the\n * HTML-like syntax doesn’t have to be strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * .\n */\nexport const htmlBlockNames = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n]\n\n/**\n * List of lowercase HTML tag names which when parsing HTML (flow), result in\n * HTML that can include lines w/o exiting, until a closing tag also in this\n * list is found (condition 1).\n *\n * This module is copied from:\n * .\n *\n * Note that `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\nimport {htmlBlockNames, htmlRawNames} from 'micromark-util-html-tag-name'\nimport {blankLine} from './blank-line.js'\n/** @type {Construct} */\n\nexport const htmlFlow = {\n name: 'htmlFlow',\n tokenize: tokenizeHtmlFlow,\n resolveTo: resolveToHtmlFlow,\n concrete: true\n}\n/** @type {Construct} */\n\nconst nextBlankConstruct = {\n tokenize: tokenizeNextBlank,\n partial: true\n}\n/** @type {Resolver} */\n\nfunction resolveToHtmlFlow(events) {\n let index = events.length\n\n while (index--) {\n if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {\n break\n }\n }\n\n if (index > 1 && events[index - 2][1].type === 'linePrefix') {\n // Add the prefix start to the HTML token.\n events[index][1].start = events[index - 2][1].start // Add the prefix start to the HTML line token.\n\n events[index + 1][1].start = events[index - 2][1].start // Remove the line prefix.\n\n events.splice(index - 2, 2)\n }\n\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n const self = this\n /** @type {number} */\n\n let kind\n /** @type {boolean} */\n\n let startTag\n /** @type {string} */\n\n let buffer\n /** @type {number} */\n\n let index\n /** @type {Code} */\n\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('htmlFlow')\n effects.enter('htmlFlowData')\n effects.consume(code)\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 33) {\n effects.consume(code)\n return declarationStart\n }\n\n if (code === 47) {\n effects.consume(code)\n return tagCloseStart\n }\n\n if (code === 63) {\n effects.consume(code)\n kind = 3 // While we’re in an instruction instead of a declaration, we’re on a `?`\n // right now, so we do need to search for `>`, similar to declarations.\n\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n buffer = String.fromCharCode(code)\n startTag = true\n return tagName\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function declarationStart(code) {\n if (code === 45) {\n effects.consume(code)\n kind = 2\n return commentOpenInside\n }\n\n if (code === 91) {\n effects.consume(code)\n kind = 5\n buffer = 'CDATA['\n index = 0\n return cdataOpenInside\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n kind = 4\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code)\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function cdataOpenInside(code) {\n if (code === buffer.charCodeAt(index++)) {\n effects.consume(code)\n return index === buffer.length\n ? self.interrupt\n ? ok\n : continuation\n : cdataOpenInside\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n buffer = String.fromCharCode(code)\n return tagName\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagName(code) {\n if (\n code === null ||\n code === 47 ||\n code === 62 ||\n markdownLineEndingOrSpace(code)\n ) {\n if (\n code !== 47 &&\n startTag &&\n htmlRawNames.includes(buffer.toLowerCase())\n ) {\n kind = 1\n return self.interrupt ? ok(code) : continuation(code)\n }\n\n if (htmlBlockNames.includes(buffer.toLowerCase())) {\n kind = 6\n\n if (code === 47) {\n effects.consume(code)\n return basicSelfClosing\n }\n\n return self.interrupt ? ok(code) : continuation(code)\n }\n\n kind = 7 // Do not support complete HTML when interrupting\n\n return self.interrupt && !self.parser.lazy[self.now().line]\n ? nok(code)\n : startTag\n ? completeAttributeNameBefore(code)\n : completeClosingTagAfter(code)\n }\n\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n buffer += String.fromCharCode(code)\n return tagName\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function basicSelfClosing(code) {\n if (code === 62) {\n effects.consume(code)\n return self.interrupt ? ok : continuation\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function completeClosingTagAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeClosingTagAfter\n }\n\n return completeEnd(code)\n }\n /** @type {State} */\n\n function completeAttributeNameBefore(code) {\n if (code === 47) {\n effects.consume(code)\n return completeEnd\n }\n\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code)\n return completeAttributeName\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeNameBefore\n }\n\n return completeEnd(code)\n }\n /** @type {State} */\n\n function completeAttributeName(code) {\n if (\n code === 45 ||\n code === 46 ||\n code === 58 ||\n code === 95 ||\n asciiAlphanumeric(code)\n ) {\n effects.consume(code)\n return completeAttributeName\n }\n\n return completeAttributeNameAfter(code)\n }\n /** @type {State} */\n\n function completeAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeNameAfter\n }\n\n return completeAttributeNameBefore(code)\n }\n /** @type {State} */\n\n function completeAttributeValueBefore(code) {\n if (\n code === null ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96\n ) {\n return nok(code)\n }\n\n if (code === 34 || code === 39) {\n effects.consume(code)\n marker = code\n return completeAttributeValueQuoted\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n\n marker = null\n return completeAttributeValueUnquoted(code)\n }\n /** @type {State} */\n\n function completeAttributeValueQuoted(code) {\n if (code === null || markdownLineEnding(code)) {\n return nok(code)\n }\n\n if (code === marker) {\n effects.consume(code)\n return completeAttributeValueQuotedAfter\n }\n\n effects.consume(code)\n return completeAttributeValueQuoted\n }\n /** @type {State} */\n\n function completeAttributeValueUnquoted(code) {\n if (\n code === null ||\n code === 34 ||\n code === 39 ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96 ||\n markdownLineEndingOrSpace(code)\n ) {\n return completeAttributeNameAfter(code)\n }\n\n effects.consume(code)\n return completeAttributeValueUnquoted\n }\n /** @type {State} */\n\n function completeAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownSpace(code)) {\n return completeAttributeNameBefore(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function completeEnd(code) {\n if (code === 62) {\n effects.consume(code)\n return completeAfter\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function completeAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAfter\n }\n\n return code === null || markdownLineEnding(code)\n ? continuation(code)\n : nok(code)\n }\n /** @type {State} */\n\n function continuation(code) {\n if (code === 45 && kind === 2) {\n effects.consume(code)\n return continuationCommentInside\n }\n\n if (code === 60 && kind === 1) {\n effects.consume(code)\n return continuationRawTagOpen\n }\n\n if (code === 62 && kind === 4) {\n effects.consume(code)\n return continuationClose\n }\n\n if (code === 63 && kind === 3) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n if (code === 93 && kind === 5) {\n effects.consume(code)\n return continuationCharacterDataInside\n }\n\n if (markdownLineEnding(code) && (kind === 6 || kind === 7)) {\n return effects.check(\n nextBlankConstruct,\n continuationClose,\n continuationAtLineEnding\n )(code)\n }\n\n if (code === null || markdownLineEnding(code)) {\n return continuationAtLineEnding(code)\n }\n\n effects.consume(code)\n return continuation\n }\n /** @type {State} */\n\n function continuationAtLineEnding(code) {\n effects.exit('htmlFlowData')\n return htmlContinueStart(code)\n }\n /** @type {State} */\n\n function htmlContinueStart(code) {\n if (code === null) {\n return done(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.attempt(\n {\n tokenize: htmlLineEnd,\n partial: true\n },\n htmlContinueStart,\n done\n )(code)\n }\n\n effects.enter('htmlFlowData')\n return continuation(code)\n }\n /** @type {Tokenizer} */\n\n function htmlLineEnd(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return lineStart\n }\n /** @type {State} */\n\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n }\n }\n /** @type {State} */\n\n function continuationCommentInside(code) {\n if (code === 45) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code)\n buffer = ''\n return continuationRawEndTag\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationRawEndTag(code) {\n if (code === 62 && htmlRawNames.includes(buffer.toLowerCase())) {\n effects.consume(code)\n return continuationClose\n }\n\n if (asciiAlpha(code) && buffer.length < 8) {\n effects.consume(code)\n buffer += String.fromCharCode(code)\n return continuationRawEndTag\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationCharacterDataInside(code) {\n if (code === 93) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code)\n return continuationClose\n } // More dashes.\n\n if (code === 45 && kind === 2) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('htmlFlowData')\n return done(code)\n }\n\n effects.consume(code)\n return continuationClose\n }\n /** @type {State} */\n\n function done(code) {\n effects.exit('htmlFlow')\n return ok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeNextBlank(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.exit('htmlFlowData')\n effects.enter('lineEndingBlank')\n effects.consume(code)\n effects.exit('lineEndingBlank')\n return effects.attempt(blankLine, ok, nok)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this\n /** @type {NonNullable|undefined} */\n\n let marker\n /** @type {string} */\n\n let buffer\n /** @type {number} */\n\n let index\n /** @type {State} */\n\n let returnState\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('htmlText')\n effects.enter('htmlTextData')\n effects.consume(code)\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 33) {\n effects.consume(code)\n return declarationOpen\n }\n\n if (code === 47) {\n effects.consume(code)\n return tagCloseStart\n }\n\n if (code === 63) {\n effects.consume(code)\n return instruction\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n return tagOpen\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code)\n return commentOpen\n }\n\n if (code === 91) {\n effects.consume(code)\n buffer = 'CDATA['\n index = 0\n return cdataOpen\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n return declaration\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function commentOpen(code) {\n if (code === 45) {\n effects.consume(code)\n return commentStart\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function commentStart(code) {\n if (code === null || code === 62) {\n return nok(code)\n }\n\n if (code === 45) {\n effects.consume(code)\n return commentStartDash\n }\n\n return comment(code)\n }\n /** @type {State} */\n\n function commentStartDash(code) {\n if (code === null || code === 62) {\n return nok(code)\n }\n\n return comment(code)\n }\n /** @type {State} */\n\n function comment(code) {\n if (code === null) {\n return nok(code)\n }\n\n if (code === 45) {\n effects.consume(code)\n return commentClose\n }\n\n if (markdownLineEnding(code)) {\n returnState = comment\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return comment\n }\n /** @type {State} */\n\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code)\n return end\n }\n\n return comment(code)\n }\n /** @type {State} */\n\n function cdataOpen(code) {\n if (code === buffer.charCodeAt(index++)) {\n effects.consume(code)\n return index === buffer.length ? cdata : cdataOpen\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function cdata(code) {\n if (code === null) {\n return nok(code)\n }\n\n if (code === 93) {\n effects.consume(code)\n return cdataClose\n }\n\n if (markdownLineEnding(code)) {\n returnState = cdata\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return cdata\n }\n /** @type {State} */\n\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code)\n return cdataEnd\n }\n\n return cdata(code)\n }\n /** @type {State} */\n\n function cdataEnd(code) {\n if (code === 62) {\n return end(code)\n }\n\n if (code === 93) {\n effects.consume(code)\n return cdataEnd\n }\n\n return cdata(code)\n }\n /** @type {State} */\n\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code)\n }\n\n if (markdownLineEnding(code)) {\n returnState = declaration\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return declaration\n }\n /** @type {State} */\n\n function instruction(code) {\n if (code === null) {\n return nok(code)\n }\n\n if (code === 63) {\n effects.consume(code)\n return instructionClose\n }\n\n if (markdownLineEnding(code)) {\n returnState = instruction\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return instruction\n }\n /** @type {State} */\n\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code)\n }\n /** @type {State} */\n\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n return tagClose\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagClose(code) {\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n return tagClose\n }\n\n return tagCloseBetween(code)\n }\n /** @type {State} */\n\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagCloseBetween\n }\n\n return end(code)\n }\n /** @type {State} */\n\n function tagOpen(code) {\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n return tagOpen\n }\n\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code)\n return end\n }\n\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code)\n return tagOpenAttributeName\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenBetween\n }\n\n return end(code)\n }\n /** @type {State} */\n\n function tagOpenAttributeName(code) {\n if (\n code === 45 ||\n code === 46 ||\n code === 58 ||\n code === 95 ||\n asciiAlphanumeric(code)\n ) {\n effects.consume(code)\n return tagOpenAttributeName\n }\n\n return tagOpenAttributeNameAfter(code)\n }\n /** @type {State} */\n\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenAttributeNameAfter\n }\n\n return tagOpenBetween(code)\n }\n /** @type {State} */\n\n function tagOpenAttributeValueBefore(code) {\n if (\n code === null ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96\n ) {\n return nok(code)\n }\n\n if (code === 34 || code === 39) {\n effects.consume(code)\n marker = code\n return tagOpenAttributeValueQuoted\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n\n effects.consume(code)\n marker = undefined\n return tagOpenAttributeValueUnquoted\n }\n /** @type {State} */\n\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code)\n return tagOpenAttributeValueQuotedAfter\n }\n\n if (code === null) {\n return nok(code)\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return tagOpenAttributeValueQuoted\n }\n /** @type {State} */\n\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 62 || code === 47 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagOpenAttributeValueUnquoted(code) {\n if (\n code === null ||\n code === 34 ||\n code === 39 ||\n code === 60 ||\n code === 61 ||\n code === 96\n ) {\n return nok(code)\n }\n\n if (code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n\n effects.consume(code)\n return tagOpenAttributeValueUnquoted\n } // We can’t have blank lines in content, so no need to worry about empty\n // tokens.\n\n /** @type {State} */\n\n function atLineEnding(code) {\n effects.exit('htmlTextData')\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(\n effects,\n afterPrefix,\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )\n }\n /** @type {State} */\n\n function afterPrefix(code) {\n effects.enter('htmlTextData')\n return returnState(code)\n }\n /** @type {State} */\n\n function end(code) {\n if (code === 62) {\n effects.consume(code)\n effects.exit('htmlTextData')\n effects.exit('htmlText')\n return ok\n }\n\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {resolveAll} from 'micromark-util-resolve-all'\n\n/** @type {Construct} */\nexport const labelEnd = {\n name: 'labelEnd',\n tokenize: tokenizeLabelEnd,\n resolveTo: resolveToLabelEnd,\n resolveAll: resolveAllLabelEnd\n}\n/** @type {Construct} */\n\nconst resourceConstruct = {\n tokenize: tokenizeResource\n}\n/** @type {Construct} */\n\nconst fullReferenceConstruct = {\n tokenize: tokenizeFullReference\n}\n/** @type {Construct} */\n\nconst collapsedReferenceConstruct = {\n tokenize: tokenizeCollapsedReference\n}\n/** @type {Resolver} */\n\nfunction resolveAllLabelEnd(events) {\n let index = -1\n /** @type {Token} */\n\n let token\n\n while (++index < events.length) {\n token = events[index][1]\n\n if (\n token.type === 'labelImage' ||\n token.type === 'labelLink' ||\n token.type === 'labelEnd'\n ) {\n // Remove the marker.\n events.splice(index + 1, token.type === 'labelImage' ? 4 : 2)\n token.type = 'data'\n index++\n }\n }\n\n return events\n}\n/** @type {Resolver} */\n\nfunction resolveToLabelEnd(events, context) {\n let index = events.length\n let offset = 0\n /** @type {Token} */\n\n let token\n /** @type {number|undefined} */\n\n let open\n /** @type {number|undefined} */\n\n let close\n /** @type {Event[]} */\n\n let media // Find an opening.\n\n while (index--) {\n token = events[index][1]\n\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (\n token.type === 'link' ||\n (token.type === 'labelLink' && token._inactive)\n ) {\n break\n } // Mark other link openings as inactive, as we can’t have links in\n // links.\n\n if (events[index][0] === 'enter' && token.type === 'labelLink') {\n token._inactive = true\n }\n } else if (close) {\n if (\n events[index][0] === 'enter' &&\n (token.type === 'labelImage' || token.type === 'labelLink') &&\n !token._balanced\n ) {\n open = index\n\n if (token.type !== 'labelLink') {\n offset = 2\n break\n }\n }\n } else if (token.type === 'labelEnd') {\n close = index\n }\n }\n\n const group = {\n type: events[open][1].type === 'labelLink' ? 'link' : 'image',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n }\n const label = {\n type: 'label',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[close][1].end)\n }\n const text = {\n type: 'labelText',\n start: Object.assign({}, events[open + offset + 2][1].end),\n end: Object.assign({}, events[close - 2][1].start)\n }\n media = [\n ['enter', group, context],\n ['enter', label, context]\n ] // Opening marker.\n\n media = push(media, events.slice(open + 1, open + offset + 3)) // Text open.\n\n media = push(media, [['enter', text, context]]) // Between.\n\n media = push(\n media,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(open + offset + 4, close - 3),\n context\n )\n ) // Text close, marker close, label close.\n\n media = push(media, [\n ['exit', text, context],\n events[close - 2],\n events[close - 1],\n ['exit', label, context]\n ]) // Reference, resource, or so.\n\n media = push(media, events.slice(close + 1)) // Media close.\n\n media = push(media, [['exit', group, context]])\n splice(events, open, events.length, media)\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this\n let index = self.events.length\n /** @type {Token} */\n\n let labelStart\n /** @type {boolean} */\n\n let defined // Find an opening.\n\n while (index--) {\n if (\n (self.events[index][1].type === 'labelImage' ||\n self.events[index][1].type === 'labelLink') &&\n !self.events[index][1]._balanced\n ) {\n labelStart = self.events[index][1]\n break\n }\n }\n\n return start\n /** @type {State} */\n\n function start(code) {\n if (!labelStart) {\n return nok(code)\n } // It’s a balanced bracket, but contains a link.\n\n if (labelStart._inactive) return balanced(code)\n defined = self.parser.defined.includes(\n normalizeIdentifier(\n self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })\n )\n )\n effects.enter('labelEnd')\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelEnd')\n return afterLabelEnd\n }\n /** @type {State} */\n\n function afterLabelEnd(code) {\n // Resource: `[asd](fgh)`.\n if (code === 40) {\n return effects.attempt(\n resourceConstruct,\n ok,\n defined ? ok : balanced\n )(code)\n } // Collapsed (`[asd][]`) or full (`[asd][fgh]`) reference?\n\n if (code === 91) {\n return effects.attempt(\n fullReferenceConstruct,\n ok,\n defined\n ? effects.attempt(collapsedReferenceConstruct, ok, balanced)\n : balanced\n )(code)\n } // Shortcut reference: `[asd]`?\n\n return defined ? ok(code) : balanced(code)\n }\n /** @type {State} */\n\n function balanced(code) {\n labelStart._balanced = true\n return nok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeResource(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('resource')\n effects.enter('resourceMarker')\n effects.consume(code)\n effects.exit('resourceMarker')\n return factoryWhitespace(effects, open)\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 41) {\n return end(code)\n }\n\n return factoryDestination(\n effects,\n destinationAfter,\n nok,\n 'resourceDestination',\n 'resourceDestinationLiteral',\n 'resourceDestinationLiteralMarker',\n 'resourceDestinationRaw',\n 'resourceDestinationString',\n 32\n )(code)\n }\n /** @type {State} */\n\n function destinationAfter(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, between)(code)\n : end(code)\n }\n /** @type {State} */\n\n function between(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(\n effects,\n factoryWhitespace(effects, end),\n nok,\n 'resourceTitle',\n 'resourceTitleMarker',\n 'resourceTitleString'\n )(code)\n }\n\n return end(code)\n }\n /** @type {State} */\n\n function end(code) {\n if (code === 41) {\n effects.enter('resourceMarker')\n effects.consume(code)\n effects.exit('resourceMarker')\n effects.exit('resource')\n return ok\n }\n\n return nok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeFullReference(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n return factoryLabel.call(\n self,\n effects,\n afterLabel,\n nok,\n 'reference',\n 'referenceMarker',\n 'referenceString'\n )(code)\n }\n /** @type {State} */\n\n function afterLabel(code) {\n return self.parser.defined.includes(\n normalizeIdentifier(\n self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n )\n )\n ? ok(code)\n : nok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCollapsedReference(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('reference')\n effects.enter('referenceMarker')\n effects.consume(code)\n effects.exit('referenceMarker')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 93) {\n effects.enter('referenceMarker')\n effects.consume(code)\n effects.exit('referenceMarker')\n effects.exit('reference')\n return ok\n }\n\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {labelEnd} from './label-end.js'\n/** @type {Construct} */\n\nexport const labelStartImage = {\n name: 'labelStartImage',\n tokenize: tokenizeLabelStartImage,\n resolveAll: labelEnd.resolveAll\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('labelImage')\n effects.enter('labelImageMarker')\n effects.consume(code)\n effects.exit('labelImageMarker')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 91) {\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelImage')\n return after\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function after(code) {\n /* To do: remove in the future once we’ve switched from\n * `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n * which doesn’t need this */\n\n /* Hidden footnotes hook */\n\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n ? nok(code)\n : ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {labelEnd} from './label-end.js'\n/** @type {Construct} */\n\nexport const labelStartLink = {\n name: 'labelStartLink',\n tokenize: tokenizeLabelStartLink,\n resolveAll: labelEnd.resolveAll\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('labelLink')\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelLink')\n return after\n }\n /** @type {State} */\n\n function after(code) {\n /* To do: remove in the future once we’ve switched from\n * `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n * which doesn’t need this */\n\n /* Hidden footnotes hook. */\n\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n ? nok(code)\n : ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLineEnding(effects, ok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, ok, 'linePrefix')\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const thematicBreak = {\n name: 'thematicBreak',\n tokenize: tokenizeThematicBreak\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeThematicBreak(effects, ok, nok) {\n let size = 0\n /** @type {NonNullable} */\n\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('thematicBreak')\n marker = code\n return atBreak(code)\n }\n /** @type {State} */\n\n function atBreak(code) {\n if (code === marker) {\n effects.enter('thematicBreakSequence')\n return sequence(code)\n }\n\n if (markdownSpace(code)) {\n return factorySpace(effects, atBreak, 'whitespace')(code)\n }\n\n if (size < 3 || (code !== null && !markdownLineEnding(code))) {\n return nok(code)\n }\n\n effects.exit('thematicBreak')\n return ok(code)\n }\n /** @type {State} */\n\n function sequence(code) {\n if (code === marker) {\n effects.consume(code)\n size++\n return sequence\n }\n\n effects.exit('thematicBreakSequence')\n return atBreak(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n/**\n * @typedef {Record & {marker: Code, type: string, size: number}} ListContainerState\n * @typedef {TokenizeContext & {containerState: ListContainerState}} TokenizeContextWithState\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {asciiDigit, markdownSpace} from 'micromark-util-character'\nimport {blankLine} from './blank-line.js'\nimport {thematicBreak} from './thematic-break.js'\n/** @type {Construct} */\n\nexport const list = {\n name: 'list',\n tokenize: tokenizeListStart,\n continuation: {\n tokenize: tokenizeListContinuation\n },\n exit: tokenizeListEnd\n}\n/** @type {Construct} */\n\nconst listItemPrefixWhitespaceConstruct = {\n tokenize: tokenizeListItemPrefixWhitespace,\n partial: true\n}\n/** @type {Construct} */\n\nconst indentConstruct = {\n tokenize: tokenizeIndent,\n partial: true\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListStart(effects, ok, nok) {\n const self = this\n const tail = self.events[self.events.length - 1]\n let initialSize =\n tail && tail[1].type === 'linePrefix'\n ? tail[2].sliceSerialize(tail[1], true).length\n : 0\n let size = 0\n return start\n /** @type {State} */\n\n function start(code) {\n const kind =\n self.containerState.type ||\n (code === 42 || code === 43 || code === 45\n ? 'listUnordered'\n : 'listOrdered')\n\n if (\n kind === 'listUnordered'\n ? !self.containerState.marker || code === self.containerState.marker\n : asciiDigit(code)\n ) {\n if (!self.containerState.type) {\n self.containerState.type = kind\n effects.enter(kind, {\n _container: true\n })\n }\n\n if (kind === 'listUnordered') {\n effects.enter('listItemPrefix')\n return code === 42 || code === 45\n ? effects.check(thematicBreak, nok, atMarker)(code)\n : atMarker(code)\n }\n\n if (!self.interrupt || code === 49) {\n effects.enter('listItemPrefix')\n effects.enter('listItemValue')\n return inside(code)\n }\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function inside(code) {\n if (asciiDigit(code) && ++size < 10) {\n effects.consume(code)\n return inside\n }\n\n if (\n (!self.interrupt || size < 2) &&\n (self.containerState.marker\n ? code === self.containerState.marker\n : code === 41 || code === 46)\n ) {\n effects.exit('listItemValue')\n return atMarker(code)\n }\n\n return nok(code)\n }\n /**\n * @type {State}\n **/\n\n function atMarker(code) {\n effects.enter('listItemMarker')\n effects.consume(code)\n effects.exit('listItemMarker')\n self.containerState.marker = self.containerState.marker || code\n return effects.check(\n blankLine, // Can’t be empty when interrupting.\n self.interrupt ? nok : onBlank,\n effects.attempt(\n listItemPrefixWhitespaceConstruct,\n endOfPrefix,\n otherPrefix\n )\n )\n }\n /** @type {State} */\n\n function onBlank(code) {\n self.containerState.initialBlankLine = true\n initialSize++\n return endOfPrefix(code)\n }\n /** @type {State} */\n\n function otherPrefix(code) {\n if (markdownSpace(code)) {\n effects.enter('listItemPrefixWhitespace')\n effects.consume(code)\n effects.exit('listItemPrefixWhitespace')\n return endOfPrefix\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function endOfPrefix(code) {\n self.containerState.size =\n initialSize +\n self.sliceSerialize(effects.exit('listItemPrefix'), true).length\n return ok(code)\n }\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListContinuation(effects, ok, nok) {\n const self = this\n self.containerState._closeFlow = undefined\n return effects.check(blankLine, onBlank, notBlank)\n /** @type {State} */\n\n function onBlank(code) {\n self.containerState.furtherBlankLines =\n self.containerState.furtherBlankLines ||\n self.containerState.initialBlankLine // We have a blank line.\n // Still, try to consume at most the items size.\n\n return factorySpace(\n effects,\n ok,\n 'listItemIndent',\n self.containerState.size + 1\n )(code)\n }\n /** @type {State} */\n\n function notBlank(code) {\n if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n self.containerState.furtherBlankLines = undefined\n self.containerState.initialBlankLine = undefined\n return notInCurrentItem(code)\n }\n\n self.containerState.furtherBlankLines = undefined\n self.containerState.initialBlankLine = undefined\n return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)\n }\n /** @type {State} */\n\n function notInCurrentItem(code) {\n // While we do continue, we signal that the flow should be closed.\n self.containerState._closeFlow = true // As we’re closing flow, we’re no longer interrupting.\n\n self.interrupt = undefined\n return factorySpace(\n effects,\n effects.attempt(list, ok, nok),\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )(code)\n }\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this\n return factorySpace(\n effects,\n afterPrefix,\n 'listItemIndent',\n self.containerState.size + 1\n )\n /** @type {State} */\n\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'listItemIndent' &&\n tail[2].sliceSerialize(tail[1], true).length === self.containerState.size\n ? ok(code)\n : nok(code)\n }\n}\n/**\n * @type {Exiter}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListEnd(effects) {\n effects.exit(this.containerState.type)\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n const self = this\n return factorySpace(\n effects,\n afterPrefix,\n 'listItemPrefixWhitespace',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4 + 1\n )\n /** @type {State} */\n\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return !markdownSpace(code) &&\n tail &&\n tail[1].type === 'listItemPrefixWhitespace'\n ? ok(code)\n : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const setextUnderline = {\n name: 'setextUnderline',\n tokenize: tokenizeSetextUnderline,\n resolveTo: resolveToSetextUnderline\n}\n/** @type {Resolver} */\n\nfunction resolveToSetextUnderline(events, context) {\n let index = events.length\n /** @type {number|undefined} */\n\n let content\n /** @type {number|undefined} */\n\n let text\n /** @type {number|undefined} */\n\n let definition // Find the opening of the content.\n // It’ll always exist: we don’t tokenize if it isn’t there.\n\n while (index--) {\n if (events[index][0] === 'enter') {\n if (events[index][1].type === 'content') {\n content = index\n break\n }\n\n if (events[index][1].type === 'paragraph') {\n text = index\n }\n } // Exit\n else {\n if (events[index][1].type === 'content') {\n // Remove the content end (if needed we’ll add it later)\n events.splice(index, 1)\n }\n\n if (!definition && events[index][1].type === 'definition') {\n definition = index\n }\n }\n }\n\n const heading = {\n type: 'setextHeading',\n start: Object.assign({}, events[text][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n } // Change the paragraph to setext heading text.\n\n events[text][1].type = 'setextHeadingText' // If we have definitions in the content, we’ll keep on having content,\n // but we need move it.\n\n if (definition) {\n events.splice(text, 0, ['enter', heading, context])\n events.splice(definition + 1, 0, ['exit', events[content][1], context])\n events[content][1].end = Object.assign({}, events[definition][1].end)\n } else {\n events[content][1] = heading\n } // Add the heading exit at the end.\n\n events.push(['exit', heading, context])\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n const self = this\n let index = self.events.length\n /** @type {NonNullable} */\n\n let marker\n /** @type {boolean} */\n\n let paragraph // Find an opening.\n\n while (index--) {\n // Skip enter/exit of line ending, line prefix, and content.\n // We can now either have a definition or a paragraph.\n if (\n self.events[index][1].type !== 'lineEnding' &&\n self.events[index][1].type !== 'linePrefix' &&\n self.events[index][1].type !== 'content'\n ) {\n paragraph = self.events[index][1].type === 'paragraph'\n break\n }\n }\n\n return start\n /** @type {State} */\n\n function start(code) {\n if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n effects.enter('setextHeadingLine')\n effects.enter('setextHeadingLineSequence')\n marker = code\n return closingSequence(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function closingSequence(code) {\n if (code === marker) {\n effects.consume(code)\n return closingSequence\n }\n\n effects.exit('setextHeadingLineSequence')\n return factorySpace(effects, closingSequenceEnd, 'lineSuffix')(code)\n }\n /** @type {State} */\n\n function closingSequenceEnd(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('setextHeadingLine')\n return ok(code)\n }\n\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {blankLine, content} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {InitialConstruct} */\nexport const flow = {\n tokenize: initializeFlow\n}\n/** @type {Initializer} */\n\nfunction initializeFlow(effects) {\n const self = this\n const initial = effects.attempt(\n // Try to parse a blank line.\n blankLine,\n atBlankEnding, // Try to parse initial flow (essentially, only code).\n effects.attempt(\n this.parser.constructs.flowInitial,\n afterConstruct,\n factorySpace(\n effects,\n effects.attempt(\n this.parser.constructs.flow,\n afterConstruct,\n effects.attempt(content, afterConstruct)\n ),\n 'linePrefix'\n )\n )\n )\n return initial\n /** @type {State} */\n\n function atBlankEnding(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('lineEndingBlank')\n effects.consume(code)\n effects.exit('lineEndingBlank')\n self.currentConstruct = undefined\n return initial\n }\n /** @type {State} */\n\n function afterConstruct(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n self.currentConstruct = undefined\n return initial\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nexport const resolver = {\n resolveAll: createResolver()\n}\nexport const string = initializeFactory('string')\nexport const text = initializeFactory('text')\n/**\n * @param {'string'|'text'} field\n * @returns {InitialConstruct}\n */\n\nfunction initializeFactory(field) {\n return {\n tokenize: initializeText,\n resolveAll: createResolver(\n field === 'text' ? resolveAllLineSuffixes : undefined\n )\n }\n /** @type {Initializer} */\n\n function initializeText(effects) {\n const self = this\n const constructs = this.parser.constructs[field]\n const text = effects.attempt(constructs, start, notText)\n return start\n /** @type {State} */\n\n function start(code) {\n return atBreak(code) ? text(code) : notText(code)\n }\n /** @type {State} */\n\n function notText(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('data')\n effects.consume(code)\n return data\n }\n /** @type {State} */\n\n function data(code) {\n if (atBreak(code)) {\n effects.exit('data')\n return text(code)\n } // Data.\n\n effects.consume(code)\n return data\n }\n /**\n * @param {Code} code\n * @returns {boolean}\n */\n\n function atBreak(code) {\n if (code === null) {\n return true\n }\n\n const list = constructs[code]\n let index = -1\n\n if (list) {\n while (++index < list.length) {\n const item = list[index]\n\n if (!item.previous || item.previous.call(self, self.previous)) {\n return true\n }\n }\n }\n\n return false\n }\n }\n}\n/**\n * @param {Resolver} [extraResolver]\n * @returns {Resolver}\n */\n\nfunction createResolver(extraResolver) {\n return resolveAllText\n /** @type {Resolver} */\n\n function resolveAllText(events, context) {\n let index = -1\n /** @type {number|undefined} */\n\n let enter // A rather boring computation (to merge adjacent `data` events) which\n // improves mm performance by 29%.\n\n while (++index <= events.length) {\n if (enter === undefined) {\n if (events[index] && events[index][1].type === 'data') {\n enter = index\n index++\n }\n } else if (!events[index] || events[index][1].type !== 'data') {\n // Don’t do anything if there is one data token.\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n index = enter + 2\n }\n\n enter = undefined\n }\n }\n\n return extraResolver ? extraResolver(events, context) : events\n }\n}\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\n\nfunction resolveAllLineSuffixes(events, context) {\n let eventIndex = 0 // Skip first.\n\n while (++eventIndex <= events.length) {\n if (\n (eventIndex === events.length ||\n events[eventIndex][1].type === 'lineEnding') &&\n events[eventIndex - 1][1].type === 'data'\n ) {\n const data = events[eventIndex - 1][1]\n const chunks = context.sliceStream(data)\n let index = chunks.length\n let bufferIndex = -1\n let size = 0\n /** @type {boolean|undefined} */\n\n let tabs\n\n while (index--) {\n const chunk = chunks[index]\n\n if (typeof chunk === 'string') {\n bufferIndex = chunk.length\n\n while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n size++\n bufferIndex--\n }\n\n if (bufferIndex) break\n bufferIndex = -1\n } // Number\n else if (chunk === -2) {\n tabs = true\n size++\n } else if (chunk === -1) {\n // Empty\n } else {\n // Replacement character, exit.\n index++\n break\n }\n }\n\n if (size) {\n const token = {\n type:\n eventIndex === events.length || tabs || size < 2\n ? 'lineSuffix'\n : 'hardBreakTrailing',\n start: {\n line: data.end.line,\n column: data.end.column - size,\n offset: data.end.offset - size,\n _index: data.start._index + index,\n _bufferIndex: index\n ? bufferIndex\n : data.start._bufferIndex + bufferIndex\n },\n end: Object.assign({}, data.end)\n }\n data.end = Object.assign({}, token.start)\n\n if (data.start.offset === data.end.offset) {\n Object.assign(data, token)\n } else {\n events.splice(\n eventIndex,\n 0,\n ['enter', token, context],\n ['exit', token, context]\n )\n eventIndex += 2\n }\n }\n\n eventIndex++\n }\n }\n\n return events\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n */\n\n/**\n * @typedef Info\n * @property {() => void} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {void}\n */\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {resolveAll} from 'micromark-util-resolve-all'\n\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit} [from]\n * @returns {TokenizeContext}\n */\nexport function createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = Object.assign(\n from\n ? Object.assign({}, from)\n : {\n line: 1,\n column: 1,\n offset: 0\n },\n {\n _index: 0,\n _bufferIndex: -1\n }\n )\n /** @type {Record} */\n\n const columnStart = {}\n /** @type {Array} */\n\n const resolveAllConstructs = []\n /** @type {Array} */\n\n let chunks = []\n /** @type {Array} */\n\n let stack = []\n /** @type {boolean|undefined} */\n\n let consumed = true\n /**\n * Tools used for tokenizing.\n *\n * @type {Effects}\n */\n\n const effects = {\n consume,\n enter,\n exit,\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n interrupt: constructFactory(onsuccessfulcheck, {\n interrupt: true\n })\n }\n /**\n * State and tools for resolving and serializing.\n *\n * @type {TokenizeContext}\n */\n\n const context = {\n previous: null,\n code: null,\n containerState: {},\n events: [],\n parser,\n sliceStream,\n sliceSerialize,\n now,\n defineSkip,\n write\n }\n /**\n * The state function.\n *\n * @type {State|void}\n */\n\n let state = initialize.tokenize.call(context, effects)\n /**\n * Track which character we expect to be consumed, to catch bugs.\n *\n * @type {Code}\n */\n\n let expectedCode\n\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize)\n }\n\n return context\n /** @type {TokenizeContext['write']} */\n\n function write(slice) {\n chunks = push(chunks, slice)\n main() // Exit if we’re not done, resolve might change stuff.\n\n if (chunks[chunks.length - 1] !== null) {\n return []\n }\n\n addResult(initialize, 0) // Otherwise, resolve, and exit.\n\n context.events = resolveAll(resolveAllConstructs, context.events, context)\n return context.events\n } //\n // Tools.\n //\n\n /** @type {TokenizeContext['sliceSerialize']} */\n\n function sliceSerialize(token, expandTabs) {\n return serializeChunks(sliceStream(token), expandTabs)\n }\n /** @type {TokenizeContext['sliceStream']} */\n\n function sliceStream(token) {\n return sliceChunks(chunks, token)\n }\n /** @type {TokenizeContext['now']} */\n\n function now() {\n return Object.assign({}, point)\n }\n /** @type {TokenizeContext['defineSkip']} */\n\n function defineSkip(value) {\n columnStart[value.line] = value.column\n accountForPotentialSkip()\n } //\n // State management.\n //\n\n /**\n * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n * `consume`).\n * Here is where we walk through the chunks, which either include strings of\n * several characters, or numerical character codes.\n * The reason to do this in a loop instead of a call is so the stack can\n * drain.\n *\n * @returns {void}\n */\n\n function main() {\n /** @type {number} */\n let chunkIndex\n\n while (point._index < chunks.length) {\n const chunk = chunks[point._index] // If we’re in a buffer chunk, loop through it.\n\n if (typeof chunk === 'string') {\n chunkIndex = point._index\n\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0\n }\n\n while (\n point._index === chunkIndex &&\n point._bufferIndex < chunk.length\n ) {\n go(chunk.charCodeAt(point._bufferIndex))\n }\n } else {\n go(chunk)\n }\n }\n }\n /**\n * Deal with one code.\n *\n * @param {Code} code\n * @returns {void}\n */\n\n function go(code) {\n consumed = undefined\n expectedCode = code\n state = state(code)\n }\n /** @type {Effects['consume']} */\n\n function consume(code) {\n if (markdownLineEnding(code)) {\n point.line++\n point.column = 1\n point.offset += code === -3 ? 2 : 1\n accountForPotentialSkip()\n } else if (code !== -1) {\n point.column++\n point.offset++\n } // Not in a string chunk.\n\n if (point._bufferIndex < 0) {\n point._index++\n } else {\n point._bufferIndex++ // At end of string chunk.\n // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n // strings.\n\n if (point._bufferIndex === chunks[point._index].length) {\n point._bufferIndex = -1\n point._index++\n }\n } // Expose the previous character.\n\n context.previous = code // Mark as consumed.\n\n consumed = true\n }\n /** @type {Effects['enter']} */\n\n function enter(type, fields) {\n /** @type {Token} */\n // @ts-expect-error Patch instead of assign required fields to help GC.\n const token = fields || {}\n token.type = type\n token.start = now()\n context.events.push(['enter', token, context])\n stack.push(token)\n return token\n }\n /** @type {Effects['exit']} */\n\n function exit(type) {\n const token = stack.pop()\n token.end = now()\n context.events.push(['exit', token, context])\n return token\n }\n /**\n * Use results.\n *\n * @type {ReturnHandle}\n */\n\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from)\n }\n /**\n * Discard results.\n *\n * @type {ReturnHandle}\n */\n\n function onsuccessfulcheck(_, info) {\n info.restore()\n }\n /**\n * Factory to attempt/check/interrupt.\n *\n * @param {ReturnHandle} onreturn\n * @param {Record} [fields]\n */\n\n function constructFactory(onreturn, fields) {\n return hook\n /**\n * Handle either an object mapping codes to constructs, a list of\n * constructs, or a single construct.\n *\n * @param {Construct|Array|ConstructRecord} constructs\n * @param {State} returnState\n * @param {State} [bogusState]\n * @returns {State}\n */\n\n function hook(constructs, returnState, bogusState) {\n /** @type {Array} */\n let listOfConstructs\n /** @type {number} */\n\n let constructIndex\n /** @type {Construct} */\n\n let currentConstruct\n /** @type {Info} */\n\n let info\n return Array.isArray(constructs)\n ? /* c8 ignore next 1 */\n handleListOfConstructs(constructs)\n : 'tokenize' in constructs // @ts-expect-error Looks like a construct.\n ? handleListOfConstructs([constructs])\n : handleMapOfConstructs(constructs)\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * @returns {State}\n */\n\n function handleMapOfConstructs(map) {\n return start\n /** @type {State} */\n\n function start(code) {\n const def = code !== null && map[code]\n const all = code !== null && map.null\n const list = [\n // To do: add more extension tests.\n\n /* c8 ignore next 2 */\n ...(Array.isArray(def) ? def : def ? [def] : []),\n ...(Array.isArray(all) ? all : all ? [all] : [])\n ]\n return handleListOfConstructs(list)(code)\n }\n }\n /**\n * Handle a list of construct.\n *\n * @param {Array} list\n * @returns {State}\n */\n\n function handleListOfConstructs(list) {\n listOfConstructs = list\n constructIndex = 0\n\n if (list.length === 0) {\n return bogusState\n }\n\n return handleConstruct(list[constructIndex])\n }\n /**\n * Handle a single construct.\n *\n * @param {Construct} construct\n * @returns {State}\n */\n\n function handleConstruct(construct) {\n return start\n /** @type {State} */\n\n function start(code) {\n // To do: not needed to store if there is no bogus state, probably?\n // Currently doesn’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n // by not storing.\n info = store()\n currentConstruct = construct\n\n if (!construct.partial) {\n context.currentConstruct = construct\n }\n\n if (\n construct.name &&\n context.parser.constructs.disable.null.includes(construct.name)\n ) {\n return nok(code)\n }\n\n return construct.tokenize.call(\n // If we do have fields, create an object w/ `context` as its\n // prototype.\n // This allows a “live binding”, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context,\n effects,\n ok,\n nok\n )(code)\n }\n }\n /** @type {State} */\n\n function ok(code) {\n consumed = true\n onreturn(currentConstruct, info)\n return returnState\n }\n /** @type {State} */\n\n function nok(code) {\n consumed = true\n info.restore()\n\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex])\n }\n\n return bogusState\n }\n }\n }\n /**\n * @param {Construct} construct\n * @param {number} from\n * @returns {void}\n */\n\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct)\n }\n\n if (construct.resolve) {\n splice(\n context.events,\n from,\n context.events.length - from,\n construct.resolve(context.events.slice(from), context)\n )\n }\n\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context)\n }\n }\n /**\n * Store state.\n *\n * @returns {Info}\n */\n\n function store() {\n const startPoint = now()\n const startPrevious = context.previous\n const startCurrentConstruct = context.currentConstruct\n const startEventsIndex = context.events.length\n const startStack = Array.from(stack)\n return {\n restore,\n from: startEventsIndex\n }\n /**\n * Restore state.\n *\n * @returns {void}\n */\n\n function restore() {\n point = startPoint\n context.previous = startPrevious\n context.currentConstruct = startCurrentConstruct\n context.events.length = startEventsIndex\n stack = startStack\n accountForPotentialSkip()\n }\n }\n /**\n * Move the current point a bit forward in the line when it’s on a column\n * skip.\n *\n * @returns {void}\n */\n\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line]\n point.offset += columnStart[point.line] - 1\n }\n }\n}\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array} chunks\n * @param {Pick} token\n * @returns {Array}\n */\n\nfunction sliceChunks(chunks, token) {\n const startIndex = token.start._index\n const startBufferIndex = token.start._bufferIndex\n const endIndex = token.end._index\n const endBufferIndex = token.end._bufferIndex\n /** @type {Array} */\n\n let view\n\n if (startIndex === endIndex) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n } else {\n view = chunks.slice(startIndex, endIndex)\n\n if (startBufferIndex > -1) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view[0] = view[0].slice(startBufferIndex)\n }\n\n if (endBufferIndex > 0) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view.push(chunks[endIndex].slice(0, endBufferIndex))\n }\n }\n\n return view\n}\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array} chunks\n * @param {boolean} [expandTabs=false]\n * @returns {string}\n */\n\nfunction serializeChunks(chunks, expandTabs) {\n let index = -1\n /** @type {Array} */\n\n const result = []\n /** @type {boolean|undefined} */\n\n let atTab\n\n while (++index < chunks.length) {\n const chunk = chunks[index]\n /** @type {string} */\n\n let value\n\n if (typeof chunk === 'string') {\n value = chunk\n } else\n switch (chunk) {\n case -5: {\n value = '\\r'\n break\n }\n\n case -4: {\n value = '\\n'\n break\n }\n\n case -3: {\n value = '\\r' + '\\n'\n break\n }\n\n case -2: {\n value = expandTabs ? ' ' : '\\t'\n break\n }\n\n case -1: {\n if (!expandTabs && atTab) continue\n value = ' '\n break\n }\n\n default: {\n // Currently only replacement character.\n value = String.fromCharCode(chunk)\n }\n }\n\n atTab = chunk === -2\n result.push(value)\n }\n\n return result.join('')\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\nimport {\n attention,\n autolink,\n blockQuote,\n characterEscape,\n characterReference,\n codeFenced,\n codeIndented,\n codeText,\n definition,\n hardBreakEscape,\n headingAtx,\n htmlFlow,\n htmlText,\n labelEnd,\n labelStartImage,\n labelStartLink,\n lineEnding,\n list,\n setextUnderline,\n thematicBreak\n} from 'micromark-core-commonmark'\nimport {resolver as resolveText} from './initialize/text.js'\n/** @type {Extension['document']} */\n\nexport const document = {\n [42]: list,\n [43]: list,\n [45]: list,\n [48]: list,\n [49]: list,\n [50]: list,\n [51]: list,\n [52]: list,\n [53]: list,\n [54]: list,\n [55]: list,\n [56]: list,\n [57]: list,\n [62]: blockQuote\n}\n/** @type {Extension['contentInitial']} */\n\nexport const contentInitial = {\n [91]: definition\n}\n/** @type {Extension['flowInitial']} */\n\nexport const flowInitial = {\n [-2]: codeIndented,\n [-1]: codeIndented,\n [32]: codeIndented\n}\n/** @type {Extension['flow']} */\n\nexport const flow = {\n [35]: headingAtx,\n [42]: thematicBreak,\n [45]: [setextUnderline, thematicBreak],\n [60]: htmlFlow,\n [61]: setextUnderline,\n [95]: thematicBreak,\n [96]: codeFenced,\n [126]: codeFenced\n}\n/** @type {Extension['string']} */\n\nexport const string = {\n [38]: characterReference,\n [92]: characterEscape\n}\n/** @type {Extension['text']} */\n\nexport const text = {\n [-5]: lineEnding,\n [-4]: lineEnding,\n [-3]: lineEnding,\n [33]: labelStartImage,\n [38]: characterReference,\n [42]: attention,\n [60]: [autolink, htmlText],\n [91]: labelStartLink,\n [92]: [hardBreakEscape, characterEscape],\n [93]: labelEnd,\n [95]: attention,\n [96]: codeText\n}\n/** @type {Extension['insideSpan']} */\n\nexport const insideSpan = {\n null: [attention, resolveText]\n}\n/** @type {Extension['attentionMarkers']} */\n\nexport const attentionMarkers = {\n null: [42, 95]\n}\n/** @type {Extension['disable']} */\n\nexport const disable = {\n null: []\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Create} Create\n */\nimport {combineExtensions} from 'micromark-util-combine-extensions'\nimport {content} from './initialize/content.js'\nimport {document} from './initialize/document.js'\nimport {flow} from './initialize/flow.js'\nimport {text, string} from './initialize/text.js'\nimport {createTokenizer} from './create-tokenizer.js'\nimport * as defaultConstructs from './constructs.js'\n/**\n * @param {ParseOptions} [options]\n * @returns {ParseContext}\n */\n\nexport function parse(options = {}) {\n /** @type {FullNormalizedExtension} */\n // @ts-expect-error `defaultConstructs` is full, so the result will be too.\n const constructs = combineExtensions(\n // @ts-expect-error Same as above.\n [defaultConstructs].concat(options.extensions || [])\n )\n /** @type {ParseContext} */\n\n const parser = {\n defined: [],\n lazy: {},\n constructs,\n content: create(content),\n document: create(document),\n flow: create(flow),\n string: create(string),\n text: create(text)\n }\n return parser\n /**\n * @param {InitialConstruct} initial\n */\n\n function create(initial) {\n return creator\n /** @type {Create} */\n\n function creator(from) {\n return createTokenizer(parser, initial, from)\n }\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding} [encoding]\n * @param {boolean} [end=false]\n * @returns {Array}\n */\nconst search = /[\\0\\t\\n\\r]/g\n/**\n * @returns {Preprocessor}\n */\n\nexport function preprocess() {\n let column = 1\n let buffer = ''\n /** @type {boolean|undefined} */\n\n let start = true\n /** @type {boolean|undefined} */\n\n let atCarriageReturn\n return preprocessor\n /** @type {Preprocessor} */\n\n function preprocessor(value, encoding, end) {\n /** @type {Array} */\n const chunks = []\n /** @type {RegExpMatchArray|null} */\n\n let match\n /** @type {number} */\n\n let next\n /** @type {number} */\n\n let startPosition\n /** @type {number} */\n\n let endPosition\n /** @type {Code} */\n\n let code // @ts-expect-error `Buffer` does allow an encoding.\n\n value = buffer + value.toString(encoding)\n startPosition = 0\n buffer = ''\n\n if (start) {\n if (value.charCodeAt(0) === 65279) {\n startPosition++\n }\n\n start = undefined\n }\n\n while (startPosition < value.length) {\n search.lastIndex = startPosition\n match = search.exec(value)\n endPosition =\n match && match.index !== undefined ? match.index : value.length\n code = value.charCodeAt(endPosition)\n\n if (!match) {\n buffer = value.slice(startPosition)\n break\n }\n\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3)\n atCarriageReturn = undefined\n } else {\n if (atCarriageReturn) {\n chunks.push(-5)\n atCarriageReturn = undefined\n }\n\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition))\n column += endPosition - startPosition\n }\n\n switch (code) {\n case 0: {\n chunks.push(65533)\n column++\n break\n }\n\n case 9: {\n next = Math.ceil(column / 4) * 4\n chunks.push(-2)\n\n while (column++ < next) chunks.push(-1)\n\n break\n }\n\n case 10: {\n chunks.push(-4)\n column = 1\n break\n }\n\n default: {\n atCarriageReturn = true\n column = 1\n }\n }\n }\n\n startPosition = endPosition + 1\n }\n\n if (end) {\n if (atCarriageReturn) chunks.push(-5)\n if (buffer) chunks.push(buffer)\n chunks.push(null)\n }\n\n return chunks\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\nimport {subtokenize} from 'micromark-util-subtokenize'\n/**\n * @param {Array} events\n * @returns {Array}\n */\n\nexport function postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n\n return events\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n */\nexport function decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base)\n\n if (\n // C0 except for HT, LF, FF, CR, space\n code < 9 ||\n code === 11 ||\n (code > 13 && code < 32) || // Control character (DEL) of the basic block and C1 controls.\n (code > 126 && code < 160) || // Lone high surrogates and low surrogates.\n (code > 55295 && code < 57344) || // Noncharacters.\n (code > 64975 && code < 65008) ||\n (code & 65535) === 65535 ||\n (code & 65535) === 65534 || // Out of range\n code > 1114111\n ) {\n return '\\uFFFD'\n }\n\n return String.fromCharCode(code)\n}\n","import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n/**\n * Utility to decode markdown strings (which occur in places such as fenced\n * code info strings, destinations, labels, and titles).\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * @returns {string}\n */\n\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode)\n}\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\n\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1\n } // Reference.\n\n const head = $2.charCodeAt(0)\n\n if (head === 35) {\n const head = $2.charCodeAt(1)\n const hex = head === 120 || head === 88\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n }\n\n return decodeNamedCharacterReference($2) || $0\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').HTML} HTML\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Root | Content} Node\n * @typedef {Extract} Parent\n *\n * @typedef {Omit & {type: 'fragment', children: Array}} Fragment\n */\n\n/**\n * @callback Transform\n * Extra transform, to change the AST afterwards.\n * @param {Root} tree\n * Tree to transform.\n * @returns {Root | undefined | null | void}\n * New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n * Handle a token.\n * @param {CompileContext} this\n * Context.\n * @param {Token} token\n * Current token.\n * @returns {void}\n * Nothing.\n *\n * @typedef {Record} Handles\n * Token types mapping to handles\n *\n * @callback OnEnterError\n * Handle the case where the `right` token is open, but it is closed (by the\n * `left` token) or because we reached the end of the document.\n * @param {Omit} this\n * Context.\n * @param {Token | undefined} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {void}\n * Nothing.\n *\n * @callback OnExitError\n * Handle the case where the `right` token is open but it is closed by\n * exiting the `left` token.\n * @param {Omit} this\n * Context.\n * @param {Token} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {void}\n * Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n * Open token on the stack, with an optional error handler for when\n * that token isn’t closed properly.\n */\n\n/**\n * @typedef Config\n * Configuration.\n *\n * We have our defaults, but extensions will add more.\n * @property {Array} canContainEols\n * Token types where line endings are used.\n * @property {Handles} enter\n * Opening handles.\n * @property {Handles} exit\n * Closing handles.\n * @property {Array} transforms\n * Tree transforms.\n *\n * @typedef {Partial} Extension\n * Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n * mdast compiler context.\n * @property {Array} stack\n * Stack of nodes.\n * @property {Array} tokenStack\n * Stack of tokens.\n * @property {(key: Key) => CompileData[Key]} getData\n * Get data from the key/value store.\n * @property {(key: Key, value?: CompileData[Key]) => void} setData\n * Set data into the key/value store.\n * @property {(this: CompileContext) => void} buffer\n * Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n * Stop capturing and access the output data.\n * @property {(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter\n * Enter a token.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit\n * Exit a token.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n * Get the string value of a token.\n * @property {Config} config\n * Configuration.\n *\n * @typedef FromMarkdownOptions\n * Configuration for how to build mdast.\n * @property {Array> | null | undefined} [mdastExtensions]\n * Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n * Configuration.\n */\n\n// To do: micromark: create a registry of tokens?\n// To do: next major: don’t return given `Node` from `enter`.\n// To do: next major: remove setter/getter.\n\nimport {toString} from 'mdast-util-to-string'\nimport {parse} from 'micromark/lib/parse.js'\nimport {preprocess} from 'micromark/lib/preprocess.js'\nimport {postprocess} from 'micromark/lib/postprocess.js'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nimport {decodeString} from 'micromark-util-decode-string'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {stringifyPosition} from 'unist-util-stringify-position'\nconst own = {}.hasOwnProperty\n\n/**\n * @param value\n * Markdown to parse.\n * @param encoding\n * Character encoding for when `value` is `Buffer`.\n * @param options\n * Configuration.\n * @returns\n * mdast tree.\n */\nexport const fromMarkdown =\n /**\n * @type {(\n * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) &\n * ((value: Value, options?: Options | null | undefined) => Root)\n * )}\n */\n\n /**\n * @param {Value} value\n * @param {Encoding | Options | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n */\n function (value, encoding, options) {\n if (typeof encoding !== 'string') {\n options = encoding\n encoding = undefined\n }\n return compiler(options)(\n postprocess(\n parse(options).document().write(preprocess()(value, encoding, true))\n )\n )\n }\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n }\n configure(config, (options || {}).mdastExtensions || [])\n\n /** @type {CompileData} */\n const data = {}\n return compile\n\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n function compile(events) {\n /** @type {Root} */\n let tree = {\n type: 'root',\n children: []\n }\n /** @type {Omit} */\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n setData,\n getData\n }\n /** @type {Array} */\n const listStack = []\n let index = -1\n while (++index < events.length) {\n // We preprocess lists to add `listItem` tokens, and to infer whether\n // items the list itself are spread out.\n if (\n events[index][1].type === 'listOrdered' ||\n events[index][1].type === 'listUnordered'\n ) {\n if (events[index][0] === 'enter') {\n listStack.push(index)\n } else {\n const tail = listStack.pop()\n index = prepareList(events, tail, index)\n }\n }\n }\n index = -1\n while (++index < events.length) {\n const handler = config[events[index][0]]\n if (own.call(handler, events[index][1].type)) {\n handler[events[index][1].type].call(\n Object.assign(\n {\n sliceSerialize: events[index][2].sliceSerialize\n },\n context\n ),\n events[index][1]\n )\n }\n }\n\n // Handle tokens still being open.\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1]\n const handler = tail[1] || defaultOnError\n handler.call(context, undefined, tail[0])\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(\n events.length > 0\n ? events[0][1].start\n : {\n line: 1,\n column: 1,\n offset: 0\n }\n ),\n end: point(\n events.length > 0\n ? events[events.length - 2][1].end\n : {\n line: 1,\n column: 1,\n offset: 0\n }\n )\n }\n\n // Call transforms.\n index = -1\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree\n }\n return tree\n }\n\n /**\n * @param {Array} events\n * @param {number} start\n * @param {number} length\n * @returns {number}\n */\n function prepareList(events, start, length) {\n let index = start - 1\n let containerBalance = -1\n let listSpread = false\n /** @type {Token | undefined} */\n let listItem\n /** @type {number | undefined} */\n let lineIndex\n /** @type {number | undefined} */\n let firstBlankLineIndex\n /** @type {boolean | undefined} */\n let atMarker\n while (++index <= length) {\n const event = events[index]\n if (\n event[1].type === 'listUnordered' ||\n event[1].type === 'listOrdered' ||\n event[1].type === 'blockQuote'\n ) {\n if (event[0] === 'enter') {\n containerBalance++\n } else {\n containerBalance--\n }\n atMarker = undefined\n } else if (event[1].type === 'lineEndingBlank') {\n if (event[0] === 'enter') {\n if (\n listItem &&\n !atMarker &&\n !containerBalance &&\n !firstBlankLineIndex\n ) {\n firstBlankLineIndex = index\n }\n atMarker = undefined\n }\n } else if (\n event[1].type === 'linePrefix' ||\n event[1].type === 'listItemValue' ||\n event[1].type === 'listItemMarker' ||\n event[1].type === 'listItemPrefix' ||\n event[1].type === 'listItemPrefixWhitespace'\n ) {\n // Empty.\n } else {\n atMarker = undefined\n }\n if (\n (!containerBalance &&\n event[0] === 'enter' &&\n event[1].type === 'listItemPrefix') ||\n (containerBalance === -1 &&\n event[0] === 'exit' &&\n (event[1].type === 'listUnordered' ||\n event[1].type === 'listOrdered'))\n ) {\n if (listItem) {\n let tailIndex = index\n lineIndex = undefined\n while (tailIndex--) {\n const tailEvent = events[tailIndex]\n if (\n tailEvent[1].type === 'lineEnding' ||\n tailEvent[1].type === 'lineEndingBlank'\n ) {\n if (tailEvent[0] === 'exit') continue\n if (lineIndex) {\n events[lineIndex][1].type = 'lineEndingBlank'\n listSpread = true\n }\n tailEvent[1].type = 'lineEnding'\n lineIndex = tailIndex\n } else if (\n tailEvent[1].type === 'linePrefix' ||\n tailEvent[1].type === 'blockQuotePrefix' ||\n tailEvent[1].type === 'blockQuotePrefixWhitespace' ||\n tailEvent[1].type === 'blockQuoteMarker' ||\n tailEvent[1].type === 'listItemIndent'\n ) {\n // Empty\n } else {\n break\n }\n }\n if (\n firstBlankLineIndex &&\n (!lineIndex || firstBlankLineIndex < lineIndex)\n ) {\n listItem._spread = true\n }\n\n // Fix position.\n listItem.end = Object.assign(\n {},\n lineIndex ? events[lineIndex][1].start : event[1].end\n )\n events.splice(lineIndex || index, 0, ['exit', listItem, event[2]])\n index++\n length++\n }\n\n // Create a new list item.\n if (event[1].type === 'listItemPrefix') {\n listItem = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n }\n // @ts-expect-error: `listItem` is most definitely defined, TS...\n events.splice(index, 0, ['enter', listItem, event[2]])\n index++\n length++\n firstBlankLineIndex = undefined\n atMarker = true\n }\n }\n }\n events[start][1]._spread = listSpread\n return length\n }\n\n /**\n * Set data.\n *\n * @template {keyof CompileData} Key\n * Field type.\n * @param {Key} key\n * Key of field.\n * @param {CompileData[Key]} [value]\n * New value.\n * @returns {void}\n * Nothing.\n */\n function setData(key, value) {\n data[key] = value\n }\n\n /**\n * Get data.\n *\n * @template {keyof CompileData} Key\n * Field type.\n * @param {Key} key\n * Key of field.\n * @returns {CompileData[Key]}\n * Value.\n */\n function getData(key) {\n return data[key]\n }\n\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Node} create\n * Create a node.\n * @param {Handle} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function opener(create, and) {\n return open\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {void}\n */\n function open(token) {\n enter.call(this, create(token), token)\n if (and) and.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * @returns {void}\n */\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n })\n }\n\n /**\n * @template {Node} Kind\n * Node type.\n * @this {CompileContext}\n * Context.\n * @param {Kind} node\n * Node to enter.\n * @param {Token} token\n * Corresponding token.\n * @param {OnEnterError | undefined} [errorHandler]\n * Handle the case where this token is open, but it is closed by something else.\n * @returns {Kind}\n * The given node.\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1]\n // @ts-expect-error: Assume `Node` can exist as a child of `parent`.\n parent.children.push(node)\n this.stack.push(node)\n this.tokenStack.push([token, errorHandler])\n // @ts-expect-error: `end` will be patched later.\n node.position = {\n start: point(token.start)\n }\n return node\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function closer(and) {\n return close\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {void}\n */\n function close(token) {\n if (and) and.call(this, token)\n exit.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * Context.\n * @param {Token} token\n * Corresponding token.\n * @param {OnExitError | undefined} [onExitError]\n * Handle the case where another token is open.\n * @returns {Node}\n * The closed node.\n */\n function exit(token, onExitError) {\n const node = this.stack.pop()\n const open = this.tokenStack.pop()\n if (!open) {\n throw new Error(\n 'Cannot close `' +\n token.type +\n '` (' +\n stringifyPosition({\n start: token.start,\n end: token.end\n }) +\n '): it’s not open'\n )\n } else if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0])\n } else {\n const handler = open[1] || defaultOnError\n handler.call(this, token, open[0])\n }\n }\n node.position.end = point(token.end)\n return node\n }\n\n /**\n * @this {CompileContext}\n * @returns {string}\n */\n function resume() {\n return toString(this.stack.pop())\n }\n\n //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistordered() {\n setData('expectingFirstListItemValue', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (getData('expectingFirstListItemValue')) {\n const ancestor = this.stack[this.stack.length - 2]\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10)\n setData('expectingFirstListItemValue')\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfenceinfo() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.lang = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfencemeta() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.meta = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (getData('flowCodeInside')) return\n this.buffer()\n setData('flowCodeInside', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefenced() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n setData('flowCodeInside')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodeindented() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitionlabelstring(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.label = label\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiontitlestring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.title = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiondestinationstring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.url = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1]\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length\n node.depth = depth\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadingtext() {\n setData('setextHeadingSlurpLineEnding', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1]\n node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n setData('setextHeadingSlurpLineEnding')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1]\n let tail = node.children[node.children.length - 1]\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text()\n // @ts-expect-error: we’ll add `end` later.\n tail.position = {\n start: point(token.start)\n }\n // @ts-expect-error: Assume `parent` accepts `text`.\n node.children.push(tail)\n }\n this.stack.push(tail)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitdata(token) {\n const tail = this.stack.pop()\n tail.value += this.sliceSerialize(token)\n tail.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1]\n // If we’re at a hard break, include the line ending in there.\n if (getData('atHardBreak')) {\n const tail = context.children[context.children.length - 1]\n tail.position.end = point(token.end)\n setData('atHardBreak')\n return\n }\n if (\n !getData('setextHeadingSlurpLineEnding') &&\n config.canContainEols.includes(context.type)\n ) {\n onenterdata.call(this, token)\n onexitdata.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithardbreak() {\n setData('atHardBreak', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmlflow() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmltext() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcodetext() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1]\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n // To do: clean.\n if (getData('inReference')) {\n /** @type {ReferenceType} */\n const referenceType = getData('referenceType') || 'shortcut'\n node.type += 'Reference'\n // @ts-expect-error: mutate.\n node.referenceType = referenceType\n // @ts-expect-error: mutate.\n delete node.url\n delete node.title\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier\n // @ts-expect-error: mutate.\n delete node.label\n }\n setData('referenceType')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1]\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n // To do: clean.\n if (getData('inReference')) {\n /** @type {ReferenceType} */\n const referenceType = getData('referenceType') || 'shortcut'\n node.type += 'Reference'\n // @ts-expect-error: mutate.\n node.referenceType = referenceType\n // @ts-expect-error: mutate.\n delete node.url\n delete node.title\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier\n // @ts-expect-error: mutate.\n delete node.label\n }\n setData('referenceType')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token)\n const ancestor = this.stack[this.stack.length - 2]\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n ancestor.label = decodeString(string)\n // @ts-expect-error: same as above.\n ancestor.identifier = normalizeIdentifier(string).toLowerCase()\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1]\n const value = this.resume()\n const node = this.stack[this.stack.length - 1]\n // Assume a reference.\n setData('inReference', true)\n if (node.type === 'link') {\n /** @type {Array} */\n // @ts-expect-error: Assume static phrasing content.\n const children = fragment.children\n node.children = children\n } else {\n node.alt = value\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcedestinationstring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.url = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcetitlestring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.title = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresource() {\n setData('inReference')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n setData('referenceType', 'collapsed')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitreferencestring(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n node.label = label\n // @ts-expect-error: same as above.\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n setData('referenceType', 'full')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n setData('characterReferenceType', token.type)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token)\n const type = getData('characterReferenceType')\n /** @type {string} */\n let value\n if (type) {\n value = decodeNumericCharacterReference(\n data,\n type === 'characterReferenceMarkerNumeric' ? 10 : 16\n )\n setData('characterReferenceType')\n } else {\n const result = decodeNamedCharacterReference(data)\n value = result\n }\n const tail = this.stack.pop()\n tail.value += value\n tail.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token)\n const node = this.stack[this.stack.length - 1]\n node.url = this.sliceSerialize(token)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkemail(token) {\n onexitdata.call(this, token)\n const node = this.stack[this.stack.length - 1]\n node.url = 'mailto:' + this.sliceSerialize(token)\n }\n\n //\n // Creaters.\n //\n\n /** @returns {Blockquote} */\n function blockQuote() {\n return {\n type: 'blockquote',\n children: []\n }\n }\n\n /** @returns {Code} */\n function codeFlow() {\n return {\n type: 'code',\n lang: null,\n meta: null,\n value: ''\n }\n }\n\n /** @returns {InlineCode} */\n function codeText() {\n return {\n type: 'inlineCode',\n value: ''\n }\n }\n\n /** @returns {Definition} */\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: ''\n }\n }\n\n /** @returns {Emphasis} */\n function emphasis() {\n return {\n type: 'emphasis',\n children: []\n }\n }\n\n /** @returns {Heading} */\n function heading() {\n // @ts-expect-error `depth` will be set later.\n return {\n type: 'heading',\n depth: undefined,\n children: []\n }\n }\n\n /** @returns {Break} */\n function hardBreak() {\n return {\n type: 'break'\n }\n }\n\n /** @returns {HTML} */\n function html() {\n return {\n type: 'html',\n value: ''\n }\n }\n\n /** @returns {Image} */\n function image() {\n return {\n type: 'image',\n title: null,\n url: '',\n alt: null\n }\n }\n\n /** @returns {Link} */\n function link() {\n return {\n type: 'link',\n title: null,\n url: '',\n children: []\n }\n }\n\n /**\n * @param {Token} token\n * @returns {List}\n */\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: []\n }\n }\n\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: []\n }\n }\n\n /** @returns {Paragraph} */\n function paragraph() {\n return {\n type: 'paragraph',\n children: []\n }\n }\n\n /** @returns {Strong} */\n function strong() {\n return {\n type: 'strong',\n children: []\n }\n }\n\n /** @returns {Text} */\n function text() {\n return {\n type: 'text',\n value: ''\n }\n }\n\n /** @returns {ThematicBreak} */\n function thematicBreak() {\n return {\n type: 'thematicBreak'\n }\n }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\nfunction point(d) {\n return {\n line: d.line,\n column: d.column,\n offset: d.offset\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Array>} extensions\n * @returns {void}\n */\nfunction configure(combined, extensions) {\n let index = -1\n while (++index < extensions.length) {\n const value = extensions[index]\n if (Array.isArray(value)) {\n configure(combined, value)\n } else {\n extension(combined, value)\n }\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {void}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key\n for (key in extension) {\n if (own.call(extension, key)) {\n if (key === 'canContainEols') {\n const right = extension[key]\n if (right) {\n combined[key].push(...right)\n }\n } else if (key === 'transforms') {\n const right = extension[key]\n if (right) {\n combined[key].push(...right)\n }\n } else if (key === 'enter' || key === 'exit') {\n const right = extension[key]\n if (right) {\n Object.assign(combined[key], right)\n }\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error(\n 'Cannot close `' +\n left.type +\n '` (' +\n stringifyPosition({\n start: left.start,\n end: left.end\n }) +\n '): a different token (`' +\n right.type +\n '`, ' +\n stringifyPosition({\n start: right.start,\n end: right.end\n }) +\n ') is open'\n )\n } else {\n throw new Error(\n 'Cannot close document, a token (`' +\n right.type +\n '`, ' +\n stringifyPosition({\n start: right.start,\n end: right.end\n }) +\n ') is still open'\n )\n }\n}\n","import { l as log, H as decodeEntities } from \"./mermaid-a98f434b.js\";\nimport { fromMarkdown } from \"mdast-util-from-markdown\";\nimport { dedent } from \"ts-dedent\";\nfunction preprocessMarkdown(markdown) {\n const withoutMultipleNewlines = markdown.replace(/\\n{2,}/g, \"\\n\");\n const withoutExtraSpaces = dedent(withoutMultipleNewlines);\n return withoutExtraSpaces;\n}\nfunction markdownToLines(markdown) {\n const preprocessedMarkdown = preprocessMarkdown(markdown);\n const { children } = fromMarkdown(preprocessedMarkdown);\n const lines = [[]];\n let currentLine = 0;\n function processNode(node, parentType = \"normal\") {\n if (node.type === \"text\") {\n const textLines = node.value.split(\"\\n\");\n textLines.forEach((textLine, index) => {\n if (index !== 0) {\n currentLine++;\n lines.push([]);\n }\n textLine.split(\" \").forEach((word) => {\n if (word) {\n lines[currentLine].push({ content: word, type: parentType });\n }\n });\n });\n } else if (node.type === \"strong\" || node.type === \"emphasis\") {\n node.children.forEach((contentNode) => {\n processNode(contentNode, node.type);\n });\n }\n }\n children.forEach((treeNode) => {\n if (treeNode.type === \"paragraph\") {\n treeNode.children.forEach((contentNode) => {\n processNode(contentNode);\n });\n }\n });\n return lines;\n}\nfunction markdownToHTML(markdown) {\n const { children } = fromMarkdown(markdown);\n function output(node) {\n if (node.type === \"text\") {\n return node.value.replace(/\\n/g, \"
\");\n } else if (node.type === \"strong\") {\n return `${node.children.map(output).join(\"\")}`;\n } else if (node.type === \"emphasis\") {\n return `${node.children.map(output).join(\"\")}`;\n } else if (node.type === \"paragraph\") {\n return `${node.children.map(output).join(\"\")}
`;\n }\n return `Unsupported markdown: ${node.type}`;\n }\n return children.map(output).join(\"\");\n}\nfunction splitTextToChars(text) {\n if (Intl.Segmenter) {\n return [...new Intl.Segmenter().segment(text)].map((s) => s.segment);\n }\n return [...text];\n}\nfunction splitWordToFitWidth(checkFit, word) {\n const characters = splitTextToChars(word.content);\n return splitWordToFitWidthRecursion(checkFit, [], characters, word.type);\n}\nfunction splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) {\n if (remainingChars.length === 0) {\n return [\n { content: usedChars.join(\"\"), type },\n { content: \"\", type }\n ];\n }\n const [nextChar, ...rest] = remainingChars;\n const newWord = [...usedChars, nextChar];\n if (checkFit([{ content: newWord.join(\"\"), type }])) {\n return splitWordToFitWidthRecursion(checkFit, newWord, rest, type);\n }\n if (usedChars.length === 0 && nextChar) {\n usedChars.push(nextChar);\n remainingChars.shift();\n }\n return [\n { content: usedChars.join(\"\"), type },\n { content: remainingChars.join(\"\"), type }\n ];\n}\nfunction splitLineToFitWidth(line, checkFit) {\n if (line.some(({ content }) => content.includes(\"\\n\"))) {\n throw new Error(\"splitLineToFitWidth does not support newlines in the line\");\n }\n return splitLineToFitWidthRecursion(line, checkFit);\n}\nfunction splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) {\n if (words.length === 0) {\n if (newLine.length > 0) {\n lines.push(newLine);\n }\n return lines.length > 0 ? lines : [];\n }\n let joiner = \"\";\n if (words[0].content === \" \") {\n joiner = \" \";\n words.shift();\n }\n const nextWord = words.shift() ?? { content: \" \", type: \"normal\" };\n const lineWithNextWord = [...newLine];\n if (joiner !== \"\") {\n lineWithNextWord.push({ content: joiner, type: \"normal\" });\n }\n lineWithNextWord.push(nextWord);\n if (checkFit(lineWithNextWord)) {\n return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord);\n }\n if (newLine.length > 0) {\n lines.push(newLine);\n words.unshift(nextWord);\n } else if (nextWord.content) {\n const [line, rest] = splitWordToFitWidth(checkFit, nextWord);\n lines.push([line]);\n if (rest.content) {\n words.unshift(rest);\n }\n }\n return splitLineToFitWidthRecursion(words, checkFit, lines);\n}\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\nfunction addHtmlSpan(element, node, width, classes, addBackground = false) {\n const fo = element.append(\"foreignObject\");\n const div = fo.append(\"xhtml:div\");\n const label = node.label;\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n div.html(\n `\n \" + label + \"\"\n );\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"table-cell\");\n div.style(\"white-space\", \"nowrap\");\n div.style(\"max-width\", width + \"px\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n if (addBackground) {\n div.attr(\"class\", \"labelBkg\");\n }\n let bbox = div.node().getBoundingClientRect();\n if (bbox.width === width) {\n div.style(\"display\", \"table\");\n div.style(\"white-space\", \"break-spaces\");\n div.style(\"width\", width + \"px\");\n bbox = div.node().getBoundingClientRect();\n }\n fo.style(\"width\", bbox.width);\n fo.style(\"height\", bbox.height);\n return fo.node();\n}\nfunction createTspan(textElement, lineIndex, lineHeight) {\n return textElement.append(\"tspan\").attr(\"class\", \"text-outer-tspan\").attr(\"x\", 0).attr(\"y\", lineIndex * lineHeight - 0.1 + \"em\").attr(\"dy\", lineHeight + \"em\");\n}\nfunction computeWidthOfText(parentNode, lineHeight, line) {\n const testElement = parentNode.append(\"text\");\n const testSpan = createTspan(testElement, 1, lineHeight);\n updateTextContentAndStyles(testSpan, line);\n const textLength = testSpan.node().getComputedTextLength();\n testElement.remove();\n return textLength;\n}\nfunction createFormattedText(width, g, structuredText, addBackground = false) {\n const lineHeight = 1.1;\n const labelGroup = g.append(\"g\");\n const bkg = labelGroup.insert(\"rect\").attr(\"class\", \"background\");\n const textElement = labelGroup.append(\"text\").attr(\"y\", \"-10.1\");\n let lineIndex = 0;\n for (const line of structuredText) {\n const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width;\n const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth);\n for (const preparedLine of linesUnderWidth) {\n const tspan = createTspan(textElement, lineIndex, lineHeight);\n updateTextContentAndStyles(tspan, preparedLine);\n lineIndex++;\n }\n }\n if (addBackground) {\n const bbox = textElement.node().getBBox();\n const padding = 2;\n bkg.attr(\"x\", -padding).attr(\"y\", -padding).attr(\"width\", bbox.width + 2 * padding).attr(\"height\", bbox.height + 2 * padding);\n return labelGroup.node();\n } else {\n return textElement.node();\n }\n}\nfunction updateTextContentAndStyles(tspan, wrappedLine) {\n tspan.text(\"\");\n wrappedLine.forEach((word, index) => {\n const innerTspan = tspan.append(\"tspan\").attr(\"font-style\", word.type === \"emphasis\" ? \"italic\" : \"normal\").attr(\"class\", \"text-inner-tspan\").attr(\"font-weight\", word.type === \"strong\" ? \"bold\" : \"normal\");\n if (index === 0) {\n innerTspan.text(word.content);\n } else {\n innerTspan.text(\" \" + word.content);\n }\n });\n}\nconst createText = (el, text = \"\", {\n style = \"\",\n isTitle = false,\n classes = \"\",\n useHtmlLabels = true,\n isNode = true,\n width = 200,\n addSvgBackground = false\n} = {}) => {\n log.info(\"createText\", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground);\n if (useHtmlLabels) {\n const htmlText = markdownToHTML(text);\n const node = {\n isNode,\n label: decodeEntities(htmlText).replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n ),\n labelStyle: style.replace(\"fill:\", \"color:\")\n };\n const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground);\n return vertexNode;\n } else {\n const structuredText = markdownToLines(text);\n const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground);\n return svgLabel;\n }\n};\nexport {\n createText as c\n};\n"],"names":["emptyOptions","toString","value","options","settings","includeImageAlt","includeHtml","one","node","all","values","result","index","splice","list","start","remove","items","end","chunkStart","parameters","push","hasOwnProperty","combineExtensions","extensions","syntaxExtension","extension","hook","left","right","code","constructs","existing","before","unicodePunctuationRegex","asciiAlpha","regexCheck","asciiDigit","asciiHexDigit","asciiAlphanumeric","asciiPunctuation","asciiAtext","asciiControl","markdownLineEndingOrSpace","markdownLineEnding","markdownSpace","unicodeWhitespace","unicodePunctuation","regex","check","factorySpace","effects","ok","type","max","limit","size","prefix","content","initializeContent","contentStart","afterContentStartConstruct","paragraphInitial","previous","lineStart","token","data","document","initializeDocument","containerConstruct","tokenizeContainer","self","stack","continued","childFlow","childToken","lineStartOffset","item","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","point","exitContainers","documentContinued","flowStart","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","eof","stream","seen","entry","nok","classifyCharacter","resolveAll","events","context","called","resolve","attention","tokenizeAttention","resolveAllAttention","open","group","text","openingSequence","closingSequence","use","nextEvents","offset","movePoint","attentionMarkers","marker","sequence","after","close","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","afterWhitespace","blockQuote","tokenizeBlockQuoteStart","tokenizeBlockQuoteContinuation","exit","state","characterEscape","tokenizeCharacterEscape","element","decodeNamedCharacterReference","characterReference","char","tokenizeCharacterReference","test","numeric","codeFenced","tokenizeCodeFenced","closingFenceConstruct","tokenizeClosingFence","nonLazyLine","tokenizeNonLazyLine","tail","initialPrefix","sizeOpen","sequenceOpen","infoOpen","openAfter","info","infoAfter","meta","contentContinue","closingSequenceStart","closingSequenceEnd","codeIndented","tokenizeCodeIndented","indentedContent","tokenizeIndentedContent","afterStartPrefix","afterPrefix","codeText","tokenizeCodeText","resolveCodeText","tailExitIndex","headEnterIndex","enter","gap","subtokenize","jumps","event","lineIndex","otherIndex","otherEvent","subevents","more","subcontent","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","current","adjust","breaks","slice","tokenizeContent","resolveContent","continuationConstruct","tokenizeContinuation","contentEnd","startLookahead","prefixed","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","destinationEnclosedBefore","destinationRaw","destinationEnclosed","destinationEnclosedEscape","destinationRawEscape","factoryLabel","markerType","atBreak","label","labelEscape","factoryTitle","atFirstTitleBreak","atTitleBreak","title","titleEscape","factoryWhitespace","normalizeIdentifier","definition","tokenizeDefinition","titleConstruct","tokenizeTitle","identifier","labelAfter","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","tokenizeHeadingAtx","resolveHeadingAtx","fenceOpenInside","headingBreak","htmlBlockNames","htmlRawNames","htmlFlow","tokenizeHtmlFlow","resolveToHtmlFlow","nextBlankConstruct","tokenizeNextBlank","kind","startTag","buffer","declarationStart","tagCloseStart","continuationDeclarationInside","tagName","commentOpenInside","cdataOpenInside","continuation","basicSelfClosing","completeAttributeNameBefore","completeClosingTagAfter","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCharacterDataInside","continuationAtLineEnding","htmlContinueStart","done","htmlLineEnd","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","declarationOpen","instruction","tagOpen","commentOpen","cdataOpen","declaration","commentStart","commentStartDash","comment","commentClose","atLineEnding","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","labelEnd","tokenizeLabelEnd","resolveToLabelEnd","resolveAllLabelEnd","resourceConstruct","tokenizeResource","fullReferenceConstruct","tokenizeFullReference","collapsedReferenceConstruct","tokenizeCollapsedReference","media","labelStart","defined","balanced","afterLabelEnd","destinationAfter","between","afterLabel","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","thematicBreak","tokenizeThematicBreak","tokenizeListStart","tokenizeListContinuation","tokenizeListEnd","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","initialSize","atMarker","inside","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","tokenizeSetextUnderline","resolveToSetextUnderline","heading","paragraph","flow","initializeFlow","initial","atBlankEnding","afterConstruct","resolver","createResolver","string","initializeFactory","field","initializeText","resolveAllLineSuffixes","notText","extraResolver","resolveAllText","chunks","bufferIndex","tabs","chunk","createTokenizer","parser","initialize","from","columnStart","resolveAllConstructs","consume","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","sliceStream","sliceSerialize","now","defineSkip","write","main","addResult","expandTabs","serializeChunks","sliceChunks","accountForPotentialSkip","chunkIndex","go","fields","construct","_","onreturn","bogusState","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","map","def","handleConstruct","store","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","restore","startIndex","startBufferIndex","endIndex","endBufferIndex","view","atTab","contentInitial","flowInitial","insideSpan","resolveText","disable","parse","defaultConstructs","create","creator","search","preprocess","column","atCarriageReturn","preprocessor","encoding","match","next","endPosition","postprocess","decodeNumericCharacterReference","base","characterEscapeOrReference","decodeString","decode","$0","$1","$2","head","hex","stringifyPosition","position","pos","own","fromMarkdown","compiler","config","opener","link","onenterdata","codeFlow","emphasis","hardBreak","html","image","listItem","onenterlistitemvalue","onenterlistordered","onenterreference","strong","closer","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","onexitdata","onexitcharacterreferencemarker","onexitcharacterreferencevalue","onexitcodefenced","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","onexitsetextheadinglinesequence","onexitsetextheadingtext","configure","compile","tree","resume","setData","getData","listStack","prepareList","handler","defaultOnError","length","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","key","and","errorHandler","onExitError","ancestor","depth","referenceType","fragment","children","d","combined","preprocessMarkdown","markdown","withoutMultipleNewlines","dedent","markdownToLines","preprocessedMarkdown","lines","currentLine","processNode","parentType","textLine","word","contentNode","treeNode","markdownToHTML","output","splitTextToChars","s","splitWordToFitWidth","checkFit","characters","splitWordToFitWidthRecursion","usedChars","remainingChars","nextChar","rest","newWord","splitLineToFitWidth","line","splitLineToFitWidthRecursion","words","newLine","joiner","nextWord","lineWithNextWord","applyStyle","dom","styleFn","addHtmlSpan","width","classes","addBackground","fo","div","labelClass","bbox","createTspan","textElement","lineHeight","computeWidthOfText","parentNode","testElement","testSpan","updateTextContentAndStyles","textLength","createFormattedText","g","structuredText","labelGroup","bkg","checkWidth","line2","linesUnderWidth","preparedLine","tspan","padding","wrappedLine","innerTspan","createText","el","style","isTitle","useHtmlLabels","isNode","addSvgBackground","log","decodeEntities"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51]}
\ No newline at end of file
diff --git a/docs/assets/css-variables.stories-06e8d010.js b/docs/assets/css-variables.stories-150cda98.js
similarity index 94%
rename from docs/assets/css-variables.stories-06e8d010.js
rename to docs/assets/css-variables.stories-150cda98.js
index 9c27c94b..9ad193c7 100644
--- a/docs/assets/css-variables.stories-06e8d010.js
+++ b/docs/assets/css-variables.stories-150cda98.js
@@ -1,4 +1,4 @@
-import{M as i}from"./chunk-S4VUQJ4A-36ba17aa.js";import{p as t,j as e}from"./jsx-runtime-6fa9561d.js";import{u as a}from"./index-173ee924.js";import"./iframe-892f1e35.js";import"../sb-preview/runtime.js";import"./index-28a69ec7.js";import"./_commonjsHelpers-de833af9.js";import"./index-d37d4223.js";import"./index-e04ae519.js";import"./index-356e4a49.js";function o(n){const s=Object.assign({p:"p",img:"img",h1:"h1",a:"a",code:"code",strong:"strong",blockquote:"blockquote",h2:"h2",pre:"pre"},a(),n.components);return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Theming/CSS variables",parameters:{...t}}),`
+import{M as i}from"./chunk-S4VUQJ4A-52f2cd1c.js";import{p as t,j as e}from"./jsx-runtime-6fa43933.js";import{u as a}from"./index-6236bb34.js";import"./iframe-33c7be2c.js";import"../sb-preview/runtime.js";import"./index-17bfd246.js";import"./_commonjsHelpers-de833af9.js";import"./index-d37d4223.js";import"./index-e04ae519.js";import"./index-356e4a49.js";function o(n){const s=Object.assign({p:"p",img:"img",h1:"h1",a:"a",code:"code",strong:"strong",blockquote:"blockquote",h2:"h2",pre:"pre"},a(),n.components);return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Theming/CSS variables",parameters:{...t}}),`
`,e.jsx(s.p,{children:e.jsx(s.img,{src:"https://graphics.thomsonreuters.com/style-assets/images/logos/reuters-graphics-logo/svg/graphics-logo-color-dark.svg",alt:""})}),`
`,e.jsx(s.h1,{id:"css-variables",children:"CSS variables"}),`
`,e.jsxs(s.p,{children:["The ",e.jsx(s.a,{href:"?path=/docs/components-theme--default",children:e.jsx(s.code,{children:"Theme"})})," component uses ",e.jsx(s.strong,{children:e.jsx(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties",target:"_blank",rel:"nofollow noopener noreferrer",children:"CSS variables"})})," to control major parts of your page's theme."]}),`
@@ -77,4 +77,4 @@ import{M as i}from"./chunk-S4VUQJ4A-36ba17aa.js";import{p as t,j as e}from"./jsx
`})})]})}function l(n={}){const{wrapper:s}=Object.assign({},a(),n.components);return s?e.jsx(s,{...n,children:e.jsx(o,{...n})}):o(n)}const c=()=>{throw new Error("Docs-only story")};c.parameters={docsOnly:!0};const r={title:"Theming/CSS variables",parameters:{...t},tags:["stories-mdx"],includeStories:["__page"]};r.parameters=r.parameters||{};r.parameters.docs={...r.parameters.docs||{},page:l};const y=["__page"];export{y as __namedExportsOrder,c as __page,r as default};
-//# sourceMappingURL=css-variables.stories-06e8d010.js.map
+//# sourceMappingURL=css-variables.stories-150cda98.js.map
diff --git a/docs/assets/css-variables.stories-06e8d010.js.map b/docs/assets/css-variables.stories-150cda98.js.map
similarity index 99%
rename from docs/assets/css-variables.stories-06e8d010.js.map
rename to docs/assets/css-variables.stories-150cda98.js.map
index 1d5634f9..d0749a95 100644
--- a/docs/assets/css-variables.stories-06e8d010.js.map
+++ b/docs/assets/css-variables.stories-150cda98.js.map
@@ -1 +1 @@
-{"version":3,"file":"css-variables.stories-06e8d010.js","sources":["../../src/docs/theming/css-variables.stories.mdx"],"sourcesContent":["import { Meta } from '@storybook/addon-docs';\nimport { parameters } from '$docs/utils/docsPage.js';\n\n\n\n\n\n# CSS variables\n\nThe [`Theme`](?path=/docs/components-theme--default) component uses **[CSS variables](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties)** to control major parts of your page's theme.\n\nAll other components in this library use those variables for styling basic colours and typography, helping keep our pages uniform and making it easier to customise the theme. CSS variables also allow our clients to easily change elements of our theme to match their brand.\n\nThis doc explains which variables are set and how you can use them in custom components you create.\n\n> **Note:** CSS variables do not currently affect [ai2svelte](https://github.com/reuters-graphics/ai2svelte/) graphics, so you should continue to make sure your colours match the theme of your page directly in Adobe Illustrator for those graphics.\n\n## Using CSS variables directly\n\nIf you're new to how CSS variables work, [here's a video](https://www.youtube.com/watch?v=PHO6TBq_auI) that does a decent job explaining what they are, how they work and why they're useful.\n\nYou can use any of the CSS variables the `Theme` component sets in your own code with the [`var()`](https://www.w3schools.com/css/css3_variables.asp) function.\n\n```svelte\nMy custom text
\n\n\n```\n\n## Customising variables\n\nYou can redefine any of the above CSS variables in the `` component. Read more in [the docs](/docs/theming-theme--custom-theme) and **use the [Theme builder](/docs/theming-theme-builder--docs)**.\n\n```svelte\n\n \n \n```\n\n## Adding extra variables\n\nYou can even add custom variables through the `Theme` component.\n\nFor example, let's say you want to define a border radius for some card elements on your page. You can add a custom property to the `theme` prop like this:\n\n```svelte\n\n \n \n```\n\n... and then access the CSS variable in your code like this:\n\n```svelte\n\n\n\n```\n\nUsing the `Theme` component for your own CSS variables helps unify important style values across a project. It also lets clients more easily customise those values for whatever matches their brand.\n\nYou can also change a variable's value based on some condition. For example, to set a smaller border radius on mobile screens, you might:\n\n```svelte\n\n\n \n\n 475 ? '22px' : '11px',\n },\n }}\"\n>\n \n \n```\n"],"names":["_createMdxContent","props","_components","_provideComponents","_jsxs","_Fragment","_jsx","Meta","parameters","MDXContent","MDXLayout","__page","componentMeta","__namedExportsOrder"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"css-variables.stories-150cda98.js","sources":["../../src/docs/theming/css-variables.stories.mdx"],"sourcesContent":["import { Meta } from '@storybook/addon-docs';\nimport { parameters } from '$docs/utils/docsPage.js';\n\n\n\n\n\n# CSS variables\n\nThe [`Theme`](?path=/docs/components-theme--default) component uses **[CSS variables](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties)** to control major parts of your page's theme.\n\nAll other components in this library use those variables for styling basic colours and typography, helping keep our pages uniform and making it easier to customise the theme. CSS variables also allow our clients to easily change elements of our theme to match their brand.\n\nThis doc explains which variables are set and how you can use them in custom components you create.\n\n> **Note:** CSS variables do not currently affect [ai2svelte](https://github.com/reuters-graphics/ai2svelte/) graphics, so you should continue to make sure your colours match the theme of your page directly in Adobe Illustrator for those graphics.\n\n## Using CSS variables directly\n\nIf you're new to how CSS variables work, [here's a video](https://www.youtube.com/watch?v=PHO6TBq_auI) that does a decent job explaining what they are, how they work and why they're useful.\n\nYou can use any of the CSS variables the `Theme` component sets in your own code with the [`var()`](https://www.w3schools.com/css/css3_variables.asp) function.\n\n```svelte\nMy custom text
\n\n\n```\n\n## Customising variables\n\nYou can redefine any of the above CSS variables in the `` component. Read more in [the docs](/docs/theming-theme--custom-theme) and **use the [Theme builder](/docs/theming-theme-builder--docs)**.\n\n```svelte\n\n \n \n```\n\n## Adding extra variables\n\nYou can even add custom variables through the `Theme` component.\n\nFor example, let's say you want to define a border radius for some card elements on your page. You can add a custom property to the `theme` prop like this:\n\n```svelte\n\n \n \n```\n\n... and then access the CSS variable in your code like this:\n\n```svelte\n\n\n\n```\n\nUsing the `Theme` component for your own CSS variables helps unify important style values across a project. It also lets clients more easily customise those values for whatever matches their brand.\n\nYou can also change a variable's value based on some condition. For example, to set a smaller border radius on mobile screens, you might:\n\n```svelte\n\n\n \n\n 475 ? '22px' : '11px',\n },\n }}\"\n>\n \n \n```\n"],"names":["_createMdxContent","props","_components","_provideComponents","_jsxs","_Fragment","_jsx","Meta","parameters","MDXContent","MDXLayout","__page","componentMeta","__namedExportsOrder"],"mappings":"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"}
\ No newline at end of file
diff --git a/docs/assets/cssVariables.stories-5028b528.js b/docs/assets/cssVariables.stories-99c20c9d.js
similarity index 86%
rename from docs/assets/cssVariables.stories-5028b528.js
rename to docs/assets/cssVariables.stories-99c20c9d.js
index a8d68670..29dd118f 100644
--- a/docs/assets/cssVariables.stories-5028b528.js
+++ b/docs/assets/cssVariables.stories-99c20c9d.js
@@ -1,4 +1,4 @@
-import{M as i}from"./chunk-S4VUQJ4A-36ba17aa.js";import{p as o,j as e}from"./jsx-runtime-6fa9561d.js";import{u as a}from"./index-173ee924.js";import"./iframe-892f1e35.js";import"../sb-preview/runtime.js";import"./index-28a69ec7.js";import"./_commonjsHelpers-de833af9.js";import"./index-d37d4223.js";import"./index-e04ae519.js";import"./index-356e4a49.js";function n(t){const s=Object.assign({p:"p",img:"img",h1:"h1",code:"code",a:"a",pre:"pre"},a(),t.components);return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Actions/cssVariables",parameters:{...o}}),`
+import{M as i}from"./chunk-S4VUQJ4A-52f2cd1c.js";import{p as o,j as e}from"./jsx-runtime-6fa43933.js";import{u as a}from"./index-6236bb34.js";import"./iframe-33c7be2c.js";import"../sb-preview/runtime.js";import"./index-17bfd246.js";import"./_commonjsHelpers-de833af9.js";import"./index-d37d4223.js";import"./index-e04ae519.js";import"./index-356e4a49.js";function n(t){const s=Object.assign({p:"p",img:"img",h1:"h1",code:"code",a:"a",pre:"pre"},a(),t.components);return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Actions/cssVariables",parameters:{...o}}),`
`,e.jsx(s.p,{children:e.jsx(s.img,{src:"https://graphics.thomsonreuters.com/style-assets/images/logos/reuters-graphics-logo/svg/graphics-logo-color-dark.svg",alt:""})}),`
`,e.jsx(s.h1,{id:"cssvariables",children:e.jsx(s.code,{children:"cssVariables"})}),`
`,e.jsxs(s.p,{children:["An action you can use to easily set ",e.jsx(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties",target:"_blank",rel:"nofollow noopener noreferrer",children:"CSS variables"})," on HTML elements. Useful for passing JavaScript values to your component SCSS like this:"]}),`
@@ -32,4 +32,4 @@ import{M as i}from"./chunk-S4VUQJ4A-36ba17aa.js";import{p as o,j as e}from"./jsx
}
`})})]})}function c(t={}){const{wrapper:s}=Object.assign({},a(),t.components);return s?e.jsx(s,{...t,children:e.jsx(n,{...t})}):n(t)}const l=()=>{throw new Error("Docs-only story")};l.parameters={docsOnly:!0};const r={title:"Actions/cssVariables",parameters:{...o},tags:["stories-mdx"],includeStories:["__page"]};r.parameters=r.parameters||{};r.parameters.docs={...r.parameters.docs||{},page:c};const b=["__page"];export{b as __namedExportsOrder,l as __page,r as default};
-//# sourceMappingURL=cssVariables.stories-5028b528.js.map
+//# sourceMappingURL=cssVariables.stories-99c20c9d.js.map
diff --git a/docs/assets/cssVariables.stories-5028b528.js.map b/docs/assets/cssVariables.stories-99c20c9d.js.map
similarity index 97%
rename from docs/assets/cssVariables.stories-5028b528.js.map
rename to docs/assets/cssVariables.stories-99c20c9d.js.map
index ef618a31..8efd791d 100644
--- a/docs/assets/cssVariables.stories-5028b528.js.map
+++ b/docs/assets/cssVariables.stories-99c20c9d.js.map
@@ -1 +1 @@
-{"version":3,"file":"cssVariables.stories-5028b528.js","sources":["../../src/actions/cssVariables/cssVariables.stories.mdx"],"sourcesContent":["import { Meta } from '@storybook/addon-docs';\nimport { parameters } from '$docs/utils/docsPage.js';\n\n\n\n\n\n# `cssVariables`\n\nAn action you can use to easily set [CSS variables](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties) on HTML elements. Useful for passing JavaScript values to your component SCSS like this:\n\n```svelte\n\n\n\n\n My text...
\n\n\n\n```\n"],"names":["_createMdxContent","props","_components","_provideComponents","_jsxs","_Fragment","_jsx","Meta","parameters","MDXContent","MDXLayout","__page","componentMeta","__namedExportsOrder"],"mappings":"mWAMA,SAASA,EAAkBC,EAAO,CAChC,MAAMC,EAAc,OAAO,OAAO,CAChC,EAAG,IACH,IAAK,MACL,GAAI,KACJ,KAAM,OACN,EAAG,IACH,IAAK,KACN,EAAEC,EAAoB,EAAEF,EAAM,UAAU,EACzC,OAAoBG,EAAAA,KAAMC,EAAAA,SAAW,CACnC,SAAU,CAAcC,EAAI,IAACC,EAAM,CACjC,MAAO,uBACP,WAAY,CACV,GAAGC,CACJ,CACF,CAAA,EAAG;AAAA,EAAmBF,MAAKJ,EAAY,EAAG,CACzC,SAAuBI,EAAAA,IAAKJ,EAAY,IAAK,CAC3C,IAAK,uHACL,IAAK,EACb,CAAO,CACF,CAAA,EAAG;AAAA,EAAmBI,MAAKJ,EAAY,GAAI,CAC1C,GAAI,eACJ,SAAuBI,EAAAA,IAAKJ,EAAY,KAAM,CAC5C,SAAU,cAClB,CAAO,CACF,CAAA,EAAG;AAAA,EAAmBE,OAAMF,EAAY,EAAG,CAC1C,SAAU,CAAC,uCAAqDI,MAAKJ,EAAY,EAAG,CAClF,KAAM,+EACN,OAAQ,SACR,IAAK,+BACL,SAAU,eACX,CAAA,EAAG,2FAA2F,CAChG,CAAA,EAAG;AAAA,EAAmBI,MAAKJ,EAAY,IAAK,CAC3C,SAAuBI,EAAAA,IAAKJ,EAAY,KAAM,CAC5C,UAAW,kBACX,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAClB,CAAO,CACP,CAAK,CAAC,CACN,CAAG,CACH,CACA,SAASO,EAAWR,EAAQ,GAAI,CAC9B,KAAM,CACJ,QAASS,CACb,EAAM,OAAO,OAAO,CAAE,EAAEP,EAAkB,EAAIF,EAAM,UAAU,EAC5D,OAAOS,EAAyBJ,EAAI,IAACI,EAAW,CAC9C,GAAGT,EACH,SAAuBK,EAAI,IAACN,EAAmB,CAC7C,GAAGC,CACT,CAAK,CACL,CAAG,EAAID,EAAkBC,CAAK,CAC9B,CAEY,MAACU,EAAS,IAAM,CAC1B,MAAM,IAAI,MAAM,iBAAiB,CACnC,EACAA,EAAO,WAAa,CAClB,SAAU,EACZ,EACK,MAACC,EAAgB,CACpB,MAAO,uBACP,WAAY,CACV,GAAGJ,CACJ,EACD,KAAM,CAAC,aAAa,EACpB,eAAgB,CAAC,QAAQ,CAC3B,EACAI,EAAc,WAAaA,EAAc,YAAc,GACvDA,EAAc,WAAW,KAAO,CAC9B,GAAIA,EAAc,WAAW,MAAQ,GACrC,KAAMH,CACR,EAC4B,MAAAI,EAAA,CAAA,QAAA"}
\ No newline at end of file
+{"version":3,"file":"cssVariables.stories-99c20c9d.js","sources":["../../src/actions/cssVariables/cssVariables.stories.mdx"],"sourcesContent":["import { Meta } from '@storybook/addon-docs';\nimport { parameters } from '$docs/utils/docsPage.js';\n\n\n\n\n\n# `cssVariables`\n\nAn action you can use to easily set [CSS variables](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties) on HTML elements. Useful for passing JavaScript values to your component SCSS like this:\n\n```svelte\n\n\n\n\n My text...
\n\n\n\n```\n"],"names":["_createMdxContent","props","_components","_provideComponents","_jsxs","_Fragment","_jsx","Meta","parameters","MDXContent","MDXLayout","__page","componentMeta","__namedExportsOrder"],"mappings":"mWAMA,SAASA,EAAkBC,EAAO,CAChC,MAAMC,EAAc,OAAO,OAAO,CAChC,EAAG,IACH,IAAK,MACL,GAAI,KACJ,KAAM,OACN,EAAG,IACH,IAAK,KACN,EAAEC,EAAoB,EAAEF,EAAM,UAAU,EACzC,OAAoBG,EAAAA,KAAMC,EAAAA,SAAW,CACnC,SAAU,CAAcC,EAAI,IAACC,EAAM,CACjC,MAAO,uBACP,WAAY,CACV,GAAGC,CACJ,CACF,CAAA,EAAG;AAAA,EAAmBF,MAAKJ,EAAY,EAAG,CACzC,SAAuBI,EAAAA,IAAKJ,EAAY,IAAK,CAC3C,IAAK,uHACL,IAAK,EACb,CAAO,CACF,CAAA,EAAG;AAAA,EAAmBI,MAAKJ,EAAY,GAAI,CAC1C,GAAI,eACJ,SAAuBI,EAAAA,IAAKJ,EAAY,KAAM,CAC5C,SAAU,cAClB,CAAO,CACF,CAAA,EAAG;AAAA,EAAmBE,OAAMF,EAAY,EAAG,CAC1C,SAAU,CAAC,uCAAqDI,MAAKJ,EAAY,EAAG,CAClF,KAAM,+EACN,OAAQ,SACR,IAAK,+BACL,SAAU,eACX,CAAA,EAAG,2FAA2F,CAChG,CAAA,EAAG;AAAA,EAAmBI,MAAKJ,EAAY,IAAK,CAC3C,SAAuBI,EAAAA,IAAKJ,EAAY,KAAM,CAC5C,UAAW,kBACX,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAClB,CAAO,CACP,CAAK,CAAC,CACN,CAAG,CACH,CACA,SAASO,EAAWR,EAAQ,GAAI,CAC9B,KAAM,CACJ,QAASS,CACb,EAAM,OAAO,OAAO,CAAE,EAAEP,EAAkB,EAAIF,EAAM,UAAU,EAC5D,OAAOS,EAAyBJ,EAAI,IAACI,EAAW,CAC9C,GAAGT,EACH,SAAuBK,EAAI,IAACN,EAAmB,CAC7C,GAAGC,CACT,CAAK,CACL,CAAG,EAAID,EAAkBC,CAAK,CAC9B,CAEY,MAACU,EAAS,IAAM,CAC1B,MAAM,IAAI,MAAM,iBAAiB,CACnC,EACAA,EAAO,WAAa,CAClB,SAAU,EACZ,EACK,MAACC,EAAgB,CACpB,MAAO,uBACP,WAAY,CACV,GAAGJ,CACJ,EACD,KAAM,CAAC,aAAa,EACpB,eAAgB,CAAC,QAAQ,CAC3B,EACAI,EAAc,WAAaA,EAAc,YAAc,GACvDA,EAAc,WAAW,KAAO,CAC9B,GAAIA,EAAc,WAAW,MAAQ,GACrC,KAAMH,CACR,EAC4B,MAAAI,EAAA,CAAA,QAAA"}
\ No newline at end of file
diff --git a/docs/assets/customising-with-scss.stories-c7358f37.js b/docs/assets/customising-with-scss.stories-de0c54e7.js
similarity index 94%
rename from docs/assets/customising-with-scss.stories-c7358f37.js
rename to docs/assets/customising-with-scss.stories-de0c54e7.js
index c72c4ed3..453cd73e 100644
--- a/docs/assets/customising-with-scss.stories-c7358f37.js
+++ b/docs/assets/customising-with-scss.stories-de0c54e7.js
@@ -1,4 +1,4 @@
-import{M as a}from"./chunk-S4VUQJ4A-36ba17aa.js";import{p as o,j as e}from"./jsx-runtime-6fa9561d.js";import{u as i}from"./index-173ee924.js";import"./iframe-892f1e35.js";import"../sb-preview/runtime.js";import"./index-28a69ec7.js";import"./_commonjsHelpers-de833af9.js";import"./index-d37d4223.js";import"./index-e04ae519.js";import"./index-356e4a49.js";const c=""+new URL("scss-start-2a80c71b.png",import.meta.url).href,h=""+new URL("scss-highlight-be092e13.png",import.meta.url).href,l=""+new URL("scss-inspector-ad61f9f6.png",import.meta.url).href,d=""+new URL("scss-change-08eee85b.png",import.meta.url).href,p=""+new URL("scss-test-248bae69.png",import.meta.url).href,m=""+new URL("scss-winning-4f1df231.png",import.meta.url).href;function r(t){const s=Object.assign({p:"p",img:"img",h1:"h1",h2:"h2",code:"code",em:"em",pre:"pre",h4:"h4",strong:"strong"},i(),t.components);return e.jsxs(e.Fragment,{children:[e.jsx(a,{title:"Guides/Customising components with SCSS",parameters:{...o}}),`
+import{M as a}from"./chunk-S4VUQJ4A-52f2cd1c.js";import{p as o,j as e}from"./jsx-runtime-6fa43933.js";import{u as i}from"./index-6236bb34.js";import"./iframe-33c7be2c.js";import"../sb-preview/runtime.js";import"./index-17bfd246.js";import"./_commonjsHelpers-de833af9.js";import"./index-d37d4223.js";import"./index-e04ae519.js";import"./index-356e4a49.js";const c=""+new URL("scss-start-2a80c71b.png",import.meta.url).href,h=""+new URL("scss-highlight-be092e13.png",import.meta.url).href,l=""+new URL("scss-inspector-ad61f9f6.png",import.meta.url).href,d=""+new URL("scss-change-08eee85b.png",import.meta.url).href,p=""+new URL("scss-test-248bae69.png",import.meta.url).href,m=""+new URL("scss-winning-4f1df231.png",import.meta.url).href;function r(t){const s=Object.assign({p:"p",img:"img",h1:"h1",h2:"h2",code:"code",em:"em",pre:"pre",h4:"h4",strong:"strong"},i(),t.components);return e.jsxs(e.Fragment,{children:[e.jsx(a,{title:"Guides/Customising components with SCSS",parameters:{...o}}),`
`,e.jsx(s.p,{children:e.jsx(s.img,{src:"https://graphics.thomsonreuters.com/style-assets/images/logos/reuters-graphics-logo/svg/graphics-logo-color-dark.svg",alt:""})}),`
`,e.jsx(s.h1,{id:"customising-components-with-scss",children:"Customising components with SCSS"}),`
`,e.jsx(s.p,{children:"One of the most powerful ways to customise components isn't props or, even, Svelte."}),`
@@ -40,4 +40,4 @@ import{M as a}from"./chunk-S4VUQJ4A-36ba17aa.js";import{p as o,j as e}from"./jsx
`,e.jsx(s.p,{children:"Done!"}),`
`,e.jsxs(s.h4,{id:"can-i-just-important-it",children:["Can I just... ",e.jsx(s.code,{children:"important!"})," it?"]}),`
`,e.jsxs(s.p,{children:["Yep, as a last result. Just be sure your style rule is ",e.jsx(s.strong,{children:"very specific"})," and not something generic that might apply to other elements like ",e.jsx(s.code,{children:"div.container"}),"."]})]})}function g(t={}){const{wrapper:s}=Object.assign({},i(),t.components);return s?e.jsx(s,{...t,children:e.jsx(r,{...t})}):r(t)}const u=()=>{throw new Error("Docs-only story")};u.parameters={docsOnly:!0};const n={title:"Guides/Customising components with SCSS",parameters:{...o},tags:["stories-mdx"],includeStories:["__page"]};n.parameters=n.parameters||{};n.parameters.docs={...n.parameters.docs||{},page:g};const I=["__page"];export{I as __namedExportsOrder,u as __page,n as default};
-//# sourceMappingURL=customising-with-scss.stories-c7358f37.js.map
+//# sourceMappingURL=customising-with-scss.stories-de0c54e7.js.map
diff --git a/docs/assets/customising-with-scss.stories-c7358f37.js.map b/docs/assets/customising-with-scss.stories-de0c54e7.js.map
similarity index 99%
rename from docs/assets/customising-with-scss.stories-c7358f37.js.map
rename to docs/assets/customising-with-scss.stories-de0c54e7.js.map
index ad249d64..23e06921 100644
--- a/docs/assets/customising-with-scss.stories-c7358f37.js.map
+++ b/docs/assets/customising-with-scss.stories-de0c54e7.js.map
@@ -1 +1 @@
-{"version":3,"file":"customising-with-scss.stories-c7358f37.js","sources":["../../src/docs/guides/imgs/scss-start.png","../../src/docs/guides/imgs/scss-highlight.png","../../src/docs/guides/imgs/scss-inspector.png","../../src/docs/guides/imgs/scss-change.png","../../src/docs/guides/imgs/scss-test.png","../../src/docs/guides/imgs/scss-winning.png","../../src/docs/guides/customising-with-scss.stories.mdx"],"sourcesContent":["export default \"__VITE_ASSET__72648eef__\"","export default \"__VITE_ASSET__c5a97c31__\"","export default \"__VITE_ASSET__8330892c__\"","export default \"__VITE_ASSET__a6065c0f__\"","export default \"__VITE_ASSET__9b74b964__\"","export default \"__VITE_ASSET__2b7e908e__\"","import { Meta } from '@storybook/addon-docs';\nimport { parameters } from '$docs/utils/docsPage.js';\n\nimport startImg from './imgs/scss-start.png';\nimport highlightImg from './imgs/scss-highlight.png';\nimport inspectorImg from './imgs/scss-inspector.png';\nimport changeImg from './imgs/scss-change.png';\nimport testImg from './imgs/scss-test.png';\nimport winningImg from './imgs/scss-winning.png';\n\n\n\n\n\n# Customising components with SCSS\n\nOne of the most powerful ways to customise components isn't props or, even, Svelte.\n\n\n It's SCSS and your web inspector!\n
\n\n## How's that??\n\nLet's say you wanted to change our `BeforeAfter` component. You want the text overlays to be at the bottom of the image instead of the top like this:\n\n
\n\nThe first thing you should do is check out the elements you want to change in your web inspector and see if CSS can make the change you want.\n\n
\n\n
\n\nIn our case, we want to change the absolute position of those elements. To test that'll actually work, we can try it directly in the inspector first!\n\n
\n\n
\n\nNow that we know we can change what we need through CSS it's time to write some SCSS, either in your `global.scss` file or directly in a component like `App.svelte`.\n\nFirst, let's look at the class of the style rule we changed in the inspector:\n\n`figure.before-after-container.s-khJY-w4TYkp5 .overlay-container.before.s-khJY-w4TYkp5`\n\nOne thing we always need to do is strip out any Svelte class names, i.e., those weird `.s-khJY-w4TYkp5` classes. Why? Those are random classes Svelte adds to CSS, and we can't guarantee they won't change.\n\nThat leaves us with:\n\n`figure.before-after-container .overlay-container.before`\n\nBut we need our style rule to _beat_ the original style in the CSS cascade, and right now, it's less specific without those class names we stripped.\n\nThe easiest way to make sure your style rule wins out is to add an ID either directly to the element or to a parent. In our case, let's add an ID through the `BeforeAfter` `id` prop. Now we can use it! (For extra credit, though, we'll drop the `.before` so our new style rule applies to _both_ overlays.)\n\n```scss\nfigure#my-before-after .overlay-container {\n bottom: 0;\n}\n```\n\nNow our selector is more specific. We win!\n\nIf you don't see a way to add an ID through a component's props, then just wrap the component in a `div` in your code:\n\n```svelte\n\n \n\n```\n\n... and use that, instead!\n\n```scss\ndiv#my-before-after figure .overlay-container {\n bottom: 0;\n}\n```\n\nWe can confirm the new style rule is winning by looking at its order back in our web inspector!\n\n
\n\nDone!\n\n#### Can I just... `important!` it?\n\nYep, as a last result. Just be sure your style rule is **very specific** and not something generic that might apply to other elements like `div.container`.\n"],"names":["startImg","highlightImg","inspectorImg","changeImg","testImg","winningImg","_createMdxContent","props","_components","_provideComponents","_jsxs","_Fragment","_jsx","Meta","parameters","MDXContent","MDXLayout","__page","componentMeta","__namedExportsOrder"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"customising-with-scss.stories-de0c54e7.js","sources":["../../src/docs/guides/imgs/scss-start.png","../../src/docs/guides/imgs/scss-highlight.png","../../src/docs/guides/imgs/scss-inspector.png","../../src/docs/guides/imgs/scss-change.png","../../src/docs/guides/imgs/scss-test.png","../../src/docs/guides/imgs/scss-winning.png","../../src/docs/guides/customising-with-scss.stories.mdx"],"sourcesContent":["export default \"__VITE_ASSET__72648eef__\"","export default \"__VITE_ASSET__c5a97c31__\"","export default \"__VITE_ASSET__8330892c__\"","export default \"__VITE_ASSET__a6065c0f__\"","export default \"__VITE_ASSET__9b74b964__\"","export default \"__VITE_ASSET__2b7e908e__\"","import { Meta } from '@storybook/addon-docs';\nimport { parameters } from '$docs/utils/docsPage.js';\n\nimport startImg from './imgs/scss-start.png';\nimport highlightImg from './imgs/scss-highlight.png';\nimport inspectorImg from './imgs/scss-inspector.png';\nimport changeImg from './imgs/scss-change.png';\nimport testImg from './imgs/scss-test.png';\nimport winningImg from './imgs/scss-winning.png';\n\n\n\n\n\n# Customising components with SCSS\n\nOne of the most powerful ways to customise components isn't props or, even, Svelte.\n\n\n It's SCSS and your web inspector!\n
\n\n## How's that??\n\nLet's say you wanted to change our `BeforeAfter` component. You want the text overlays to be at the bottom of the image instead of the top like this:\n\n
\n\nThe first thing you should do is check out the elements you want to change in your web inspector and see if CSS can make the change you want.\n\n
\n\n
\n\nIn our case, we want to change the absolute position of those elements. To test that'll actually work, we can try it directly in the inspector first!\n\n
\n\n
\n\nNow that we know we can change what we need through CSS it's time to write some SCSS, either in your `global.scss` file or directly in a component like `App.svelte`.\n\nFirst, let's look at the class of the style rule we changed in the inspector:\n\n`figure.before-after-container.s-khJY-w4TYkp5 .overlay-container.before.s-khJY-w4TYkp5`\n\nOne thing we always need to do is strip out any Svelte class names, i.e., those weird `.s-khJY-w4TYkp5` classes. Why? Those are random classes Svelte adds to CSS, and we can't guarantee they won't change.\n\nThat leaves us with:\n\n`figure.before-after-container .overlay-container.before`\n\nBut we need our style rule to _beat_ the original style in the CSS cascade, and right now, it's less specific without those class names we stripped.\n\nThe easiest way to make sure your style rule wins out is to add an ID either directly to the element or to a parent. In our case, let's add an ID through the `BeforeAfter` `id` prop. Now we can use it! (For extra credit, though, we'll drop the `.before` so our new style rule applies to _both_ overlays.)\n\n```scss\nfigure#my-before-after .overlay-container {\n bottom: 0;\n}\n```\n\nNow our selector is more specific. We win!\n\nIf you don't see a way to add an ID through a component's props, then just wrap the component in a `div` in your code:\n\n```svelte\n\n \n\n```\n\n... and use that, instead!\n\n```scss\ndiv#my-before-after figure .overlay-container {\n bottom: 0;\n}\n```\n\nWe can confirm the new style rule is winning by looking at its order back in our web inspector!\n\n
\n\nDone!\n\n#### Can I just... `important!` it?\n\nYep, as a last result. Just be sure your style rule is **very specific** and not something generic that might apply to other elements like `div.container`.\n"],"names":["startImg","highlightImg","inspectorImg","changeImg","testImg","winningImg","_createMdxContent","props","_components","_provideComponents","_jsxs","_Fragment","_jsx","Meta","parameters","MDXContent","MDXLayout","__page","componentMeta","__namedExportsOrder"],"mappings":"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"}
\ No newline at end of file
diff --git a/docs/assets/edges-b00f0ec2-4a286a23.js b/docs/assets/edges-b00f0ec2-c94d81e0.js
similarity index 99%
rename from docs/assets/edges-b00f0ec2-4a286a23.js
rename to docs/assets/edges-b00f0ec2-c94d81e0.js
index ed86c532..aae0b369 100644
--- a/docs/assets/edges-b00f0ec2-4a286a23.js
+++ b/docs/assets/edges-b00f0ec2-c94d81e0.js
@@ -1,5 +1,5 @@
-import{t as H,c as w,d as Z,v as j,h as B,l as x,u as U,x as F}from"./intro.stories-2707f0d7.js";import{c as P}from"./createText-285e50b4-28eea7d2.js";import{p as Q}from"./svgDraw-5d8a058e-35e42658.js";import{l as et}from"./line-b50add47.js";const st=(r,t,e,n)=>{t.forEach(a=>{yt[a](r,e,n)})},it=(r,t,e)=>{x.trace("Making markers for ",e),r.append("defs").append("marker").attr("id",t+"-extensionStart").attr("class","marker extension "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),r.append("defs").append("marker").attr("id",t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},nt=(r,t)=>{r.append("defs").append("marker").attr("id",t+"-compositionStart").attr("class","marker composition "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),r.append("defs").append("marker").attr("id",t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},lt=(r,t)=>{r.append("defs").append("marker").attr("id",t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),r.append("defs").append("marker").attr("id",t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},ct=(r,t)=>{r.append("defs").append("marker").attr("id",t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),r.append("defs").append("marker").attr("id",t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},ht=(r,t)=>{r.append("defs").append("marker").attr("id",t+"-lollipopStart").attr("class","marker lollipop "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","white").attr("cx",6).attr("cy",7).attr("r",6)},ot=(r,t)=>{r.append("marker").attr("id",t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",10).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),r.append("marker").attr("id",t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},ft=(r,t)=>{r.append("marker").attr("id",t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),r.append("marker").attr("id",t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},dt=(r,t)=>{r.append("marker").attr("id",t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),r.append("marker").attr("id",t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},pt=(r,t)=>{r.append("defs").append("marker").attr("id",t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},yt={extension:it,composition:nt,aggregation:lt,dependency:ct,lollipop:ht,point:ot,circle:ft,cross:dt,barb:pt},Kt=st;function bt(r,t){t&&r.attr("style",t)}function xt(r){const t=B(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),e=t.append("xhtml:div"),n=r.label,a=r.isNode?"nodeLabel":"edgeLabel";return e.html('"+n+""),bt(e,r.labelStyle),e.style("display","inline-block"),e.style("white-space","nowrap"),e.attr("xmlns","http://www.w3.org/1999/xhtml"),t.node()}const gt=(r,t,e,n)=>{let a=r||"";if(typeof a=="object"&&(a=a[0]),H(w().flowchart.htmlLabels)){a=a.replace(/\\n|\n/g,"
"),x.info("vertexText"+a);const s={isNode:n,label:j(a).replace(/fa[blrs]?:fa-[\w-]+/g,l=>``),labelStyle:t.replace("fill:","color:")};return xt(s)}else{const s=document.createElementNS("http://www.w3.org/2000/svg","text");s.setAttribute("style",t.replace("color:","fill:"));let i=[];typeof a=="string"?i=a.split(/\\n|\n|
/gi):Array.isArray(a)?i=a:i=[];for(const l of i){const c=document.createElementNS("http://www.w3.org/2000/svg","tspan");c.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),c.setAttribute("dy","1em"),c.setAttribute("x","0"),e?c.setAttribute("class","title-row"):c.setAttribute("class","row"),c.textContent=l.trim(),s.appendChild(c)}return s}},R=gt,E=async(r,t,e,n)=>{let a;const s=t.useHtmlLabels||H(w().flowchart.htmlLabels);e?a=e:a="node default";const i=r.insert("g").attr("class",a).attr("id",t.domId||t.id),l=i.insert("g").attr("class","label").attr("style",t.labelStyle);let c;t.labelText===void 0?c="":c=typeof t.labelText=="string"?t.labelText:t.labelText[0];const o=l.node();let h;t.labelType==="markdown"?h=P(l,Z(j(c),w()),{useHtmlLabels:s,width:t.width||w().flowchart.wrappingWidth,classes:"markdown-node-label"}):h=o.appendChild(R(Z(j(c),w()),t.labelStyle,!1,n));let f=h.getBBox();const b=t.padding/2;if(H(w().flowchart.htmlLabels)){const d=h.children[0],p=B(h),y=d.getElementsByTagName("img");if(y){const g=c.replace(/
]*>/g,"").trim()==="";await Promise.all([...y].map(u=>new Promise(I=>{function T(){if(u.style.display="flex",u.style.flexDirection="column",g){const M=w().fontSize?w().fontSize:window.getComputedStyle(document.body).fontSize,_=5;u.style.width=parseInt(M,10)*_+"px"}else u.style.width="100%";I(u)}setTimeout(()=>{u.complete&&T()}),u.addEventListener("error",T),u.addEventListener("load",T)})))}f=d.getBoundingClientRect(),p.attr("width",f.width),p.attr("height",f.height)}return s?l.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"):l.attr("transform","translate(0, "+-f.height/2+")"),t.centerLabel&&l.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),l.insert("rect",":first-child"),{shapeSvg:i,bbox:f,halfPadding:b,label:l}},k=(r,t)=>{const e=t.node().getBBox();r.width=e.width,r.height=e.height};function N(r,t,e,n){return r.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+e/2+")")}function ut(r,t){return r.intersect(t)}function tt(r,t,e,n){var a=r.x,s=r.y,i=a-n.x,l=s-n.y,c=Math.sqrt(t*t*l*l+e*e*i*i),o=Math.abs(t*e*i/c);n.x0}function kt(r,t,e){var n=r.x,a=r.y,s=[],i=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof t.forEach=="function"?t.forEach(function(p){i=Math.min(i,p.x),l=Math.min(l,p.y)}):(i=Math.min(i,t.x),l=Math.min(l,t.y));for(var c=n-r.width/2-i,o=a-r.height/2-l,h=0;h1&&s.sort(function(p,y){var g=p.x-e.x,u=p.y-e.y,I=Math.sqrt(g*g+u*u),T=y.x-e.x,M=y.y-e.y,_=Math.sqrt(T*T+M*M);return I<_?-1:I===_?0:1}),s[0]):r}const vt=(r,t)=>{var e=r.x,n=r.y,a=t.x-e,s=t.y-n,i=r.width/2,l=r.height/2,c,o;return Math.abs(s)*i>Math.abs(a)*l?(s<0&&(l=-l),c=s===0?0:l*a/s,o=l):(a<0&&(i=-i),c=i,o=a===0?0:i*s/a),{x:e+c,y:n+o}},Lt=vt,m={node:ut,circle:wt,ellipse:tt,polygon:kt,rect:Lt},St=async(r,t)=>{t.useHtmlLabels||w().flowchart.htmlLabels||(t.centerLabel=!0);const{shapeSvg:n,bbox:a,halfPadding:s}=await E(r,t,"node "+t.classes,!0);x.info("Classes = ",t.classes);const i=n.insert("rect",":first-child");return i.attr("rx",t.rx).attr("ry",t.ry).attr("x",-a.width/2-s).attr("y",-a.height/2-s).attr("width",a.width+t.padding).attr("height",a.height+t.padding),k(t,i),t.intersect=function(l){return m.rect(t,l)},n},Bt=St,J=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=a+s,l=[{x:i/2,y:0},{x:i,y:-i/2},{x:i/2,y:-i},{x:0,y:-i/2}];x.info("Question main (Circle)");const c=N(e,i,i,l);return c.attr("style",t.style),k(t,c),t.intersect=function(o){return x.warn("Intersect called"),m.polygon(t,l,o)},e},Et=(r,t)=>{const e=r.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=28,a=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return e.insert("polygon",":first-child").attr("points",a.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),t.width=28,t.height=28,t.intersect=function(i){return m.circle(t,14,i)},e},Mt=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=4,s=n.height+t.padding,i=s/a,l=n.width+2*i+t.padding,c=[{x:i,y:0},{x:l-i,y:0},{x:l,y:-s/2},{x:l-i,y:-s},{x:i,y:-s},{x:0,y:-s/2}],o=N(e,l,s,c);return o.attr("style",t.style),k(t,o),t.intersect=function(h){return m.polygon(t,c,h)},e},Ct=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:-s/2,y:0},{x:a,y:0},{x:a,y:-s},{x:-s/2,y:-s},{x:0,y:-s/2}];return N(e,a,s,i).attr("style",t.style),t.width=a+s,t.height=s,t.intersect=function(c){return m.polygon(t,i,c)},e},Tt=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:-2*s/6,y:0},{x:a-s/6,y:0},{x:a+2*s/6,y:-s},{x:s/6,y:-s}],l=N(e,a,s,i);return l.attr("style",t.style),k(t,l),t.intersect=function(c){return m.polygon(t,i,c)},e},Rt=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:2*s/6,y:0},{x:a+s/6,y:0},{x:a-2*s/6,y:-s},{x:-s/6,y:-s}],l=N(e,a,s,i);return l.attr("style",t.style),k(t,l),t.intersect=function(c){return m.polygon(t,i,c)},e},It=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:-2*s/6,y:0},{x:a+2*s/6,y:0},{x:a-s/6,y:-s},{x:s/6,y:-s}],l=N(e,a,s,i);return l.attr("style",t.style),k(t,l),t.intersect=function(c){return m.polygon(t,i,c)},e},Ht=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:s/6,y:0},{x:a-s/6,y:0},{x:a+2*s/6,y:-s},{x:-2*s/6,y:-s}],l=N(e,a,s,i);return l.attr("style",t.style),k(t,l),t.intersect=function(c){return m.polygon(t,i,c)},e},$t=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:0,y:0},{x:a+s/2,y:0},{x:a,y:-s/2},{x:a+s/2,y:-s},{x:0,y:-s}],l=N(e,a,s,i);return l.attr("style",t.style),k(t,l),t.intersect=function(c){return m.polygon(t,i,c)},e},Nt=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=a/2,i=s/(2.5+a/50),l=n.height+i+t.padding,c="M 0,"+i+" a "+s+","+i+" 0,0,0 "+a+" 0 a "+s+","+i+" 0,0,0 "+-a+" 0 l 0,"+l+" a "+s+","+i+" 0,0,0 "+a+" 0 l 0,"+-l,o=e.attr("label-offset-y",i).insert("path",":first-child").attr("style",t.style).attr("d",c).attr("transform","translate("+-a/2+","+-(l/2+i)+")");return k(t,o),t.intersect=function(h){const f=m.rect(t,h),b=f.x-t.x;if(s!=0&&(Math.abs(b)t.height/2-i)){let d=i*i*(1-b*b/(s*s));d!=0&&(d=Math.sqrt(d)),d=i-d,h.y-t.y>0&&(d=-d),f.y+=d}return f},e},_t=async(r,t)=>{const{shapeSvg:e,bbox:n,halfPadding:a}=await E(r,t,"node "+t.classes,!0),s=e.insert("rect",":first-child"),i=n.width+t.padding,l=n.height+t.padding;if(s.attr("class","basic label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",-n.width/2-a).attr("y",-n.height/2-a).attr("width",i).attr("height",l),t.props){const c=new Set(Object.keys(t.props));t.props.borders&&(rt(s,t.props.borders,i,l),c.delete("borders")),c.forEach(o=>{x.warn(`Unknown node property ${o}`)})}return k(t,s),t.intersect=function(c){return m.rect(t,c)},e},Wt=async(r,t)=>{const{shapeSvg:e}=await E(r,t,"label",!0);x.trace("Classes = ",t.classes);const n=e.insert("rect",":first-child"),a=0,s=0;if(n.attr("width",a).attr("height",s),e.attr("class","label edgeLabel"),t.props){const i=new Set(Object.keys(t.props));t.props.borders&&(rt(n,t.props.borders,a,s),i.delete("borders")),i.forEach(l=>{x.warn(`Unknown node property ${l}`)})}return k(t,n),t.intersect=function(i){return m.rect(t,i)},e};function rt(r,t,e,n){const a=[],s=l=>{a.push(l,0)},i=l=>{a.push(0,l)};t.includes("t")?(x.debug("add top border"),s(e)):i(e),t.includes("r")?(x.debug("add right border"),s(n)):i(n),t.includes("b")?(x.debug("add bottom border"),s(e)):i(e),t.includes("l")?(x.debug("add left border"),s(n)):i(n),r.attr("stroke-dasharray",a.join(" "))}const Xt=(r,t)=>{let e;t.classes?e="node "+t.classes:e="node default";const n=r.insert("g").attr("class",e).attr("id",t.domId||t.id),a=n.insert("rect",":first-child"),s=n.insert("line"),i=n.insert("g").attr("class","label"),l=t.labelText.flat?t.labelText.flat():t.labelText;let c="";typeof l=="object"?c=l[0]:c=l,x.info("Label text abc79",c,l,typeof l=="object");const o=i.node().appendChild(R(c,t.labelStyle,!0,!0));let h={width:0,height:0};if(H(w().flowchart.htmlLabels)){const y=o.children[0],g=B(o);h=y.getBoundingClientRect(),g.attr("width",h.width),g.attr("height",h.height)}x.info("Text 2",l);const f=l.slice(1,l.length);let b=o.getBBox();const d=i.node().appendChild(R(f.join?f.join("
"):f,t.labelStyle,!0,!0));if(H(w().flowchart.htmlLabels)){const y=d.children[0],g=B(d);h=y.getBoundingClientRect(),g.attr("width",h.width),g.attr("height",h.height)}const p=t.padding/2;return B(d).attr("transform","translate( "+(h.width>b.width?0:(b.width-h.width)/2)+", "+(b.height+p+5)+")"),B(o).attr("transform","translate( "+(h.width{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.height+t.padding,s=n.width+a/4+t.padding,i=e.insert("rect",":first-child").attr("style",t.style).attr("rx",a/2).attr("ry",a/2).attr("x",-s/2).attr("y",-a/2).attr("width",s).attr("height",a);return k(t,i),t.intersect=function(l){return m.rect(t,l)},e},Ut=async(r,t)=>{const{shapeSvg:e,bbox:n,halfPadding:a}=await E(r,t,void 0,!0),s=e.insert("circle",":first-child");return s.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+a).attr("width",n.width+t.padding).attr("height",n.height+t.padding),x.info("Circle main"),k(t,s),t.intersect=function(i){return x.info("Circle intersect",t,n.width/2+a,i),m.circle(t,n.width/2+a,i)},e},At=async(r,t)=>{const{shapeSvg:e,bbox:n,halfPadding:a}=await E(r,t,void 0,!0),s=5,i=e.insert("g",":first-child"),l=i.insert("circle"),c=i.insert("circle");return i.attr("class",t.class),l.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+a+s).attr("width",n.width+t.padding+s*2).attr("height",n.height+t.padding+s*2),c.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+a).attr("width",n.width+t.padding).attr("height",n.height+t.padding),x.info("DoubleCircle main"),k(t,l),t.intersect=function(o){return x.info("DoubleCircle intersect",t,n.width/2+a+s,o),m.circle(t,n.width/2+a+s,o)},e},Dt=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:0,y:0},{x:a,y:0},{x:a,y:-s},{x:0,y:-s},{x:0,y:0},{x:-8,y:0},{x:a+8,y:0},{x:a+8,y:-s},{x:-8,y:-s},{x:-8,y:0}],l=N(e,a,s,i);return l.attr("style",t.style),k(t,l),t.intersect=function(c){return m.polygon(t,i,c)},e},Ot=(r,t)=>{const e=r.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=e.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),k(t,n),t.intersect=function(a){return m.circle(t,7,a)},e},q=(r,t,e)=>{const n=r.insert("g").attr("class","node default").attr("id",t.domId||t.id);let a=70,s=10;e==="LR"&&(a=10,s=70);const i=n.append("rect").attr("x",-1*a/2).attr("y",-1*s/2).attr("width",a).attr("height",s).attr("class","fork-join");return k(t,i),t.height=t.height+t.padding/2,t.width=t.width+t.padding/2,t.intersect=function(l){return m.rect(t,l)},n},jt=(r,t)=>{const e=r.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=e.insert("circle",":first-child"),a=e.insert("circle",":first-child");return a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),k(t,a),t.intersect=function(s){return m.circle(t,7,s)},e},zt=(r,t)=>{const e=t.padding/2,n=4,a=8;let s;t.classes?s="node "+t.classes:s="node default";const i=r.insert("g").attr("class",s).attr("id",t.domId||t.id),l=i.insert("rect",":first-child"),c=i.insert("line"),o=i.insert("line");let h=0,f=n;const b=i.insert("g").attr("class","label");let d=0;const p=t.classData.annotations&&t.classData.annotations[0],y=t.classData.annotations[0]?"«"+t.classData.annotations[0]+"»":"",g=b.node().appendChild(R(y,t.labelStyle,!0,!0));let u=g.getBBox();if(H(w().flowchart.htmlLabels)){const v=g.children[0],L=B(g);u=v.getBoundingClientRect(),L.attr("width",u.width),L.attr("height",u.height)}t.classData.annotations[0]&&(f+=u.height+n,h+=u.width);let I=t.classData.label;t.classData.type!==void 0&&t.classData.type!==""&&(w().flowchart.htmlLabels?I+="<"+t.classData.type+">":I+="<"+t.classData.type+">");const T=b.node().appendChild(R(I,t.labelStyle,!0,!0));B(T).attr("class","classTitle");let M=T.getBBox();if(H(w().flowchart.htmlLabels)){const v=T.children[0],L=B(T);M=v.getBoundingClientRect(),L.attr("width",M.width),L.attr("height",M.height)}f+=M.height+n,M.width>h&&(h=M.width);const _=[];t.classData.members.forEach(v=>{const L=Q(v);let W=L.displayText;w().flowchart.htmlLabels&&(W=W.replace(//g,">"));const $=b.node().appendChild(R(W,L.cssStyle?L.cssStyle:t.labelStyle,!0,!0));let C=$.getBBox();if(H(w().flowchart.htmlLabels)){const O=$.children[0],Y=B($);C=O.getBoundingClientRect(),Y.attr("width",C.width),Y.attr("height",C.height)}C.width>h&&(h=C.width),f+=C.height+n,_.push($)}),f+=a;const z=[];if(t.classData.methods.forEach(v=>{const L=Q(v);let W=L.displayText;w().flowchart.htmlLabels&&(W=W.replace(//g,">"));const $=b.node().appendChild(R(W,L.cssStyle?L.cssStyle:t.labelStyle,!0,!0));let C=$.getBBox();if(H(w().flowchart.htmlLabels)){const O=$.children[0],Y=B($);C=O.getBoundingClientRect(),Y.attr("width",C.width),Y.attr("height",C.height)}C.width>h&&(h=C.width),f+=C.height+n,z.push($)}),f+=a,p){let v=(h-u.width)/2;B(g).attr("transform","translate( "+(-1*h/2+v)+", "+-1*f/2+")"),d=u.height+n}let at=(h-M.width)/2;return B(T).attr("transform","translate( "+(-1*h/2+at)+", "+(-1*f/2+d)+")"),d+=M.height+n,c.attr("class","divider").attr("x1",-h/2-e).attr("x2",h/2+e).attr("y1",-f/2-e+a+d).attr("y2",-f/2-e+a+d),d+=a,_.forEach(v=>{B(v).attr("transform","translate( "+-h/2+", "+(-1*f/2+d+a/2)+")");const L=v==null?void 0:v.getBBox();d+=((L==null?void 0:L.height)??0)+n}),d+=a,o.attr("class","divider").attr("x1",-h/2-e).attr("x2",h/2+e).attr("y1",-f/2-e+a+d).attr("y2",-f/2-e+a+d),d+=a,z.forEach(v=>{B(v).attr("transform","translate( "+-h/2+", "+(-1*f/2+d)+")");const L=v==null?void 0:v.getBBox();d+=((L==null?void 0:L.height)??0)+n}),l.attr("class","outer title-state").attr("x",-h/2-e).attr("y",-(f/2)-e).attr("width",h+t.padding).attr("height",f+t.padding),k(t,l),t.intersect=function(v){return m.rect(t,v)},i},K={rhombus:J,question:J,rect:_t,labelRect:Wt,rectWithTitle:Xt,choice:Et,circle:Ut,doublecircle:At,stadium:Yt,hexagon:Mt,rect_left_inv_arrow:Ct,lean_right:Tt,lean_left:Rt,trapezoid:It,inv_trapezoid:Ht,rect_right_inv_arrow:$t,cylinder:Nt,start:Ot,end:jt,note:Bt,subroutine:Dt,fork:q,join:q,class_box:zt};let X={};const Gt=async(r,t,e)=>{let n,a;if(t.link){let s;w().securityLevel==="sandbox"?s="_top":t.linkTarget&&(s=t.linkTarget||"_blank"),n=r.insert("svg:a").attr("xlink:href",t.link).attr("target",s),a=await K[t.shape](n,t,e)}else a=await K[t.shape](r,t,e),n=a;return t.tooltip&&a.attr("title",t.tooltip),t.class&&a.attr("class","node default "+t.class),X[t.id]=n,t.haveCallback&&X[t.id].attr("class",X[t.id].attr("class")+" clickable"),n},Pt=(r,t)=>{X[t.id]=r},tr=()=>{X={}},rr=r=>{const t=X[r.id];x.trace("Transforming node",r.diff,r,"translate("+(r.x-r.width/2-5)+", "+r.width/2+")");const e=8,n=r.diff||0;return r.clusterNode?t.attr("transform","translate("+(r.x+n-r.width/2)+", "+(r.y-r.height/2-e)+")"):t.attr("transform","translate("+r.x+", "+r.y+")"),n};let D={},S={};const ar=()=>{D={},S={}},er=(r,t)=>{const e=H(w().flowchart.htmlLabels),n=t.labelType==="markdown"?P(r,t.label,{style:t.labelStyle,useHtmlLabels:e,addSvgBackground:!0}):R(t.label,t.labelStyle);x.info("abc82",t,t.labelType);const a=r.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(n);let i=n.getBBox();if(e){const c=n.children[0],o=B(n);i=c.getBoundingClientRect(),o.attr("width",i.width),o.attr("height",i.height)}s.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),D[t.id]=a,t.width=i.width,t.height=i.height;let l;if(t.startLabelLeft){const c=R(t.startLabelLeft,t.labelStyle),o=r.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),S[t.id]||(S[t.id]={}),S[t.id].startLeft=o,A(l,t.startLabelLeft)}if(t.startLabelRight){const c=R(t.startLabelRight,t.labelStyle),o=r.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=o.node().appendChild(c),h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),S[t.id]||(S[t.id]={}),S[t.id].startRight=o,A(l,t.startLabelRight)}if(t.endLabelLeft){const c=R(t.endLabelLeft,t.labelStyle),o=r.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),o.node().appendChild(c),S[t.id]||(S[t.id]={}),S[t.id].endLeft=o,A(l,t.endLabelLeft)}if(t.endLabelRight){const c=R(t.endLabelRight,t.labelStyle),o=r.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),o.node().appendChild(c),S[t.id]||(S[t.id]={}),S[t.id].endRight=o,A(l,t.endLabelRight)}return n};function A(r,t){w().flowchart.htmlLabels&&r&&(r.style.width=t.length*9+"px",r.style.height="12px")}const sr=(r,t)=>{x.info("Moving label abc78 ",r.id,r.label,D[r.id]);let e=t.updatedPath?t.updatedPath:t.originalPath;if(r.label){const n=D[r.id];let a=r.x,s=r.y;if(e){const i=U.calcLabelPosition(e);x.info("Moving label "+r.label+" from (",a,",",s,") to (",i.x,",",i.y,") abc78"),t.updatedPath&&(a=i.x,s=i.y)}n.attr("transform","translate("+a+", "+s+")")}if(r.startLabelLeft){const n=S[r.id].startLeft;let a=r.x,s=r.y;if(e){const i=U.calcTerminalLabelPosition(r.arrowTypeStart?10:0,"start_left",e);a=i.x,s=i.y}n.attr("transform","translate("+a+", "+s+")")}if(r.startLabelRight){const n=S[r.id].startRight;let a=r.x,s=r.y;if(e){const i=U.calcTerminalLabelPosition(r.arrowTypeStart?10:0,"start_right",e);a=i.x,s=i.y}n.attr("transform","translate("+a+", "+s+")")}if(r.endLabelLeft){const n=S[r.id].endLeft;let a=r.x,s=r.y;if(e){const i=U.calcTerminalLabelPosition(r.arrowTypeEnd?10:0,"end_left",e);a=i.x,s=i.y}n.attr("transform","translate("+a+", "+s+")")}if(r.endLabelRight){const n=S[r.id].endRight;let a=r.x,s=r.y;if(e){const i=U.calcTerminalLabelPosition(r.arrowTypeEnd?10:0,"end_right",e);a=i.x,s=i.y}n.attr("transform","translate("+a+", "+s+")")}},Zt=(r,t)=>{const e=r.x,n=r.y,a=Math.abs(t.x-e),s=Math.abs(t.y-n),i=r.width/2,l=r.height/2;return a>=i||s>=l},Ft=(r,t,e)=>{x.warn(`intersection calc abc89:
+import{t as H,c as w,d as Z,v as j,h as B,l as x,u as U,x as F}from"./intro.stories-8786330d.js";import{c as P}from"./createText-285e50b4-9349820e.js";import{p as Q}from"./svgDraw-5d8a058e-0fe7e353.js";import{l as et}from"./line-fe766e5a.js";const st=(r,t,e,n)=>{t.forEach(a=>{yt[a](r,e,n)})},it=(r,t,e)=>{x.trace("Making markers for ",e),r.append("defs").append("marker").attr("id",t+"-extensionStart").attr("class","marker extension "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),r.append("defs").append("marker").attr("id",t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},nt=(r,t)=>{r.append("defs").append("marker").attr("id",t+"-compositionStart").attr("class","marker composition "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),r.append("defs").append("marker").attr("id",t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},lt=(r,t)=>{r.append("defs").append("marker").attr("id",t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),r.append("defs").append("marker").attr("id",t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},ct=(r,t)=>{r.append("defs").append("marker").attr("id",t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),r.append("defs").append("marker").attr("id",t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},ht=(r,t)=>{r.append("defs").append("marker").attr("id",t+"-lollipopStart").attr("class","marker lollipop "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","white").attr("cx",6).attr("cy",7).attr("r",6)},ot=(r,t)=>{r.append("marker").attr("id",t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",10).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),r.append("marker").attr("id",t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},ft=(r,t)=>{r.append("marker").attr("id",t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),r.append("marker").attr("id",t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},dt=(r,t)=>{r.append("marker").attr("id",t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),r.append("marker").attr("id",t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},pt=(r,t)=>{r.append("defs").append("marker").attr("id",t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},yt={extension:it,composition:nt,aggregation:lt,dependency:ct,lollipop:ht,point:ot,circle:ft,cross:dt,barb:pt},Kt=st;function bt(r,t){t&&r.attr("style",t)}function xt(r){const t=B(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),e=t.append("xhtml:div"),n=r.label,a=r.isNode?"nodeLabel":"edgeLabel";return e.html('"+n+""),bt(e,r.labelStyle),e.style("display","inline-block"),e.style("white-space","nowrap"),e.attr("xmlns","http://www.w3.org/1999/xhtml"),t.node()}const gt=(r,t,e,n)=>{let a=r||"";if(typeof a=="object"&&(a=a[0]),H(w().flowchart.htmlLabels)){a=a.replace(/\\n|\n/g,"
"),x.info("vertexText"+a);const s={isNode:n,label:j(a).replace(/fa[blrs]?:fa-[\w-]+/g,l=>``),labelStyle:t.replace("fill:","color:")};return xt(s)}else{const s=document.createElementNS("http://www.w3.org/2000/svg","text");s.setAttribute("style",t.replace("color:","fill:"));let i=[];typeof a=="string"?i=a.split(/\\n|\n|
/gi):Array.isArray(a)?i=a:i=[];for(const l of i){const c=document.createElementNS("http://www.w3.org/2000/svg","tspan");c.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),c.setAttribute("dy","1em"),c.setAttribute("x","0"),e?c.setAttribute("class","title-row"):c.setAttribute("class","row"),c.textContent=l.trim(),s.appendChild(c)}return s}},R=gt,E=async(r,t,e,n)=>{let a;const s=t.useHtmlLabels||H(w().flowchart.htmlLabels);e?a=e:a="node default";const i=r.insert("g").attr("class",a).attr("id",t.domId||t.id),l=i.insert("g").attr("class","label").attr("style",t.labelStyle);let c;t.labelText===void 0?c="":c=typeof t.labelText=="string"?t.labelText:t.labelText[0];const o=l.node();let h;t.labelType==="markdown"?h=P(l,Z(j(c),w()),{useHtmlLabels:s,width:t.width||w().flowchart.wrappingWidth,classes:"markdown-node-label"}):h=o.appendChild(R(Z(j(c),w()),t.labelStyle,!1,n));let f=h.getBBox();const b=t.padding/2;if(H(w().flowchart.htmlLabels)){const d=h.children[0],p=B(h),y=d.getElementsByTagName("img");if(y){const g=c.replace(/
]*>/g,"").trim()==="";await Promise.all([...y].map(u=>new Promise(I=>{function T(){if(u.style.display="flex",u.style.flexDirection="column",g){const M=w().fontSize?w().fontSize:window.getComputedStyle(document.body).fontSize,_=5;u.style.width=parseInt(M,10)*_+"px"}else u.style.width="100%";I(u)}setTimeout(()=>{u.complete&&T()}),u.addEventListener("error",T),u.addEventListener("load",T)})))}f=d.getBoundingClientRect(),p.attr("width",f.width),p.attr("height",f.height)}return s?l.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"):l.attr("transform","translate(0, "+-f.height/2+")"),t.centerLabel&&l.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),l.insert("rect",":first-child"),{shapeSvg:i,bbox:f,halfPadding:b,label:l}},k=(r,t)=>{const e=t.node().getBBox();r.width=e.width,r.height=e.height};function N(r,t,e,n){return r.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+e/2+")")}function ut(r,t){return r.intersect(t)}function tt(r,t,e,n){var a=r.x,s=r.y,i=a-n.x,l=s-n.y,c=Math.sqrt(t*t*l*l+e*e*i*i),o=Math.abs(t*e*i/c);n.x0}function kt(r,t,e){var n=r.x,a=r.y,s=[],i=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof t.forEach=="function"?t.forEach(function(p){i=Math.min(i,p.x),l=Math.min(l,p.y)}):(i=Math.min(i,t.x),l=Math.min(l,t.y));for(var c=n-r.width/2-i,o=a-r.height/2-l,h=0;h1&&s.sort(function(p,y){var g=p.x-e.x,u=p.y-e.y,I=Math.sqrt(g*g+u*u),T=y.x-e.x,M=y.y-e.y,_=Math.sqrt(T*T+M*M);return I<_?-1:I===_?0:1}),s[0]):r}const vt=(r,t)=>{var e=r.x,n=r.y,a=t.x-e,s=t.y-n,i=r.width/2,l=r.height/2,c,o;return Math.abs(s)*i>Math.abs(a)*l?(s<0&&(l=-l),c=s===0?0:l*a/s,o=l):(a<0&&(i=-i),c=i,o=a===0?0:i*s/a),{x:e+c,y:n+o}},Lt=vt,m={node:ut,circle:wt,ellipse:tt,polygon:kt,rect:Lt},St=async(r,t)=>{t.useHtmlLabels||w().flowchart.htmlLabels||(t.centerLabel=!0);const{shapeSvg:n,bbox:a,halfPadding:s}=await E(r,t,"node "+t.classes,!0);x.info("Classes = ",t.classes);const i=n.insert("rect",":first-child");return i.attr("rx",t.rx).attr("ry",t.ry).attr("x",-a.width/2-s).attr("y",-a.height/2-s).attr("width",a.width+t.padding).attr("height",a.height+t.padding),k(t,i),t.intersect=function(l){return m.rect(t,l)},n},Bt=St,J=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=a+s,l=[{x:i/2,y:0},{x:i,y:-i/2},{x:i/2,y:-i},{x:0,y:-i/2}];x.info("Question main (Circle)");const c=N(e,i,i,l);return c.attr("style",t.style),k(t,c),t.intersect=function(o){return x.warn("Intersect called"),m.polygon(t,l,o)},e},Et=(r,t)=>{const e=r.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=28,a=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return e.insert("polygon",":first-child").attr("points",a.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),t.width=28,t.height=28,t.intersect=function(i){return m.circle(t,14,i)},e},Mt=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=4,s=n.height+t.padding,i=s/a,l=n.width+2*i+t.padding,c=[{x:i,y:0},{x:l-i,y:0},{x:l,y:-s/2},{x:l-i,y:-s},{x:i,y:-s},{x:0,y:-s/2}],o=N(e,l,s,c);return o.attr("style",t.style),k(t,o),t.intersect=function(h){return m.polygon(t,c,h)},e},Ct=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:-s/2,y:0},{x:a,y:0},{x:a,y:-s},{x:-s/2,y:-s},{x:0,y:-s/2}];return N(e,a,s,i).attr("style",t.style),t.width=a+s,t.height=s,t.intersect=function(c){return m.polygon(t,i,c)},e},Tt=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:-2*s/6,y:0},{x:a-s/6,y:0},{x:a+2*s/6,y:-s},{x:s/6,y:-s}],l=N(e,a,s,i);return l.attr("style",t.style),k(t,l),t.intersect=function(c){return m.polygon(t,i,c)},e},Rt=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:2*s/6,y:0},{x:a+s/6,y:0},{x:a-2*s/6,y:-s},{x:-s/6,y:-s}],l=N(e,a,s,i);return l.attr("style",t.style),k(t,l),t.intersect=function(c){return m.polygon(t,i,c)},e},It=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:-2*s/6,y:0},{x:a+2*s/6,y:0},{x:a-s/6,y:-s},{x:s/6,y:-s}],l=N(e,a,s,i);return l.attr("style",t.style),k(t,l),t.intersect=function(c){return m.polygon(t,i,c)},e},Ht=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:s/6,y:0},{x:a-s/6,y:0},{x:a+2*s/6,y:-s},{x:-2*s/6,y:-s}],l=N(e,a,s,i);return l.attr("style",t.style),k(t,l),t.intersect=function(c){return m.polygon(t,i,c)},e},$t=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:0,y:0},{x:a+s/2,y:0},{x:a,y:-s/2},{x:a+s/2,y:-s},{x:0,y:-s}],l=N(e,a,s,i);return l.attr("style",t.style),k(t,l),t.intersect=function(c){return m.polygon(t,i,c)},e},Nt=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=a/2,i=s/(2.5+a/50),l=n.height+i+t.padding,c="M 0,"+i+" a "+s+","+i+" 0,0,0 "+a+" 0 a "+s+","+i+" 0,0,0 "+-a+" 0 l 0,"+l+" a "+s+","+i+" 0,0,0 "+a+" 0 l 0,"+-l,o=e.attr("label-offset-y",i).insert("path",":first-child").attr("style",t.style).attr("d",c).attr("transform","translate("+-a/2+","+-(l/2+i)+")");return k(t,o),t.intersect=function(h){const f=m.rect(t,h),b=f.x-t.x;if(s!=0&&(Math.abs(b)t.height/2-i)){let d=i*i*(1-b*b/(s*s));d!=0&&(d=Math.sqrt(d)),d=i-d,h.y-t.y>0&&(d=-d),f.y+=d}return f},e},_t=async(r,t)=>{const{shapeSvg:e,bbox:n,halfPadding:a}=await E(r,t,"node "+t.classes,!0),s=e.insert("rect",":first-child"),i=n.width+t.padding,l=n.height+t.padding;if(s.attr("class","basic label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",-n.width/2-a).attr("y",-n.height/2-a).attr("width",i).attr("height",l),t.props){const c=new Set(Object.keys(t.props));t.props.borders&&(rt(s,t.props.borders,i,l),c.delete("borders")),c.forEach(o=>{x.warn(`Unknown node property ${o}`)})}return k(t,s),t.intersect=function(c){return m.rect(t,c)},e},Wt=async(r,t)=>{const{shapeSvg:e}=await E(r,t,"label",!0);x.trace("Classes = ",t.classes);const n=e.insert("rect",":first-child"),a=0,s=0;if(n.attr("width",a).attr("height",s),e.attr("class","label edgeLabel"),t.props){const i=new Set(Object.keys(t.props));t.props.borders&&(rt(n,t.props.borders,a,s),i.delete("borders")),i.forEach(l=>{x.warn(`Unknown node property ${l}`)})}return k(t,n),t.intersect=function(i){return m.rect(t,i)},e};function rt(r,t,e,n){const a=[],s=l=>{a.push(l,0)},i=l=>{a.push(0,l)};t.includes("t")?(x.debug("add top border"),s(e)):i(e),t.includes("r")?(x.debug("add right border"),s(n)):i(n),t.includes("b")?(x.debug("add bottom border"),s(e)):i(e),t.includes("l")?(x.debug("add left border"),s(n)):i(n),r.attr("stroke-dasharray",a.join(" "))}const Xt=(r,t)=>{let e;t.classes?e="node "+t.classes:e="node default";const n=r.insert("g").attr("class",e).attr("id",t.domId||t.id),a=n.insert("rect",":first-child"),s=n.insert("line"),i=n.insert("g").attr("class","label"),l=t.labelText.flat?t.labelText.flat():t.labelText;let c="";typeof l=="object"?c=l[0]:c=l,x.info("Label text abc79",c,l,typeof l=="object");const o=i.node().appendChild(R(c,t.labelStyle,!0,!0));let h={width:0,height:0};if(H(w().flowchart.htmlLabels)){const y=o.children[0],g=B(o);h=y.getBoundingClientRect(),g.attr("width",h.width),g.attr("height",h.height)}x.info("Text 2",l);const f=l.slice(1,l.length);let b=o.getBBox();const d=i.node().appendChild(R(f.join?f.join("
"):f,t.labelStyle,!0,!0));if(H(w().flowchart.htmlLabels)){const y=d.children[0],g=B(d);h=y.getBoundingClientRect(),g.attr("width",h.width),g.attr("height",h.height)}const p=t.padding/2;return B(d).attr("transform","translate( "+(h.width>b.width?0:(b.width-h.width)/2)+", "+(b.height+p+5)+")"),B(o).attr("transform","translate( "+(h.width{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.height+t.padding,s=n.width+a/4+t.padding,i=e.insert("rect",":first-child").attr("style",t.style).attr("rx",a/2).attr("ry",a/2).attr("x",-s/2).attr("y",-a/2).attr("width",s).attr("height",a);return k(t,i),t.intersect=function(l){return m.rect(t,l)},e},Ut=async(r,t)=>{const{shapeSvg:e,bbox:n,halfPadding:a}=await E(r,t,void 0,!0),s=e.insert("circle",":first-child");return s.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+a).attr("width",n.width+t.padding).attr("height",n.height+t.padding),x.info("Circle main"),k(t,s),t.intersect=function(i){return x.info("Circle intersect",t,n.width/2+a,i),m.circle(t,n.width/2+a,i)},e},At=async(r,t)=>{const{shapeSvg:e,bbox:n,halfPadding:a}=await E(r,t,void 0,!0),s=5,i=e.insert("g",":first-child"),l=i.insert("circle"),c=i.insert("circle");return i.attr("class",t.class),l.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+a+s).attr("width",n.width+t.padding+s*2).attr("height",n.height+t.padding+s*2),c.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+a).attr("width",n.width+t.padding).attr("height",n.height+t.padding),x.info("DoubleCircle main"),k(t,l),t.intersect=function(o){return x.info("DoubleCircle intersect",t,n.width/2+a+s,o),m.circle(t,n.width/2+a+s,o)},e},Dt=async(r,t)=>{const{shapeSvg:e,bbox:n}=await E(r,t,void 0,!0),a=n.width+t.padding,s=n.height+t.padding,i=[{x:0,y:0},{x:a,y:0},{x:a,y:-s},{x:0,y:-s},{x:0,y:0},{x:-8,y:0},{x:a+8,y:0},{x:a+8,y:-s},{x:-8,y:-s},{x:-8,y:0}],l=N(e,a,s,i);return l.attr("style",t.style),k(t,l),t.intersect=function(c){return m.polygon(t,i,c)},e},Ot=(r,t)=>{const e=r.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=e.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),k(t,n),t.intersect=function(a){return m.circle(t,7,a)},e},q=(r,t,e)=>{const n=r.insert("g").attr("class","node default").attr("id",t.domId||t.id);let a=70,s=10;e==="LR"&&(a=10,s=70);const i=n.append("rect").attr("x",-1*a/2).attr("y",-1*s/2).attr("width",a).attr("height",s).attr("class","fork-join");return k(t,i),t.height=t.height+t.padding/2,t.width=t.width+t.padding/2,t.intersect=function(l){return m.rect(t,l)},n},jt=(r,t)=>{const e=r.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=e.insert("circle",":first-child"),a=e.insert("circle",":first-child");return a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),k(t,a),t.intersect=function(s){return m.circle(t,7,s)},e},zt=(r,t)=>{const e=t.padding/2,n=4,a=8;let s;t.classes?s="node "+t.classes:s="node default";const i=r.insert("g").attr("class",s).attr("id",t.domId||t.id),l=i.insert("rect",":first-child"),c=i.insert("line"),o=i.insert("line");let h=0,f=n;const b=i.insert("g").attr("class","label");let d=0;const p=t.classData.annotations&&t.classData.annotations[0],y=t.classData.annotations[0]?"«"+t.classData.annotations[0]+"»":"",g=b.node().appendChild(R(y,t.labelStyle,!0,!0));let u=g.getBBox();if(H(w().flowchart.htmlLabels)){const v=g.children[0],L=B(g);u=v.getBoundingClientRect(),L.attr("width",u.width),L.attr("height",u.height)}t.classData.annotations[0]&&(f+=u.height+n,h+=u.width);let I=t.classData.label;t.classData.type!==void 0&&t.classData.type!==""&&(w().flowchart.htmlLabels?I+="<"+t.classData.type+">":I+="<"+t.classData.type+">");const T=b.node().appendChild(R(I,t.labelStyle,!0,!0));B(T).attr("class","classTitle");let M=T.getBBox();if(H(w().flowchart.htmlLabels)){const v=T.children[0],L=B(T);M=v.getBoundingClientRect(),L.attr("width",M.width),L.attr("height",M.height)}f+=M.height+n,M.width>h&&(h=M.width);const _=[];t.classData.members.forEach(v=>{const L=Q(v);let W=L.displayText;w().flowchart.htmlLabels&&(W=W.replace(//g,">"));const $=b.node().appendChild(R(W,L.cssStyle?L.cssStyle:t.labelStyle,!0,!0));let C=$.getBBox();if(H(w().flowchart.htmlLabels)){const O=$.children[0],Y=B($);C=O.getBoundingClientRect(),Y.attr("width",C.width),Y.attr("height",C.height)}C.width>h&&(h=C.width),f+=C.height+n,_.push($)}),f+=a;const z=[];if(t.classData.methods.forEach(v=>{const L=Q(v);let W=L.displayText;w().flowchart.htmlLabels&&(W=W.replace(//g,">"));const $=b.node().appendChild(R(W,L.cssStyle?L.cssStyle:t.labelStyle,!0,!0));let C=$.getBBox();if(H(w().flowchart.htmlLabels)){const O=$.children[0],Y=B($);C=O.getBoundingClientRect(),Y.attr("width",C.width),Y.attr("height",C.height)}C.width>h&&(h=C.width),f+=C.height+n,z.push($)}),f+=a,p){let v=(h-u.width)/2;B(g).attr("transform","translate( "+(-1*h/2+v)+", "+-1*f/2+")"),d=u.height+n}let at=(h-M.width)/2;return B(T).attr("transform","translate( "+(-1*h/2+at)+", "+(-1*f/2+d)+")"),d+=M.height+n,c.attr("class","divider").attr("x1",-h/2-e).attr("x2",h/2+e).attr("y1",-f/2-e+a+d).attr("y2",-f/2-e+a+d),d+=a,_.forEach(v=>{B(v).attr("transform","translate( "+-h/2+", "+(-1*f/2+d+a/2)+")");const L=v==null?void 0:v.getBBox();d+=((L==null?void 0:L.height)??0)+n}),d+=a,o.attr("class","divider").attr("x1",-h/2-e).attr("x2",h/2+e).attr("y1",-f/2-e+a+d).attr("y2",-f/2-e+a+d),d+=a,z.forEach(v=>{B(v).attr("transform","translate( "+-h/2+", "+(-1*f/2+d)+")");const L=v==null?void 0:v.getBBox();d+=((L==null?void 0:L.height)??0)+n}),l.attr("class","outer title-state").attr("x",-h/2-e).attr("y",-(f/2)-e).attr("width",h+t.padding).attr("height",f+t.padding),k(t,l),t.intersect=function(v){return m.rect(t,v)},i},K={rhombus:J,question:J,rect:_t,labelRect:Wt,rectWithTitle:Xt,choice:Et,circle:Ut,doublecircle:At,stadium:Yt,hexagon:Mt,rect_left_inv_arrow:Ct,lean_right:Tt,lean_left:Rt,trapezoid:It,inv_trapezoid:Ht,rect_right_inv_arrow:$t,cylinder:Nt,start:Ot,end:jt,note:Bt,subroutine:Dt,fork:q,join:q,class_box:zt};let X={};const Gt=async(r,t,e)=>{let n,a;if(t.link){let s;w().securityLevel==="sandbox"?s="_top":t.linkTarget&&(s=t.linkTarget||"_blank"),n=r.insert("svg:a").attr("xlink:href",t.link).attr("target",s),a=await K[t.shape](n,t,e)}else a=await K[t.shape](r,t,e),n=a;return t.tooltip&&a.attr("title",t.tooltip),t.class&&a.attr("class","node default "+t.class),X[t.id]=n,t.haveCallback&&X[t.id].attr("class",X[t.id].attr("class")+" clickable"),n},Pt=(r,t)=>{X[t.id]=r},tr=()=>{X={}},rr=r=>{const t=X[r.id];x.trace("Transforming node",r.diff,r,"translate("+(r.x-r.width/2-5)+", "+r.width/2+")");const e=8,n=r.diff||0;return r.clusterNode?t.attr("transform","translate("+(r.x+n-r.width/2)+", "+(r.y-r.height/2-e)+")"):t.attr("transform","translate("+r.x+", "+r.y+")"),n};let D={},S={};const ar=()=>{D={},S={}},er=(r,t)=>{const e=H(w().flowchart.htmlLabels),n=t.labelType==="markdown"?P(r,t.label,{style:t.labelStyle,useHtmlLabels:e,addSvgBackground:!0}):R(t.label,t.labelStyle);x.info("abc82",t,t.labelType);const a=r.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(n);let i=n.getBBox();if(e){const c=n.children[0],o=B(n);i=c.getBoundingClientRect(),o.attr("width",i.width),o.attr("height",i.height)}s.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),D[t.id]=a,t.width=i.width,t.height=i.height;let l;if(t.startLabelLeft){const c=R(t.startLabelLeft,t.labelStyle),o=r.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),S[t.id]||(S[t.id]={}),S[t.id].startLeft=o,A(l,t.startLabelLeft)}if(t.startLabelRight){const c=R(t.startLabelRight,t.labelStyle),o=r.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=o.node().appendChild(c),h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),S[t.id]||(S[t.id]={}),S[t.id].startRight=o,A(l,t.startLabelRight)}if(t.endLabelLeft){const c=R(t.endLabelLeft,t.labelStyle),o=r.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),o.node().appendChild(c),S[t.id]||(S[t.id]={}),S[t.id].endLeft=o,A(l,t.endLabelLeft)}if(t.endLabelRight){const c=R(t.endLabelRight,t.labelStyle),o=r.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),o.node().appendChild(c),S[t.id]||(S[t.id]={}),S[t.id].endRight=o,A(l,t.endLabelRight)}return n};function A(r,t){w().flowchart.htmlLabels&&r&&(r.style.width=t.length*9+"px",r.style.height="12px")}const sr=(r,t)=>{x.info("Moving label abc78 ",r.id,r.label,D[r.id]);let e=t.updatedPath?t.updatedPath:t.originalPath;if(r.label){const n=D[r.id];let a=r.x,s=r.y;if(e){const i=U.calcLabelPosition(e);x.info("Moving label "+r.label+" from (",a,",",s,") to (",i.x,",",i.y,") abc78"),t.updatedPath&&(a=i.x,s=i.y)}n.attr("transform","translate("+a+", "+s+")")}if(r.startLabelLeft){const n=S[r.id].startLeft;let a=r.x,s=r.y;if(e){const i=U.calcTerminalLabelPosition(r.arrowTypeStart?10:0,"start_left",e);a=i.x,s=i.y}n.attr("transform","translate("+a+", "+s+")")}if(r.startLabelRight){const n=S[r.id].startRight;let a=r.x,s=r.y;if(e){const i=U.calcTerminalLabelPosition(r.arrowTypeStart?10:0,"start_right",e);a=i.x,s=i.y}n.attr("transform","translate("+a+", "+s+")")}if(r.endLabelLeft){const n=S[r.id].endLeft;let a=r.x,s=r.y;if(e){const i=U.calcTerminalLabelPosition(r.arrowTypeEnd?10:0,"end_left",e);a=i.x,s=i.y}n.attr("transform","translate("+a+", "+s+")")}if(r.endLabelRight){const n=S[r.id].endRight;let a=r.x,s=r.y;if(e){const i=U.calcTerminalLabelPosition(r.arrowTypeEnd?10:0,"end_right",e);a=i.x,s=i.y}n.attr("transform","translate("+a+", "+s+")")}},Zt=(r,t)=>{const e=r.x,n=r.y,a=Math.abs(t.x-e),s=Math.abs(t.y-n),i=r.width/2,l=r.height/2;return a>=i||s>=l},Ft=(r,t,e)=>{x.warn(`intersection calc abc89:
outsidePoint: ${JSON.stringify(t)}
insidePoint : ${JSON.stringify(e)}
node : x:${r.x} y:${r.y} w:${r.width} h:${r.height}`);const n=r.x,a=r.y,s=Math.abs(n-e.x),i=r.width/2;let l=e.xMath.abs(n-t.x)*c){let f=e.y{x.warn("abc88 cutPathAtIntersect",r,t);let e=[],n=r[0],a=!1;return r.forEach(s=>{if(x.info("abc88 checking point",s,t),!Zt(t,s)&&!a){const i=Ft(t,n,s);x.warn("abc88 inside",s,n,i),x.warn("abc88 intersection",i);let l=!1;e.forEach(c=>{l=l||c.x===i.x&&c.y===i.y}),e.some(c=>c.x===i.x&&c.y===i.y)?x.warn("abc88 no intersect",i,e):e.push(i),a=!0}else x.warn("abc88 outside",s,n),n=s,a||e.push(s)}),x.warn("abc88 returning points",e),e},ir=function(r,t,e,n,a,s){let i=e.points,l=!1;const c=s.node(t.v);var o=s.node(t.w);x.info("abc88 InsertEdge: ",e),o.intersect&&c.intersect&&(i=i.slice(1,e.points.length-1),i.unshift(c.intersect(i[0])),x.info("Last point",i[i.length-1],o,o.intersect(i[i.length-1])),i.push(o.intersect(i[i.length-1]))),e.toCluster&&(x.info("to cluster abc88",n[e.toCluster]),i=G(e.points,n[e.toCluster].node),l=!0),e.fromCluster&&(x.info("from cluster abc88",n[e.fromCluster]),i=G(i.reverse(),n[e.fromCluster].node).reverse(),l=!0);const h=i.filter(u=>!Number.isNaN(u.y));let f;a==="graph"||a==="flowchart"?f=e.curve||F:f=F;const b=et().x(function(u){return u.x}).y(function(u){return u.y}).curve(f);let d;switch(e.thickness){case"normal":d="edge-thickness-normal";break;case"thick":d="edge-thickness-thick";break;case"invisible":d="edge-thickness-thick";break;default:d=""}switch(e.pattern){case"solid":d+=" edge-pattern-solid";break;case"dotted":d+=" edge-pattern-dotted";break;case"dashed":d+=" edge-pattern-dashed";break}const p=r.append("path").attr("d",b(h)).attr("id",e.id).attr("class"," "+d+(e.classes?" "+e.classes:"")).attr("style",e.style);let y="";switch((w().flowchart.arrowMarkerAbsolute||w().state.arrowMarkerAbsolute)&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),x.info("arrowTypeStart",e.arrowTypeStart),x.info("arrowTypeEnd",e.arrowTypeEnd),e.arrowTypeStart){case"arrow_cross":p.attr("marker-start","url("+y+"#"+a+"-crossStart)");break;case"arrow_point":p.attr("marker-start","url("+y+"#"+a+"-pointStart)");break;case"arrow_barb":p.attr("marker-start","url("+y+"#"+a+"-barbStart)");break;case"arrow_circle":p.attr("marker-start","url("+y+"#"+a+"-circleStart)");break;case"aggregation":p.attr("marker-start","url("+y+"#"+a+"-aggregationStart)");break;case"extension":p.attr("marker-start","url("+y+"#"+a+"-extensionStart)");break;case"composition":p.attr("marker-start","url("+y+"#"+a+"-compositionStart)");break;case"dependency":p.attr("marker-start","url("+y+"#"+a+"-dependencyStart)");break;case"lollipop":p.attr("marker-start","url("+y+"#"+a+"-lollipopStart)");break}switch(e.arrowTypeEnd){case"arrow_cross":p.attr("marker-end","url("+y+"#"+a+"-crossEnd)");break;case"arrow_point":p.attr("marker-end","url("+y+"#"+a+"-pointEnd)");break;case"arrow_barb":p.attr("marker-end","url("+y+"#"+a+"-barbEnd)");break;case"arrow_circle":p.attr("marker-end","url("+y+"#"+a+"-circleEnd)");break;case"aggregation":p.attr("marker-end","url("+y+"#"+a+"-aggregationEnd)");break;case"extension":p.attr("marker-end","url("+y+"#"+a+"-extensionEnd)");break;case"composition":p.attr("marker-end","url("+y+"#"+a+"-compositionEnd)");break;case"dependency":p.attr("marker-end","url("+y+"#"+a+"-dependencyEnd)");break;case"lollipop":p.attr("marker-end","url("+y+"#"+a+"-lollipopEnd)");break}let g={};return l&&(g.updatedPath=i),g.originalPath=e.points,g};export{Gt as a,er as b,ir as c,sr as d,tr as e,ar as f,R as g,Lt as h,Kt as i,E as l,rr as p,Pt as s,k as u};
-//# sourceMappingURL=edges-b00f0ec2-4a286a23.js.map
+//# sourceMappingURL=edges-b00f0ec2-c94d81e0.js.map
diff --git a/docs/assets/edges-b00f0ec2-4a286a23.js.map b/docs/assets/edges-b00f0ec2-c94d81e0.js.map
similarity index 99%
rename from docs/assets/edges-b00f0ec2-4a286a23.js.map
rename to docs/assets/edges-b00f0ec2-c94d81e0.js.map
index 47a9b53d..c36f924e 100644
--- a/docs/assets/edges-b00f0ec2-4a286a23.js.map
+++ b/docs/assets/edges-b00f0ec2-c94d81e0.js.map
@@ -1 +1 @@
-{"version":3,"file":"edges-b00f0ec2-4a286a23.js","sources":["../../node_modules/mermaid/dist/edges-b00f0ec2.js"],"sourcesContent":["import { l as log, n as evaluate, c as getConfig, H as decodeEntities, d as sanitizeText, u as utils } from \"./mermaid-a98f434b.js\";\nimport { select, curveBasis, line } from \"d3\";\nimport { c as createText } from \"./createText-285e50b4.js\";\nimport { p as parseMember } from \"./svgDraw-5d8a058e.js\";\nconst insertMarkers = (elem, markerArray, type, id) => {\n markerArray.forEach((markerName) => {\n markers[markerName](elem, type, id);\n });\n};\nconst extension = (elem, type, id) => {\n log.trace(\"Making markers for \", id);\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-extensionStart\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,7 L18,13 V 1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-extensionEnd\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 V 13 L18,7 Z\");\n};\nconst composition = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-compositionStart\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-compositionEnd\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n};\nconst aggregation = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-aggregationStart\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-aggregationEnd\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n};\nconst dependency = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-dependencyStart\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 5,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-dependencyEnd\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n};\nconst lollipop = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-lollipopStart\").attr(\"class\", \"marker lollipop \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"circle\").attr(\"stroke\", \"black\").attr(\"fill\", \"white\").attr(\"cx\", 6).attr(\"cy\", 7).attr(\"r\", 6);\n};\nconst point = (elem, type) => {\n elem.append(\"marker\").attr(\"id\", type + \"-pointEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 10).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", type + \"-pointStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 0).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 5 L 10 10 L 10 0 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n};\nconst circle$1 = (elem, type) => {\n elem.append(\"marker\").attr(\"id\", type + \"-circleEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 11).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", type + \"-circleStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", -1).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n};\nconst cross = (elem, type) => {\n elem.append(\"marker\").attr(\"id\", type + \"-crossEnd\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", 12).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", type + \"-crossStart\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", -1).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n};\nconst barb = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-barbEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 14).attr(\"markerUnits\", \"strokeWidth\").attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 19,7 L9,13 L14,7 L9,1 Z\");\n};\nconst markers = {\n extension,\n composition,\n aggregation,\n dependency,\n lollipop,\n point,\n circle: circle$1,\n cross,\n barb\n};\nconst insertMarkers$1 = insertMarkers;\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\nfunction addHtmlLabel(node) {\n const fo = select(document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\"));\n const div = fo.append(\"xhtml:div\");\n const label = node.label;\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n div.html(\n '\" + label + \"\"\n );\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"inline-block\");\n div.style(\"white-space\", \"nowrap\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n return fo.node();\n}\nconst createLabel = (_vertexText, style, isTitle, isNode) => {\n let vertexText = _vertexText || \"\";\n if (typeof vertexText === \"object\") {\n vertexText = vertexText[0];\n }\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n vertexText = vertexText.replace(/\\\\n|\\n/g, \"
\");\n log.info(\"vertexText\" + vertexText);\n const node = {\n isNode,\n label: decodeEntities(vertexText).replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n ),\n labelStyle: style.replace(\"fill:\", \"color:\")\n };\n let vertexNode = addHtmlLabel(node);\n return vertexNode;\n } else {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"style\", style.replace(\"color:\", \"fill:\"));\n let rows = [];\n if (typeof vertexText === \"string\") {\n rows = vertexText.split(/\\\\n|\\n|
/gi);\n } else if (Array.isArray(vertexText)) {\n rows = vertexText;\n } else {\n rows = [];\n }\n for (const row of rows) {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n if (isTitle) {\n tspan.setAttribute(\"class\", \"title-row\");\n } else {\n tspan.setAttribute(\"class\", \"row\");\n }\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }\n};\nconst createLabel$1 = createLabel;\nconst labelHelper = async (parent, node, _classes, isNode) => {\n let classes;\n const useHtmlLabels = node.useHtmlLabels || evaluate(getConfig().flowchart.htmlLabels);\n if (!_classes) {\n classes = \"node default\";\n } else {\n classes = _classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", node.labelStyle);\n let labelText;\n if (node.labelText === void 0) {\n labelText = \"\";\n } else {\n labelText = typeof node.labelText === \"string\" ? node.labelText : node.labelText[0];\n }\n const textNode = label.node();\n let text;\n if (node.labelType === \"markdown\") {\n text = createText(label, sanitizeText(decodeEntities(labelText), getConfig()), {\n useHtmlLabels,\n width: node.width || getConfig().flowchart.wrappingWidth,\n classes: \"markdown-node-label\"\n });\n } else {\n text = textNode.appendChild(\n createLabel$1(\n sanitizeText(decodeEntities(labelText), getConfig()),\n node.labelStyle,\n false,\n isNode\n )\n );\n }\n let bbox = text.getBBox();\n const halfPadding = node.padding / 2;\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n const images = div.getElementsByTagName(\"img\");\n if (images) {\n const noImgText = labelText.replace(/
]*>/g, \"\").trim() === \"\";\n await Promise.all(\n [...images].map(\n (img) => new Promise((res) => {\n function setupImage() {\n img.style.display = \"flex\";\n img.style.flexDirection = \"column\";\n if (noImgText) {\n const bodyFontSize = getConfig().fontSize ? getConfig().fontSize : window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n img.style.width = parseInt(bodyFontSize, 10) * enlargingFactor + \"px\";\n } else {\n img.style.width = \"100%\";\n }\n res(img);\n }\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener(\"error\", setupImage);\n img.addEventListener(\"load\", setupImage);\n })\n )\n );\n }\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n label.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (node.centerLabel) {\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n label.insert(\"rect\", \":first-child\");\n return { shapeSvg, bbox, halfPadding, label };\n};\nconst updateNodeBounds = (node, element) => {\n const bbox = element.node().getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n};\nfunction insertPolygonShape(parent, w, h, points) {\n return parent.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n ).attr(\"class\", \"label-container\").attr(\"transform\", \"translate(\" + -w / 2 + \",\" + h / 2 + \")\");\n}\nfunction intersectNode(node, point2) {\n return node.intersect(point2);\n}\nfunction intersectEllipse(node, rx, ry, point2) {\n var cx = node.x;\n var cy = node.y;\n var px = cx - point2.x;\n var py = cy - point2.y;\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n var dx = Math.abs(rx * ry * px / det);\n if (point2.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs(rx * ry * py / det);\n if (point2.y < cy) {\n dy = -dy;\n }\n return { x: cx + dx, y: cy + dy };\n}\nfunction intersectCircle(node, rx, point2) {\n return intersectEllipse(node, rx, rx, point2);\n}\nfunction intersectLine(p1, p2, q1, q2) {\n var a1, a2, b1, b2, c1, c2;\n var r1, r2, r3, r4;\n var denom, offset, num;\n var x, y;\n a1 = p2.y - p1.y;\n b1 = p1.x - p2.x;\n c1 = p2.x * p1.y - p1.x * p2.y;\n r3 = a1 * q1.x + b1 * q1.y + c1;\n r4 = a1 * q2.x + b1 * q2.y + c1;\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return;\n }\n a2 = q2.y - q1.y;\n b2 = q1.x - q2.x;\n c2 = q2.x * q1.y - q1.x * q2.y;\n r1 = a2 * p1.x + b2 * p1.y + c2;\n r2 = a2 * p2.x + b2 * p2.y + c2;\n if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) {\n return;\n }\n denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return;\n }\n offset = Math.abs(denom / 2);\n num = b1 * c2 - b2 * c1;\n x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n num = a2 * c1 - a1 * c2;\n y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n return { x, y };\n}\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\nfunction intersectPolygon(node, polyPoints, point2) {\n var x1 = node.x;\n var y1 = node.y;\n var intersections = [];\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n if (typeof polyPoints.forEach === \"function\") {\n polyPoints.forEach(function(entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n } else {\n minX = Math.min(minX, polyPoints.x);\n minY = Math.min(minY, polyPoints.y);\n }\n var left = x1 - node.width / 2 - minX;\n var top = y1 - node.height / 2 - minY;\n for (var i = 0; i < polyPoints.length; i++) {\n var p1 = polyPoints[i];\n var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n var intersect2 = intersectLine(\n node,\n point2,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect2) {\n intersections.push(intersect2);\n }\n }\n if (!intersections.length) {\n return node;\n }\n if (intersections.length > 1) {\n intersections.sort(function(p, q) {\n var pdx = p.x - point2.x;\n var pdy = p.y - point2.y;\n var distp = Math.sqrt(pdx * pdx + pdy * pdy);\n var qdx = q.x - point2.x;\n var qdy = q.y - point2.y;\n var distq = Math.sqrt(qdx * qdx + qdy * qdy);\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\nconst intersectRect = (node, point2) => {\n var x = node.x;\n var y = node.y;\n var dx = point2.x - x;\n var dy = point2.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : h * dx / dy;\n sy = h;\n } else {\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : w * dy / dx;\n }\n return { x: x + sx, y: y + sy };\n};\nconst intersectRect$1 = intersectRect;\nconst intersect = {\n node: intersectNode,\n circle: intersectCircle,\n ellipse: intersectEllipse,\n polygon: intersectPolygon,\n rect: intersectRect$1\n};\nconst note = async (parent, node) => {\n const useHtmlLabels = node.useHtmlLabels || getConfig().flowchart.htmlLabels;\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes,\n true\n );\n log.info(\"Classes = \", node.classes);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst note$1 = note;\nconst question = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ];\n log.info(\"Question main (Circle)\");\n const questionElem = insertPolygonShape(shapeSvg, s, s, points);\n questionElem.attr(\"style\", node.style);\n updateNodeBounds(node, questionElem);\n node.intersect = function(point2) {\n log.warn(\"Intersect called\");\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst choice = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const s = 28;\n const points = [\n { x: 0, y: s / 2 },\n { x: s / 2, y: 0 },\n { x: 0, y: -s / 2 },\n { x: -s / 2, y: 0 }\n ];\n const choice2 = shapeSvg.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n );\n choice2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 28).attr(\"height\", 28);\n node.width = 28;\n node.height = 28;\n node.intersect = function(point2) {\n return intersect.circle(node, 14, point2);\n };\n return shapeSvg;\n};\nconst hexagon = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const f = 4;\n const h = bbox.height + node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n const points = [\n { x: m, y: 0 },\n { x: w - m, y: 0 },\n { x: w, y: -h / 2 },\n { x: w - m, y: -h },\n { x: m, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const hex = insertPolygonShape(shapeSvg, w, h, points);\n hex.attr(\"style\", node.style);\n updateNodeBounds(node, hex);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst rect_left_inv_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -h / 2, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: -h / 2, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n node.width = w + h;\n node.height = h;\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst lean_right = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst lean_left = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 2 * h / 6, y: 0 },\n { x: w + h / 6, y: 0 },\n { x: w - 2 * h / 6, y: -h },\n { x: -h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst trapezoid = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w + 2 * h / 6, y: 0 },\n { x: w - h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst inv_trapezoid = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: -2 * h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst rect_right_inv_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w + h / 2, y: 0 },\n { x: w, y: -h / 2 },\n { x: w + h / 2, y: -h },\n { x: 0, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst cylinder = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = bbox.height + ry + node.padding;\n const shape = \"M 0,\" + ry + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 a \" + rx + \",\" + ry + \" 0,0,0 \" + -w + \" 0 l 0,\" + h + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 l 0,\" + -h;\n const el = shapeSvg.attr(\"label-offset-y\", ry).insert(\"path\", \":first-child\").attr(\"style\", node.style).attr(\"d\", shape).attr(\"transform\", \"translate(\" + -w / 2 + \",\" + -(h / 2 + ry) + \")\");\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n const pos = intersect.rect(node, point2);\n const x = pos.x - node.x;\n if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y != 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point2.y - node.y > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n};\nconst rect = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes,\n true\n );\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = bbox.width + node.padding;\n const totalHeight = bbox.height + node.padding;\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst labelRect = async (parent, node) => {\n const { shapeSvg } = await labelHelper(parent, node, \"label\", true);\n log.trace(\"Classes = \", node.classes);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = 0;\n const totalHeight = 0;\n rect2.attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n shapeSvg.attr(\"class\", \"label edgeLabel\");\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nfunction applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) {\n const strokeDashArray = [];\n const addBorder = (length) => {\n strokeDashArray.push(length, 0);\n };\n const skipBorder = (length) => {\n strokeDashArray.push(0, length);\n };\n if (borders.includes(\"t\")) {\n log.debug(\"add top border\");\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes(\"r\")) {\n log.debug(\"add right border\");\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n if (borders.includes(\"b\")) {\n log.debug(\"add bottom border\");\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes(\"l\")) {\n log.debug(\"add left border\");\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n rect2.attr(\"stroke-dasharray\", strokeDashArray.join(\" \"));\n}\nconst rectWithTitle = (parent, node) => {\n let classes;\n if (!node.classes) {\n classes = \"node default\";\n } else {\n classes = \"node \" + node.classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const innerLine = shapeSvg.insert(\"line\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\");\n const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText;\n let title = \"\";\n if (typeof text2 === \"object\") {\n title = text2[0];\n } else {\n title = text2;\n }\n log.info(\"Label text abc79\", title, text2, typeof text2 === \"object\");\n const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true));\n let bbox = { width: 0, height: 0 };\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n log.info(\"Text 2\", text2);\n const textRows = text2.slice(1, text2.length);\n let titleBox = text.getBBox();\n const descr = label.node().appendChild(\n createLabel$1(textRows.join ? textRows.join(\"
\") : textRows, node.labelStyle, true, true)\n );\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = descr.children[0];\n const dv = select(descr);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const halfPadding = node.padding / 2;\n select(descr).attr(\n \"transform\",\n \"translate( \" + // (titleBox.width - bbox.width) / 2 +\n (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + \", \" + (titleBox.height + halfPadding + 5) + \")\"\n );\n select(text).attr(\n \"transform\",\n \"translate( \" + // (titleBox.width - bbox.width) / 2 +\n (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + \", 0)\"\n );\n bbox = label.node().getBBox();\n label.attr(\n \"transform\",\n \"translate(\" + -bbox.width / 2 + \", \" + (-bbox.height / 2 - halfPadding + 3) + \")\"\n );\n rect2.attr(\"class\", \"outer title-state\").attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n innerLine.attr(\"class\", \"divider\").attr(\"x1\", -bbox.width / 2 - halfPadding).attr(\"x2\", bbox.width / 2 + halfPadding).attr(\"y1\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr(\"y2\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst stadium = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\").attr(\"style\", node.style).attr(\"rx\", h / 2).attr(\"ry\", h / 2).attr(\"x\", -w / 2).attr(\"y\", -h / 2).attr(\"width\", w).attr(\"height\", h);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst circle = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, void 0, true);\n const circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n log.info(\"Circle main\");\n updateNodeBounds(node, circle2);\n node.intersect = function(point2) {\n log.info(\"Circle intersect\", node, bbox.width / 2 + halfPadding, point2);\n return intersect.circle(node, bbox.width / 2 + halfPadding, point2);\n };\n return shapeSvg;\n};\nconst doublecircle = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, void 0, true);\n const gap = 5;\n const circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n const outerCircle = circleGroup.insert(\"circle\");\n const innerCircle = circleGroup.insert(\"circle\");\n circleGroup.attr(\"class\", node.class);\n outerCircle.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding + gap).attr(\"width\", bbox.width + node.padding + gap * 2).attr(\"height\", bbox.height + node.padding + gap * 2);\n innerCircle.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n log.info(\"DoubleCircle main\");\n updateNodeBounds(node, outerCircle);\n node.intersect = function(point2) {\n log.info(\"DoubleCircle intersect\", node, bbox.width / 2 + halfPadding + gap, point2);\n return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2);\n };\n return shapeSvg;\n};\nconst subroutine = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst start = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n updateNodeBounds(node, circle2);\n node.intersect = function(point2) {\n return intersect.circle(node, 7, point2);\n };\n return shapeSvg;\n};\nconst forkJoin = (parent, node, dir) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n let width = 70;\n let height = 10;\n if (dir === \"LR\") {\n width = 10;\n height = 70;\n }\n const shape = shapeSvg.append(\"rect\").attr(\"x\", -1 * width / 2).attr(\"y\", -1 * height / 2).attr(\"width\", width).attr(\"height\", height).attr(\"class\", \"fork-join\");\n updateNodeBounds(node, shape);\n node.height = node.height + node.padding / 2;\n node.width = node.width + node.padding / 2;\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst end = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const innerCircle = shapeSvg.insert(\"circle\", \":first-child\");\n const circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n innerCircle.attr(\"class\", \"state-end\").attr(\"r\", 5).attr(\"width\", 10).attr(\"height\", 10);\n updateNodeBounds(node, circle2);\n node.intersect = function(point2) {\n return intersect.circle(node, 7, point2);\n };\n return shapeSvg;\n};\nconst class_box = (parent, node) => {\n const halfPadding = node.padding / 2;\n const rowPadding = 4;\n const lineHeight = 8;\n let classes;\n if (!node.classes) {\n classes = \"node default\";\n } else {\n classes = \"node \" + node.classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const topLine = shapeSvg.insert(\"line\");\n const bottomLine = shapeSvg.insert(\"line\");\n let maxWidth = 0;\n let maxHeight = rowPadding;\n const labelContainer = shapeSvg.insert(\"g\").attr(\"class\", \"label\");\n let verticalPos = 0;\n const hasInterface = node.classData.annotations && node.classData.annotations[0];\n const interfaceLabelText = node.classData.annotations[0] ? \"«\" + node.classData.annotations[0] + \"»\" : \"\";\n const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true));\n let interfaceBBox = interfaceLabel.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = interfaceLabel.children[0];\n const dv = select(interfaceLabel);\n interfaceBBox = div.getBoundingClientRect();\n dv.attr(\"width\", interfaceBBox.width);\n dv.attr(\"height\", interfaceBBox.height);\n }\n if (node.classData.annotations[0]) {\n maxHeight += interfaceBBox.height + rowPadding;\n maxWidth += interfaceBBox.width;\n }\n let classTitleString = node.classData.label;\n if (node.classData.type !== void 0 && node.classData.type !== \"\") {\n if (getConfig().flowchart.htmlLabels) {\n classTitleString += \"<\" + node.classData.type + \">\";\n } else {\n classTitleString += \"<\" + node.classData.type + \">\";\n }\n }\n const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true));\n select(classTitleLabel).attr(\"class\", \"classTitle\");\n let classTitleBBox = classTitleLabel.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = classTitleLabel.children[0];\n const dv = select(classTitleLabel);\n classTitleBBox = div.getBoundingClientRect();\n dv.attr(\"width\", classTitleBBox.width);\n dv.attr(\"height\", classTitleBBox.height);\n }\n maxHeight += classTitleBBox.height + rowPadding;\n if (classTitleBBox.width > maxWidth) {\n maxWidth = classTitleBBox.width;\n }\n const classAttributes = [];\n node.classData.members.forEach((str) => {\n const parsedInfo = parseMember(str);\n let parsedText = parsedInfo.displayText;\n if (getConfig().flowchart.htmlLabels) {\n parsedText = parsedText.replace(//g, \">\");\n }\n const lbl = labelContainer.node().appendChild(\n createLabel$1(\n parsedText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classAttributes.push(lbl);\n });\n maxHeight += lineHeight;\n const classMethods = [];\n node.classData.methods.forEach((str) => {\n const parsedInfo = parseMember(str);\n let displayText = parsedInfo.displayText;\n if (getConfig().flowchart.htmlLabels) {\n displayText = displayText.replace(//g, \">\");\n }\n const lbl = labelContainer.node().appendChild(\n createLabel$1(\n displayText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classMethods.push(lbl);\n });\n maxHeight += lineHeight;\n if (hasInterface) {\n let diffX2 = (maxWidth - interfaceBBox.width) / 2;\n select(interfaceLabel).attr(\n \"transform\",\n \"translate( \" + (-1 * maxWidth / 2 + diffX2) + \", \" + -1 * maxHeight / 2 + \")\"\n );\n verticalPos = interfaceBBox.height + rowPadding;\n }\n let diffX = (maxWidth - classTitleBBox.width) / 2;\n select(classTitleLabel).attr(\n \"transform\",\n \"translate( \" + (-1 * maxWidth / 2 + diffX) + \", \" + (-1 * maxHeight / 2 + verticalPos) + \")\"\n );\n verticalPos += classTitleBBox.height + rowPadding;\n topLine.attr(\"class\", \"divider\").attr(\"x1\", -maxWidth / 2 - halfPadding).attr(\"x2\", maxWidth / 2 + halfPadding).attr(\"y1\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr(\"y2\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n verticalPos += lineHeight;\n classAttributes.forEach((lbl) => {\n select(lbl).attr(\n \"transform\",\n \"translate( \" + -maxWidth / 2 + \", \" + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + \")\"\n );\n const memberBBox = lbl == null ? void 0 : lbl.getBBox();\n verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding;\n });\n verticalPos += lineHeight;\n bottomLine.attr(\"class\", \"divider\").attr(\"x1\", -maxWidth / 2 - halfPadding).attr(\"x2\", maxWidth / 2 + halfPadding).attr(\"y1\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr(\"y2\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n verticalPos += lineHeight;\n classMethods.forEach((lbl) => {\n select(lbl).attr(\n \"transform\",\n \"translate( \" + -maxWidth / 2 + \", \" + (-1 * maxHeight / 2 + verticalPos) + \")\"\n );\n const memberBBox = lbl == null ? void 0 : lbl.getBBox();\n verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding;\n });\n rect2.attr(\"class\", \"outer title-state\").attr(\"x\", -maxWidth / 2 - halfPadding).attr(\"y\", -(maxHeight / 2) - halfPadding).attr(\"width\", maxWidth + node.padding).attr(\"height\", maxHeight + node.padding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst shapes = {\n rhombus: question,\n question,\n rect,\n labelRect,\n rectWithTitle,\n choice,\n circle,\n doublecircle,\n stadium,\n hexagon,\n rect_left_inv_arrow,\n lean_right,\n lean_left,\n trapezoid,\n inv_trapezoid,\n rect_right_inv_arrow,\n cylinder,\n start,\n end,\n note: note$1,\n subroutine,\n fork: forkJoin,\n join: forkJoin,\n class_box\n};\nlet nodeElems = {};\nconst insertNode = async (elem, node, dir) => {\n let newEl;\n let el;\n if (node.link) {\n let target;\n if (getConfig().securityLevel === \"sandbox\") {\n target = \"_top\";\n } else if (node.linkTarget) {\n target = node.linkTarget || \"_blank\";\n }\n newEl = elem.insert(\"svg:a\").attr(\"xlink:href\", node.link).attr(\"target\", target);\n el = await shapes[node.shape](newEl, node, dir);\n } else {\n el = await shapes[node.shape](elem, node, dir);\n newEl = el;\n }\n if (node.tooltip) {\n el.attr(\"title\", node.tooltip);\n }\n if (node.class) {\n el.attr(\"class\", \"node default \" + node.class);\n }\n nodeElems[node.id] = newEl;\n if (node.haveCallback) {\n nodeElems[node.id].attr(\"class\", nodeElems[node.id].attr(\"class\") + \" clickable\");\n }\n return newEl;\n};\nconst setNodeElem = (elem, node) => {\n nodeElems[node.id] = elem;\n};\nconst clear$1 = () => {\n nodeElems = {};\n};\nconst positionNode = (node) => {\n const el = nodeElems[node.id];\n log.trace(\n \"Transforming node\",\n node.diff,\n node,\n \"translate(\" + (node.x - node.width / 2 - 5) + \", \" + node.width / 2 + \")\"\n );\n const padding = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n \"transform\",\n \"translate(\" + (node.x + diff - node.width / 2) + \", \" + (node.y - node.height / 2 - padding) + \")\"\n );\n } else {\n el.attr(\"transform\", \"translate(\" + node.x + \", \" + node.y + \")\");\n }\n return diff;\n};\nlet edgeLabels = {};\nlet terminalLabels = {};\nconst clear = () => {\n edgeLabels = {};\n terminalLabels = {};\n};\nconst insertEdgeLabel = (elem, edge) => {\n const useHtmlLabels = evaluate(getConfig().flowchart.htmlLabels);\n const labelElement = edge.labelType === \"markdown\" ? createText(elem, edge.label, {\n style: edge.labelStyle,\n useHtmlLabels,\n addSvgBackground: true\n }) : createLabel$1(edge.label, edge.labelStyle);\n log.info(\"abc82\", edge, edge.labelType);\n const edgeLabel = elem.insert(\"g\").attr(\"class\", \"edgeLabel\");\n const label = edgeLabel.insert(\"g\").attr(\"class\", \"label\");\n label.node().appendChild(labelElement);\n let bbox = labelElement.getBBox();\n if (useHtmlLabels) {\n const div = labelElement.children[0];\n const dv = select(labelElement);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n edgeLabels[edge.id] = edgeLabel;\n edge.width = bbox.width;\n edge.height = bbox.height;\n let fo;\n if (edge.startLabelLeft) {\n const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle);\n const startEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startLeft = startEdgeLabelLeft;\n setTerminalWidth(fo, edge.startLabelLeft);\n }\n if (edge.startLabelRight) {\n const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle);\n const startEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = startEdgeLabelRight.node().appendChild(startLabelElement);\n inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startRight = startEdgeLabelRight;\n setTerminalWidth(fo, edge.startLabelRight);\n }\n if (edge.endLabelLeft) {\n const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle);\n const endEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelLeft.node().appendChild(endLabelElement);\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endLeft = endEdgeLabelLeft;\n setTerminalWidth(fo, edge.endLabelLeft);\n }\n if (edge.endLabelRight) {\n const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle);\n const endEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelRight.node().appendChild(endLabelElement);\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endRight = endEdgeLabelRight;\n setTerminalWidth(fo, edge.endLabelRight);\n }\n return labelElement;\n};\nfunction setTerminalWidth(fo, value) {\n if (getConfig().flowchart.htmlLabels && fo) {\n fo.style.width = value.length * 9 + \"px\";\n fo.style.height = \"12px\";\n }\n}\nconst positionEdgeLabel = (edge, paths) => {\n log.info(\"Moving label abc78 \", edge.id, edge.label, edgeLabels[edge.id]);\n let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n if (edge.label) {\n const el = edgeLabels[edge.id];\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcLabelPosition(path);\n log.info(\n \"Moving label \" + edge.label + \" from (\",\n x,\n \",\",\n y,\n \") to (\",\n pos.x,\n \",\",\n pos.y,\n \") abc78\"\n );\n if (paths.updatedPath) {\n x = pos.x;\n y = pos.y;\n }\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n if (edge.startLabelLeft) {\n const el = terminalLabels[edge.id].startLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, \"start_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n if (edge.startLabelRight) {\n const el = terminalLabels[edge.id].startRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(\n edge.arrowTypeStart ? 10 : 0,\n \"start_right\",\n path\n );\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n if (edge.endLabelLeft) {\n const el = terminalLabels[edge.id].endLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n if (edge.endLabelRight) {\n const el = terminalLabels[edge.id].endRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_right\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n};\nconst outsideNode = (node, point2) => {\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(point2.x - x);\n const dy = Math.abs(point2.y - y);\n const w = node.width / 2;\n const h = node.height / 2;\n if (dx >= w || dy >= h) {\n return true;\n }\n return false;\n};\nconst intersection = (node, outsidePoint, insidePoint) => {\n log.warn(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(outsidePoint)}\n insidePoint : ${JSON.stringify(insidePoint)}\n node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`);\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(x - insidePoint.x);\n const w = node.width / 2;\n let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx;\n const h = node.height / 2;\n const Q = Math.abs(outsidePoint.y - insidePoint.y);\n const R = Math.abs(outsidePoint.x - insidePoint.x);\n if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) {\n let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;\n r = R * q / Q;\n const res = {\n x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r,\n y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q\n };\n if (r === 0) {\n res.x = outsidePoint.x;\n res.y = outsidePoint.y;\n }\n if (R === 0) {\n res.x = outsidePoint.x;\n }\n if (Q === 0) {\n res.y = outsidePoint.y;\n }\n log.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res);\n return res;\n } else {\n if (insidePoint.x < outsidePoint.x) {\n r = outsidePoint.x - w - x;\n } else {\n r = x - w - outsidePoint.x;\n }\n let q = Q * r / R;\n let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r;\n let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q;\n log.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y });\n if (r === 0) {\n _x = outsidePoint.x;\n _y = outsidePoint.y;\n }\n if (R === 0) {\n _x = outsidePoint.x;\n }\n if (Q === 0) {\n _y = outsidePoint.y;\n }\n return { x: _x, y: _y };\n }\n};\nconst cutPathAtIntersect = (_points, boundryNode) => {\n log.warn(\"abc88 cutPathAtIntersect\", _points, boundryNode);\n let points = [];\n let lastPointOutside = _points[0];\n let isInside = false;\n _points.forEach((point2) => {\n log.info(\"abc88 checking point\", point2, boundryNode);\n if (!outsideNode(boundryNode, point2) && !isInside) {\n const inter = intersection(boundryNode, lastPointOutside, point2);\n log.warn(\"abc88 inside\", point2, lastPointOutside, inter);\n log.warn(\"abc88 intersection\", inter);\n let pointPresent = false;\n points.forEach((p) => {\n pointPresent = pointPresent || p.x === inter.x && p.y === inter.y;\n });\n if (!points.some((e) => e.x === inter.x && e.y === inter.y)) {\n points.push(inter);\n } else {\n log.warn(\"abc88 no intersect\", inter, points);\n }\n isInside = true;\n } else {\n log.warn(\"abc88 outside\", point2, lastPointOutside);\n lastPointOutside = point2;\n if (!isInside) {\n points.push(point2);\n }\n }\n });\n log.warn(\"abc88 returning points\", points);\n return points;\n};\nconst insertEdge = function(elem, e, edge, clusterDb, diagramType, graph) {\n let points = edge.points;\n let pointsHasChanged = false;\n const tail = graph.node(e.v);\n var head = graph.node(e.w);\n log.info(\"abc88 InsertEdge: \", edge);\n if (head.intersect && tail.intersect) {\n points = points.slice(1, edge.points.length - 1);\n points.unshift(tail.intersect(points[0]));\n log.info(\n \"Last point\",\n points[points.length - 1],\n head,\n head.intersect(points[points.length - 1])\n );\n points.push(head.intersect(points[points.length - 1]));\n }\n if (edge.toCluster) {\n log.info(\"to cluster abc88\", clusterDb[edge.toCluster]);\n points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node);\n pointsHasChanged = true;\n }\n if (edge.fromCluster) {\n log.info(\"from cluster abc88\", clusterDb[edge.fromCluster]);\n points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse();\n pointsHasChanged = true;\n }\n const lineData = points.filter((p) => !Number.isNaN(p.y));\n let curve;\n if (diagramType === \"graph\" || diagramType === \"flowchart\") {\n curve = edge.curve || curveBasis;\n } else {\n curve = curveBasis;\n }\n const lineFunction = line().x(function(d) {\n return d.x;\n }).y(function(d) {\n return d.y;\n }).curve(curve);\n let strokeClasses;\n switch (edge.thickness) {\n case \"normal\":\n strokeClasses = \"edge-thickness-normal\";\n break;\n case \"thick\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n case \"invisible\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n default:\n strokeClasses = \"\";\n }\n switch (edge.pattern) {\n case \"solid\":\n strokeClasses += \" edge-pattern-solid\";\n break;\n case \"dotted\":\n strokeClasses += \" edge-pattern-dotted\";\n break;\n case \"dashed\":\n strokeClasses += \" edge-pattern-dashed\";\n break;\n }\n const svgPath = elem.append(\"path\").attr(\"d\", lineFunction(lineData)).attr(\"id\", edge.id).attr(\"class\", \" \" + strokeClasses + (edge.classes ? \" \" + edge.classes : \"\")).attr(\"style\", edge.style);\n let url = \"\";\n if (getConfig().flowchart.arrowMarkerAbsolute || getConfig().state.arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\");\n url = url.replace(/\\)/g, \"\\\\)\");\n }\n log.info(\"arrowTypeStart\", edge.arrowTypeStart);\n log.info(\"arrowTypeEnd\", edge.arrowTypeEnd);\n switch (edge.arrowTypeStart) {\n case \"arrow_cross\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-crossStart)\");\n break;\n case \"arrow_point\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-pointStart)\");\n break;\n case \"arrow_barb\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-barbStart)\");\n break;\n case \"arrow_circle\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-circleStart)\");\n break;\n case \"aggregation\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-aggregationStart)\");\n break;\n case \"extension\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-extensionStart)\");\n break;\n case \"composition\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-compositionStart)\");\n break;\n case \"dependency\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-dependencyStart)\");\n break;\n case \"lollipop\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-lollipopStart)\");\n break;\n }\n switch (edge.arrowTypeEnd) {\n case \"arrow_cross\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-crossEnd)\");\n break;\n case \"arrow_point\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-pointEnd)\");\n break;\n case \"arrow_barb\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-barbEnd)\");\n break;\n case \"arrow_circle\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-circleEnd)\");\n break;\n case \"aggregation\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-aggregationEnd)\");\n break;\n case \"extension\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-extensionEnd)\");\n break;\n case \"composition\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-compositionEnd)\");\n break;\n case \"dependency\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-dependencyEnd)\");\n break;\n case \"lollipop\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-lollipopEnd)\");\n break;\n }\n let paths = {};\n if (pointsHasChanged) {\n paths.updatedPath = points;\n }\n paths.originalPath = edge.points;\n return paths;\n};\nexport {\n insertMarkers$1 as a,\n clear$1 as b,\n createLabel$1 as c,\n clear as d,\n insertNode as e,\n insertEdgeLabel as f,\n insertEdge as g,\n positionEdgeLabel as h,\n intersectRect$1 as i,\n labelHelper as l,\n positionNode as p,\n setNodeElem as s,\n updateNodeBounds as u\n};\n"],"names":["insertMarkers","elem","markerArray","type","id","markerName","markers","extension","log","composition","aggregation","dependency","lollipop","point","circle$1","cross","barb","insertMarkers$1","applyStyle","dom","styleFn","addHtmlLabel","node","fo","select","div","label","labelClass","createLabel","_vertexText","style","isTitle","isNode","vertexText","evaluate","getConfig","decodeEntities","s","svgLabel","rows","row","tspan","createLabel$1","labelHelper","parent","_classes","classes","useHtmlLabels","shapeSvg","labelText","textNode","text","createText","sanitizeText","bbox","halfPadding","dv","images","noImgText","img","res","setupImage","bodyFontSize","enlargingFactor","updateNodeBounds","element","insertPolygonShape","w","h","points","d","intersectNode","point2","intersectEllipse","rx","ry","cx","cy","px","py","det","dx","dy","intersectCircle","intersectLine","p1","p2","q1","q2","a1","a2","b1","b2","c1","c2","r1","r2","r3","r4","denom","offset","num","x","y","sameSign","intersectPolygon","polyPoints","x1","y1","intersections","minX","minY","entry","left","top","i","intersect2","q","pdx","pdy","distp","qdx","qdy","distq","intersectRect","sx","sy","intersectRect$1","intersect","note","rect2","note$1","question","questionElem","choice","hexagon","f","m","hex","rect_left_inv_arrow","lean_right","el","lean_left","trapezoid","inv_trapezoid","rect_right_inv_arrow","cylinder","shape","pos","rect","totalWidth","totalHeight","propKeys","applyNodePropertyBorders","propKey","labelRect","borders","strokeDashArray","addBorder","length","skipBorder","rectWithTitle","innerLine","text2","title","textRows","titleBox","descr","stadium","circle","circle2","doublecircle","gap","circleGroup","outerCircle","innerCircle","subroutine","start","forkJoin","dir","width","height","end","class_box","rowPadding","lineHeight","topLine","bottomLine","maxWidth","maxHeight","labelContainer","verticalPos","hasInterface","interfaceLabelText","interfaceLabel","interfaceBBox","classTitleString","classTitleLabel","classTitleBBox","classAttributes","str","parsedInfo","parseMember","parsedText","lbl","classMethods","displayText","diffX2","diffX","memberBBox","shapes","nodeElems","insertNode","newEl","target","setNodeElem","clear$1","positionNode","padding","diff","edgeLabels","terminalLabels","clear","insertEdgeLabel","edge","labelElement","edgeLabel","startLabelElement","startEdgeLabelLeft","inner","slBox","setTerminalWidth","startEdgeLabelRight","endLabelElement","endEdgeLabelLeft","endEdgeLabelRight","value","positionEdgeLabel","paths","path","utils","outsideNode","intersection","outsidePoint","insidePoint","r","Q","R","_x","_y","cutPathAtIntersect","_points","boundryNode","lastPointOutside","isInside","inter","pointPresent","p","e","insertEdge","clusterDb","diagramType","graph","pointsHasChanged","tail","head","lineData","curve","curveBasis","lineFunction","line","strokeClasses","svgPath","url"],"mappings":"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","x_google_ignoreList":[0]}
\ No newline at end of file
+{"version":3,"file":"edges-b00f0ec2-c94d81e0.js","sources":["../../node_modules/mermaid/dist/edges-b00f0ec2.js"],"sourcesContent":["import { l as log, n as evaluate, c as getConfig, H as decodeEntities, d as sanitizeText, u as utils } from \"./mermaid-a98f434b.js\";\nimport { select, curveBasis, line } from \"d3\";\nimport { c as createText } from \"./createText-285e50b4.js\";\nimport { p as parseMember } from \"./svgDraw-5d8a058e.js\";\nconst insertMarkers = (elem, markerArray, type, id) => {\n markerArray.forEach((markerName) => {\n markers[markerName](elem, type, id);\n });\n};\nconst extension = (elem, type, id) => {\n log.trace(\"Making markers for \", id);\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-extensionStart\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,7 L18,13 V 1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-extensionEnd\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 V 13 L18,7 Z\");\n};\nconst composition = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-compositionStart\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-compositionEnd\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n};\nconst aggregation = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-aggregationStart\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-aggregationEnd\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n};\nconst dependency = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-dependencyStart\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 5,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-dependencyEnd\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n};\nconst lollipop = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-lollipopStart\").attr(\"class\", \"marker lollipop \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"circle\").attr(\"stroke\", \"black\").attr(\"fill\", \"white\").attr(\"cx\", 6).attr(\"cy\", 7).attr(\"r\", 6);\n};\nconst point = (elem, type) => {\n elem.append(\"marker\").attr(\"id\", type + \"-pointEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 10).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", type + \"-pointStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 0).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 5 L 10 10 L 10 0 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n};\nconst circle$1 = (elem, type) => {\n elem.append(\"marker\").attr(\"id\", type + \"-circleEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 11).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", type + \"-circleStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", -1).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n};\nconst cross = (elem, type) => {\n elem.append(\"marker\").attr(\"id\", type + \"-crossEnd\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", 12).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", type + \"-crossStart\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", -1).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n};\nconst barb = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-barbEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 14).attr(\"markerUnits\", \"strokeWidth\").attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 19,7 L9,13 L14,7 L9,1 Z\");\n};\nconst markers = {\n extension,\n composition,\n aggregation,\n dependency,\n lollipop,\n point,\n circle: circle$1,\n cross,\n barb\n};\nconst insertMarkers$1 = insertMarkers;\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\nfunction addHtmlLabel(node) {\n const fo = select(document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\"));\n const div = fo.append(\"xhtml:div\");\n const label = node.label;\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n div.html(\n '\" + label + \"\"\n );\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"inline-block\");\n div.style(\"white-space\", \"nowrap\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n return fo.node();\n}\nconst createLabel = (_vertexText, style, isTitle, isNode) => {\n let vertexText = _vertexText || \"\";\n if (typeof vertexText === \"object\") {\n vertexText = vertexText[0];\n }\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n vertexText = vertexText.replace(/\\\\n|\\n/g, \"
\");\n log.info(\"vertexText\" + vertexText);\n const node = {\n isNode,\n label: decodeEntities(vertexText).replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n ),\n labelStyle: style.replace(\"fill:\", \"color:\")\n };\n let vertexNode = addHtmlLabel(node);\n return vertexNode;\n } else {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"style\", style.replace(\"color:\", \"fill:\"));\n let rows = [];\n if (typeof vertexText === \"string\") {\n rows = vertexText.split(/\\\\n|\\n|
/gi);\n } else if (Array.isArray(vertexText)) {\n rows = vertexText;\n } else {\n rows = [];\n }\n for (const row of rows) {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n if (isTitle) {\n tspan.setAttribute(\"class\", \"title-row\");\n } else {\n tspan.setAttribute(\"class\", \"row\");\n }\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }\n};\nconst createLabel$1 = createLabel;\nconst labelHelper = async (parent, node, _classes, isNode) => {\n let classes;\n const useHtmlLabels = node.useHtmlLabels || evaluate(getConfig().flowchart.htmlLabels);\n if (!_classes) {\n classes = \"node default\";\n } else {\n classes = _classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", node.labelStyle);\n let labelText;\n if (node.labelText === void 0) {\n labelText = \"\";\n } else {\n labelText = typeof node.labelText === \"string\" ? node.labelText : node.labelText[0];\n }\n const textNode = label.node();\n let text;\n if (node.labelType === \"markdown\") {\n text = createText(label, sanitizeText(decodeEntities(labelText), getConfig()), {\n useHtmlLabels,\n width: node.width || getConfig().flowchart.wrappingWidth,\n classes: \"markdown-node-label\"\n });\n } else {\n text = textNode.appendChild(\n createLabel$1(\n sanitizeText(decodeEntities(labelText), getConfig()),\n node.labelStyle,\n false,\n isNode\n )\n );\n }\n let bbox = text.getBBox();\n const halfPadding = node.padding / 2;\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n const images = div.getElementsByTagName(\"img\");\n if (images) {\n const noImgText = labelText.replace(/
]*>/g, \"\").trim() === \"\";\n await Promise.all(\n [...images].map(\n (img) => new Promise((res) => {\n function setupImage() {\n img.style.display = \"flex\";\n img.style.flexDirection = \"column\";\n if (noImgText) {\n const bodyFontSize = getConfig().fontSize ? getConfig().fontSize : window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n img.style.width = parseInt(bodyFontSize, 10) * enlargingFactor + \"px\";\n } else {\n img.style.width = \"100%\";\n }\n res(img);\n }\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener(\"error\", setupImage);\n img.addEventListener(\"load\", setupImage);\n })\n )\n );\n }\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n label.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (node.centerLabel) {\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n label.insert(\"rect\", \":first-child\");\n return { shapeSvg, bbox, halfPadding, label };\n};\nconst updateNodeBounds = (node, element) => {\n const bbox = element.node().getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n};\nfunction insertPolygonShape(parent, w, h, points) {\n return parent.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n ).attr(\"class\", \"label-container\").attr(\"transform\", \"translate(\" + -w / 2 + \",\" + h / 2 + \")\");\n}\nfunction intersectNode(node, point2) {\n return node.intersect(point2);\n}\nfunction intersectEllipse(node, rx, ry, point2) {\n var cx = node.x;\n var cy = node.y;\n var px = cx - point2.x;\n var py = cy - point2.y;\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n var dx = Math.abs(rx * ry * px / det);\n if (point2.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs(rx * ry * py / det);\n if (point2.y < cy) {\n dy = -dy;\n }\n return { x: cx + dx, y: cy + dy };\n}\nfunction intersectCircle(node, rx, point2) {\n return intersectEllipse(node, rx, rx, point2);\n}\nfunction intersectLine(p1, p2, q1, q2) {\n var a1, a2, b1, b2, c1, c2;\n var r1, r2, r3, r4;\n var denom, offset, num;\n var x, y;\n a1 = p2.y - p1.y;\n b1 = p1.x - p2.x;\n c1 = p2.x * p1.y - p1.x * p2.y;\n r3 = a1 * q1.x + b1 * q1.y + c1;\n r4 = a1 * q2.x + b1 * q2.y + c1;\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return;\n }\n a2 = q2.y - q1.y;\n b2 = q1.x - q2.x;\n c2 = q2.x * q1.y - q1.x * q2.y;\n r1 = a2 * p1.x + b2 * p1.y + c2;\n r2 = a2 * p2.x + b2 * p2.y + c2;\n if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) {\n return;\n }\n denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return;\n }\n offset = Math.abs(denom / 2);\n num = b1 * c2 - b2 * c1;\n x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n num = a2 * c1 - a1 * c2;\n y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n return { x, y };\n}\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\nfunction intersectPolygon(node, polyPoints, point2) {\n var x1 = node.x;\n var y1 = node.y;\n var intersections = [];\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n if (typeof polyPoints.forEach === \"function\") {\n polyPoints.forEach(function(entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n } else {\n minX = Math.min(minX, polyPoints.x);\n minY = Math.min(minY, polyPoints.y);\n }\n var left = x1 - node.width / 2 - minX;\n var top = y1 - node.height / 2 - minY;\n for (var i = 0; i < polyPoints.length; i++) {\n var p1 = polyPoints[i];\n var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n var intersect2 = intersectLine(\n node,\n point2,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect2) {\n intersections.push(intersect2);\n }\n }\n if (!intersections.length) {\n return node;\n }\n if (intersections.length > 1) {\n intersections.sort(function(p, q) {\n var pdx = p.x - point2.x;\n var pdy = p.y - point2.y;\n var distp = Math.sqrt(pdx * pdx + pdy * pdy);\n var qdx = q.x - point2.x;\n var qdy = q.y - point2.y;\n var distq = Math.sqrt(qdx * qdx + qdy * qdy);\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\nconst intersectRect = (node, point2) => {\n var x = node.x;\n var y = node.y;\n var dx = point2.x - x;\n var dy = point2.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : h * dx / dy;\n sy = h;\n } else {\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : w * dy / dx;\n }\n return { x: x + sx, y: y + sy };\n};\nconst intersectRect$1 = intersectRect;\nconst intersect = {\n node: intersectNode,\n circle: intersectCircle,\n ellipse: intersectEllipse,\n polygon: intersectPolygon,\n rect: intersectRect$1\n};\nconst note = async (parent, node) => {\n const useHtmlLabels = node.useHtmlLabels || getConfig().flowchart.htmlLabels;\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes,\n true\n );\n log.info(\"Classes = \", node.classes);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst note$1 = note;\nconst question = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ];\n log.info(\"Question main (Circle)\");\n const questionElem = insertPolygonShape(shapeSvg, s, s, points);\n questionElem.attr(\"style\", node.style);\n updateNodeBounds(node, questionElem);\n node.intersect = function(point2) {\n log.warn(\"Intersect called\");\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst choice = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const s = 28;\n const points = [\n { x: 0, y: s / 2 },\n { x: s / 2, y: 0 },\n { x: 0, y: -s / 2 },\n { x: -s / 2, y: 0 }\n ];\n const choice2 = shapeSvg.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n );\n choice2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 28).attr(\"height\", 28);\n node.width = 28;\n node.height = 28;\n node.intersect = function(point2) {\n return intersect.circle(node, 14, point2);\n };\n return shapeSvg;\n};\nconst hexagon = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const f = 4;\n const h = bbox.height + node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n const points = [\n { x: m, y: 0 },\n { x: w - m, y: 0 },\n { x: w, y: -h / 2 },\n { x: w - m, y: -h },\n { x: m, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const hex = insertPolygonShape(shapeSvg, w, h, points);\n hex.attr(\"style\", node.style);\n updateNodeBounds(node, hex);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst rect_left_inv_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -h / 2, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: -h / 2, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n node.width = w + h;\n node.height = h;\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst lean_right = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst lean_left = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 2 * h / 6, y: 0 },\n { x: w + h / 6, y: 0 },\n { x: w - 2 * h / 6, y: -h },\n { x: -h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst trapezoid = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w + 2 * h / 6, y: 0 },\n { x: w - h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst inv_trapezoid = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: -2 * h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst rect_right_inv_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w + h / 2, y: 0 },\n { x: w, y: -h / 2 },\n { x: w + h / 2, y: -h },\n { x: 0, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst cylinder = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = bbox.height + ry + node.padding;\n const shape = \"M 0,\" + ry + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 a \" + rx + \",\" + ry + \" 0,0,0 \" + -w + \" 0 l 0,\" + h + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 l 0,\" + -h;\n const el = shapeSvg.attr(\"label-offset-y\", ry).insert(\"path\", \":first-child\").attr(\"style\", node.style).attr(\"d\", shape).attr(\"transform\", \"translate(\" + -w / 2 + \",\" + -(h / 2 + ry) + \")\");\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n const pos = intersect.rect(node, point2);\n const x = pos.x - node.x;\n if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y != 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point2.y - node.y > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n};\nconst rect = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes,\n true\n );\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = bbox.width + node.padding;\n const totalHeight = bbox.height + node.padding;\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst labelRect = async (parent, node) => {\n const { shapeSvg } = await labelHelper(parent, node, \"label\", true);\n log.trace(\"Classes = \", node.classes);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = 0;\n const totalHeight = 0;\n rect2.attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n shapeSvg.attr(\"class\", \"label edgeLabel\");\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nfunction applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) {\n const strokeDashArray = [];\n const addBorder = (length) => {\n strokeDashArray.push(length, 0);\n };\n const skipBorder = (length) => {\n strokeDashArray.push(0, length);\n };\n if (borders.includes(\"t\")) {\n log.debug(\"add top border\");\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes(\"r\")) {\n log.debug(\"add right border\");\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n if (borders.includes(\"b\")) {\n log.debug(\"add bottom border\");\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes(\"l\")) {\n log.debug(\"add left border\");\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n rect2.attr(\"stroke-dasharray\", strokeDashArray.join(\" \"));\n}\nconst rectWithTitle = (parent, node) => {\n let classes;\n if (!node.classes) {\n classes = \"node default\";\n } else {\n classes = \"node \" + node.classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const innerLine = shapeSvg.insert(\"line\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\");\n const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText;\n let title = \"\";\n if (typeof text2 === \"object\") {\n title = text2[0];\n } else {\n title = text2;\n }\n log.info(\"Label text abc79\", title, text2, typeof text2 === \"object\");\n const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true));\n let bbox = { width: 0, height: 0 };\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n log.info(\"Text 2\", text2);\n const textRows = text2.slice(1, text2.length);\n let titleBox = text.getBBox();\n const descr = label.node().appendChild(\n createLabel$1(textRows.join ? textRows.join(\"
\") : textRows, node.labelStyle, true, true)\n );\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = descr.children[0];\n const dv = select(descr);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const halfPadding = node.padding / 2;\n select(descr).attr(\n \"transform\",\n \"translate( \" + // (titleBox.width - bbox.width) / 2 +\n (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + \", \" + (titleBox.height + halfPadding + 5) + \")\"\n );\n select(text).attr(\n \"transform\",\n \"translate( \" + // (titleBox.width - bbox.width) / 2 +\n (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + \", 0)\"\n );\n bbox = label.node().getBBox();\n label.attr(\n \"transform\",\n \"translate(\" + -bbox.width / 2 + \", \" + (-bbox.height / 2 - halfPadding + 3) + \")\"\n );\n rect2.attr(\"class\", \"outer title-state\").attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n innerLine.attr(\"class\", \"divider\").attr(\"x1\", -bbox.width / 2 - halfPadding).attr(\"x2\", bbox.width / 2 + halfPadding).attr(\"y1\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr(\"y2\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst stadium = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\").attr(\"style\", node.style).attr(\"rx\", h / 2).attr(\"ry\", h / 2).attr(\"x\", -w / 2).attr(\"y\", -h / 2).attr(\"width\", w).attr(\"height\", h);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst circle = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, void 0, true);\n const circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n log.info(\"Circle main\");\n updateNodeBounds(node, circle2);\n node.intersect = function(point2) {\n log.info(\"Circle intersect\", node, bbox.width / 2 + halfPadding, point2);\n return intersect.circle(node, bbox.width / 2 + halfPadding, point2);\n };\n return shapeSvg;\n};\nconst doublecircle = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, void 0, true);\n const gap = 5;\n const circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n const outerCircle = circleGroup.insert(\"circle\");\n const innerCircle = circleGroup.insert(\"circle\");\n circleGroup.attr(\"class\", node.class);\n outerCircle.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding + gap).attr(\"width\", bbox.width + node.padding + gap * 2).attr(\"height\", bbox.height + node.padding + gap * 2);\n innerCircle.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n log.info(\"DoubleCircle main\");\n updateNodeBounds(node, outerCircle);\n node.intersect = function(point2) {\n log.info(\"DoubleCircle intersect\", node, bbox.width / 2 + halfPadding + gap, point2);\n return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2);\n };\n return shapeSvg;\n};\nconst subroutine = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst start = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n updateNodeBounds(node, circle2);\n node.intersect = function(point2) {\n return intersect.circle(node, 7, point2);\n };\n return shapeSvg;\n};\nconst forkJoin = (parent, node, dir) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n let width = 70;\n let height = 10;\n if (dir === \"LR\") {\n width = 10;\n height = 70;\n }\n const shape = shapeSvg.append(\"rect\").attr(\"x\", -1 * width / 2).attr(\"y\", -1 * height / 2).attr(\"width\", width).attr(\"height\", height).attr(\"class\", \"fork-join\");\n updateNodeBounds(node, shape);\n node.height = node.height + node.padding / 2;\n node.width = node.width + node.padding / 2;\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst end = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const innerCircle = shapeSvg.insert(\"circle\", \":first-child\");\n const circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n innerCircle.attr(\"class\", \"state-end\").attr(\"r\", 5).attr(\"width\", 10).attr(\"height\", 10);\n updateNodeBounds(node, circle2);\n node.intersect = function(point2) {\n return intersect.circle(node, 7, point2);\n };\n return shapeSvg;\n};\nconst class_box = (parent, node) => {\n const halfPadding = node.padding / 2;\n const rowPadding = 4;\n const lineHeight = 8;\n let classes;\n if (!node.classes) {\n classes = \"node default\";\n } else {\n classes = \"node \" + node.classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const topLine = shapeSvg.insert(\"line\");\n const bottomLine = shapeSvg.insert(\"line\");\n let maxWidth = 0;\n let maxHeight = rowPadding;\n const labelContainer = shapeSvg.insert(\"g\").attr(\"class\", \"label\");\n let verticalPos = 0;\n const hasInterface = node.classData.annotations && node.classData.annotations[0];\n const interfaceLabelText = node.classData.annotations[0] ? \"«\" + node.classData.annotations[0] + \"»\" : \"\";\n const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true));\n let interfaceBBox = interfaceLabel.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = interfaceLabel.children[0];\n const dv = select(interfaceLabel);\n interfaceBBox = div.getBoundingClientRect();\n dv.attr(\"width\", interfaceBBox.width);\n dv.attr(\"height\", interfaceBBox.height);\n }\n if (node.classData.annotations[0]) {\n maxHeight += interfaceBBox.height + rowPadding;\n maxWidth += interfaceBBox.width;\n }\n let classTitleString = node.classData.label;\n if (node.classData.type !== void 0 && node.classData.type !== \"\") {\n if (getConfig().flowchart.htmlLabels) {\n classTitleString += \"<\" + node.classData.type + \">\";\n } else {\n classTitleString += \"<\" + node.classData.type + \">\";\n }\n }\n const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true));\n select(classTitleLabel).attr(\"class\", \"classTitle\");\n let classTitleBBox = classTitleLabel.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = classTitleLabel.children[0];\n const dv = select(classTitleLabel);\n classTitleBBox = div.getBoundingClientRect();\n dv.attr(\"width\", classTitleBBox.width);\n dv.attr(\"height\", classTitleBBox.height);\n }\n maxHeight += classTitleBBox.height + rowPadding;\n if (classTitleBBox.width > maxWidth) {\n maxWidth = classTitleBBox.width;\n }\n const classAttributes = [];\n node.classData.members.forEach((str) => {\n const parsedInfo = parseMember(str);\n let parsedText = parsedInfo.displayText;\n if (getConfig().flowchart.htmlLabels) {\n parsedText = parsedText.replace(//g, \">\");\n }\n const lbl = labelContainer.node().appendChild(\n createLabel$1(\n parsedText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classAttributes.push(lbl);\n });\n maxHeight += lineHeight;\n const classMethods = [];\n node.classData.methods.forEach((str) => {\n const parsedInfo = parseMember(str);\n let displayText = parsedInfo.displayText;\n if (getConfig().flowchart.htmlLabels) {\n displayText = displayText.replace(//g, \">\");\n }\n const lbl = labelContainer.node().appendChild(\n createLabel$1(\n displayText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classMethods.push(lbl);\n });\n maxHeight += lineHeight;\n if (hasInterface) {\n let diffX2 = (maxWidth - interfaceBBox.width) / 2;\n select(interfaceLabel).attr(\n \"transform\",\n \"translate( \" + (-1 * maxWidth / 2 + diffX2) + \", \" + -1 * maxHeight / 2 + \")\"\n );\n verticalPos = interfaceBBox.height + rowPadding;\n }\n let diffX = (maxWidth - classTitleBBox.width) / 2;\n select(classTitleLabel).attr(\n \"transform\",\n \"translate( \" + (-1 * maxWidth / 2 + diffX) + \", \" + (-1 * maxHeight / 2 + verticalPos) + \")\"\n );\n verticalPos += classTitleBBox.height + rowPadding;\n topLine.attr(\"class\", \"divider\").attr(\"x1\", -maxWidth / 2 - halfPadding).attr(\"x2\", maxWidth / 2 + halfPadding).attr(\"y1\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr(\"y2\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n verticalPos += lineHeight;\n classAttributes.forEach((lbl) => {\n select(lbl).attr(\n \"transform\",\n \"translate( \" + -maxWidth / 2 + \", \" + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + \")\"\n );\n const memberBBox = lbl == null ? void 0 : lbl.getBBox();\n verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding;\n });\n verticalPos += lineHeight;\n bottomLine.attr(\"class\", \"divider\").attr(\"x1\", -maxWidth / 2 - halfPadding).attr(\"x2\", maxWidth / 2 + halfPadding).attr(\"y1\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr(\"y2\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n verticalPos += lineHeight;\n classMethods.forEach((lbl) => {\n select(lbl).attr(\n \"transform\",\n \"translate( \" + -maxWidth / 2 + \", \" + (-1 * maxHeight / 2 + verticalPos) + \")\"\n );\n const memberBBox = lbl == null ? void 0 : lbl.getBBox();\n verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding;\n });\n rect2.attr(\"class\", \"outer title-state\").attr(\"x\", -maxWidth / 2 - halfPadding).attr(\"y\", -(maxHeight / 2) - halfPadding).attr(\"width\", maxWidth + node.padding).attr(\"height\", maxHeight + node.padding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst shapes = {\n rhombus: question,\n question,\n rect,\n labelRect,\n rectWithTitle,\n choice,\n circle,\n doublecircle,\n stadium,\n hexagon,\n rect_left_inv_arrow,\n lean_right,\n lean_left,\n trapezoid,\n inv_trapezoid,\n rect_right_inv_arrow,\n cylinder,\n start,\n end,\n note: note$1,\n subroutine,\n fork: forkJoin,\n join: forkJoin,\n class_box\n};\nlet nodeElems = {};\nconst insertNode = async (elem, node, dir) => {\n let newEl;\n let el;\n if (node.link) {\n let target;\n if (getConfig().securityLevel === \"sandbox\") {\n target = \"_top\";\n } else if (node.linkTarget) {\n target = node.linkTarget || \"_blank\";\n }\n newEl = elem.insert(\"svg:a\").attr(\"xlink:href\", node.link).attr(\"target\", target);\n el = await shapes[node.shape](newEl, node, dir);\n } else {\n el = await shapes[node.shape](elem, node, dir);\n newEl = el;\n }\n if (node.tooltip) {\n el.attr(\"title\", node.tooltip);\n }\n if (node.class) {\n el.attr(\"class\", \"node default \" + node.class);\n }\n nodeElems[node.id] = newEl;\n if (node.haveCallback) {\n nodeElems[node.id].attr(\"class\", nodeElems[node.id].attr(\"class\") + \" clickable\");\n }\n return newEl;\n};\nconst setNodeElem = (elem, node) => {\n nodeElems[node.id] = elem;\n};\nconst clear$1 = () => {\n nodeElems = {};\n};\nconst positionNode = (node) => {\n const el = nodeElems[node.id];\n log.trace(\n \"Transforming node\",\n node.diff,\n node,\n \"translate(\" + (node.x - node.width / 2 - 5) + \", \" + node.width / 2 + \")\"\n );\n const padding = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n \"transform\",\n \"translate(\" + (node.x + diff - node.width / 2) + \", \" + (node.y - node.height / 2 - padding) + \")\"\n );\n } else {\n el.attr(\"transform\", \"translate(\" + node.x + \", \" + node.y + \")\");\n }\n return diff;\n};\nlet edgeLabels = {};\nlet terminalLabels = {};\nconst clear = () => {\n edgeLabels = {};\n terminalLabels = {};\n};\nconst insertEdgeLabel = (elem, edge) => {\n const useHtmlLabels = evaluate(getConfig().flowchart.htmlLabels);\n const labelElement = edge.labelType === \"markdown\" ? createText(elem, edge.label, {\n style: edge.labelStyle,\n useHtmlLabels,\n addSvgBackground: true\n }) : createLabel$1(edge.label, edge.labelStyle);\n log.info(\"abc82\", edge, edge.labelType);\n const edgeLabel = elem.insert(\"g\").attr(\"class\", \"edgeLabel\");\n const label = edgeLabel.insert(\"g\").attr(\"class\", \"label\");\n label.node().appendChild(labelElement);\n let bbox = labelElement.getBBox();\n if (useHtmlLabels) {\n const div = labelElement.children[0];\n const dv = select(labelElement);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n edgeLabels[edge.id] = edgeLabel;\n edge.width = bbox.width;\n edge.height = bbox.height;\n let fo;\n if (edge.startLabelLeft) {\n const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle);\n const startEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startLeft = startEdgeLabelLeft;\n setTerminalWidth(fo, edge.startLabelLeft);\n }\n if (edge.startLabelRight) {\n const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle);\n const startEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = startEdgeLabelRight.node().appendChild(startLabelElement);\n inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startRight = startEdgeLabelRight;\n setTerminalWidth(fo, edge.startLabelRight);\n }\n if (edge.endLabelLeft) {\n const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle);\n const endEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelLeft.node().appendChild(endLabelElement);\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endLeft = endEdgeLabelLeft;\n setTerminalWidth(fo, edge.endLabelLeft);\n }\n if (edge.endLabelRight) {\n const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle);\n const endEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelRight.node().appendChild(endLabelElement);\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endRight = endEdgeLabelRight;\n setTerminalWidth(fo, edge.endLabelRight);\n }\n return labelElement;\n};\nfunction setTerminalWidth(fo, value) {\n if (getConfig().flowchart.htmlLabels && fo) {\n fo.style.width = value.length * 9 + \"px\";\n fo.style.height = \"12px\";\n }\n}\nconst positionEdgeLabel = (edge, paths) => {\n log.info(\"Moving label abc78 \", edge.id, edge.label, edgeLabels[edge.id]);\n let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n if (edge.label) {\n const el = edgeLabels[edge.id];\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcLabelPosition(path);\n log.info(\n \"Moving label \" + edge.label + \" from (\",\n x,\n \",\",\n y,\n \") to (\",\n pos.x,\n \",\",\n pos.y,\n \") abc78\"\n );\n if (paths.updatedPath) {\n x = pos.x;\n y = pos.y;\n }\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n if (edge.startLabelLeft) {\n const el = terminalLabels[edge.id].startLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, \"start_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n if (edge.startLabelRight) {\n const el = terminalLabels[edge.id].startRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(\n edge.arrowTypeStart ? 10 : 0,\n \"start_right\",\n path\n );\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n if (edge.endLabelLeft) {\n const el = terminalLabels[edge.id].endLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n if (edge.endLabelRight) {\n const el = terminalLabels[edge.id].endRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_right\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n};\nconst outsideNode = (node, point2) => {\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(point2.x - x);\n const dy = Math.abs(point2.y - y);\n const w = node.width / 2;\n const h = node.height / 2;\n if (dx >= w || dy >= h) {\n return true;\n }\n return false;\n};\nconst intersection = (node, outsidePoint, insidePoint) => {\n log.warn(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(outsidePoint)}\n insidePoint : ${JSON.stringify(insidePoint)}\n node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`);\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(x - insidePoint.x);\n const w = node.width / 2;\n let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx;\n const h = node.height / 2;\n const Q = Math.abs(outsidePoint.y - insidePoint.y);\n const R = Math.abs(outsidePoint.x - insidePoint.x);\n if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) {\n let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;\n r = R * q / Q;\n const res = {\n x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r,\n y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q\n };\n if (r === 0) {\n res.x = outsidePoint.x;\n res.y = outsidePoint.y;\n }\n if (R === 0) {\n res.x = outsidePoint.x;\n }\n if (Q === 0) {\n res.y = outsidePoint.y;\n }\n log.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res);\n return res;\n } else {\n if (insidePoint.x < outsidePoint.x) {\n r = outsidePoint.x - w - x;\n } else {\n r = x - w - outsidePoint.x;\n }\n let q = Q * r / R;\n let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r;\n let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q;\n log.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y });\n if (r === 0) {\n _x = outsidePoint.x;\n _y = outsidePoint.y;\n }\n if (R === 0) {\n _x = outsidePoint.x;\n }\n if (Q === 0) {\n _y = outsidePoint.y;\n }\n return { x: _x, y: _y };\n }\n};\nconst cutPathAtIntersect = (_points, boundryNode) => {\n log.warn(\"abc88 cutPathAtIntersect\", _points, boundryNode);\n let points = [];\n let lastPointOutside = _points[0];\n let isInside = false;\n _points.forEach((point2) => {\n log.info(\"abc88 checking point\", point2, boundryNode);\n if (!outsideNode(boundryNode, point2) && !isInside) {\n const inter = intersection(boundryNode, lastPointOutside, point2);\n log.warn(\"abc88 inside\", point2, lastPointOutside, inter);\n log.warn(\"abc88 intersection\", inter);\n let pointPresent = false;\n points.forEach((p) => {\n pointPresent = pointPresent || p.x === inter.x && p.y === inter.y;\n });\n if (!points.some((e) => e.x === inter.x && e.y === inter.y)) {\n points.push(inter);\n } else {\n log.warn(\"abc88 no intersect\", inter, points);\n }\n isInside = true;\n } else {\n log.warn(\"abc88 outside\", point2, lastPointOutside);\n lastPointOutside = point2;\n if (!isInside) {\n points.push(point2);\n }\n }\n });\n log.warn(\"abc88 returning points\", points);\n return points;\n};\nconst insertEdge = function(elem, e, edge, clusterDb, diagramType, graph) {\n let points = edge.points;\n let pointsHasChanged = false;\n const tail = graph.node(e.v);\n var head = graph.node(e.w);\n log.info(\"abc88 InsertEdge: \", edge);\n if (head.intersect && tail.intersect) {\n points = points.slice(1, edge.points.length - 1);\n points.unshift(tail.intersect(points[0]));\n log.info(\n \"Last point\",\n points[points.length - 1],\n head,\n head.intersect(points[points.length - 1])\n );\n points.push(head.intersect(points[points.length - 1]));\n }\n if (edge.toCluster) {\n log.info(\"to cluster abc88\", clusterDb[edge.toCluster]);\n points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node);\n pointsHasChanged = true;\n }\n if (edge.fromCluster) {\n log.info(\"from cluster abc88\", clusterDb[edge.fromCluster]);\n points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse();\n pointsHasChanged = true;\n }\n const lineData = points.filter((p) => !Number.isNaN(p.y));\n let curve;\n if (diagramType === \"graph\" || diagramType === \"flowchart\") {\n curve = edge.curve || curveBasis;\n } else {\n curve = curveBasis;\n }\n const lineFunction = line().x(function(d) {\n return d.x;\n }).y(function(d) {\n return d.y;\n }).curve(curve);\n let strokeClasses;\n switch (edge.thickness) {\n case \"normal\":\n strokeClasses = \"edge-thickness-normal\";\n break;\n case \"thick\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n case \"invisible\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n default:\n strokeClasses = \"\";\n }\n switch (edge.pattern) {\n case \"solid\":\n strokeClasses += \" edge-pattern-solid\";\n break;\n case \"dotted\":\n strokeClasses += \" edge-pattern-dotted\";\n break;\n case \"dashed\":\n strokeClasses += \" edge-pattern-dashed\";\n break;\n }\n const svgPath = elem.append(\"path\").attr(\"d\", lineFunction(lineData)).attr(\"id\", edge.id).attr(\"class\", \" \" + strokeClasses + (edge.classes ? \" \" + edge.classes : \"\")).attr(\"style\", edge.style);\n let url = \"\";\n if (getConfig().flowchart.arrowMarkerAbsolute || getConfig().state.arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\");\n url = url.replace(/\\)/g, \"\\\\)\");\n }\n log.info(\"arrowTypeStart\", edge.arrowTypeStart);\n log.info(\"arrowTypeEnd\", edge.arrowTypeEnd);\n switch (edge.arrowTypeStart) {\n case \"arrow_cross\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-crossStart)\");\n break;\n case \"arrow_point\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-pointStart)\");\n break;\n case \"arrow_barb\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-barbStart)\");\n break;\n case \"arrow_circle\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-circleStart)\");\n break;\n case \"aggregation\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-aggregationStart)\");\n break;\n case \"extension\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-extensionStart)\");\n break;\n case \"composition\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-compositionStart)\");\n break;\n case \"dependency\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-dependencyStart)\");\n break;\n case \"lollipop\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-lollipopStart)\");\n break;\n }\n switch (edge.arrowTypeEnd) {\n case \"arrow_cross\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-crossEnd)\");\n break;\n case \"arrow_point\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-pointEnd)\");\n break;\n case \"arrow_barb\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-barbEnd)\");\n break;\n case \"arrow_circle\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-circleEnd)\");\n break;\n case \"aggregation\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-aggregationEnd)\");\n break;\n case \"extension\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-extensionEnd)\");\n break;\n case \"composition\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-compositionEnd)\");\n break;\n case \"dependency\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-dependencyEnd)\");\n break;\n case \"lollipop\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-lollipopEnd)\");\n break;\n }\n let paths = {};\n if (pointsHasChanged) {\n paths.updatedPath = points;\n }\n paths.originalPath = edge.points;\n return paths;\n};\nexport {\n insertMarkers$1 as a,\n clear$1 as b,\n createLabel$1 as c,\n clear as d,\n insertNode as e,\n insertEdgeLabel as f,\n insertEdge as g,\n positionEdgeLabel as h,\n intersectRect$1 as i,\n labelHelper as l,\n positionNode as p,\n setNodeElem as s,\n updateNodeBounds as u\n};\n"],"names":["insertMarkers","elem","markerArray","type","id","markerName","markers","extension","log","composition","aggregation","dependency","lollipop","point","circle$1","cross","barb","insertMarkers$1","applyStyle","dom","styleFn","addHtmlLabel","node","fo","select","div","label","labelClass","createLabel","_vertexText","style","isTitle","isNode","vertexText","evaluate","getConfig","decodeEntities","s","svgLabel","rows","row","tspan","createLabel$1","labelHelper","parent","_classes","classes","useHtmlLabels","shapeSvg","labelText","textNode","text","createText","sanitizeText","bbox","halfPadding","dv","images","noImgText","img","res","setupImage","bodyFontSize","enlargingFactor","updateNodeBounds","element","insertPolygonShape","w","h","points","d","intersectNode","point2","intersectEllipse","rx","ry","cx","cy","px","py","det","dx","dy","intersectCircle","intersectLine","p1","p2","q1","q2","a1","a2","b1","b2","c1","c2","r1","r2","r3","r4","denom","offset","num","x","y","sameSign","intersectPolygon","polyPoints","x1","y1","intersections","minX","minY","entry","left","top","i","intersect2","q","pdx","pdy","distp","qdx","qdy","distq","intersectRect","sx","sy","intersectRect$1","intersect","note","rect2","note$1","question","questionElem","choice","hexagon","f","m","hex","rect_left_inv_arrow","lean_right","el","lean_left","trapezoid","inv_trapezoid","rect_right_inv_arrow","cylinder","shape","pos","rect","totalWidth","totalHeight","propKeys","applyNodePropertyBorders","propKey","labelRect","borders","strokeDashArray","addBorder","length","skipBorder","rectWithTitle","innerLine","text2","title","textRows","titleBox","descr","stadium","circle","circle2","doublecircle","gap","circleGroup","outerCircle","innerCircle","subroutine","start","forkJoin","dir","width","height","end","class_box","rowPadding","lineHeight","topLine","bottomLine","maxWidth","maxHeight","labelContainer","verticalPos","hasInterface","interfaceLabelText","interfaceLabel","interfaceBBox","classTitleString","classTitleLabel","classTitleBBox","classAttributes","str","parsedInfo","parseMember","parsedText","lbl","classMethods","displayText","diffX2","diffX","memberBBox","shapes","nodeElems","insertNode","newEl","target","setNodeElem","clear$1","positionNode","padding","diff","edgeLabels","terminalLabels","clear","insertEdgeLabel","edge","labelElement","edgeLabel","startLabelElement","startEdgeLabelLeft","inner","slBox","setTerminalWidth","startEdgeLabelRight","endLabelElement","endEdgeLabelLeft","endEdgeLabelRight","value","positionEdgeLabel","paths","path","utils","outsideNode","intersection","outsidePoint","insidePoint","r","Q","R","_x","_y","cutPathAtIntersect","_points","boundryNode","lastPointOutside","isInside","inter","pointPresent","p","e","insertEdge","clusterDb","diagramType","graph","pointsHasChanged","tail","head","lineData","curve","curveBasis","lineFunction","line","strokeClasses","svgPath","url"],"mappings":"kPAIA,MAAMA,GAAgB,CAACC,EAAMC,EAAaC,EAAMC,IAAO,CACrDF,EAAY,QAASG,GAAe,CAClCC,GAAQD,CAAU,EAAEJ,EAAME,EAAMC,CAAE,CACtC,CAAG,CACH,EACMG,GAAY,CAACN,EAAME,EAAMC,IAAO,CACpCI,EAAI,MAAM,sBAAuBJ,CAAE,EACnCH,EAAK,OAAO,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,iBAAiB,EAAE,KAAK,QAAS,oBAAsBA,CAAI,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,GAAG,EAAE,KAAK,eAAgB,GAAG,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,IAAK,oBAAoB,EAC3QF,EAAK,OAAO,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,eAAe,EAAE,KAAK,QAAS,oBAAsBA,CAAI,EAAE,KAAK,OAAQ,EAAE,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,EAAE,EAAE,KAAK,eAAgB,EAAE,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,IAAK,oBAAoB,CAC1Q,EACMM,GAAc,CAACR,EAAME,IAAS,CAClCF,EAAK,OAAO,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,mBAAmB,EAAE,KAAK,QAAS,sBAAwBA,CAAI,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,GAAG,EAAE,KAAK,eAAgB,GAAG,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,IAAK,0BAA0B,EACrRF,EAAK,OAAO,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,iBAAiB,EAAE,KAAK,QAAS,sBAAwBA,CAAI,EAAE,KAAK,OAAQ,EAAE,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,EAAE,EAAE,KAAK,eAAgB,EAAE,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,IAAK,0BAA0B,CACpR,EACMO,GAAc,CAACT,EAAME,IAAS,CAClCF,EAAK,OAAO,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,mBAAmB,EAAE,KAAK,QAAS,sBAAwBA,CAAI,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,GAAG,EAAE,KAAK,eAAgB,GAAG,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,IAAK,0BAA0B,EACrRF,EAAK,OAAO,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,iBAAiB,EAAE,KAAK,QAAS,sBAAwBA,CAAI,EAAE,KAAK,OAAQ,EAAE,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,EAAE,EAAE,KAAK,eAAgB,EAAE,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,IAAK,0BAA0B,CACpR,EACMQ,GAAa,CAACV,EAAME,IAAS,CACjCF,EAAK,OAAO,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,kBAAkB,EAAE,KAAK,QAAS,qBAAuBA,CAAI,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,GAAG,EAAE,KAAK,eAAgB,GAAG,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,IAAK,yBAAyB,EAClRF,EAAK,OAAO,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,gBAAgB,EAAE,KAAK,QAAS,qBAAuBA,CAAI,EAAE,KAAK,OAAQ,EAAE,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,EAAE,EAAE,KAAK,eAAgB,EAAE,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,IAAK,2BAA2B,CACnR,EACMS,GAAW,CAACX,EAAME,IAAS,CAC/BF,EAAK,OAAO,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,gBAAgB,EAAE,KAAK,QAAS,mBAAqBA,CAAI,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,GAAG,EAAE,KAAK,eAAgB,GAAG,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,SAAU,OAAO,EAAE,KAAK,OAAQ,OAAO,EAAE,KAAK,KAAM,CAAC,EAAE,KAAK,KAAM,CAAC,EAAE,KAAK,IAAK,CAAC,CACpU,EACMU,GAAQ,CAACZ,EAAME,IAAS,CAC5BF,EAAK,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,WAAW,EAAE,KAAK,QAAS,UAAYA,CAAI,EAAE,KAAK,UAAW,WAAW,EAAE,KAAK,OAAQ,EAAE,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,gBAAgB,EAAE,KAAK,cAAe,EAAE,EAAE,KAAK,eAAgB,EAAE,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,IAAK,uBAAuB,EAAE,KAAK,QAAS,iBAAiB,EAAE,MAAM,eAAgB,CAAC,EAAE,MAAM,mBAAoB,KAAK,EAC5YF,EAAK,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,aAAa,EAAE,KAAK,QAAS,UAAYA,CAAI,EAAE,KAAK,UAAW,WAAW,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,gBAAgB,EAAE,KAAK,cAAe,EAAE,EAAE,KAAK,eAAgB,EAAE,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,IAAK,wBAAwB,EAAE,KAAK,QAAS,iBAAiB,EAAE,MAAM,eAAgB,CAAC,EAAE,MAAM,mBAAoB,KAAK,CAChZ,EACMW,GAAW,CAACb,EAAME,IAAS,CAC/BF,EAAK,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,YAAY,EAAE,KAAK,QAAS,UAAYA,CAAI,EAAE,KAAK,UAAW,WAAW,EAAE,KAAK,OAAQ,EAAE,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,gBAAgB,EAAE,KAAK,cAAe,EAAE,EAAE,KAAK,eAAgB,EAAE,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,KAAM,GAAG,EAAE,KAAK,KAAM,GAAG,EAAE,KAAK,IAAK,GAAG,EAAE,KAAK,QAAS,iBAAiB,EAAE,MAAM,eAAgB,CAAC,EAAE,MAAM,mBAAoB,KAAK,EAC3ZF,EAAK,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,cAAc,EAAE,KAAK,QAAS,UAAYA,CAAI,EAAE,KAAK,UAAW,WAAW,EAAE,KAAK,OAAQ,EAAE,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,gBAAgB,EAAE,KAAK,cAAe,EAAE,EAAE,KAAK,eAAgB,EAAE,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,KAAM,GAAG,EAAE,KAAK,KAAM,GAAG,EAAE,KAAK,IAAK,GAAG,EAAE,KAAK,QAAS,iBAAiB,EAAE,MAAM,eAAgB,CAAC,EAAE,MAAM,mBAAoB,KAAK,CAC/Z,EACMY,GAAQ,CAACd,EAAME,IAAS,CAC5BF,EAAK,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,WAAW,EAAE,KAAK,QAAS,gBAAkBA,CAAI,EAAE,KAAK,UAAW,WAAW,EAAE,KAAK,OAAQ,EAAE,EAAE,KAAK,OAAQ,GAAG,EAAE,KAAK,cAAe,gBAAgB,EAAE,KAAK,cAAe,EAAE,EAAE,KAAK,eAAgB,EAAE,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,IAAK,2BAA2B,EAAE,KAAK,QAAS,iBAAiB,EAAE,MAAM,eAAgB,CAAC,EAAE,MAAM,mBAAoB,KAAK,EACxZF,EAAK,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,aAAa,EAAE,KAAK,QAAS,gBAAkBA,CAAI,EAAE,KAAK,UAAW,WAAW,EAAE,KAAK,OAAQ,EAAE,EAAE,KAAK,OAAQ,GAAG,EAAE,KAAK,cAAe,gBAAgB,EAAE,KAAK,cAAe,EAAE,EAAE,KAAK,eAAgB,EAAE,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,IAAK,2BAA2B,EAAE,KAAK,QAAS,iBAAiB,EAAE,MAAM,eAAgB,CAAC,EAAE,MAAM,mBAAoB,KAAK,CAC5Z,EACMa,GAAO,CAACf,EAAME,IAAS,CAC3BF,EAAK,OAAO,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,KAAME,EAAO,UAAU,EAAE,KAAK,OAAQ,EAAE,EAAE,KAAK,OAAQ,CAAC,EAAE,KAAK,cAAe,EAAE,EAAE,KAAK,eAAgB,EAAE,EAAE,KAAK,cAAe,aAAa,EAAE,KAAK,SAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,IAAK,2BAA2B,CACrQ,EACMG,GAAU,CACd,UAAAC,GACA,YAAAE,GACA,YAAAC,GACA,WAAAC,GACA,SAAAC,GACA,MAAAC,GACA,OAAQC,GACR,MAAAC,GACA,KAAAC,EACF,EACMC,GAAkBjB,GACxB,SAASkB,GAAWC,EAAKC,EAAS,CAC5BA,GACFD,EAAI,KAAK,QAASC,CAAO,CAE7B,CACA,SAASC,GAAaC,EAAM,CAC1B,MAAMC,EAAKC,EAAO,SAAS,gBAAgB,6BAA8B,eAAe,CAAC,EACnFC,EAAMF,EAAG,OAAO,WAAW,EAC3BG,EAAQJ,EAAK,MACbK,EAAaL,EAAK,OAAS,YAAc,YAC/C,OAAAG,EAAI,KACF,gBAAkBE,EAAa,MAAQL,EAAK,WAAa,UAAYA,EAAK,WAAa,IAAM,IAAM,IAAMI,EAAQ,SACrH,EACER,GAAWO,EAAKH,EAAK,UAAU,EAC/BG,EAAI,MAAM,UAAW,cAAc,EACnCA,EAAI,MAAM,cAAe,QAAQ,EACjCA,EAAI,KAAK,QAAS,8BAA8B,EACzCF,EAAG,MACZ,CACA,MAAMK,GAAc,CAACC,EAAaC,EAAOC,EAASC,IAAW,CAC3D,IAAIC,EAAaJ,GAAe,GAIhC,GAHI,OAAOI,GAAe,WACxBA,EAAaA,EAAW,CAAC,GAEvBC,EAASC,EAAS,EAAG,UAAU,UAAU,EAAG,CAC9CF,EAAaA,EAAW,QAAQ,UAAW,QAAQ,EACnDzB,EAAI,KAAK,aAAeyB,CAAU,EAClC,MAAMX,EAAO,CACX,OAAAU,EACA,MAAOI,EAAeH,CAAU,EAAE,QAChC,uBACCI,GAAM,aAAaA,EAAE,QAAQ,IAAK,GAAG,CAAC,QACxC,EACD,WAAYP,EAAM,QAAQ,QAAS,QAAQ,CACjD,EAEI,OADiBT,GAAaC,CAAI,CAEtC,KAAS,CACL,MAAMgB,EAAW,SAAS,gBAAgB,6BAA8B,MAAM,EAC9EA,EAAS,aAAa,QAASR,EAAM,QAAQ,SAAU,OAAO,CAAC,EAC/D,IAAIS,EAAO,CAAA,EACP,OAAON,GAAe,SACxBM,EAAON,EAAW,MAAM,qBAAqB,EACpC,MAAM,QAAQA,CAAU,EACjCM,EAAON,EAEPM,EAAO,CAAA,EAET,UAAWC,KAAOD,EAAM,CACtB,MAAME,EAAQ,SAAS,gBAAgB,6BAA8B,OAAO,EAC5EA,EAAM,eAAe,uCAAwC,YAAa,UAAU,EACpFA,EAAM,aAAa,KAAM,KAAK,EAC9BA,EAAM,aAAa,IAAK,GAAG,EACvBV,EACFU,EAAM,aAAa,QAAS,WAAW,EAEvCA,EAAM,aAAa,QAAS,KAAK,EAEnCA,EAAM,YAAcD,EAAI,OACxBF,EAAS,YAAYG,CAAK,CAC3B,CACD,OAAOH,CACR,CACH,EACMI,EAAgBd,GAChBe,EAAc,MAAOC,EAAQtB,EAAMuB,EAAUb,IAAW,CAC5D,IAAIc,EACJ,MAAMC,EAAgBzB,EAAK,eAAiBY,EAASC,IAAY,UAAU,UAAU,EAChFU,EAGHC,EAAUD,EAFVC,EAAU,eAIZ,MAAME,EAAWJ,EAAO,OAAO,GAAG,EAAE,KAAK,QAASE,CAAO,EAAE,KAAK,KAAMxB,EAAK,OAASA,EAAK,EAAE,EACrFI,EAAQsB,EAAS,OAAO,GAAG,EAAE,KAAK,QAAS,OAAO,EAAE,KAAK,QAAS1B,EAAK,UAAU,EACvF,IAAI2B,EACA3B,EAAK,YAAc,OACrB2B,EAAY,GAEZA,EAAY,OAAO3B,EAAK,WAAc,SAAWA,EAAK,UAAYA,EAAK,UAAU,CAAC,EAEpF,MAAM4B,EAAWxB,EAAM,OACvB,IAAIyB,EACA7B,EAAK,YAAc,WACrB6B,EAAOC,EAAW1B,EAAO2B,EAAajB,EAAea,CAAS,EAAGd,EAAS,CAAE,EAAG,CAC7E,cAAAY,EACA,MAAOzB,EAAK,OAASa,EAAW,EAAC,UAAU,cAC3C,QAAS,qBACf,CAAK,EAEDgB,EAAOD,EAAS,YACdR,EACEW,EAAajB,EAAea,CAAS,EAAGd,EAAS,CAAE,EACnDb,EAAK,WACL,GACAU,CACD,CACP,EAEE,IAAIsB,EAAOH,EAAK,UAChB,MAAMI,EAAcjC,EAAK,QAAU,EACnC,GAAIY,EAASC,EAAS,EAAG,UAAU,UAAU,EAAG,CAC9C,MAAMV,EAAM0B,EAAK,SAAS,CAAC,EACrBK,EAAKhC,EAAO2B,CAAI,EAChBM,EAAShC,EAAI,qBAAqB,KAAK,EAC7C,GAAIgC,EAAQ,CACV,MAAMC,EAAYT,EAAU,QAAQ,cAAe,EAAE,EAAE,KAAM,IAAK,GAClE,MAAM,QAAQ,IACZ,CAAC,GAAGQ,CAAM,EAAE,IACTE,GAAQ,IAAI,QAASC,GAAQ,CAC5B,SAASC,GAAa,CAGpB,GAFAF,EAAI,MAAM,QAAU,OACpBA,EAAI,MAAM,cAAgB,SACtBD,EAAW,CACb,MAAMI,EAAe3B,IAAY,SAAWA,EAAW,EAAC,SAAW,OAAO,iBAAiB,SAAS,IAAI,EAAE,SACpG4B,EAAkB,EACxBJ,EAAI,MAAM,MAAQ,SAASG,EAAc,EAAE,EAAIC,EAAkB,IACjF,MACgBJ,EAAI,MAAM,MAAQ,OAEpBC,EAAID,CAAG,CACR,CACD,WAAW,IAAM,CACXA,EAAI,UACNE,GAEhB,CAAa,EACDF,EAAI,iBAAiB,QAASE,CAAU,EACxCF,EAAI,iBAAiB,OAAQE,CAAU,CACnD,CAAW,CACF,CACT,CACK,CACDP,EAAO7B,EAAI,wBACX+B,EAAG,KAAK,QAASF,EAAK,KAAK,EAC3BE,EAAG,KAAK,SAAUF,EAAK,MAAM,CAC9B,CACD,OAAIP,EACFrB,EAAM,KAAK,YAAa,aAAe,CAAC4B,EAAK,MAAQ,EAAI,KAAO,CAACA,EAAK,OAAS,EAAI,GAAG,EAEtF5B,EAAM,KAAK,YAAa,gBAAkB,CAAC4B,EAAK,OAAS,EAAI,GAAG,EAE9DhC,EAAK,aACPI,EAAM,KAAK,YAAa,aAAe,CAAC4B,EAAK,MAAQ,EAAI,KAAO,CAACA,EAAK,OAAS,EAAI,GAAG,EAExF5B,EAAM,OAAO,OAAQ,cAAc,EAC5B,CAAE,SAAAsB,EAAU,KAAAM,EAAM,YAAAC,EAAa,MAAA7B,CAAK,CAC7C,EACMsC,EAAmB,CAAC1C,EAAM2C,IAAY,CAC1C,MAAMX,EAAOW,EAAQ,KAAM,EAAC,QAAO,EACnC3C,EAAK,MAAQgC,EAAK,MAClBhC,EAAK,OAASgC,EAAK,MACrB,EACA,SAASY,EAAmBtB,EAAQuB,EAAGC,EAAGC,EAAQ,CAChD,OAAOzB,EAAO,OAAO,UAAW,cAAc,EAAE,KAC9C,SACAyB,EAAO,IAAI,SAASC,EAAG,CACrB,OAAOA,EAAE,EAAI,IAAMA,EAAE,CAC3B,CAAK,EAAE,KAAK,GAAG,CACZ,EAAC,KAAK,QAAS,iBAAiB,EAAE,KAAK,YAAa,aAAe,CAACH,EAAI,EAAI,IAAMC,EAAI,EAAI,GAAG,CAChG,CACA,SAASG,GAAcjD,EAAMkD,EAAQ,CACnC,OAAOlD,EAAK,UAAUkD,CAAM,CAC9B,CACA,SAASC,GAAiBnD,EAAMoD,EAAIC,EAAIH,EAAQ,CAC9C,IAAII,EAAKtD,EAAK,EACVuD,EAAKvD,EAAK,EACVwD,EAAKF,EAAKJ,EAAO,EACjBO,EAAKF,EAAKL,EAAO,EACjBQ,EAAM,KAAK,KAAKN,EAAKA,EAAKK,EAAKA,EAAKJ,EAAKA,EAAKG,EAAKA,CAAE,EACrDG,EAAK,KAAK,IAAIP,EAAKC,EAAKG,EAAKE,CAAG,EAChCR,EAAO,EAAII,IACbK,EAAK,CAACA,GAER,IAAIC,EAAK,KAAK,IAAIR,EAAKC,EAAKI,EAAKC,CAAG,EACpC,OAAIR,EAAO,EAAIK,IACbK,EAAK,CAACA,GAED,CAAE,EAAGN,EAAKK,EAAI,EAAGJ,EAAKK,EAC/B,CACA,SAASC,GAAgB7D,EAAMoD,EAAIF,EAAQ,CACzC,OAAOC,GAAiBnD,EAAMoD,EAAIA,EAAIF,CAAM,CAC9C,CACA,SAASY,GAAcC,EAAIC,EAAIC,EAAIC,EAAI,CACrC,IAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EACpBC,EAAIC,EAAIC,EAAIC,EACZC,EAAOC,EAAQC,EACfC,EAAGC,EAMP,GALAd,EAAKH,EAAG,EAAID,EAAG,EACfM,EAAKN,EAAG,EAAIC,EAAG,EACfO,EAAKP,EAAG,EAAID,EAAG,EAAIA,EAAG,EAAIC,EAAG,EAC7BW,EAAKR,EAAKF,EAAG,EAAII,EAAKJ,EAAG,EAAIM,EAC7BK,EAAKT,EAAKD,EAAG,EAAIG,EAAKH,EAAG,EAAIK,EACzB,EAAAI,IAAO,GAAKC,IAAO,GAAKM,EAASP,EAAIC,CAAE,KAG3CR,EAAKF,EAAG,EAAID,EAAG,EACfK,EAAKL,EAAG,EAAIC,EAAG,EACfM,EAAKN,EAAG,EAAID,EAAG,EAAIA,EAAG,EAAIC,EAAG,EAC7BO,EAAKL,EAAKL,EAAG,EAAIO,EAAKP,EAAG,EAAIS,EAC7BE,EAAKN,EAAKJ,EAAG,EAAIM,EAAKN,EAAG,EAAIQ,EACzB,EAAAC,IAAO,GAAKC,IAAO,GAAKQ,EAAST,EAAIC,CAAE,KAG3CG,EAAQV,EAAKG,EAAKF,EAAKC,EACnBQ,IAAU,IAGd,OAAAC,EAAS,KAAK,IAAID,EAAQ,CAAC,EAC3BE,EAAMV,EAAKG,EAAKF,EAAKC,EACrBS,EAAID,EAAM,GAAKA,EAAMD,GAAUD,GAASE,EAAMD,GAAUD,EACxDE,EAAMX,EAAKG,EAAKJ,EAAKK,EACrBS,EAAIF,EAAM,GAAKA,EAAMD,GAAUD,GAASE,EAAMD,GAAUD,EACjD,CAAE,EAAAG,EAAG,EAAAC,EACd,CACA,SAASC,EAAST,EAAIC,EAAI,CACxB,OAAOD,EAAKC,EAAK,CACnB,CACA,SAASS,GAAiBnF,EAAMoF,EAAYlC,EAAQ,CAClD,IAAImC,EAAKrF,EAAK,EACVsF,EAAKtF,EAAK,EACVuF,EAAgB,CAAA,EAChBC,EAAO,OAAO,kBACdC,EAAO,OAAO,kBACd,OAAOL,EAAW,SAAY,WAChCA,EAAW,QAAQ,SAASM,EAAO,CACjCF,EAAO,KAAK,IAAIA,EAAME,EAAM,CAAC,EAC7BD,EAAO,KAAK,IAAIA,EAAMC,EAAM,CAAC,CACnC,CAAK,GAEDF,EAAO,KAAK,IAAIA,EAAMJ,EAAW,CAAC,EAClCK,EAAO,KAAK,IAAIA,EAAML,EAAW,CAAC,GAIpC,QAFIO,EAAON,EAAKrF,EAAK,MAAQ,EAAIwF,EAC7BI,EAAMN,EAAKtF,EAAK,OAAS,EAAIyF,EACxBI,EAAI,EAAGA,EAAIT,EAAW,OAAQS,IAAK,CAC1C,IAAI9B,EAAKqB,EAAWS,CAAC,EACjB7B,EAAKoB,EAAWS,EAAIT,EAAW,OAAS,EAAIS,EAAI,EAAI,CAAC,EACrDC,EAAahC,GACf9D,EACAkD,EACA,CAAE,EAAGyC,EAAO5B,EAAG,EAAG,EAAG6B,EAAM7B,EAAG,CAAG,EACjC,CAAE,EAAG4B,EAAO3B,EAAG,EAAG,EAAG4B,EAAM5B,EAAG,CAAG,CACvC,EACQ8B,GACFP,EAAc,KAAKO,CAAU,CAEhC,CACD,OAAKP,EAAc,QAGfA,EAAc,OAAS,GACzBA,EAAc,KAAK,SAAS,EAAGQ,EAAG,CAChC,IAAIC,EAAM,EAAE,EAAI9C,EAAO,EACnB+C,EAAM,EAAE,EAAI/C,EAAO,EACnBgD,EAAQ,KAAK,KAAKF,EAAMA,EAAMC,EAAMA,CAAG,EACvCE,EAAMJ,EAAE,EAAI7C,EAAO,EACnBkD,EAAML,EAAE,EAAI7C,EAAO,EACnBmD,EAAQ,KAAK,KAAKF,EAAMA,EAAMC,EAAMA,CAAG,EAC3C,OAAOF,EAAQG,EAAQ,GAAKH,IAAUG,EAAQ,EAAI,CACxD,CAAK,EAEId,EAAc,CAAC,GAbbvF,CAcX,CACA,MAAMsG,GAAgB,CAACtG,EAAMkD,IAAW,CACtC,IAAI8B,EAAIhF,EAAK,EACTiF,EAAIjF,EAAK,EACT2D,EAAKT,EAAO,EAAI8B,EAChBpB,EAAKV,EAAO,EAAI+B,EAChBpC,EAAI7C,EAAK,MAAQ,EACjB8C,EAAI9C,EAAK,OAAS,EAClBuG,EAAIC,EACR,OAAI,KAAK,IAAI5C,CAAE,EAAIf,EAAI,KAAK,IAAIc,CAAE,EAAIb,GAChCc,EAAK,IACPd,EAAI,CAACA,GAEPyD,EAAK3C,IAAO,EAAI,EAAId,EAAIa,EAAKC,EAC7B4C,EAAK1D,IAEDa,EAAK,IACPd,EAAI,CAACA,GAEP0D,EAAK1D,EACL2D,EAAK7C,IAAO,EAAI,EAAId,EAAIe,EAAKD,GAExB,CAAE,EAAGqB,EAAIuB,EAAI,EAAGtB,EAAIuB,EAC7B,EACMC,GAAkBH,GAClBI,EAAY,CAChB,KAAMzD,GACN,OAAQY,GACR,QAASV,GACT,QAASgC,GACT,KAAMsB,EACR,EACME,GAAO,MAAOrF,EAAQtB,IAAS,CACbA,EAAK,eAAiBa,EAAW,EAAC,UAAU,aAEhEb,EAAK,YAAc,IAErB,KAAM,CAAE,SAAA0B,EAAU,KAAAM,EAAM,YAAAC,CAAW,EAAK,MAAMZ,EAC5CC,EACAtB,EACA,QAAUA,EAAK,QACf,EACJ,EACEd,EAAI,KAAK,aAAcc,EAAK,OAAO,EACnC,MAAM4G,EAAQlF,EAAS,OAAO,OAAQ,cAAc,EACpD,OAAAkF,EAAM,KAAK,KAAM5G,EAAK,EAAE,EAAE,KAAK,KAAMA,EAAK,EAAE,EAAE,KAAK,IAAK,CAACgC,EAAK,MAAQ,EAAIC,CAAW,EAAE,KAAK,IAAK,CAACD,EAAK,OAAS,EAAIC,CAAW,EAAE,KAAK,QAASD,EAAK,MAAQhC,EAAK,OAAO,EAAE,KAAK,SAAUgC,EAAK,OAAShC,EAAK,OAAO,EACnN0C,EAAiB1C,EAAM4G,CAAK,EAC5B5G,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,KAAK1G,EAAMkD,CAAM,CACtC,EACSxB,CACT,EACMmF,GAASF,GACTG,EAAW,MAAOxF,EAAQtB,IAAS,CACvC,KAAM,CAAE,SAAA0B,EAAU,KAAAM,CAAI,EAAK,MAAMX,EAAYC,EAAQtB,EAAM,OAAQ,EAAI,EACjE6C,EAAIb,EAAK,MAAQhC,EAAK,QACtB8C,EAAId,EAAK,OAAShC,EAAK,QACvBe,EAAI8B,EAAIC,EACRC,EAAS,CACb,CAAE,EAAGhC,EAAI,EAAG,EAAG,CAAG,EAClB,CAAE,EAAGA,EAAG,EAAG,CAACA,EAAI,CAAG,EACnB,CAAE,EAAGA,EAAI,EAAG,EAAG,CAACA,CAAG,EACnB,CAAE,EAAG,EAAG,EAAG,CAACA,EAAI,CAAG,CACvB,EACE7B,EAAI,KAAK,wBAAwB,EACjC,MAAM6H,EAAenE,EAAmBlB,EAAUX,EAAGA,EAAGgC,CAAM,EAC9D,OAAAgE,EAAa,KAAK,QAAS/G,EAAK,KAAK,EACrC0C,EAAiB1C,EAAM+G,CAAY,EACnC/G,EAAK,UAAY,SAASkD,EAAQ,CAChChE,OAAAA,EAAI,KAAK,kBAAkB,EACpBwH,EAAU,QAAQ1G,EAAM+C,EAAQG,CAAM,CACjD,EACSxB,CACT,EACMsF,GAAS,CAAC1F,EAAQtB,IAAS,CAC/B,MAAM0B,EAAWJ,EAAO,OAAO,GAAG,EAAE,KAAK,QAAS,cAAc,EAAE,KAAK,KAAMtB,EAAK,OAASA,EAAK,EAAE,EAC5Fe,EAAI,GACJgC,EAAS,CACb,CAAE,EAAG,EAAG,EAAGhC,EAAI,CAAG,EAClB,CAAE,EAAGA,EAAI,EAAG,EAAG,CAAG,EAClB,CAAE,EAAG,EAAG,EAAG,CAACA,EAAI,CAAG,EACnB,CAAE,EAAG,CAACA,EAAI,EAAG,EAAG,CAAG,CACvB,EAOE,OANgBW,EAAS,OAAO,UAAW,cAAc,EAAE,KACzD,SACAqB,EAAO,IAAI,SAASC,EAAG,CACrB,OAAOA,EAAE,EAAI,IAAMA,EAAE,CAC3B,CAAK,EAAE,KAAK,GAAG,CACf,EACU,KAAK,QAAS,aAAa,EAAE,KAAK,IAAK,CAAC,EAAE,KAAK,QAAS,EAAE,EAAE,KAAK,SAAU,EAAE,EACrFhD,EAAK,MAAQ,GACbA,EAAK,OAAS,GACdA,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,OAAO1G,EAAM,GAAIkD,CAAM,CAC5C,EACSxB,CACT,EACMuF,GAAU,MAAO3F,EAAQtB,IAAS,CACtC,KAAM,CAAE,SAAA0B,EAAU,KAAAM,CAAI,EAAK,MAAMX,EAAYC,EAAQtB,EAAM,OAAQ,EAAI,EACjEkH,EAAI,EACJpE,EAAId,EAAK,OAAShC,EAAK,QACvBmH,EAAIrE,EAAIoE,EACRrE,EAAIb,EAAK,MAAQ,EAAImF,EAAInH,EAAK,QAC9B+C,EAAS,CACb,CAAE,EAAGoE,EAAG,EAAG,CAAG,EACd,CAAE,EAAGtE,EAAIsE,EAAG,EAAG,CAAG,EAClB,CAAE,EAAGtE,EAAG,EAAG,CAACC,EAAI,CAAG,EACnB,CAAE,EAAGD,EAAIsE,EAAG,EAAG,CAACrE,CAAG,EACnB,CAAE,EAAGqE,EAAG,EAAG,CAACrE,CAAG,EACf,CAAE,EAAG,EAAG,EAAG,CAACA,EAAI,CAAG,CACvB,EACQsE,EAAMxE,EAAmBlB,EAAUmB,EAAGC,EAAGC,CAAM,EACrD,OAAAqE,EAAI,KAAK,QAASpH,EAAK,KAAK,EAC5B0C,EAAiB1C,EAAMoH,CAAG,EAC1BpH,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,QAAQ1G,EAAM+C,EAAQG,CAAM,CACjD,EACSxB,CACT,EACM2F,GAAsB,MAAO/F,EAAQtB,IAAS,CAClD,KAAM,CAAE,SAAA0B,EAAU,KAAAM,CAAI,EAAK,MAAMX,EAAYC,EAAQtB,EAAM,OAAQ,EAAI,EACjE6C,EAAIb,EAAK,MAAQhC,EAAK,QACtB8C,EAAId,EAAK,OAAShC,EAAK,QACvB+C,EAAS,CACb,CAAE,EAAG,CAACD,EAAI,EAAG,EAAG,CAAG,EACnB,CAAE,EAAGD,EAAG,EAAG,CAAG,EACd,CAAE,EAAGA,EAAG,EAAG,CAACC,CAAG,EACf,CAAE,EAAG,CAACA,EAAI,EAAG,EAAG,CAACA,CAAG,EACpB,CAAE,EAAG,EAAG,EAAG,CAACA,EAAI,CAAG,CACvB,EAEE,OADWF,EAAmBlB,EAAUmB,EAAGC,EAAGC,CAAM,EACjD,KAAK,QAAS/C,EAAK,KAAK,EAC3BA,EAAK,MAAQ6C,EAAIC,EACjB9C,EAAK,OAAS8C,EACd9C,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,QAAQ1G,EAAM+C,EAAQG,CAAM,CACjD,EACSxB,CACT,EACM4F,GAAa,MAAOhG,EAAQtB,IAAS,CACzC,KAAM,CAAE,SAAA0B,EAAU,KAAAM,CAAI,EAAK,MAAMX,EAAYC,EAAQtB,EAAM,OAAQ,EAAI,EACjE6C,EAAIb,EAAK,MAAQhC,EAAK,QACtB8C,EAAId,EAAK,OAAShC,EAAK,QACvB+C,EAAS,CACb,CAAE,EAAG,GAAKD,EAAI,EAAG,EAAG,CAAG,EACvB,CAAE,EAAGD,EAAIC,EAAI,EAAG,EAAG,CAAG,EACtB,CAAE,EAAGD,EAAI,EAAIC,EAAI,EAAG,EAAG,CAACA,CAAG,EAC3B,CAAE,EAAGA,EAAI,EAAG,EAAG,CAACA,CAAG,CACvB,EACQyE,EAAK3E,EAAmBlB,EAAUmB,EAAGC,EAAGC,CAAM,EACpD,OAAAwE,EAAG,KAAK,QAASvH,EAAK,KAAK,EAC3B0C,EAAiB1C,EAAMuH,CAAE,EACzBvH,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,QAAQ1G,EAAM+C,EAAQG,CAAM,CACjD,EACSxB,CACT,EACM8F,GAAY,MAAOlG,EAAQtB,IAAS,CACxC,KAAM,CAAE,SAAA0B,EAAU,KAAAM,CAAI,EAAK,MAAMX,EAAYC,EAAQtB,EAAM,OAAQ,EAAI,EACjE6C,EAAIb,EAAK,MAAQhC,EAAK,QACtB8C,EAAId,EAAK,OAAShC,EAAK,QACvB+C,EAAS,CACb,CAAE,EAAG,EAAID,EAAI,EAAG,EAAG,CAAG,EACtB,CAAE,EAAGD,EAAIC,EAAI,EAAG,EAAG,CAAG,EACtB,CAAE,EAAGD,EAAI,EAAIC,EAAI,EAAG,EAAG,CAACA,CAAG,EAC3B,CAAE,EAAG,CAACA,EAAI,EAAG,EAAG,CAACA,CAAG,CACxB,EACQyE,EAAK3E,EAAmBlB,EAAUmB,EAAGC,EAAGC,CAAM,EACpD,OAAAwE,EAAG,KAAK,QAASvH,EAAK,KAAK,EAC3B0C,EAAiB1C,EAAMuH,CAAE,EACzBvH,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,QAAQ1G,EAAM+C,EAAQG,CAAM,CACjD,EACSxB,CACT,EACM+F,GAAY,MAAOnG,EAAQtB,IAAS,CACxC,KAAM,CAAE,SAAA0B,EAAU,KAAAM,CAAI,EAAK,MAAMX,EAAYC,EAAQtB,EAAM,OAAQ,EAAI,EACjE6C,EAAIb,EAAK,MAAQhC,EAAK,QACtB8C,EAAId,EAAK,OAAShC,EAAK,QACvB+C,EAAS,CACb,CAAE,EAAG,GAAKD,EAAI,EAAG,EAAG,CAAG,EACvB,CAAE,EAAGD,EAAI,EAAIC,EAAI,EAAG,EAAG,CAAG,EAC1B,CAAE,EAAGD,EAAIC,EAAI,EAAG,EAAG,CAACA,CAAG,EACvB,CAAE,EAAGA,EAAI,EAAG,EAAG,CAACA,CAAG,CACvB,EACQyE,EAAK3E,EAAmBlB,EAAUmB,EAAGC,EAAGC,CAAM,EACpD,OAAAwE,EAAG,KAAK,QAASvH,EAAK,KAAK,EAC3B0C,EAAiB1C,EAAMuH,CAAE,EACzBvH,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,QAAQ1G,EAAM+C,EAAQG,CAAM,CACjD,EACSxB,CACT,EACMgG,GAAgB,MAAOpG,EAAQtB,IAAS,CAC5C,KAAM,CAAE,SAAA0B,EAAU,KAAAM,CAAI,EAAK,MAAMX,EAAYC,EAAQtB,EAAM,OAAQ,EAAI,EACjE6C,EAAIb,EAAK,MAAQhC,EAAK,QACtB8C,EAAId,EAAK,OAAShC,EAAK,QACvB+C,EAAS,CACb,CAAE,EAAGD,EAAI,EAAG,EAAG,CAAG,EAClB,CAAE,EAAGD,EAAIC,EAAI,EAAG,EAAG,CAAG,EACtB,CAAE,EAAGD,EAAI,EAAIC,EAAI,EAAG,EAAG,CAACA,CAAG,EAC3B,CAAE,EAAG,GAAKA,EAAI,EAAG,EAAG,CAACA,CAAG,CAC5B,EACQyE,EAAK3E,EAAmBlB,EAAUmB,EAAGC,EAAGC,CAAM,EACpD,OAAAwE,EAAG,KAAK,QAASvH,EAAK,KAAK,EAC3B0C,EAAiB1C,EAAMuH,CAAE,EACzBvH,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,QAAQ1G,EAAM+C,EAAQG,CAAM,CACjD,EACSxB,CACT,EACMiG,GAAuB,MAAOrG,EAAQtB,IAAS,CACnD,KAAM,CAAE,SAAA0B,EAAU,KAAAM,CAAI,EAAK,MAAMX,EAAYC,EAAQtB,EAAM,OAAQ,EAAI,EACjE6C,EAAIb,EAAK,MAAQhC,EAAK,QACtB8C,EAAId,EAAK,OAAShC,EAAK,QACvB+C,EAAS,CACb,CAAE,EAAG,EAAG,EAAG,CAAG,EACd,CAAE,EAAGF,EAAIC,EAAI,EAAG,EAAG,CAAG,EACtB,CAAE,EAAGD,EAAG,EAAG,CAACC,EAAI,CAAG,EACnB,CAAE,EAAGD,EAAIC,EAAI,EAAG,EAAG,CAACA,CAAG,EACvB,CAAE,EAAG,EAAG,EAAG,CAACA,CAAG,CACnB,EACQyE,EAAK3E,EAAmBlB,EAAUmB,EAAGC,EAAGC,CAAM,EACpD,OAAAwE,EAAG,KAAK,QAASvH,EAAK,KAAK,EAC3B0C,EAAiB1C,EAAMuH,CAAE,EACzBvH,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,QAAQ1G,EAAM+C,EAAQG,CAAM,CACjD,EACSxB,CACT,EACMkG,GAAW,MAAOtG,EAAQtB,IAAS,CACvC,KAAM,CAAE,SAAA0B,EAAU,KAAAM,CAAI,EAAK,MAAMX,EAAYC,EAAQtB,EAAM,OAAQ,EAAI,EACjE6C,EAAIb,EAAK,MAAQhC,EAAK,QACtBoD,EAAKP,EAAI,EACTQ,EAAKD,GAAM,IAAMP,EAAI,IACrBC,EAAId,EAAK,OAASqB,EAAKrD,EAAK,QAC5B6H,EAAQ,OAASxE,EAAK,MAAQD,EAAK,IAAMC,EAAK,UAAYR,EAAI,QAAUO,EAAK,IAAMC,EAAK,UAAY,CAACR,EAAI,UAAYC,EAAI,MAAQM,EAAK,IAAMC,EAAK,UAAYR,EAAI,UAAY,CAACC,EAC9KyE,EAAK7F,EAAS,KAAK,iBAAkB2B,CAAE,EAAE,OAAO,OAAQ,cAAc,EAAE,KAAK,QAASrD,EAAK,KAAK,EAAE,KAAK,IAAK6H,CAAK,EAAE,KAAK,YAAa,aAAe,CAAChF,EAAI,EAAI,IAAM,EAAEC,EAAI,EAAIO,GAAM,GAAG,EAC5L,OAAAX,EAAiB1C,EAAMuH,CAAE,EACzBvH,EAAK,UAAY,SAASkD,EAAQ,CAChC,MAAM4E,EAAMpB,EAAU,KAAK1G,EAAMkD,CAAM,EACjC8B,EAAI8C,EAAI,EAAI9H,EAAK,EACvB,GAAIoD,GAAM,IAAM,KAAK,IAAI4B,CAAC,EAAIhF,EAAK,MAAQ,GAAK,KAAK,IAAIgF,CAAC,GAAKhF,EAAK,MAAQ,GAAK,KAAK,IAAI8H,EAAI,EAAI9H,EAAK,CAAC,EAAIA,EAAK,OAAS,EAAIqD,GAAK,CACjI,IAAI4B,EAAI5B,EAAKA,GAAM,EAAI2B,EAAIA,GAAK5B,EAAKA,IACjC6B,GAAK,IACPA,EAAI,KAAK,KAAKA,CAAC,GAEjBA,EAAI5B,EAAK4B,EACL/B,EAAO,EAAIlD,EAAK,EAAI,IACtBiF,EAAI,CAACA,GAEP6C,EAAI,GAAK7C,CACV,CACD,OAAO6C,CACX,EACSpG,CACT,EACMqG,GAAO,MAAOzG,EAAQtB,IAAS,CACnC,KAAM,CAAE,SAAA0B,EAAU,KAAAM,EAAM,YAAAC,CAAW,EAAK,MAAMZ,EAC5CC,EACAtB,EACA,QAAUA,EAAK,QACf,EACJ,EACQ4G,EAAQlF,EAAS,OAAO,OAAQ,cAAc,EAC9CsG,EAAahG,EAAK,MAAQhC,EAAK,QAC/BiI,EAAcjG,EAAK,OAAShC,EAAK,QAEvC,GADA4G,EAAM,KAAK,QAAS,uBAAuB,EAAE,KAAK,QAAS5G,EAAK,KAAK,EAAE,KAAK,KAAMA,EAAK,EAAE,EAAE,KAAK,KAAMA,EAAK,EAAE,EAAE,KAAK,IAAK,CAACgC,EAAK,MAAQ,EAAIC,CAAW,EAAE,KAAK,IAAK,CAACD,EAAK,OAAS,EAAIC,CAAW,EAAE,KAAK,QAAS+F,CAAU,EAAE,KAAK,SAAUC,CAAW,EAClPjI,EAAK,MAAO,CACd,MAAMkI,EAAW,IAAI,IAAI,OAAO,KAAKlI,EAAK,KAAK,CAAC,EAC5CA,EAAK,MAAM,UACbmI,GAAyBvB,EAAO5G,EAAK,MAAM,QAASgI,EAAYC,CAAW,EAC3EC,EAAS,OAAO,SAAS,GAE3BA,EAAS,QAASE,GAAY,CAC5BlJ,EAAI,KAAK,yBAAyBkJ,CAAO,EAAE,CACjD,CAAK,CACF,CACD,OAAA1F,EAAiB1C,EAAM4G,CAAK,EAC5B5G,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,KAAK1G,EAAMkD,CAAM,CACtC,EACSxB,CACT,EACM2G,GAAY,MAAO/G,EAAQtB,IAAS,CACxC,KAAM,CAAE,SAAA0B,CAAU,EAAG,MAAML,EAAYC,EAAQtB,EAAM,QAAS,EAAI,EAClEd,EAAI,MAAM,aAAcc,EAAK,OAAO,EACpC,MAAM4G,EAAQlF,EAAS,OAAO,OAAQ,cAAc,EAC9CsG,EAAa,EACbC,EAAc,EAGpB,GAFArB,EAAM,KAAK,QAASoB,CAAU,EAAE,KAAK,SAAUC,CAAW,EAC1DvG,EAAS,KAAK,QAAS,iBAAiB,EACpC1B,EAAK,MAAO,CACd,MAAMkI,EAAW,IAAI,IAAI,OAAO,KAAKlI,EAAK,KAAK,CAAC,EAC5CA,EAAK,MAAM,UACbmI,GAAyBvB,EAAO5G,EAAK,MAAM,QAASgI,EAAYC,CAAW,EAC3EC,EAAS,OAAO,SAAS,GAE3BA,EAAS,QAASE,GAAY,CAC5BlJ,EAAI,KAAK,yBAAyBkJ,CAAO,EAAE,CACjD,CAAK,CACF,CACD,OAAA1F,EAAiB1C,EAAM4G,CAAK,EAC5B5G,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,KAAK1G,EAAMkD,CAAM,CACtC,EACSxB,CACT,EACA,SAASyG,GAAyBvB,EAAO0B,EAASN,EAAYC,EAAa,CACzE,MAAMM,EAAkB,CAAA,EAClBC,EAAaC,GAAW,CAC5BF,EAAgB,KAAKE,EAAQ,CAAC,CAClC,EACQC,EAAcD,GAAW,CAC7BF,EAAgB,KAAK,EAAGE,CAAM,CAClC,EACMH,EAAQ,SAAS,GAAG,GACtBpJ,EAAI,MAAM,gBAAgB,EAC1BsJ,EAAUR,CAAU,GAEpBU,EAAWV,CAAU,EAEnBM,EAAQ,SAAS,GAAG,GACtBpJ,EAAI,MAAM,kBAAkB,EAC5BsJ,EAAUP,CAAW,GAErBS,EAAWT,CAAW,EAEpBK,EAAQ,SAAS,GAAG,GACtBpJ,EAAI,MAAM,mBAAmB,EAC7BsJ,EAAUR,CAAU,GAEpBU,EAAWV,CAAU,EAEnBM,EAAQ,SAAS,GAAG,GACtBpJ,EAAI,MAAM,iBAAiB,EAC3BsJ,EAAUP,CAAW,GAErBS,EAAWT,CAAW,EAExBrB,EAAM,KAAK,mBAAoB2B,EAAgB,KAAK,GAAG,CAAC,CAC1D,CACA,MAAMI,GAAgB,CAACrH,EAAQtB,IAAS,CACtC,IAAIwB,EACCxB,EAAK,QAGRwB,EAAU,QAAUxB,EAAK,QAFzBwB,EAAU,eAIZ,MAAME,EAAWJ,EAAO,OAAO,GAAG,EAAE,KAAK,QAASE,CAAO,EAAE,KAAK,KAAMxB,EAAK,OAASA,EAAK,EAAE,EACrF4G,EAAQlF,EAAS,OAAO,OAAQ,cAAc,EAC9CkH,EAAYlH,EAAS,OAAO,MAAM,EAClCtB,EAAQsB,EAAS,OAAO,GAAG,EAAE,KAAK,QAAS,OAAO,EAClDmH,EAAQ7I,EAAK,UAAU,KAAOA,EAAK,UAAU,KAAI,EAAKA,EAAK,UACjE,IAAI8I,EAAQ,GACR,OAAOD,GAAU,SACnBC,EAAQD,EAAM,CAAC,EAEfC,EAAQD,EAEV3J,EAAI,KAAK,mBAAoB4J,EAAOD,EAAO,OAAOA,GAAU,QAAQ,EACpE,MAAMhH,EAAOzB,EAAM,KAAI,EAAG,YAAYgB,EAAc0H,EAAO9I,EAAK,WAAY,GAAM,EAAI,CAAC,EACvF,IAAIgC,EAAO,CAAE,MAAO,EAAG,OAAQ,CAAC,EAChC,GAAIpB,EAASC,EAAS,EAAG,UAAU,UAAU,EAAG,CAC9C,MAAMV,EAAM0B,EAAK,SAAS,CAAC,EACrBK,EAAKhC,EAAO2B,CAAI,EACtBG,EAAO7B,EAAI,wBACX+B,EAAG,KAAK,QAASF,EAAK,KAAK,EAC3BE,EAAG,KAAK,SAAUF,EAAK,MAAM,CAC9B,CACD9C,EAAI,KAAK,SAAU2J,CAAK,EACxB,MAAME,EAAWF,EAAM,MAAM,EAAGA,EAAM,MAAM,EAC5C,IAAIG,EAAWnH,EAAK,UACpB,MAAMoH,EAAQ7I,EAAM,KAAI,EAAG,YACzBgB,EAAc2H,EAAS,KAAOA,EAAS,KAAK,OAAO,EAAIA,EAAU/I,EAAK,WAAY,GAAM,EAAI,CAChG,EACE,GAAIY,EAASC,EAAS,EAAG,UAAU,UAAU,EAAG,CAC9C,MAAMV,EAAM8I,EAAM,SAAS,CAAC,EACtB/G,EAAKhC,EAAO+I,CAAK,EACvBjH,EAAO7B,EAAI,wBACX+B,EAAG,KAAK,QAASF,EAAK,KAAK,EAC3BE,EAAG,KAAK,SAAUF,EAAK,MAAM,CAC9B,CACD,MAAMC,EAAcjC,EAAK,QAAU,EACnC,OAAAE,EAAO+I,CAAK,EAAE,KACZ,YACA,eACCjH,EAAK,MAAQgH,EAAS,MAAQ,GAAKA,EAAS,MAAQhH,EAAK,OAAS,GAAK,MAAQgH,EAAS,OAAS/G,EAAc,GAAK,GACzH,EACE/B,EAAO2B,CAAI,EAAE,KACX,YACA,eACCG,EAAK,MAAQgH,EAAS,MAAQ,EAAI,EAAEA,EAAS,MAAQhH,EAAK,OAAS,GAAK,MAC7E,EACEA,EAAO5B,EAAM,KAAM,EAAC,QAAO,EAC3BA,EAAM,KACJ,YACA,aAAe,CAAC4B,EAAK,MAAQ,EAAI,MAAQ,CAACA,EAAK,OAAS,EAAIC,EAAc,GAAK,GACnF,EACE2E,EAAM,KAAK,QAAS,mBAAmB,EAAE,KAAK,IAAK,CAAC5E,EAAK,MAAQ,EAAIC,CAAW,EAAE,KAAK,IAAK,CAACD,EAAK,OAAS,EAAIC,CAAW,EAAE,KAAK,QAASD,EAAK,MAAQhC,EAAK,OAAO,EAAE,KAAK,SAAUgC,EAAK,OAAShC,EAAK,OAAO,EAC9M4I,EAAU,KAAK,QAAS,SAAS,EAAE,KAAK,KAAM,CAAC5G,EAAK,MAAQ,EAAIC,CAAW,EAAE,KAAK,KAAMD,EAAK,MAAQ,EAAIC,CAAW,EAAE,KAAK,KAAM,CAACD,EAAK,OAAS,EAAIC,EAAc+G,EAAS,OAAS/G,CAAW,EAAE,KAAK,KAAM,CAACD,EAAK,OAAS,EAAIC,EAAc+G,EAAS,OAAS/G,CAAW,EAC1QS,EAAiB1C,EAAM4G,CAAK,EAC5B5G,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,KAAK1G,EAAMkD,CAAM,CACtC,EACSxB,CACT,EACMwH,GAAU,MAAO5H,EAAQtB,IAAS,CACtC,KAAM,CAAE,SAAA0B,EAAU,KAAAM,CAAI,EAAK,MAAMX,EAAYC,EAAQtB,EAAM,OAAQ,EAAI,EACjE8C,EAAId,EAAK,OAAShC,EAAK,QACvB6C,EAAIb,EAAK,MAAQc,EAAI,EAAI9C,EAAK,QAC9B4G,EAAQlF,EAAS,OAAO,OAAQ,cAAc,EAAE,KAAK,QAAS1B,EAAK,KAAK,EAAE,KAAK,KAAM8C,EAAI,CAAC,EAAE,KAAK,KAAMA,EAAI,CAAC,EAAE,KAAK,IAAK,CAACD,EAAI,CAAC,EAAE,KAAK,IAAK,CAACC,EAAI,CAAC,EAAE,KAAK,QAASD,CAAC,EAAE,KAAK,SAAUC,CAAC,EACzL,OAAAJ,EAAiB1C,EAAM4G,CAAK,EAC5B5G,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,KAAK1G,EAAMkD,CAAM,CACtC,EACSxB,CACT,EACMyH,GAAS,MAAO7H,EAAQtB,IAAS,CACrC,KAAM,CAAE,SAAA0B,EAAU,KAAAM,EAAM,YAAAC,GAAgB,MAAMZ,EAAYC,EAAQtB,EAAM,OAAQ,EAAI,EAC9EoJ,EAAU1H,EAAS,OAAO,SAAU,cAAc,EACxD,OAAA0H,EAAQ,KAAK,QAASpJ,EAAK,KAAK,EAAE,KAAK,KAAMA,EAAK,EAAE,EAAE,KAAK,KAAMA,EAAK,EAAE,EAAE,KAAK,IAAKgC,EAAK,MAAQ,EAAIC,CAAW,EAAE,KAAK,QAASD,EAAK,MAAQhC,EAAK,OAAO,EAAE,KAAK,SAAUgC,EAAK,OAAShC,EAAK,OAAO,EACpMd,EAAI,KAAK,aAAa,EACtBwD,EAAiB1C,EAAMoJ,CAAO,EAC9BpJ,EAAK,UAAY,SAASkD,EAAQ,CAChChE,OAAAA,EAAI,KAAK,mBAAoBc,EAAMgC,EAAK,MAAQ,EAAIC,EAAaiB,CAAM,EAChEwD,EAAU,OAAO1G,EAAMgC,EAAK,MAAQ,EAAIC,EAAaiB,CAAM,CACtE,EACSxB,CACT,EACM2H,GAAe,MAAO/H,EAAQtB,IAAS,CAC3C,KAAM,CAAE,SAAA0B,EAAU,KAAAM,EAAM,YAAAC,GAAgB,MAAMZ,EAAYC,EAAQtB,EAAM,OAAQ,EAAI,EAC9EsJ,EAAM,EACNC,EAAc7H,EAAS,OAAO,IAAK,cAAc,EACjD8H,EAAcD,EAAY,OAAO,QAAQ,EACzCE,EAAcF,EAAY,OAAO,QAAQ,EAC/C,OAAAA,EAAY,KAAK,QAASvJ,EAAK,KAAK,EACpCwJ,EAAY,KAAK,QAASxJ,EAAK,KAAK,EAAE,KAAK,KAAMA,EAAK,EAAE,EAAE,KAAK,KAAMA,EAAK,EAAE,EAAE,KAAK,IAAKgC,EAAK,MAAQ,EAAIC,EAAcqH,CAAG,EAAE,KAAK,QAAStH,EAAK,MAAQhC,EAAK,QAAUsJ,EAAM,CAAC,EAAE,KAAK,SAAUtH,EAAK,OAAShC,EAAK,QAAUsJ,EAAM,CAAC,EAClOG,EAAY,KAAK,QAASzJ,EAAK,KAAK,EAAE,KAAK,KAAMA,EAAK,EAAE,EAAE,KAAK,KAAMA,EAAK,EAAE,EAAE,KAAK,IAAKgC,EAAK,MAAQ,EAAIC,CAAW,EAAE,KAAK,QAASD,EAAK,MAAQhC,EAAK,OAAO,EAAE,KAAK,SAAUgC,EAAK,OAAShC,EAAK,OAAO,EACxMd,EAAI,KAAK,mBAAmB,EAC5BwD,EAAiB1C,EAAMwJ,CAAW,EAClCxJ,EAAK,UAAY,SAASkD,EAAQ,CAChChE,OAAAA,EAAI,KAAK,yBAA0Bc,EAAMgC,EAAK,MAAQ,EAAIC,EAAcqH,EAAKpG,CAAM,EAC5EwD,EAAU,OAAO1G,EAAMgC,EAAK,MAAQ,EAAIC,EAAcqH,EAAKpG,CAAM,CAC5E,EACSxB,CACT,EACMgI,GAAa,MAAOpI,EAAQtB,IAAS,CACzC,KAAM,CAAE,SAAA0B,EAAU,KAAAM,CAAI,EAAK,MAAMX,EAAYC,EAAQtB,EAAM,OAAQ,EAAI,EACjE6C,EAAIb,EAAK,MAAQhC,EAAK,QACtB8C,EAAId,EAAK,OAAShC,EAAK,QACvB+C,EAAS,CACb,CAAE,EAAG,EAAG,EAAG,CAAG,EACd,CAAE,EAAGF,EAAG,EAAG,CAAG,EACd,CAAE,EAAGA,EAAG,EAAG,CAACC,CAAG,EACf,CAAE,EAAG,EAAG,EAAG,CAACA,CAAG,EACf,CAAE,EAAG,EAAG,EAAG,CAAG,EACd,CAAE,EAAG,GAAI,EAAG,CAAG,EACf,CAAE,EAAGD,EAAI,EAAG,EAAG,CAAG,EAClB,CAAE,EAAGA,EAAI,EAAG,EAAG,CAACC,CAAG,EACnB,CAAE,EAAG,GAAI,EAAG,CAACA,CAAG,EAChB,CAAE,EAAG,GAAI,EAAG,CAAG,CACnB,EACQyE,EAAK3E,EAAmBlB,EAAUmB,EAAGC,EAAGC,CAAM,EACpD,OAAAwE,EAAG,KAAK,QAASvH,EAAK,KAAK,EAC3B0C,EAAiB1C,EAAMuH,CAAE,EACzBvH,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,QAAQ1G,EAAM+C,EAAQG,CAAM,CACjD,EACSxB,CACT,EACMiI,GAAQ,CAACrI,EAAQtB,IAAS,CAC9B,MAAM0B,EAAWJ,EAAO,OAAO,GAAG,EAAE,KAAK,QAAS,cAAc,EAAE,KAAK,KAAMtB,EAAK,OAASA,EAAK,EAAE,EAC5FoJ,EAAU1H,EAAS,OAAO,SAAU,cAAc,EACxD,OAAA0H,EAAQ,KAAK,QAAS,aAAa,EAAE,KAAK,IAAK,CAAC,EAAE,KAAK,QAAS,EAAE,EAAE,KAAK,SAAU,EAAE,EACrF1G,EAAiB1C,EAAMoJ,CAAO,EAC9BpJ,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,OAAO1G,EAAM,EAAGkD,CAAM,CAC3C,EACSxB,CACT,EACMkI,EAAW,CAACtI,EAAQtB,EAAM6J,IAAQ,CACtC,MAAMnI,EAAWJ,EAAO,OAAO,GAAG,EAAE,KAAK,QAAS,cAAc,EAAE,KAAK,KAAMtB,EAAK,OAASA,EAAK,EAAE,EAClG,IAAI8J,EAAQ,GACRC,EAAS,GACTF,IAAQ,OACVC,EAAQ,GACRC,EAAS,IAEX,MAAMlC,EAAQnG,EAAS,OAAO,MAAM,EAAE,KAAK,IAAK,GAAKoI,EAAQ,CAAC,EAAE,KAAK,IAAK,GAAKC,EAAS,CAAC,EAAE,KAAK,QAASD,CAAK,EAAE,KAAK,SAAUC,CAAM,EAAE,KAAK,QAAS,WAAW,EAChK,OAAArH,EAAiB1C,EAAM6H,CAAK,EAC5B7H,EAAK,OAASA,EAAK,OAASA,EAAK,QAAU,EAC3CA,EAAK,MAAQA,EAAK,MAAQA,EAAK,QAAU,EACzCA,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,KAAK1G,EAAMkD,CAAM,CACtC,EACSxB,CACT,EACMsI,GAAM,CAAC1I,EAAQtB,IAAS,CAC5B,MAAM0B,EAAWJ,EAAO,OAAO,GAAG,EAAE,KAAK,QAAS,cAAc,EAAE,KAAK,KAAMtB,EAAK,OAASA,EAAK,EAAE,EAC5FyJ,EAAc/H,EAAS,OAAO,SAAU,cAAc,EACtD0H,EAAU1H,EAAS,OAAO,SAAU,cAAc,EACxD,OAAA0H,EAAQ,KAAK,QAAS,aAAa,EAAE,KAAK,IAAK,CAAC,EAAE,KAAK,QAAS,EAAE,EAAE,KAAK,SAAU,EAAE,EACrFK,EAAY,KAAK,QAAS,WAAW,EAAE,KAAK,IAAK,CAAC,EAAE,KAAK,QAAS,EAAE,EAAE,KAAK,SAAU,EAAE,EACvF/G,EAAiB1C,EAAMoJ,CAAO,EAC9BpJ,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,OAAO1G,EAAM,EAAGkD,CAAM,CAC3C,EACSxB,CACT,EACMuI,GAAY,CAAC3I,EAAQtB,IAAS,CAClC,MAAMiC,EAAcjC,EAAK,QAAU,EAC7BkK,EAAa,EACbC,EAAa,EACnB,IAAI3I,EACCxB,EAAK,QAGRwB,EAAU,QAAUxB,EAAK,QAFzBwB,EAAU,eAIZ,MAAME,EAAWJ,EAAO,OAAO,GAAG,EAAE,KAAK,QAASE,CAAO,EAAE,KAAK,KAAMxB,EAAK,OAASA,EAAK,EAAE,EACrF4G,EAAQlF,EAAS,OAAO,OAAQ,cAAc,EAC9C0I,EAAU1I,EAAS,OAAO,MAAM,EAChC2I,EAAa3I,EAAS,OAAO,MAAM,EACzC,IAAI4I,EAAW,EACXC,EAAYL,EAChB,MAAMM,EAAiB9I,EAAS,OAAO,GAAG,EAAE,KAAK,QAAS,OAAO,EACjE,IAAI+I,EAAc,EAClB,MAAMC,EAAe1K,EAAK,UAAU,aAAeA,EAAK,UAAU,YAAY,CAAC,EACzE2K,EAAqB3K,EAAK,UAAU,YAAY,CAAC,EAAI,IAAMA,EAAK,UAAU,YAAY,CAAC,EAAI,IAAM,GACjG4K,EAAiBJ,EAAe,KAAI,EAAG,YAAYpJ,EAAcuJ,EAAoB3K,EAAK,WAAY,GAAM,EAAI,CAAC,EACvH,IAAI6K,EAAgBD,EAAe,UACnC,GAAIhK,EAASC,EAAS,EAAG,UAAU,UAAU,EAAG,CAC9C,MAAMV,EAAMyK,EAAe,SAAS,CAAC,EAC/B1I,EAAKhC,EAAO0K,CAAc,EAChCC,EAAgB1K,EAAI,wBACpB+B,EAAG,KAAK,QAAS2I,EAAc,KAAK,EACpC3I,EAAG,KAAK,SAAU2I,EAAc,MAAM,CACvC,CACG7K,EAAK,UAAU,YAAY,CAAC,IAC9BuK,GAAaM,EAAc,OAASX,EACpCI,GAAYO,EAAc,OAE5B,IAAIC,EAAmB9K,EAAK,UAAU,MAClCA,EAAK,UAAU,OAAS,QAAUA,EAAK,UAAU,OAAS,KACxDa,EAAS,EAAG,UAAU,WACxBiK,GAAoB,OAAS9K,EAAK,UAAU,KAAO,OAEnD8K,GAAoB,IAAM9K,EAAK,UAAU,KAAO,KAGpD,MAAM+K,EAAkBP,EAAe,KAAI,EAAG,YAAYpJ,EAAc0J,EAAkB9K,EAAK,WAAY,GAAM,EAAI,CAAC,EACtHE,EAAO6K,CAAe,EAAE,KAAK,QAAS,YAAY,EAClD,IAAIC,EAAiBD,EAAgB,UACrC,GAAInK,EAASC,EAAS,EAAG,UAAU,UAAU,EAAG,CAC9C,MAAMV,EAAM4K,EAAgB,SAAS,CAAC,EAChC7I,EAAKhC,EAAO6K,CAAe,EACjCC,EAAiB7K,EAAI,wBACrB+B,EAAG,KAAK,QAAS8I,EAAe,KAAK,EACrC9I,EAAG,KAAK,SAAU8I,EAAe,MAAM,CACxC,CACDT,GAAaS,EAAe,OAASd,EACjCc,EAAe,MAAQV,IACzBA,EAAWU,EAAe,OAE5B,MAAMC,EAAkB,CAAA,EACxBjL,EAAK,UAAU,QAAQ,QAASkL,GAAQ,CACtC,MAAMC,EAAaC,EAAYF,CAAG,EAClC,IAAIG,EAAaF,EAAW,YACxBtK,EAAS,EAAG,UAAU,aACxBwK,EAAaA,EAAW,QAAQ,KAAM,MAAM,EAAE,QAAQ,KAAM,MAAM,GAEpE,MAAMC,EAAMd,EAAe,KAAI,EAAG,YAChCpJ,EACEiK,EACAF,EAAW,SAAWA,EAAW,SAAWnL,EAAK,WACjD,GACA,EACD,CACP,EACI,IAAIgC,EAAOsJ,EAAI,UACf,GAAI1K,EAASC,EAAS,EAAG,UAAU,UAAU,EAAG,CAC9C,MAAMV,EAAMmL,EAAI,SAAS,CAAC,EACpBpJ,EAAKhC,EAAOoL,CAAG,EACrBtJ,EAAO7B,EAAI,wBACX+B,EAAG,KAAK,QAASF,EAAK,KAAK,EAC3BE,EAAG,KAAK,SAAUF,EAAK,MAAM,CAC9B,CACGA,EAAK,MAAQsI,IACfA,EAAWtI,EAAK,OAElBuI,GAAavI,EAAK,OAASkI,EAC3Be,EAAgB,KAAKK,CAAG,CAC5B,CAAG,EACDf,GAAaJ,EACb,MAAMoB,EAAe,CAAA,EA8BrB,GA7BAvL,EAAK,UAAU,QAAQ,QAASkL,GAAQ,CACtC,MAAMC,EAAaC,EAAYF,CAAG,EAClC,IAAIM,EAAcL,EAAW,YACzBtK,EAAS,EAAG,UAAU,aACxB2K,EAAcA,EAAY,QAAQ,KAAM,MAAM,EAAE,QAAQ,KAAM,MAAM,GAEtE,MAAMF,EAAMd,EAAe,KAAI,EAAG,YAChCpJ,EACEoK,EACAL,EAAW,SAAWA,EAAW,SAAWnL,EAAK,WACjD,GACA,EACD,CACP,EACI,IAAIgC,EAAOsJ,EAAI,UACf,GAAI1K,EAASC,EAAS,EAAG,UAAU,UAAU,EAAG,CAC9C,MAAMV,EAAMmL,EAAI,SAAS,CAAC,EACpBpJ,EAAKhC,EAAOoL,CAAG,EACrBtJ,EAAO7B,EAAI,wBACX+B,EAAG,KAAK,QAASF,EAAK,KAAK,EAC3BE,EAAG,KAAK,SAAUF,EAAK,MAAM,CAC9B,CACGA,EAAK,MAAQsI,IACfA,EAAWtI,EAAK,OAElBuI,GAAavI,EAAK,OAASkI,EAC3BqB,EAAa,KAAKD,CAAG,CACzB,CAAG,EACDf,GAAaJ,EACTO,EAAc,CAChB,IAAIe,GAAUnB,EAAWO,EAAc,OAAS,EAChD3K,EAAO0K,CAAc,EAAE,KACrB,YACA,eAAiB,GAAKN,EAAW,EAAImB,GAAU,KAAO,GAAKlB,EAAY,EAAI,GACjF,EACIE,EAAcI,EAAc,OAASX,CACtC,CACD,IAAIwB,IAASpB,EAAWU,EAAe,OAAS,EAChD,OAAA9K,EAAO6K,CAAe,EAAE,KACtB,YACA,eAAiB,GAAKT,EAAW,EAAIoB,IAAS,MAAQ,GAAKnB,EAAY,EAAIE,GAAe,GAC9F,EACEA,GAAeO,EAAe,OAASd,EACvCE,EAAQ,KAAK,QAAS,SAAS,EAAE,KAAK,KAAM,CAACE,EAAW,EAAIrI,CAAW,EAAE,KAAK,KAAMqI,EAAW,EAAIrI,CAAW,EAAE,KAAK,KAAM,CAACsI,EAAY,EAAItI,EAAckI,EAAaM,CAAW,EAAE,KAAK,KAAM,CAACF,EAAY,EAAItI,EAAckI,EAAaM,CAAW,EACtPA,GAAeN,EACfc,EAAgB,QAASK,GAAQ,CAC/BpL,EAAOoL,CAAG,EAAE,KACV,YACA,cAAgB,CAAChB,EAAW,EAAI,MAAQ,GAAKC,EAAY,EAAIE,EAAcN,EAAa,GAAK,GACnG,EACI,MAAMwB,EAAaL,GAAO,KAAO,OAASA,EAAI,UAC9Cb,KAAiBkB,GAAc,KAAO,OAASA,EAAW,SAAW,GAAKzB,CAC9E,CAAG,EACDO,GAAeN,EACfE,EAAW,KAAK,QAAS,SAAS,EAAE,KAAK,KAAM,CAACC,EAAW,EAAIrI,CAAW,EAAE,KAAK,KAAMqI,EAAW,EAAIrI,CAAW,EAAE,KAAK,KAAM,CAACsI,EAAY,EAAItI,EAAckI,EAAaM,CAAW,EAAE,KAAK,KAAM,CAACF,EAAY,EAAItI,EAAckI,EAAaM,CAAW,EACzPA,GAAeN,EACfoB,EAAa,QAASD,GAAQ,CAC5BpL,EAAOoL,CAAG,EAAE,KACV,YACA,cAAgB,CAAChB,EAAW,EAAI,MAAQ,GAAKC,EAAY,EAAIE,GAAe,GAClF,EACI,MAAMkB,EAAaL,GAAO,KAAO,OAASA,EAAI,UAC9Cb,KAAiBkB,GAAc,KAAO,OAASA,EAAW,SAAW,GAAKzB,CAC9E,CAAG,EACDtD,EAAM,KAAK,QAAS,mBAAmB,EAAE,KAAK,IAAK,CAAC0D,EAAW,EAAIrI,CAAW,EAAE,KAAK,IAAK,EAAEsI,EAAY,GAAKtI,CAAW,EAAE,KAAK,QAASqI,EAAWtK,EAAK,OAAO,EAAE,KAAK,SAAUuK,EAAYvK,EAAK,OAAO,EACxM0C,EAAiB1C,EAAM4G,CAAK,EAC5B5G,EAAK,UAAY,SAASkD,EAAQ,CAChC,OAAOwD,EAAU,KAAK1G,EAAMkD,CAAM,CACtC,EACSxB,CACT,EACMkK,EAAS,CACb,QAAS9E,EACT,SAAAA,EACA,KAAAiB,GACA,UAAAM,GACA,cAAAM,GACA,OAAA3B,GACA,OAAAmC,GACA,aAAAE,GACA,QAAAH,GACA,QAAAjC,GACA,oBAAAI,GACA,WAAAC,GACA,UAAAE,GACA,UAAAC,GACA,cAAAC,GACA,qBAAAC,GACA,SAAAC,GACA,MAAA+B,GACA,IAAAK,GACA,KAAMnD,GACN,WAAA6C,GACA,KAAME,EACN,KAAMA,EACN,UAAAK,EACF,EACA,IAAI4B,EAAY,CAAA,EACX,MAACC,GAAa,MAAOnN,EAAMqB,EAAM6J,IAAQ,CAC5C,IAAIkC,EACAxE,EACJ,GAAIvH,EAAK,KAAM,CACb,IAAIgM,EACAnL,EAAS,EAAG,gBAAkB,UAChCmL,EAAS,OACAhM,EAAK,aACdgM,EAAShM,EAAK,YAAc,UAE9B+L,EAAQpN,EAAK,OAAO,OAAO,EAAE,KAAK,aAAcqB,EAAK,IAAI,EAAE,KAAK,SAAUgM,CAAM,EAChFzE,EAAK,MAAMqE,EAAO5L,EAAK,KAAK,EAAE+L,EAAO/L,EAAM6J,CAAG,CAClD,MACItC,EAAK,MAAMqE,EAAO5L,EAAK,KAAK,EAAErB,EAAMqB,EAAM6J,CAAG,EAC7CkC,EAAQxE,EAEV,OAAIvH,EAAK,SACPuH,EAAG,KAAK,QAASvH,EAAK,OAAO,EAE3BA,EAAK,OACPuH,EAAG,KAAK,QAAS,gBAAkBvH,EAAK,KAAK,EAE/C6L,EAAU7L,EAAK,EAAE,EAAI+L,EACjB/L,EAAK,cACP6L,EAAU7L,EAAK,EAAE,EAAE,KAAK,QAAS6L,EAAU7L,EAAK,EAAE,EAAE,KAAK,OAAO,EAAI,YAAY,EAE3E+L,CACT,EACME,GAAc,CAACtN,EAAMqB,IAAS,CAClC6L,EAAU7L,EAAK,EAAE,EAAIrB,CACvB,EACMuN,GAAU,IAAM,CACpBL,EAAY,CAAA,CACd,EACMM,GAAgBnM,GAAS,CAC7B,MAAMuH,EAAKsE,EAAU7L,EAAK,EAAE,EAC5Bd,EAAI,MACF,oBACAc,EAAK,KACLA,EACA,cAAgBA,EAAK,EAAIA,EAAK,MAAQ,EAAI,GAAK,KAAOA,EAAK,MAAQ,EAAI,GAC3E,EACE,MAAMoM,EAAU,EACVC,EAAOrM,EAAK,MAAQ,EAC1B,OAAIA,EAAK,YACPuH,EAAG,KACD,YACA,cAAgBvH,EAAK,EAAIqM,EAAOrM,EAAK,MAAQ,GAAK,MAAQA,EAAK,EAAIA,EAAK,OAAS,EAAIoM,GAAW,GACtG,EAEI7E,EAAG,KAAK,YAAa,aAAevH,EAAK,EAAI,KAAOA,EAAK,EAAI,GAAG,EAE3DqM,CACT,EACA,IAAIC,EAAa,CAAA,EACbC,EAAiB,CAAA,EAChB,MAACC,GAAQ,IAAM,CAClBF,EAAa,CAAA,EACbC,EAAiB,CAAA,CACnB,EACME,GAAkB,CAAC9N,EAAM+N,IAAS,CACtC,MAAMjL,EAAgBb,EAASC,EAAW,EAAC,UAAU,UAAU,EACzD8L,EAAeD,EAAK,YAAc,WAAa5K,EAAWnD,EAAM+N,EAAK,MAAO,CAChF,MAAOA,EAAK,WACZ,cAAAjL,EACA,iBAAkB,EACtB,CAAG,EAAIL,EAAcsL,EAAK,MAAOA,EAAK,UAAU,EAC9CxN,EAAI,KAAK,QAASwN,EAAMA,EAAK,SAAS,EACtC,MAAME,EAAYjO,EAAK,OAAO,GAAG,EAAE,KAAK,QAAS,WAAW,EACtDyB,EAAQwM,EAAU,OAAO,GAAG,EAAE,KAAK,QAAS,OAAO,EACzDxM,EAAM,KAAI,EAAG,YAAYuM,CAAY,EACrC,IAAI3K,EAAO2K,EAAa,UACxB,GAAIlL,EAAe,CACjB,MAAMtB,EAAMwM,EAAa,SAAS,CAAC,EAC7BzK,EAAKhC,EAAOyM,CAAY,EAC9B3K,EAAO7B,EAAI,wBACX+B,EAAG,KAAK,QAASF,EAAK,KAAK,EAC3BE,EAAG,KAAK,SAAUF,EAAK,MAAM,CAC9B,CACD5B,EAAM,KAAK,YAAa,aAAe,CAAC4B,EAAK,MAAQ,EAAI,KAAO,CAACA,EAAK,OAAS,EAAI,GAAG,EACtFsK,EAAWI,EAAK,EAAE,EAAIE,EACtBF,EAAK,MAAQ1K,EAAK,MAClB0K,EAAK,OAAS1K,EAAK,OACnB,IAAI/B,EACJ,GAAIyM,EAAK,eAAgB,CACvB,MAAMG,EAAoBzL,EAAcsL,EAAK,eAAgBA,EAAK,UAAU,EACtEI,EAAqBnO,EAAK,OAAO,GAAG,EAAE,KAAK,QAAS,eAAe,EACnEoO,EAAQD,EAAmB,OAAO,GAAG,EAAE,KAAK,QAAS,OAAO,EAClE7M,EAAK8M,EAAM,KAAM,EAAC,YAAYF,CAAiB,EAC/C,MAAMG,EAAQH,EAAkB,UAChCE,EAAM,KAAK,YAAa,aAAe,CAACC,EAAM,MAAQ,EAAI,KAAO,CAACA,EAAM,OAAS,EAAI,GAAG,EACnFT,EAAeG,EAAK,EAAE,IACzBH,EAAeG,EAAK,EAAE,EAAI,IAE5BH,EAAeG,EAAK,EAAE,EAAE,UAAYI,EACpCG,EAAiBhN,EAAIyM,EAAK,cAAc,CACzC,CACD,GAAIA,EAAK,gBAAiB,CACxB,MAAMG,EAAoBzL,EAAcsL,EAAK,gBAAiBA,EAAK,UAAU,EACvEQ,EAAsBvO,EAAK,OAAO,GAAG,EAAE,KAAK,QAAS,eAAe,EACpEoO,EAAQG,EAAoB,OAAO,GAAG,EAAE,KAAK,QAAS,OAAO,EACnEjN,EAAKiN,EAAoB,KAAM,EAAC,YAAYL,CAAiB,EAC7DE,EAAM,KAAI,EAAG,YAAYF,CAAiB,EAC1C,MAAMG,EAAQH,EAAkB,UAChCE,EAAM,KAAK,YAAa,aAAe,CAACC,EAAM,MAAQ,EAAI,KAAO,CAACA,EAAM,OAAS,EAAI,GAAG,EACnFT,EAAeG,EAAK,EAAE,IACzBH,EAAeG,EAAK,EAAE,EAAI,IAE5BH,EAAeG,EAAK,EAAE,EAAE,WAAaQ,EACrCD,EAAiBhN,EAAIyM,EAAK,eAAe,CAC1C,CACD,GAAIA,EAAK,aAAc,CACrB,MAAMS,EAAkB/L,EAAcsL,EAAK,aAAcA,EAAK,UAAU,EAClEU,EAAmBzO,EAAK,OAAO,GAAG,EAAE,KAAK,QAAS,eAAe,EACjEoO,EAAQK,EAAiB,OAAO,GAAG,EAAE,KAAK,QAAS,OAAO,EAChEnN,EAAK8M,EAAM,KAAM,EAAC,YAAYI,CAAe,EAC7C,MAAMH,EAAQG,EAAgB,UAC9BJ,EAAM,KAAK,YAAa,aAAe,CAACC,EAAM,MAAQ,EAAI,KAAO,CAACA,EAAM,OAAS,EAAI,GAAG,EACxFI,EAAiB,KAAI,EAAG,YAAYD,CAAe,EAC9CZ,EAAeG,EAAK,EAAE,IACzBH,EAAeG,EAAK,EAAE,EAAI,IAE5BH,EAAeG,EAAK,EAAE,EAAE,QAAUU,EAClCH,EAAiBhN,EAAIyM,EAAK,YAAY,CACvC,CACD,GAAIA,EAAK,cAAe,CACtB,MAAMS,EAAkB/L,EAAcsL,EAAK,cAAeA,EAAK,UAAU,EACnEW,EAAoB1O,EAAK,OAAO,GAAG,EAAE,KAAK,QAAS,eAAe,EAClEoO,EAAQM,EAAkB,OAAO,GAAG,EAAE,KAAK,QAAS,OAAO,EACjEpN,EAAK8M,EAAM,KAAM,EAAC,YAAYI,CAAe,EAC7C,MAAMH,EAAQG,EAAgB,UAC9BJ,EAAM,KAAK,YAAa,aAAe,CAACC,EAAM,MAAQ,EAAI,KAAO,CAACA,EAAM,OAAS,EAAI,GAAG,EACxFK,EAAkB,KAAI,EAAG,YAAYF,CAAe,EAC/CZ,EAAeG,EAAK,EAAE,IACzBH,EAAeG,EAAK,EAAE,EAAI,IAE5BH,EAAeG,EAAK,EAAE,EAAE,SAAWW,EACnCJ,EAAiBhN,EAAIyM,EAAK,aAAa,CACxC,CACD,OAAOC,CACT,EACA,SAASM,EAAiBhN,EAAIqN,EAAO,CAC/BzM,EAAW,EAAC,UAAU,YAAcZ,IACtCA,EAAG,MAAM,MAAQqN,EAAM,OAAS,EAAI,KACpCrN,EAAG,MAAM,OAAS,OAEtB,CACK,MAACsN,GAAoB,CAACb,EAAMc,IAAU,CACzCtO,EAAI,KAAK,sBAAuBwN,EAAK,GAAIA,EAAK,MAAOJ,EAAWI,EAAK,EAAE,CAAC,EACxE,IAAIe,EAAOD,EAAM,YAAcA,EAAM,YAAcA,EAAM,aACzD,GAAId,EAAK,MAAO,CACd,MAAMnF,EAAK+E,EAAWI,EAAK,EAAE,EAC7B,IAAI1H,EAAI0H,EAAK,EACTzH,EAAIyH,EAAK,EACb,GAAIe,EAAM,CACR,MAAM3F,EAAM4F,EAAM,kBAAkBD,CAAI,EACxCvO,EAAI,KACF,gBAAkBwN,EAAK,MAAQ,UAC/B1H,EACA,IACAC,EACA,SACA6C,EAAI,EACJ,IACAA,EAAI,EACJ,SACR,EACU0F,EAAM,cACRxI,EAAI8C,EAAI,EACR7C,EAAI6C,EAAI,EAEX,CACDP,EAAG,KAAK,YAAa,aAAevC,EAAI,KAAOC,EAAI,GAAG,CACvD,CACD,GAAIyH,EAAK,eAAgB,CACvB,MAAMnF,EAAKgF,EAAeG,EAAK,EAAE,EAAE,UACnC,IAAI1H,EAAI0H,EAAK,EACTzH,EAAIyH,EAAK,EACb,GAAIe,EAAM,CACR,MAAM3F,EAAM4F,EAAM,0BAA0BhB,EAAK,eAAiB,GAAK,EAAG,aAAce,CAAI,EAC5FzI,EAAI8C,EAAI,EACR7C,EAAI6C,EAAI,CACT,CACDP,EAAG,KAAK,YAAa,aAAevC,EAAI,KAAOC,EAAI,GAAG,CACvD,CACD,GAAIyH,EAAK,gBAAiB,CACxB,MAAMnF,EAAKgF,EAAeG,EAAK,EAAE,EAAE,WACnC,IAAI1H,EAAI0H,EAAK,EACTzH,EAAIyH,EAAK,EACb,GAAIe,EAAM,CACR,MAAM3F,EAAM4F,EAAM,0BAChBhB,EAAK,eAAiB,GAAK,EAC3B,cACAe,CACR,EACMzI,EAAI8C,EAAI,EACR7C,EAAI6C,EAAI,CACT,CACDP,EAAG,KAAK,YAAa,aAAevC,EAAI,KAAOC,EAAI,GAAG,CACvD,CACD,GAAIyH,EAAK,aAAc,CACrB,MAAMnF,EAAKgF,EAAeG,EAAK,EAAE,EAAE,QACnC,IAAI1H,EAAI0H,EAAK,EACTzH,EAAIyH,EAAK,EACb,GAAIe,EAAM,CACR,MAAM3F,EAAM4F,EAAM,0BAA0BhB,EAAK,aAAe,GAAK,EAAG,WAAYe,CAAI,EACxFzI,EAAI8C,EAAI,EACR7C,EAAI6C,EAAI,CACT,CACDP,EAAG,KAAK,YAAa,aAAevC,EAAI,KAAOC,EAAI,GAAG,CACvD,CACD,GAAIyH,EAAK,cAAe,CACtB,MAAMnF,EAAKgF,EAAeG,EAAK,EAAE,EAAE,SACnC,IAAI1H,EAAI0H,EAAK,EACTzH,EAAIyH,EAAK,EACb,GAAIe,EAAM,CACR,MAAM3F,EAAM4F,EAAM,0BAA0BhB,EAAK,aAAe,GAAK,EAAG,YAAae,CAAI,EACzFzI,EAAI8C,EAAI,EACR7C,EAAI6C,EAAI,CACT,CACDP,EAAG,KAAK,YAAa,aAAevC,EAAI,KAAOC,EAAI,GAAG,CACvD,CACH,EACM0I,GAAc,CAAC3N,EAAMkD,IAAW,CACpC,MAAM8B,EAAIhF,EAAK,EACTiF,EAAIjF,EAAK,EACT2D,EAAK,KAAK,IAAIT,EAAO,EAAI8B,CAAC,EAC1BpB,EAAK,KAAK,IAAIV,EAAO,EAAI+B,CAAC,EAC1BpC,EAAI7C,EAAK,MAAQ,EACjB8C,EAAI9C,EAAK,OAAS,EACxB,OAAI2D,GAAMd,GAAKe,GAAMd,CAIvB,EACM8K,GAAe,CAAC5N,EAAM6N,EAAcC,IAAgB,CACxD5O,EAAI,KAAK;AAAA,kBACO,KAAK,UAAU2O,CAAY,CAAC;AAAA,kBAC5B,KAAK,UAAUC,CAAW,CAAC;AAAA,oBACzB9N,EAAK,CAAC,MAAMA,EAAK,CAAC,MAAMA,EAAK,KAAK,MAAMA,EAAK,MAAM,EAAE,EACvE,MAAMgF,EAAIhF,EAAK,EACTiF,EAAIjF,EAAK,EACT2D,EAAK,KAAK,IAAIqB,EAAI8I,EAAY,CAAC,EAC/BjL,EAAI7C,EAAK,MAAQ,EACvB,IAAI+N,EAAID,EAAY,EAAID,EAAa,EAAIhL,EAAIc,EAAKd,EAAIc,EACtD,MAAMb,EAAI9C,EAAK,OAAS,EAClBgO,EAAI,KAAK,IAAIH,EAAa,EAAIC,EAAY,CAAC,EAC3CG,EAAI,KAAK,IAAIJ,EAAa,EAAIC,EAAY,CAAC,EACjD,GAAI,KAAK,IAAI7I,EAAI4I,EAAa,CAAC,EAAIhL,EAAI,KAAK,IAAImC,EAAI6I,EAAa,CAAC,EAAI/K,EAAG,CACvE,IAAIiD,EAAI+H,EAAY,EAAID,EAAa,EAAIA,EAAa,EAAI/K,EAAImC,EAAIA,EAAInC,EAAI+K,EAAa,EACvFE,EAAIE,EAAIlI,EAAIiI,EACZ,MAAM1L,EAAM,CACV,EAAGwL,EAAY,EAAID,EAAa,EAAIC,EAAY,EAAIC,EAAID,EAAY,EAAIG,EAAIF,EAC5E,EAAGD,EAAY,EAAID,EAAa,EAAIC,EAAY,EAAIE,EAAIjI,EAAI+H,EAAY,EAAIE,EAAIjI,CACtF,EACI,OAAIgI,IAAM,IACRzL,EAAI,EAAIuL,EAAa,EACrBvL,EAAI,EAAIuL,EAAa,GAEnBI,IAAM,IACR3L,EAAI,EAAIuL,EAAa,GAEnBG,IAAM,IACR1L,EAAI,EAAIuL,EAAa,GAEvB3O,EAAI,KAAK,2BAA2B8O,CAAC,OAAOjI,CAAC,OAAOkI,CAAC,OAAOF,CAAC,GAAIzL,CAAG,EAC7DA,CACX,KAAS,CACDwL,EAAY,EAAID,EAAa,EAC/BE,EAAIF,EAAa,EAAIhL,EAAImC,EAEzB+I,EAAI/I,EAAInC,EAAIgL,EAAa,EAE3B,IAAI9H,EAAIiI,EAAID,EAAIE,EACZC,EAAKJ,EAAY,EAAID,EAAa,EAAIC,EAAY,EAAIG,EAAIF,EAAID,EAAY,EAAIG,EAAIF,EAClFI,EAAKL,EAAY,EAAID,EAAa,EAAIC,EAAY,EAAI/H,EAAI+H,EAAY,EAAI/H,EAC9E7G,OAAAA,EAAI,KAAK,uBAAuB8O,CAAC,OAAOjI,CAAC,OAAOkI,CAAC,OAAOF,CAAC,GAAI,CAAE,GAAAG,EAAI,GAAAC,CAAE,CAAE,EACnEJ,IAAM,IACRG,EAAKL,EAAa,EAClBM,EAAKN,EAAa,GAEhBI,IAAM,IACRC,EAAKL,EAAa,GAEhBG,IAAM,IACRG,EAAKN,EAAa,GAEb,CAAE,EAAGK,EAAI,EAAGC,CAAE,CACtB,CACH,EACMC,EAAqB,CAACC,EAASC,IAAgB,CACnDpP,EAAI,KAAK,2BAA4BmP,EAASC,CAAW,EACzD,IAAIvL,EAAS,CAAA,EACTwL,EAAmBF,EAAQ,CAAC,EAC5BG,EAAW,GACf,OAAAH,EAAQ,QAASnL,GAAW,CAE1B,GADAhE,EAAI,KAAK,uBAAwBgE,EAAQoL,CAAW,EAChD,CAACX,GAAYW,EAAapL,CAAM,GAAK,CAACsL,EAAU,CAClD,MAAMC,EAAQb,GAAaU,EAAaC,EAAkBrL,CAAM,EAChEhE,EAAI,KAAK,eAAgBgE,EAAQqL,EAAkBE,CAAK,EACxDvP,EAAI,KAAK,qBAAsBuP,CAAK,EACpC,IAAIC,EAAe,GACnB3L,EAAO,QAAS4L,GAAM,CACpBD,EAAeA,GAAgBC,EAAE,IAAMF,EAAM,GAAKE,EAAE,IAAMF,EAAM,CACxE,CAAO,EACI1L,EAAO,KAAM6L,GAAMA,EAAE,IAAMH,EAAM,GAAKG,EAAE,IAAMH,EAAM,CAAC,EAGxDvP,EAAI,KAAK,qBAAsBuP,EAAO1L,CAAM,EAF5CA,EAAO,KAAK0L,CAAK,EAInBD,EAAW,EACjB,MACMtP,EAAI,KAAK,gBAAiBgE,EAAQqL,CAAgB,EAClDA,EAAmBrL,EACdsL,GACHzL,EAAO,KAAKG,CAAM,CAG1B,CAAG,EACDhE,EAAI,KAAK,yBAA0B6D,CAAM,EAClCA,CACT,EACM8L,GAAa,SAASlQ,EAAMiQ,EAAGlC,EAAMoC,EAAWC,EAAaC,EAAO,CACxE,IAAIjM,EAAS2J,EAAK,OACduC,EAAmB,GACvB,MAAMC,EAAOF,EAAM,KAAKJ,EAAE,CAAC,EAC3B,IAAIO,EAAOH,EAAM,KAAKJ,EAAE,CAAC,EACzB1P,EAAI,KAAK,qBAAsBwN,CAAI,EAC/ByC,EAAK,WAAaD,EAAK,YACzBnM,EAASA,EAAO,MAAM,EAAG2J,EAAK,OAAO,OAAS,CAAC,EAC/C3J,EAAO,QAAQmM,EAAK,UAAUnM,EAAO,CAAC,CAAC,CAAC,EACxC7D,EAAI,KACF,aACA6D,EAAOA,EAAO,OAAS,CAAC,EACxBoM,EACAA,EAAK,UAAUpM,EAAOA,EAAO,OAAS,CAAC,CAAC,CAC9C,EACIA,EAAO,KAAKoM,EAAK,UAAUpM,EAAOA,EAAO,OAAS,CAAC,CAAC,CAAC,GAEnD2J,EAAK,YACPxN,EAAI,KAAK,mBAAoB4P,EAAUpC,EAAK,SAAS,CAAC,EACtD3J,EAASqL,EAAmB1B,EAAK,OAAQoC,EAAUpC,EAAK,SAAS,EAAE,IAAI,EACvEuC,EAAmB,IAEjBvC,EAAK,cACPxN,EAAI,KAAK,qBAAsB4P,EAAUpC,EAAK,WAAW,CAAC,EAC1D3J,EAASqL,EAAmBrL,EAAO,UAAW+L,EAAUpC,EAAK,WAAW,EAAE,IAAI,EAAE,QAAO,EACvFuC,EAAmB,IAErB,MAAMG,EAAWrM,EAAO,OAAQ4L,GAAM,CAAC,OAAO,MAAMA,EAAE,CAAC,CAAC,EACxD,IAAIU,EACAN,IAAgB,SAAWA,IAAgB,YAC7CM,EAAQ3C,EAAK,OAAS4C,EAEtBD,EAAQC,EAEV,MAAMC,EAAeC,GAAI,EAAG,EAAE,SAASxM,EAAG,CACxC,OAAOA,EAAE,CACb,CAAG,EAAE,EAAE,SAASA,EAAG,CACf,OAAOA,EAAE,CACb,CAAG,EAAE,MAAMqM,CAAK,EACd,IAAII,EACJ,OAAQ/C,EAAK,UAAS,CACpB,IAAK,SACH+C,EAAgB,wBAChB,MACF,IAAK,QACHA,EAAgB,uBAChB,MACF,IAAK,YACHA,EAAgB,uBAChB,MACF,QACEA,EAAgB,EACnB,CACD,OAAQ/C,EAAK,QAAO,CAClB,IAAK,QACH+C,GAAiB,sBACjB,MACF,IAAK,SACHA,GAAiB,uBACjB,MACF,IAAK,SACHA,GAAiB,uBACjB,KACH,CACD,MAAMC,EAAU/Q,EAAK,OAAO,MAAM,EAAE,KAAK,IAAK4Q,EAAaH,CAAQ,CAAC,EAAE,KAAK,KAAM1C,EAAK,EAAE,EAAE,KAAK,QAAS,IAAM+C,GAAiB/C,EAAK,QAAU,IAAMA,EAAK,QAAU,GAAG,EAAE,KAAK,QAASA,EAAK,KAAK,EAChM,IAAIiD,EAAM,GAQV,QAPI9O,EAAW,EAAC,UAAU,qBAAuBA,EAAW,EAAC,MAAM,uBACjE8O,EAAM,OAAO,SAAS,SAAW,KAAO,OAAO,SAAS,KAAO,OAAO,SAAS,SAAW,OAAO,SAAS,OAC1GA,EAAMA,EAAI,QAAQ,MAAO,KAAK,EAC9BA,EAAMA,EAAI,QAAQ,MAAO,KAAK,GAEhCzQ,EAAI,KAAK,iBAAkBwN,EAAK,cAAc,EAC9CxN,EAAI,KAAK,eAAgBwN,EAAK,YAAY,EAClCA,EAAK,eAAc,CACzB,IAAK,cACHgD,EAAQ,KAAK,eAAgB,OAASC,EAAM,IAAMZ,EAAc,cAAc,EAC9E,MACF,IAAK,cACHW,EAAQ,KAAK,eAAgB,OAASC,EAAM,IAAMZ,EAAc,cAAc,EAC9E,MACF,IAAK,aACHW,EAAQ,KAAK,eAAgB,OAASC,EAAM,IAAMZ,EAAc,aAAa,EAC7E,MACF,IAAK,eACHW,EAAQ,KAAK,eAAgB,OAASC,EAAM,IAAMZ,EAAc,eAAe,EAC/E,MACF,IAAK,cACHW,EAAQ,KAAK,eAAgB,OAASC,EAAM,IAAMZ,EAAc,oBAAoB,EACpF,MACF,IAAK,YACHW,EAAQ,KAAK,eAAgB,OAASC,EAAM,IAAMZ,EAAc,kBAAkB,EAClF,MACF,IAAK,cACHW,EAAQ,KAAK,eAAgB,OAASC,EAAM,IAAMZ,EAAc,oBAAoB,EACpF,MACF,IAAK,aACHW,EAAQ,KAAK,eAAgB,OAASC,EAAM,IAAMZ,EAAc,mBAAmB,EACnF,MACF,IAAK,WACHW,EAAQ,KAAK,eAAgB,OAASC,EAAM,IAAMZ,EAAc,iBAAiB,EACjF,KACH,CACD,OAAQrC,EAAK,aAAY,CACvB,IAAK,cACHgD,EAAQ,KAAK,aAAc,OAASC,EAAM,IAAMZ,EAAc,YAAY,EAC1E,MACF,IAAK,cACHW,EAAQ,KAAK,aAAc,OAASC,EAAM,IAAMZ,EAAc,YAAY,EAC1E,MACF,IAAK,aACHW,EAAQ,KAAK,aAAc,OAASC,EAAM,IAAMZ,EAAc,WAAW,EACzE,MACF,IAAK,eACHW,EAAQ,KAAK,aAAc,OAASC,EAAM,IAAMZ,EAAc,aAAa,EAC3E,MACF,IAAK,cACHW,EAAQ,KAAK,aAAc,OAASC,EAAM,IAAMZ,EAAc,kBAAkB,EAChF,MACF,IAAK,YACHW,EAAQ,KAAK,aAAc,OAASC,EAAM,IAAMZ,EAAc,gBAAgB,EAC9E,MACF,IAAK,cACHW,EAAQ,KAAK,aAAc,OAASC,EAAM,IAAMZ,EAAc,kBAAkB,EAChF,MACF,IAAK,aACHW,EAAQ,KAAK,aAAc,OAASC,EAAM,IAAMZ,EAAc,iBAAiB,EAC/E,MACF,IAAK,WACHW,EAAQ,KAAK,aAAc,OAASC,EAAM,IAAMZ,EAAc,eAAe,EAC7E,KACH,CACD,IAAIvB,EAAQ,CAAA,EACZ,OAAIyB,IACFzB,EAAM,YAAczK,GAEtByK,EAAM,aAAed,EAAK,OACnBc,CACT","x_google_ignoreList":[0]}
\ No newline at end of file
diff --git a/docs/assets/erDiagram-0ccc0425-5dde3311.js b/docs/assets/erDiagram-0ccc0425-c2875da3.js
similarity index 97%
rename from docs/assets/erDiagram-0ccc0425-5dde3311.js
rename to docs/assets/erDiagram-0ccc0425-c2875da3.js
index 9faad635..117e104f 100644
--- a/docs/assets/erDiagram-0ccc0425-5dde3311.js
+++ b/docs/assets/erDiagram-0ccc0425-c2875da3.js
@@ -1,4 +1,4 @@
-import{c as W,s as kt,g as xt,b as Rt,a as Ot,p as bt,q as Nt,m as Tt,l as tt,r as At,h as nt,u as Mt,i as vt,x as Dt,y as It}from"./intro.stories-2707f0d7.js";import{G as wt,l as St}from"./layout-2e0fbc67.js";import"./dayjs.min-1b995edc.js";import{u as Lt}from"./stringify-ec884b6d.js";import{l as Bt}from"./line-b50add47.js";import"./chunk-S4VUQJ4A-36ba17aa.js";import"./iframe-892f1e35.js";import"../sb-preview/runtime.js";import"./index-28a69ec7.js";import"./_commonjsHelpers-de833af9.js";import"./index-d37d4223.js";import"./index-e04ae519.js";import"./index-356e4a49.js";import"./jsx-runtime-6fa9561d.js";import"./_getTag-edecb89a.js";import"./isSymbol-50749e90.js";import"./isObject-32699ff3.js";import"./toString-25ea340b.js";import"./Table-acc1ff8d.js";import"./parseCss-8f2248e6.js";import"./index-2ea0b3cc.js";import"./_color-087aa1f8.js";import"./index-173ee924.js";import"./_baseSet-db0c20a6.js";import"./now-bd49f550.js";import"./array-9f3ba611.js";import"./path-53f90ab3.js";const Ct=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Pt(t){return typeof t=="string"&&Ct.test(t)}function Yt(t){if(!Pt(t))throw TypeError("Invalid UUID");let r;const e=new Uint8Array(16);return e[0]=(r=parseInt(t.slice(0,8),16))>>>24,e[1]=r>>>16&255,e[2]=r>>>8&255,e[3]=r&255,e[4]=(r=parseInt(t.slice(9,13),16))>>>8,e[5]=r&255,e[6]=(r=parseInt(t.slice(14,18),16))>>>8,e[7]=r&255,e[8]=(r=parseInt(t.slice(19,23),16))>>>8,e[9]=r&255,e[10]=(r=parseInt(t.slice(24,36),16))/1099511627776&255,e[11]=r/4294967296&255,e[12]=r>>>24&255,e[13]=r>>>16&255,e[14]=r>>>8&255,e[15]=r&255,e}function Zt(t){t=unescape(encodeURIComponent(t));const r=[];for(let e=0;e>>32-r}function zt(t){const r=[1518500249,1859775393,2400959708,3395469782],e=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){const u=unescape(encodeURIComponent(t));t=[];for(let o=0;o>>0;O=g,g=m,m=st(_,30)>>>0,_=c,c=P}e[0]=e[0]+c>>>0,e[1]=e[1]+_>>>0,e[2]=e[2]+m>>>0,e[3]=e[3]+g>>>0,e[4]=e[4]+O>>>0}return[e[0]>>24&255,e[0]>>16&255,e[0]>>8&255,e[0]&255,e[1]>>24&255,e[1]>>16&255,e[1]>>8&255,e[1]&255,e[2]>>24&255,e[2]>>16&255,e[2]>>8&255,e[2]&255,e[3]>>24&255,e[3]>>16&255,e[3]>>8&255,e[3]&255,e[4]>>24&255,e[4]>>16&255,e[4]>>8&255,e[4]&255]}const Gt=Vt("v5",80,zt),Ht=Gt;var ot=function(){var t=function(A,a,l,d){for(l=l||{},d=A.length;d--;l[A[d]]=a);return l},r=[1,2],e=[1,5],n=[6,9,11,23,25,27,29,30,31,52],s=[1,17],y=[1,18],u=[1,19],o=[1,20],c=[1,21],_=[1,22],m=[1,25],g=[1,30],O=[1,31],p=[1,32],T=[1,33],P=[1,34],V=[6,9,11,15,20,23,25,27,29,30,31,44,45,46,47,48,52],K=[1,46],I=[30,31,49,50],N=[4,6,9,11,23,25,27,29,30,31,52],M=[44,45,46,47,48],k=[22,37],x=[1,66],C=[1,65],Y=[22,37,39,41],D={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,title:23,title_value:24,acc_title:25,acc_title_value:26,acc_descr:27,acc_descr_value:28,acc_descr_multiline_value:29,ALPHANUM:30,ENTITY_NAME:31,attribute:32,attributeType:33,attributeName:34,attributeKeyTypeList:35,attributeComment:36,ATTRIBUTE_WORD:37,attributeKeyType:38,COMMA:39,ATTRIBUTE_KEY:40,COMMENT:41,cardinality:42,relType:43,ZERO_OR_ONE:44,ZERO_OR_MORE:45,ONE_OR_MORE:46,ONLY_ONE:47,MD_PARENT:48,NON_IDENTIFYING:49,IDENTIFYING:50,WORD:51,open_directive:52,type_directive:53,arg_directive:54,close_directive:55,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"title",24:"title_value",25:"acc_title",26:"acc_title_value",27:"acc_descr",28:"acc_descr_value",29:"acc_descr_multiline_value",30:"ALPHANUM",31:"ENTITY_NAME",37:"ATTRIBUTE_WORD",39:"COMMA",40:"ATTRIBUTE_KEY",41:"COMMENT",44:"ZERO_OR_ONE",45:"ZERO_OR_MORE",46:"ONE_OR_MORE",47:"ONLY_ONE",48:"MD_PARENT",49:"NON_IDENTIFYING",50:"IDENTIFYING",51:"WORD",52:"open_directive",53:"type_directive",54:"arg_directive",55:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[10,2],[10,2],[10,2],[10,1],[17,1],[17,1],[21,1],[21,2],[32,2],[32,3],[32,3],[32,4],[33,1],[34,1],[35,1],[35,3],[38,1],[36,1],[18,3],[42,1],[42,1],[42,1],[42,1],[42,1],[43,1],[43,1],[19,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(a,l,d,f,E,i,X){var h=i.length-1;switch(E){case 1:break;case 3:this.$=[];break;case 4:i[h-1].push(i[h]),this.$=i[h-1];break;case 5:case 6:this.$=i[h];break;case 7:case 8:this.$=[];break;case 12:f.addEntity(i[h-4]),f.addEntity(i[h-2]),f.addRelationship(i[h-4],i[h],i[h-2],i[h-3]);break;case 13:f.addEntity(i[h-3]),f.addAttributes(i[h-3],i[h-1]);break;case 14:f.addEntity(i[h-2]);break;case 15:f.addEntity(i[h]);break;case 16:case 17:this.$=i[h].trim(),f.setAccTitle(this.$);break;case 18:case 19:this.$=i[h].trim(),f.setAccDescription(this.$);break;case 20:case 44:this.$=i[h];break;case 21:case 42:case 43:this.$=i[h].replace(/"/g,"");break;case 22:case 30:this.$=[i[h]];break;case 23:i[h].push(i[h-1]),this.$=i[h];break;case 24:this.$={attributeType:i[h-1],attributeName:i[h]};break;case 25:this.$={attributeType:i[h-2],attributeName:i[h-1],attributeKeyTypeList:i[h]};break;case 26:this.$={attributeType:i[h-2],attributeName:i[h-1],attributeComment:i[h]};break;case 27:this.$={attributeType:i[h-3],attributeName:i[h-2],attributeKeyTypeList:i[h-1],attributeComment:i[h]};break;case 28:case 29:case 32:this.$=i[h];break;case 31:i[h-2].push(i[h]),this.$=i[h-2];break;case 33:this.$=i[h].replace(/"/g,"");break;case 34:this.$={cardA:i[h],relType:i[h-1],cardB:i[h-2]};break;case 35:this.$=f.Cardinality.ZERO_OR_ONE;break;case 36:this.$=f.Cardinality.ZERO_OR_MORE;break;case 37:this.$=f.Cardinality.ONE_OR_MORE;break;case 38:this.$=f.Cardinality.ONLY_ONE;break;case 39:this.$=f.Cardinality.MD_PARENT;break;case 40:this.$=f.Identification.NON_IDENTIFYING;break;case 41:this.$=f.Identification.IDENTIFYING;break;case 45:f.parseDirective("%%{","open_directive");break;case 46:f.parseDirective(i[h],"type_directive");break;case 47:i[h]=i[h].trim().replace(/'/g,'"'),f.parseDirective(i[h],"arg_directive");break;case 48:f.parseDirective("}%%","close_directive","er");break}},table:[{3:1,4:r,7:3,12:4,52:e},{1:[3]},t(n,[2,3],{5:6}),{3:7,4:r,7:3,12:4,52:e},{13:8,53:[1,9]},{53:[2,45]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:s,25:y,27:u,29:o,30:c,31:_,52:e},{1:[2,2]},{14:23,15:[1,24],55:m},t([15,55],[2,46]),t(n,[2,8],{1:[2,1]}),t(n,[2,4]),{7:15,10:26,12:4,17:16,23:s,25:y,27:u,29:o,30:c,31:_,52:e},t(n,[2,6]),t(n,[2,7]),t(n,[2,11]),t(n,[2,15],{18:27,42:29,20:[1,28],44:g,45:O,46:p,47:T,48:P}),{24:[1,35]},{26:[1,36]},{28:[1,37]},t(n,[2,19]),t(V,[2,20]),t(V,[2,21]),{11:[1,38]},{16:39,54:[1,40]},{11:[2,48]},t(n,[2,5]),{17:41,30:c,31:_},{21:42,22:[1,43],32:44,33:45,37:K},{43:47,49:[1,48],50:[1,49]},t(I,[2,35]),t(I,[2,36]),t(I,[2,37]),t(I,[2,38]),t(I,[2,39]),t(n,[2,16]),t(n,[2,17]),t(n,[2,18]),t(N,[2,9]),{14:50,55:m},{55:[2,47]},{15:[1,51]},{22:[1,52]},t(n,[2,14]),{21:53,22:[2,22],32:44,33:45,37:K},{34:54,37:[1,55]},{37:[2,28]},{42:56,44:g,45:O,46:p,47:T,48:P},t(M,[2,40]),t(M,[2,41]),{11:[1,57]},{19:58,30:[1,61],31:[1,60],51:[1,59]},t(n,[2,13]),{22:[2,23]},t(k,[2,24],{35:62,36:63,38:64,40:x,41:C}),t([22,37,40,41],[2,29]),t([30,31],[2,34]),t(N,[2,10]),t(n,[2,12]),t(n,[2,42]),t(n,[2,43]),t(n,[2,44]),t(k,[2,25],{36:67,39:[1,68],41:C}),t(k,[2,26]),t(Y,[2,30]),t(k,[2,33]),t(Y,[2,32]),t(k,[2,27]),{38:69,40:x},t(Y,[2,31])],defaultActions:{5:[2,45],7:[2,2],25:[2,48],40:[2,47],46:[2,28],53:[2,23]},parseError:function(a,l){if(l.recoverable)this.trace(a);else{var d=new Error(a);throw d.hash=l,d}},parse:function(a){var l=this,d=[0],f=[],E=[null],i=[],X=this.table,h="",q=0,lt=0,_t=2,ht=1,mt=i.slice.call(arguments,1),b=Object.create(this.lexer),z={yy:{}};for(var et in this.yy)Object.prototype.hasOwnProperty.call(this.yy,et)&&(z.yy[et]=this.yy[et]);b.setInput(a,z.yy),z.yy.lexer=b,z.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var rt=b.yylloc;i.push(rt);var Et=b.options&&b.options.ranges;typeof z.yy.parseError=="function"?this.parseError=z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function gt(){var F;return F=f.pop()||b.lex()||ht,typeof F!="number"&&(F instanceof Array&&(f=F,F=f.pop()),F=l.symbols_[F]||F),F}for(var v,G,S,it,H={},j,Z,dt,J;;){if(G=d[d.length-1],this.defaultActions[G]?S=this.defaultActions[G]:((v===null||typeof v>"u")&&(v=gt()),S=X[G]&&X[G][v]),typeof S>"u"||!S.length||!S[0]){var at="";J=[];for(j in X[G])this.terminals_[j]&&j>_t&&J.push("'"+this.terminals_[j]+"'");b.showPosition?at="Parse error on line "+(q+1)+`:
+import{c as W,s as kt,g as xt,b as Rt,a as Ot,p as bt,q as Nt,m as Tt,l as tt,r as At,h as nt,u as Mt,i as vt,x as Dt,y as It}from"./intro.stories-8786330d.js";import{G as wt,l as St}from"./layout-82561e71.js";import"./dayjs.min-1b995edc.js";import{u as Lt}from"./stringify-ec884b6d.js";import{l as Bt}from"./line-fe766e5a.js";import"./chunk-S4VUQJ4A-52f2cd1c.js";import"./iframe-33c7be2c.js";import"../sb-preview/runtime.js";import"./index-17bfd246.js";import"./_commonjsHelpers-de833af9.js";import"./index-d37d4223.js";import"./index-e04ae519.js";import"./index-356e4a49.js";import"./jsx-runtime-6fa43933.js";import"./_getTag-edecb89a.js";import"./isSymbol-50749e90.js";import"./isObject-32699ff3.js";import"./toString-25ea340b.js";import"./Table-90cd4572.js";import"./parseCss-34a1ba6e.js";import"./index-8e1b08ea.js";import"./_color-087aa1f8.js";import"./index-6236bb34.js";import"./_baseSet-db0c20a6.js";import"./now-bd49f550.js";import"./array-9f3ba611.js";import"./path-53f90ab3.js";const Ct=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Pt(t){return typeof t=="string"&&Ct.test(t)}function Yt(t){if(!Pt(t))throw TypeError("Invalid UUID");let r;const e=new Uint8Array(16);return e[0]=(r=parseInt(t.slice(0,8),16))>>>24,e[1]=r>>>16&255,e[2]=r>>>8&255,e[3]=r&255,e[4]=(r=parseInt(t.slice(9,13),16))>>>8,e[5]=r&255,e[6]=(r=parseInt(t.slice(14,18),16))>>>8,e[7]=r&255,e[8]=(r=parseInt(t.slice(19,23),16))>>>8,e[9]=r&255,e[10]=(r=parseInt(t.slice(24,36),16))/1099511627776&255,e[11]=r/4294967296&255,e[12]=r>>>24&255,e[13]=r>>>16&255,e[14]=r>>>8&255,e[15]=r&255,e}function Zt(t){t=unescape(encodeURIComponent(t));const r=[];for(let e=0;e>>32-r}function zt(t){const r=[1518500249,1859775393,2400959708,3395469782],e=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){const u=unescape(encodeURIComponent(t));t=[];for(let o=0;o>>0;O=g,g=m,m=st(_,30)>>>0,_=c,c=P}e[0]=e[0]+c>>>0,e[1]=e[1]+_>>>0,e[2]=e[2]+m>>>0,e[3]=e[3]+g>>>0,e[4]=e[4]+O>>>0}return[e[0]>>24&255,e[0]>>16&255,e[0]>>8&255,e[0]&255,e[1]>>24&255,e[1]>>16&255,e[1]>>8&255,e[1]&255,e[2]>>24&255,e[2]>>16&255,e[2]>>8&255,e[2]&255,e[3]>>24&255,e[3]>>16&255,e[3]>>8&255,e[3]&255,e[4]>>24&255,e[4]>>16&255,e[4]>>8&255,e[4]&255]}const Gt=Vt("v5",80,zt),Ht=Gt;var ot=function(){var t=function(A,a,l,d){for(l=l||{},d=A.length;d--;l[A[d]]=a);return l},r=[1,2],e=[1,5],n=[6,9,11,23,25,27,29,30,31,52],s=[1,17],y=[1,18],u=[1,19],o=[1,20],c=[1,21],_=[1,22],m=[1,25],g=[1,30],O=[1,31],p=[1,32],T=[1,33],P=[1,34],V=[6,9,11,15,20,23,25,27,29,30,31,44,45,46,47,48,52],K=[1,46],I=[30,31,49,50],N=[4,6,9,11,23,25,27,29,30,31,52],M=[44,45,46,47,48],k=[22,37],x=[1,66],C=[1,65],Y=[22,37,39,41],D={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,title:23,title_value:24,acc_title:25,acc_title_value:26,acc_descr:27,acc_descr_value:28,acc_descr_multiline_value:29,ALPHANUM:30,ENTITY_NAME:31,attribute:32,attributeType:33,attributeName:34,attributeKeyTypeList:35,attributeComment:36,ATTRIBUTE_WORD:37,attributeKeyType:38,COMMA:39,ATTRIBUTE_KEY:40,COMMENT:41,cardinality:42,relType:43,ZERO_OR_ONE:44,ZERO_OR_MORE:45,ONE_OR_MORE:46,ONLY_ONE:47,MD_PARENT:48,NON_IDENTIFYING:49,IDENTIFYING:50,WORD:51,open_directive:52,type_directive:53,arg_directive:54,close_directive:55,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"title",24:"title_value",25:"acc_title",26:"acc_title_value",27:"acc_descr",28:"acc_descr_value",29:"acc_descr_multiline_value",30:"ALPHANUM",31:"ENTITY_NAME",37:"ATTRIBUTE_WORD",39:"COMMA",40:"ATTRIBUTE_KEY",41:"COMMENT",44:"ZERO_OR_ONE",45:"ZERO_OR_MORE",46:"ONE_OR_MORE",47:"ONLY_ONE",48:"MD_PARENT",49:"NON_IDENTIFYING",50:"IDENTIFYING",51:"WORD",52:"open_directive",53:"type_directive",54:"arg_directive",55:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[10,2],[10,2],[10,2],[10,1],[17,1],[17,1],[21,1],[21,2],[32,2],[32,3],[32,3],[32,4],[33,1],[34,1],[35,1],[35,3],[38,1],[36,1],[18,3],[42,1],[42,1],[42,1],[42,1],[42,1],[43,1],[43,1],[19,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(a,l,d,f,E,i,X){var h=i.length-1;switch(E){case 1:break;case 3:this.$=[];break;case 4:i[h-1].push(i[h]),this.$=i[h-1];break;case 5:case 6:this.$=i[h];break;case 7:case 8:this.$=[];break;case 12:f.addEntity(i[h-4]),f.addEntity(i[h-2]),f.addRelationship(i[h-4],i[h],i[h-2],i[h-3]);break;case 13:f.addEntity(i[h-3]),f.addAttributes(i[h-3],i[h-1]);break;case 14:f.addEntity(i[h-2]);break;case 15:f.addEntity(i[h]);break;case 16:case 17:this.$=i[h].trim(),f.setAccTitle(this.$);break;case 18:case 19:this.$=i[h].trim(),f.setAccDescription(this.$);break;case 20:case 44:this.$=i[h];break;case 21:case 42:case 43:this.$=i[h].replace(/"/g,"");break;case 22:case 30:this.$=[i[h]];break;case 23:i[h].push(i[h-1]),this.$=i[h];break;case 24:this.$={attributeType:i[h-1],attributeName:i[h]};break;case 25:this.$={attributeType:i[h-2],attributeName:i[h-1],attributeKeyTypeList:i[h]};break;case 26:this.$={attributeType:i[h-2],attributeName:i[h-1],attributeComment:i[h]};break;case 27:this.$={attributeType:i[h-3],attributeName:i[h-2],attributeKeyTypeList:i[h-1],attributeComment:i[h]};break;case 28:case 29:case 32:this.$=i[h];break;case 31:i[h-2].push(i[h]),this.$=i[h-2];break;case 33:this.$=i[h].replace(/"/g,"");break;case 34:this.$={cardA:i[h],relType:i[h-1],cardB:i[h-2]};break;case 35:this.$=f.Cardinality.ZERO_OR_ONE;break;case 36:this.$=f.Cardinality.ZERO_OR_MORE;break;case 37:this.$=f.Cardinality.ONE_OR_MORE;break;case 38:this.$=f.Cardinality.ONLY_ONE;break;case 39:this.$=f.Cardinality.MD_PARENT;break;case 40:this.$=f.Identification.NON_IDENTIFYING;break;case 41:this.$=f.Identification.IDENTIFYING;break;case 45:f.parseDirective("%%{","open_directive");break;case 46:f.parseDirective(i[h],"type_directive");break;case 47:i[h]=i[h].trim().replace(/'/g,'"'),f.parseDirective(i[h],"arg_directive");break;case 48:f.parseDirective("}%%","close_directive","er");break}},table:[{3:1,4:r,7:3,12:4,52:e},{1:[3]},t(n,[2,3],{5:6}),{3:7,4:r,7:3,12:4,52:e},{13:8,53:[1,9]},{53:[2,45]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:s,25:y,27:u,29:o,30:c,31:_,52:e},{1:[2,2]},{14:23,15:[1,24],55:m},t([15,55],[2,46]),t(n,[2,8],{1:[2,1]}),t(n,[2,4]),{7:15,10:26,12:4,17:16,23:s,25:y,27:u,29:o,30:c,31:_,52:e},t(n,[2,6]),t(n,[2,7]),t(n,[2,11]),t(n,[2,15],{18:27,42:29,20:[1,28],44:g,45:O,46:p,47:T,48:P}),{24:[1,35]},{26:[1,36]},{28:[1,37]},t(n,[2,19]),t(V,[2,20]),t(V,[2,21]),{11:[1,38]},{16:39,54:[1,40]},{11:[2,48]},t(n,[2,5]),{17:41,30:c,31:_},{21:42,22:[1,43],32:44,33:45,37:K},{43:47,49:[1,48],50:[1,49]},t(I,[2,35]),t(I,[2,36]),t(I,[2,37]),t(I,[2,38]),t(I,[2,39]),t(n,[2,16]),t(n,[2,17]),t(n,[2,18]),t(N,[2,9]),{14:50,55:m},{55:[2,47]},{15:[1,51]},{22:[1,52]},t(n,[2,14]),{21:53,22:[2,22],32:44,33:45,37:K},{34:54,37:[1,55]},{37:[2,28]},{42:56,44:g,45:O,46:p,47:T,48:P},t(M,[2,40]),t(M,[2,41]),{11:[1,57]},{19:58,30:[1,61],31:[1,60],51:[1,59]},t(n,[2,13]),{22:[2,23]},t(k,[2,24],{35:62,36:63,38:64,40:x,41:C}),t([22,37,40,41],[2,29]),t([30,31],[2,34]),t(N,[2,10]),t(n,[2,12]),t(n,[2,42]),t(n,[2,43]),t(n,[2,44]),t(k,[2,25],{36:67,39:[1,68],41:C}),t(k,[2,26]),t(Y,[2,30]),t(k,[2,33]),t(Y,[2,32]),t(k,[2,27]),{38:69,40:x},t(Y,[2,31])],defaultActions:{5:[2,45],7:[2,2],25:[2,48],40:[2,47],46:[2,28],53:[2,23]},parseError:function(a,l){if(l.recoverable)this.trace(a);else{var d=new Error(a);throw d.hash=l,d}},parse:function(a){var l=this,d=[0],f=[],E=[null],i=[],X=this.table,h="",q=0,lt=0,_t=2,ht=1,mt=i.slice.call(arguments,1),b=Object.create(this.lexer),z={yy:{}};for(var et in this.yy)Object.prototype.hasOwnProperty.call(this.yy,et)&&(z.yy[et]=this.yy[et]);b.setInput(a,z.yy),z.yy.lexer=b,z.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var rt=b.yylloc;i.push(rt);var Et=b.options&&b.options.ranges;typeof z.yy.parseError=="function"?this.parseError=z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function gt(){var F;return F=f.pop()||b.lex()||ht,typeof F!="number"&&(F instanceof Array&&(f=F,F=f.pop()),F=l.symbols_[F]||F),F}for(var v,G,S,it,H={},j,Z,dt,J;;){if(G=d[d.length-1],this.defaultActions[G]?S=this.defaultActions[G]:((v===null||typeof v>"u")&&(v=gt()),S=X[G]&&X[G][v]),typeof S>"u"||!S.length||!S[0]){var at="";J=[];for(j in X[G])this.terminals_[j]&&j>_t&&J.push("'"+this.terminals_[j]+"'");b.showPosition?at="Parse error on line "+(q+1)+`:
`+b.showPosition()+`
Expecting `+J.join(", ")+", got '"+(this.terminals_[v]||v)+"'":at="Parse error on line "+(q+1)+": Unexpected "+(v==ht?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(at,{text:b.match,token:this.terminals_[v]||v,line:b.yylineno,loc:rt,expected:J})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+G+", token: "+v);switch(S[0]){case 1:d.push(v),E.push(b.yytext),i.push(b.yylloc),d.push(S[1]),v=null,lt=b.yyleng,h=b.yytext,q=b.yylineno,rt=b.yylloc;break;case 2:if(Z=this.productions_[S[1]][1],H.$=E[E.length-Z],H._$={first_line:i[i.length-(Z||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(Z||1)].first_column,last_column:i[i.length-1].last_column},Et&&(H._$.range=[i[i.length-(Z||1)].range[0],i[i.length-1].range[1]]),it=this.performAction.apply(H,[h,lt,q,z.yy,S[1],E,i].concat(mt)),typeof it<"u")return it;Z&&(d=d.slice(0,-1*Z*2),E=E.slice(0,-1*Z),i=i.slice(0,-1*Z)),d.push(this.productions_[S[1]][0]),E.push(H.$),i.push(H._$),dt=X[d[d.length-2]][d[d.length-1]],d.push(dt);break;case 3:return!0}}return!0}},U=function(){var A={EOF:1,parseError:function(l,d){if(this.yy.parser)this.yy.parser.parseError(l,d);else throw new Error(l)},setInput:function(a,l){return this.yy=l||this.yy||{},this._input=a,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var l=a.match(/(?:\r\n?|\n).*/g);return l?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var l=a.length,d=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-l),this.offset-=l;var f=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),d.length-1&&(this.yylineno-=d.length-1);var E=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:d?(d.length===f.length?this.yylloc.first_column:0)+f[f.length-d.length].length-d[0].length:this.yylloc.first_column-l},this.options.ranges&&(this.yylloc.range=[E[0],E[0]+this.yyleng-l]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),l=new Array(a.length+1).join("-");return a+this.upcomingInput()+`
@@ -49,4 +49,4 @@ Expecting `+J.join(", ")+", got '"+(this.terminals_[v]||v)+"'":at="Parse error o
}
`,_e=ye,ze={parser:Kt,db:re,renderer:pe,styles:_e};export{ze as diagram};
-//# sourceMappingURL=erDiagram-0ccc0425-5dde3311.js.map
+//# sourceMappingURL=erDiagram-0ccc0425-c2875da3.js.map
diff --git a/docs/assets/erDiagram-0ccc0425-5dde3311.js.map b/docs/assets/erDiagram-0ccc0425-c2875da3.js.map
similarity index 99%
rename from docs/assets/erDiagram-0ccc0425-5dde3311.js.map
rename to docs/assets/erDiagram-0ccc0425-c2875da3.js.map
index f328f318..c7811089 100644
--- a/docs/assets/erDiagram-0ccc0425-5dde3311.js.map
+++ b/docs/assets/erDiagram-0ccc0425-c2875da3.js.map
@@ -1 +1 @@
-{"version":3,"file":"erDiagram-0ccc0425-5dde3311.js","sources":["../../node_modules/uuid/dist/esm-browser/regex.js","../../node_modules/uuid/dist/esm-browser/validate.js","../../node_modules/uuid/dist/esm-browser/parse.js","../../node_modules/uuid/dist/esm-browser/v35.js","../../node_modules/uuid/dist/esm-browser/sha1.js","../../node_modules/uuid/dist/esm-browser/v5.js","../../node_modules/mermaid/dist/erDiagram-0ccc0425.js"],"sourcesContent":["export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","import { unsafeStringify } from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function v35(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n var _namespace;\n\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (let i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n\n for (let i = 0; i < N; ++i) {\n const arr = new Uint32Array(16);\n\n for (let j = 0; j < 16; ++j) {\n arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n }\n\n M[i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (let i = 0; i < N; ++i) {\n const W = new Uint32Array(80);\n\n for (let t = 0; t < 16; ++t) {\n W[t] = M[i][t];\n }\n\n for (let t = 16; t < 80; ++t) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n\n for (let t = 0; t < 80; ++t) {\n const s = Math.floor(t / 20);\n const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nconst v5 = v35('v5', 0x50, sha1);\nexport default v5;","import { c as getConfig, s as setAccTitle, g as getAccTitle, b as setAccDescription, a as getAccDescription, r as setDiagramTitle, t as getDiagramTitle, m as mermaidAPI, l as log, v as clear$1, u as utils, i as configureSvgSize, x as parseGenericTypes } from \"./mermaid-a98f434b.js\";\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\nimport { select, line, curveBasis } from \"d3\";\nimport { layout } from \"dagre-d3-es/src/dagre/index.js\";\nimport { v5 } from \"uuid\";\nimport \"ts-dedent\";\nimport \"dayjs\";\nimport \"@braintree/sanitize-url\";\nimport \"dompurify\";\nimport \"khroma\";\nimport \"lodash-es/memoize.js\";\nimport \"stylis\";\nimport \"lodash-es/isEmpty.js\";\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 23, 25, 27, 29, 30, 31, 52], $V3 = [1, 17], $V4 = [1, 18], $V5 = [1, 19], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 25], $Va = [1, 30], $Vb = [1, 31], $Vc = [1, 32], $Vd = [1, 33], $Ve = [1, 34], $Vf = [6, 9, 11, 15, 20, 23, 25, 27, 29, 30, 31, 44, 45, 46, 47, 48, 52], $Vg = [1, 46], $Vh = [30, 31, 49, 50], $Vi = [4, 6, 9, 11, 23, 25, 27, 29, 30, 31, 52], $Vj = [44, 45, 46, 47, 48], $Vk = [22, 37], $Vl = [1, 66], $Vm = [1, 65], $Vn = [22, 37, 39, 41];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"ER_DIAGRAM\": 4, \"document\": 5, \"EOF\": 6, \"directive\": 7, \"line\": 8, \"SPACE\": 9, \"statement\": 10, \"NEWLINE\": 11, \"openDirective\": 12, \"typeDirective\": 13, \"closeDirective\": 14, \":\": 15, \"argDirective\": 16, \"entityName\": 17, \"relSpec\": 18, \"role\": 19, \"BLOCK_START\": 20, \"attributes\": 21, \"BLOCK_STOP\": 22, \"title\": 23, \"title_value\": 24, \"acc_title\": 25, \"acc_title_value\": 26, \"acc_descr\": 27, \"acc_descr_value\": 28, \"acc_descr_multiline_value\": 29, \"ALPHANUM\": 30, \"ENTITY_NAME\": 31, \"attribute\": 32, \"attributeType\": 33, \"attributeName\": 34, \"attributeKeyTypeList\": 35, \"attributeComment\": 36, \"ATTRIBUTE_WORD\": 37, \"attributeKeyType\": 38, \"COMMA\": 39, \"ATTRIBUTE_KEY\": 40, \"COMMENT\": 41, \"cardinality\": 42, \"relType\": 43, \"ZERO_OR_ONE\": 44, \"ZERO_OR_MORE\": 45, \"ONE_OR_MORE\": 46, \"ONLY_ONE\": 47, \"MD_PARENT\": 48, \"NON_IDENTIFYING\": 49, \"IDENTIFYING\": 50, \"WORD\": 51, \"open_directive\": 52, \"type_directive\": 53, \"arg_directive\": 54, \"close_directive\": 55, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"ER_DIAGRAM\", 6: \"EOF\", 9: \"SPACE\", 11: \"NEWLINE\", 15: \":\", 20: \"BLOCK_START\", 22: \"BLOCK_STOP\", 23: \"title\", 24: \"title_value\", 25: \"acc_title\", 26: \"acc_title_value\", 27: \"acc_descr\", 28: \"acc_descr_value\", 29: \"acc_descr_multiline_value\", 30: \"ALPHANUM\", 31: \"ENTITY_NAME\", 37: \"ATTRIBUTE_WORD\", 39: \"COMMA\", 40: \"ATTRIBUTE_KEY\", 41: \"COMMENT\", 44: \"ZERO_OR_ONE\", 45: \"ZERO_OR_MORE\", 46: \"ONE_OR_MORE\", 47: \"ONLY_ONE\", 48: \"MD_PARENT\", 49: \"NON_IDENTIFYING\", 50: \"IDENTIFYING\", 51: \"WORD\", 52: \"open_directive\", 53: \"type_directive\", 54: \"arg_directive\", 55: \"close_directive\" },\n productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 5], [10, 4], [10, 3], [10, 1], [10, 2], [10, 2], [10, 2], [10, 1], [17, 1], [17, 1], [21, 1], [21, 2], [32, 2], [32, 3], [32, 3], [32, 4], [33, 1], [34, 1], [35, 1], [35, 3], [38, 1], [36, 1], [18, 3], [42, 1], [42, 1], [42, 1], [42, 1], [42, 1], [43, 1], [43, 1], [19, 1], [19, 1], [19, 1], [12, 1], [13, 1], [16, 1], [14, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n break;\n case 3:\n this.$ = [];\n break;\n case 4:\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n break;\n case 5:\n case 6:\n this.$ = $$[$0];\n break;\n case 7:\n case 8:\n this.$ = [];\n break;\n case 12:\n yy.addEntity($$[$0 - 4]);\n yy.addEntity($$[$0 - 2]);\n yy.addRelationship($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 3]);\n break;\n case 13:\n yy.addEntity($$[$0 - 3]);\n yy.addAttributes($$[$0 - 3], $$[$0 - 1]);\n break;\n case 14:\n yy.addEntity($$[$0 - 2]);\n break;\n case 15:\n yy.addEntity($$[$0]);\n break;\n case 16:\n case 17:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 18:\n case 19:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 20:\n case 44:\n this.$ = $$[$0];\n break;\n case 21:\n case 42:\n case 43:\n this.$ = $$[$0].replace(/\"/g, \"\");\n break;\n case 22:\n case 30:\n this.$ = [$$[$0]];\n break;\n case 23:\n $$[$0].push($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 24:\n this.$ = { attributeType: $$[$0 - 1], attributeName: $$[$0] };\n break;\n case 25:\n this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeKeyTypeList: $$[$0] };\n break;\n case 26:\n this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeComment: $$[$0] };\n break;\n case 27:\n this.$ = { attributeType: $$[$0 - 3], attributeName: $$[$0 - 2], attributeKeyTypeList: $$[$0 - 1], attributeComment: $$[$0] };\n break;\n case 28:\n case 29:\n case 32:\n this.$ = $$[$0];\n break;\n case 31:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 33:\n this.$ = $$[$0].replace(/\"/g, \"\");\n break;\n case 34:\n this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] };\n break;\n case 35:\n this.$ = yy.Cardinality.ZERO_OR_ONE;\n break;\n case 36:\n this.$ = yy.Cardinality.ZERO_OR_MORE;\n break;\n case 37:\n this.$ = yy.Cardinality.ONE_OR_MORE;\n break;\n case 38:\n this.$ = yy.Cardinality.ONLY_ONE;\n break;\n case 39:\n this.$ = yy.Cardinality.MD_PARENT;\n break;\n case 40:\n this.$ = yy.Identification.NON_IDENTIFYING;\n break;\n case 41:\n this.$ = yy.Identification.IDENTIFYING;\n break;\n case 45:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 46:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 47:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 48:\n yy.parseDirective(\"}%%\", \"close_directive\", \"er\");\n break;\n }\n },\n table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 52: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 52: $V1 }, { 13: 8, 53: [1, 9] }, { 53: [2, 45] }, { 6: [1, 10], 7: 15, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: 16, 23: $V3, 25: $V4, 27: $V5, 29: $V6, 30: $V7, 31: $V8, 52: $V1 }, { 1: [2, 2] }, { 14: 23, 15: [1, 24], 55: $V9 }, o([15, 55], [2, 46]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 15, 10: 26, 12: 4, 17: 16, 23: $V3, 25: $V4, 27: $V5, 29: $V6, 30: $V7, 31: $V8, 52: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), o($V2, [2, 15], { 18: 27, 42: 29, 20: [1, 28], 44: $Va, 45: $Vb, 46: $Vc, 47: $Vd, 48: $Ve }), { 24: [1, 35] }, { 26: [1, 36] }, { 28: [1, 37] }, o($V2, [2, 19]), o($Vf, [2, 20]), o($Vf, [2, 21]), { 11: [1, 38] }, { 16: 39, 54: [1, 40] }, { 11: [2, 48] }, o($V2, [2, 5]), { 17: 41, 30: $V7, 31: $V8 }, { 21: 42, 22: [1, 43], 32: 44, 33: 45, 37: $Vg }, { 43: 47, 49: [1, 48], 50: [1, 49] }, o($Vh, [2, 35]), o($Vh, [2, 36]), o($Vh, [2, 37]), o($Vh, [2, 38]), o($Vh, [2, 39]), o($V2, [2, 16]), o($V2, [2, 17]), o($V2, [2, 18]), o($Vi, [2, 9]), { 14: 50, 55: $V9 }, { 55: [2, 47] }, { 15: [1, 51] }, { 22: [1, 52] }, o($V2, [2, 14]), { 21: 53, 22: [2, 22], 32: 44, 33: 45, 37: $Vg }, { 34: 54, 37: [1, 55] }, { 37: [2, 28] }, { 42: 56, 44: $Va, 45: $Vb, 46: $Vc, 47: $Vd, 48: $Ve }, o($Vj, [2, 40]), o($Vj, [2, 41]), { 11: [1, 57] }, { 19: 58, 30: [1, 61], 31: [1, 60], 51: [1, 59] }, o($V2, [2, 13]), { 22: [2, 23] }, o($Vk, [2, 24], { 35: 62, 36: 63, 38: 64, 40: $Vl, 41: $Vm }), o([22, 37, 40, 41], [2, 29]), o([30, 31], [2, 34]), o($Vi, [2, 10]), o($V2, [2, 12]), o($V2, [2, 42]), o($V2, [2, 43]), o($V2, [2, 44]), o($Vk, [2, 25], { 36: 67, 39: [1, 68], 41: $Vm }), o($Vk, [2, 26]), o($Vn, [2, 30]), o($Vk, [2, 33]), o($Vn, [2, 32]), o($Vk, [2, 27]), { 38: 69, 40: $Vl }, o($Vn, [2, 31])],\n defaultActions: { 5: [2, 45], 7: [2, 2], 25: [2, 48], 40: [2, 47], 46: [2, 28], 53: [2, 23] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"acc_title\");\n return 25;\n case 1:\n this.popState();\n return \"acc_title_value\";\n case 2:\n this.begin(\"acc_descr\");\n return 27;\n case 3:\n this.popState();\n return \"acc_descr_value\";\n case 4:\n this.begin(\"acc_descr_multiline\");\n break;\n case 5:\n this.popState();\n break;\n case 6:\n return \"acc_descr_multiline_value\";\n case 7:\n this.begin(\"open_directive\");\n return 52;\n case 8:\n this.begin(\"type_directive\");\n return 53;\n case 9:\n this.popState();\n this.begin(\"arg_directive\");\n return 15;\n case 10:\n this.popState();\n this.popState();\n return 55;\n case 11:\n return 54;\n case 12:\n return 11;\n case 13:\n break;\n case 14:\n return 9;\n case 15:\n return 31;\n case 16:\n return 51;\n case 17:\n return 4;\n case 18:\n this.begin(\"block\");\n return 20;\n case 19:\n return 39;\n case 20:\n break;\n case 21:\n return 40;\n case 22:\n return 37;\n case 23:\n return 37;\n case 24:\n return 41;\n case 25:\n break;\n case 26:\n this.popState();\n return 22;\n case 27:\n return yy_.yytext[0];\n case 28:\n return 44;\n case 29:\n return 46;\n case 30:\n return 46;\n case 31:\n return 46;\n case 32:\n return 44;\n case 33:\n return 44;\n case 34:\n return 45;\n case 35:\n return 45;\n case 36:\n return 45;\n case 37:\n return 45;\n case 38:\n return 45;\n case 39:\n return 46;\n case 40:\n return 45;\n case 41:\n return 46;\n case 42:\n return 47;\n case 43:\n return 47;\n case 44:\n return 47;\n case 45:\n return 47;\n case 46:\n return 44;\n case 47:\n return 45;\n case 48:\n return 46;\n case 49:\n return 48;\n case 50:\n return 49;\n case 51:\n return 50;\n case 52:\n return 50;\n case 53:\n return 49;\n case 54:\n return 49;\n case 55:\n return 49;\n case 56:\n return 30;\n case 57:\n return yy_.yytext[0];\n case 58:\n return 6;\n }\n },\n rules: [/^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:%%\\{)/i, /^(?:((?:(?!\\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\\}%%)/i, /^(?:((?:(?!\\}%%).|\\n)*))/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?:[\\s]+)/i, /^(?:\"[^\"%\\r\\n\\v\\b\\\\]+\")/i, /^(?:\"[^\"]*\")/i, /^(?:erDiagram\\b)/i, /^(?:\\{)/i, /^(?:,)/i, /^(?:\\s+)/i, /^(?:\\b((?:PK)|(?:FK)|(?:UK))\\b)/i, /^(?:(.*?)[~](.*?)*[~])/i, /^(?:[\\*A-Za-z_][A-Za-z0-9\\-_\\[\\]\\(\\)]*)/i, /^(?:\"[^\"]*\")/i, /^(?:[\\n]+)/i, /^(?:\\})/i, /^(?:.)/i, /^(?:one or zero\\b)/i, /^(?:one or more\\b)/i, /^(?:one or many\\b)/i, /^(?:1\\+)/i, /^(?:\\|o\\b)/i, /^(?:zero or one\\b)/i, /^(?:zero or more\\b)/i, /^(?:zero or many\\b)/i, /^(?:0\\+)/i, /^(?:\\}o\\b)/i, /^(?:many\\(0\\))/i, /^(?:many\\(1\\))/i, /^(?:many\\b)/i, /^(?:\\}\\|)/i, /^(?:one\\b)/i, /^(?:only one\\b)/i, /^(?:1\\b)/i, /^(?:\\|\\|)/i, /^(?:o\\|)/i, /^(?:o\\{)/i, /^(?:\\|\\{)/i, /^(?:\\s*u\\b)/i, /^(?:\\.\\.)/i, /^(?:--)/i, /^(?:to\\b)/i, /^(?:optionally to\\b)/i, /^(?:\\.-)/i, /^(?:-\\.)/i, /^(?:[A-Za-z][A-Za-z0-9\\-_]*)/i, /^(?:.)/i, /^(?:$)/i],\n conditions: { \"acc_descr_multiline\": { \"rules\": [5, 6], \"inclusive\": false }, \"acc_descr\": { \"rules\": [3], \"inclusive\": false }, \"acc_title\": { \"rules\": [1], \"inclusive\": false }, \"open_directive\": { \"rules\": [8], \"inclusive\": false }, \"type_directive\": { \"rules\": [9, 10], \"inclusive\": false }, \"arg_directive\": { \"rules\": [10, 11], \"inclusive\": false }, \"block\": { \"rules\": [19, 20, 21, 22, 23, 24, 25, 26, 27], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 2, 4, 7, 12, 13, 14, 15, 16, 17, 18, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst erParser = parser;\nlet entities = {};\nlet relationships = [];\nconst Cardinality = {\n ZERO_OR_ONE: \"ZERO_OR_ONE\",\n ZERO_OR_MORE: \"ZERO_OR_MORE\",\n ONE_OR_MORE: \"ONE_OR_MORE\",\n ONLY_ONE: \"ONLY_ONE\",\n MD_PARENT: \"MD_PARENT\"\n};\nconst Identification = {\n NON_IDENTIFYING: \"NON_IDENTIFYING\",\n IDENTIFYING: \"IDENTIFYING\"\n};\nconst parseDirective = function(statement, context, type) {\n mermaidAPI.parseDirective(this, statement, context, type);\n};\nconst addEntity = function(name) {\n if (entities[name] === void 0) {\n entities[name] = { attributes: [] };\n log.info(\"Added new entity :\", name);\n }\n return entities[name];\n};\nconst getEntities = () => entities;\nconst addAttributes = function(entityName, attribs) {\n let entity = addEntity(entityName);\n let i;\n for (i = attribs.length - 1; i >= 0; i--) {\n entity.attributes.push(attribs[i]);\n log.debug(\"Added attribute \", attribs[i].attributeName);\n }\n};\nconst addRelationship = function(entA, rolA, entB, rSpec) {\n let rel = {\n entityA: entA,\n roleA: rolA,\n entityB: entB,\n relSpec: rSpec\n };\n relationships.push(rel);\n log.debug(\"Added new relationship :\", rel);\n};\nconst getRelationships = () => relationships;\nconst clear = function() {\n entities = {};\n relationships = [];\n clear$1();\n};\nconst erDb = {\n Cardinality,\n Identification,\n parseDirective,\n getConfig: () => getConfig().er,\n addEntity,\n addAttributes,\n getEntities,\n addRelationship,\n getRelationships,\n clear,\n setAccTitle,\n getAccTitle,\n setAccDescription,\n getAccDescription,\n setDiagramTitle,\n getDiagramTitle\n};\nconst ERMarkers = {\n ONLY_ONE_START: \"ONLY_ONE_START\",\n ONLY_ONE_END: \"ONLY_ONE_END\",\n ZERO_OR_ONE_START: \"ZERO_OR_ONE_START\",\n ZERO_OR_ONE_END: \"ZERO_OR_ONE_END\",\n ONE_OR_MORE_START: \"ONE_OR_MORE_START\",\n ONE_OR_MORE_END: \"ONE_OR_MORE_END\",\n ZERO_OR_MORE_START: \"ZERO_OR_MORE_START\",\n ZERO_OR_MORE_END: \"ZERO_OR_MORE_END\",\n MD_PARENT_END: \"MD_PARENT_END\",\n MD_PARENT_START: \"MD_PARENT_START\"\n};\nconst insertMarkers = function(elem, conf2) {\n let marker;\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.MD_PARENT_START).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.MD_PARENT_END).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ONLY_ONE_START).attr(\"refX\", 0).attr(\"refY\", 9).attr(\"markerWidth\", 18).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\").append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M9,0 L9,18 M15,0 L15,18\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ONLY_ONE_END).attr(\"refX\", 18).attr(\"refY\", 9).attr(\"markerWidth\", 18).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\").append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M3,0 L3,18 M9,0 L9,18\");\n marker = elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ZERO_OR_ONE_START).attr(\"refX\", 0).attr(\"refY\", 9).attr(\"markerWidth\", 30).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\");\n marker.append(\"circle\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"white\").attr(\"cx\", 21).attr(\"cy\", 9).attr(\"r\", 6);\n marker.append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M9,0 L9,18\");\n marker = elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ZERO_OR_ONE_END).attr(\"refX\", 30).attr(\"refY\", 9).attr(\"markerWidth\", 30).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\");\n marker.append(\"circle\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"white\").attr(\"cx\", 9).attr(\"cy\", 9).attr(\"r\", 6);\n marker.append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M21,0 L21,18\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ONE_OR_MORE_START).attr(\"refX\", 18).attr(\"refY\", 18).attr(\"markerWidth\", 45).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\").append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ONE_OR_MORE_END).attr(\"refX\", 27).attr(\"refY\", 18).attr(\"markerWidth\", 45).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\").append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18\");\n marker = elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ZERO_OR_MORE_START).attr(\"refX\", 18).attr(\"refY\", 18).attr(\"markerWidth\", 57).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\");\n marker.append(\"circle\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"white\").attr(\"cx\", 48).attr(\"cy\", 18).attr(\"r\", 6);\n marker.append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M0,18 Q18,0 36,18 Q18,36 0,18\");\n marker = elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ZERO_OR_MORE_END).attr(\"refX\", 39).attr(\"refY\", 18).attr(\"markerWidth\", 57).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\");\n marker.append(\"circle\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"white\").attr(\"cx\", 9).attr(\"cy\", 18).attr(\"r\", 6);\n marker.append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M21,18 Q39,0 57,18 Q39,36 21,18\");\n return;\n};\nconst erMarkers = {\n ERMarkers,\n insertMarkers\n};\nconst BAD_ID_CHARS_REGEXP = /[^\\dA-Za-z](\\W)*/g;\nlet conf = {};\nlet entityNameIds = /* @__PURE__ */ new Map();\nconst setConf = function(cnf) {\n const keys = Object.keys(cnf);\n for (const key of keys) {\n conf[key] = cnf[key];\n }\n};\nconst drawAttributes = (groupNode, entityTextNode, attributes) => {\n const heightPadding = conf.entityPadding / 3;\n const widthPadding = conf.entityPadding / 3;\n const attrFontSize = conf.fontSize * 0.85;\n const labelBBox = entityTextNode.node().getBBox();\n const attributeNodes = [];\n let hasKeyType = false;\n let hasComment = false;\n let maxTypeWidth = 0;\n let maxNameWidth = 0;\n let maxKeyWidth = 0;\n let maxCommentWidth = 0;\n let cumulativeHeight = labelBBox.height + heightPadding * 2;\n let attrNum = 1;\n attributes.forEach((item) => {\n if (item.attributeKeyTypeList !== void 0 && item.attributeKeyTypeList.length > 0) {\n hasKeyType = true;\n }\n if (item.attributeComment !== void 0) {\n hasComment = true;\n }\n });\n attributes.forEach((item) => {\n const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`;\n let nodeHeight = 0;\n const attributeType = parseGenericTypes(item.attributeType);\n const typeNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", `${attrPrefix}-type`).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"left\").style(\"font-family\", getConfig().fontFamily).style(\"font-size\", attrFontSize + \"px\").text(attributeType);\n const nameNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", `${attrPrefix}-name`).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"left\").style(\"font-family\", getConfig().fontFamily).style(\"font-size\", attrFontSize + \"px\").text(item.attributeName);\n const attributeNode = {};\n attributeNode.tn = typeNode;\n attributeNode.nn = nameNode;\n const typeBBox = typeNode.node().getBBox();\n const nameBBox = nameNode.node().getBBox();\n maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width);\n maxNameWidth = Math.max(maxNameWidth, nameBBox.width);\n nodeHeight = Math.max(typeBBox.height, nameBBox.height);\n if (hasKeyType) {\n const keyTypeNodeText = item.attributeKeyTypeList !== void 0 ? item.attributeKeyTypeList.join(\",\") : \"\";\n const keyTypeNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", `${attrPrefix}-key`).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"left\").style(\"font-family\", getConfig().fontFamily).style(\"font-size\", attrFontSize + \"px\").text(keyTypeNodeText);\n attributeNode.kn = keyTypeNode;\n const keyTypeBBox = keyTypeNode.node().getBBox();\n maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width);\n nodeHeight = Math.max(nodeHeight, keyTypeBBox.height);\n }\n if (hasComment) {\n const commentNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", `${attrPrefix}-comment`).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"left\").style(\"font-family\", getConfig().fontFamily).style(\"font-size\", attrFontSize + \"px\").text(item.attributeComment || \"\");\n attributeNode.cn = commentNode;\n const commentNodeBBox = commentNode.node().getBBox();\n maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width);\n nodeHeight = Math.max(nodeHeight, commentNodeBBox.height);\n }\n attributeNode.height = nodeHeight;\n attributeNodes.push(attributeNode);\n cumulativeHeight += nodeHeight + heightPadding * 2;\n attrNum += 1;\n });\n let widthPaddingFactor = 4;\n if (hasKeyType) {\n widthPaddingFactor += 2;\n }\n if (hasComment) {\n widthPaddingFactor += 2;\n }\n const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth;\n const bBox = {\n width: Math.max(\n conf.minEntityWidth,\n Math.max(\n labelBBox.width + conf.entityPadding * 2,\n maxWidth + widthPadding * widthPaddingFactor\n )\n ),\n height: attributes.length > 0 ? cumulativeHeight : Math.max(conf.minEntityHeight, labelBBox.height + conf.entityPadding * 2)\n };\n if (attributes.length > 0) {\n const spareColumnWidth = Math.max(\n 0,\n (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2)\n );\n entityTextNode.attr(\n \"transform\",\n \"translate(\" + bBox.width / 2 + \",\" + (heightPadding + labelBBox.height / 2) + \")\"\n );\n let heightOffset = labelBBox.height + heightPadding * 2;\n let attribStyle = \"attributeBoxOdd\";\n attributeNodes.forEach((attributeNode) => {\n const alignY = heightOffset + heightPadding + attributeNode.height / 2;\n attributeNode.tn.attr(\"transform\", \"translate(\" + widthPadding + \",\" + alignY + \")\");\n const typeRect = groupNode.insert(\"rect\", \"#\" + attributeNode.tn.node().id).classed(`er ${attribStyle}`, true).attr(\"x\", 0).attr(\"y\", heightOffset).attr(\"width\", maxTypeWidth + widthPadding * 2 + spareColumnWidth).attr(\"height\", attributeNode.height + heightPadding * 2);\n const nameXOffset = parseFloat(typeRect.attr(\"x\")) + parseFloat(typeRect.attr(\"width\"));\n attributeNode.nn.attr(\n \"transform\",\n \"translate(\" + (nameXOffset + widthPadding) + \",\" + alignY + \")\"\n );\n const nameRect = groupNode.insert(\"rect\", \"#\" + attributeNode.nn.node().id).classed(`er ${attribStyle}`, true).attr(\"x\", nameXOffset).attr(\"y\", heightOffset).attr(\"width\", maxNameWidth + widthPadding * 2 + spareColumnWidth).attr(\"height\", attributeNode.height + heightPadding * 2);\n let keyTypeAndCommentXOffset = parseFloat(nameRect.attr(\"x\")) + parseFloat(nameRect.attr(\"width\"));\n if (hasKeyType) {\n attributeNode.kn.attr(\n \"transform\",\n \"translate(\" + (keyTypeAndCommentXOffset + widthPadding) + \",\" + alignY + \")\"\n );\n const keyTypeRect = groupNode.insert(\"rect\", \"#\" + attributeNode.kn.node().id).classed(`er ${attribStyle}`, true).attr(\"x\", keyTypeAndCommentXOffset).attr(\"y\", heightOffset).attr(\"width\", maxKeyWidth + widthPadding * 2 + spareColumnWidth).attr(\"height\", attributeNode.height + heightPadding * 2);\n keyTypeAndCommentXOffset = parseFloat(keyTypeRect.attr(\"x\")) + parseFloat(keyTypeRect.attr(\"width\"));\n }\n if (hasComment) {\n attributeNode.cn.attr(\n \"transform\",\n \"translate(\" + (keyTypeAndCommentXOffset + widthPadding) + \",\" + alignY + \")\"\n );\n groupNode.insert(\"rect\", \"#\" + attributeNode.cn.node().id).classed(`er ${attribStyle}`, \"true\").attr(\"x\", keyTypeAndCommentXOffset).attr(\"y\", heightOffset).attr(\"width\", maxCommentWidth + widthPadding * 2 + spareColumnWidth).attr(\"height\", attributeNode.height + heightPadding * 2);\n }\n heightOffset += attributeNode.height + heightPadding * 2;\n attribStyle = attribStyle === \"attributeBoxOdd\" ? \"attributeBoxEven\" : \"attributeBoxOdd\";\n });\n } else {\n bBox.height = Math.max(conf.minEntityHeight, cumulativeHeight);\n entityTextNode.attr(\"transform\", \"translate(\" + bBox.width / 2 + \",\" + bBox.height / 2 + \")\");\n }\n return bBox;\n};\nconst drawEntities = function(svgNode, entities2, graph) {\n const keys = Object.keys(entities2);\n let firstOne;\n keys.forEach(function(entityName) {\n const entityId = generateId(entityName, \"entity\");\n entityNameIds.set(entityName, entityId);\n const groupNode = svgNode.append(\"g\").attr(\"id\", entityId);\n firstOne = firstOne === void 0 ? entityId : firstOne;\n const textId = \"text-\" + entityId;\n const textNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", textId).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"middle\").style(\"font-family\", getConfig().fontFamily).style(\"font-size\", conf.fontSize + \"px\").text(entityName);\n const { width: entityWidth, height: entityHeight } = drawAttributes(\n groupNode,\n textNode,\n entities2[entityName].attributes\n );\n const rectNode = groupNode.insert(\"rect\", \"#\" + textId).classed(\"er entityBox\", true).attr(\"x\", 0).attr(\"y\", 0).attr(\"width\", entityWidth).attr(\"height\", entityHeight);\n const rectBBox = rectNode.node().getBBox();\n graph.setNode(entityId, {\n width: rectBBox.width,\n height: rectBBox.height,\n shape: \"rect\",\n id: entityId\n });\n });\n return firstOne;\n};\nconst adjustEntities = function(svgNode, graph) {\n graph.nodes().forEach(function(v) {\n if (v !== void 0 && graph.node(v) !== void 0) {\n svgNode.select(\"#\" + v).attr(\n \"transform\",\n \"translate(\" + (graph.node(v).x - graph.node(v).width / 2) + \",\" + (graph.node(v).y - graph.node(v).height / 2) + \" )\"\n );\n }\n });\n};\nconst getEdgeName = function(rel) {\n return (rel.entityA + rel.roleA + rel.entityB).replace(/\\s/g, \"\");\n};\nconst addRelationships = function(relationships2, g) {\n relationships2.forEach(function(r) {\n g.setEdge(\n entityNameIds.get(r.entityA),\n entityNameIds.get(r.entityB),\n { relationship: r },\n getEdgeName(r)\n );\n });\n return relationships2;\n};\nlet relCnt = 0;\nconst drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) {\n relCnt++;\n const edge = g.edge(\n entityNameIds.get(rel.entityA),\n entityNameIds.get(rel.entityB),\n getEdgeName(rel)\n );\n const lineFunction = line().x(function(d) {\n return d.x;\n }).y(function(d) {\n return d.y;\n }).curve(curveBasis);\n const svgPath = svg.insert(\"path\", \"#\" + insert).classed(\"er relationshipLine\", true).attr(\"d\", lineFunction(edge.points)).style(\"stroke\", conf.stroke).style(\"fill\", \"none\");\n if (rel.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) {\n svgPath.attr(\"stroke-dasharray\", \"8,8\");\n }\n let url = \"\";\n if (conf.arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\");\n url = url.replace(/\\)/g, \"\\\\)\");\n }\n switch (rel.relSpec.cardA) {\n case diagObj.db.Cardinality.ZERO_OR_ONE:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ZERO_OR_ONE_END + \")\");\n break;\n case diagObj.db.Cardinality.ZERO_OR_MORE:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ZERO_OR_MORE_END + \")\");\n break;\n case diagObj.db.Cardinality.ONE_OR_MORE:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ONE_OR_MORE_END + \")\");\n break;\n case diagObj.db.Cardinality.ONLY_ONE:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ONLY_ONE_END + \")\");\n break;\n case diagObj.db.Cardinality.MD_PARENT:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.MD_PARENT_END + \")\");\n break;\n }\n switch (rel.relSpec.cardB) {\n case diagObj.db.Cardinality.ZERO_OR_ONE:\n svgPath.attr(\n \"marker-start\",\n \"url(\" + url + \"#\" + erMarkers.ERMarkers.ZERO_OR_ONE_START + \")\"\n );\n break;\n case diagObj.db.Cardinality.ZERO_OR_MORE:\n svgPath.attr(\n \"marker-start\",\n \"url(\" + url + \"#\" + erMarkers.ERMarkers.ZERO_OR_MORE_START + \")\"\n );\n break;\n case diagObj.db.Cardinality.ONE_OR_MORE:\n svgPath.attr(\n \"marker-start\",\n \"url(\" + url + \"#\" + erMarkers.ERMarkers.ONE_OR_MORE_START + \")\"\n );\n break;\n case diagObj.db.Cardinality.ONLY_ONE:\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ONLY_ONE_START + \")\");\n break;\n case diagObj.db.Cardinality.MD_PARENT:\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.MD_PARENT_START + \")\");\n break;\n }\n const len = svgPath.node().getTotalLength();\n const labelPoint = svgPath.node().getPointAtLength(len * 0.5);\n const labelId = \"rel\" + relCnt;\n const labelNode = svg.append(\"text\").classed(\"er relationshipLabel\", true).attr(\"id\", labelId).attr(\"x\", labelPoint.x).attr(\"y\", labelPoint.y).style(\"text-anchor\", \"middle\").style(\"dominant-baseline\", \"middle\").style(\"font-family\", getConfig().fontFamily).style(\"font-size\", conf.fontSize + \"px\").text(rel.roleA);\n const labelBBox = labelNode.node().getBBox();\n svg.insert(\"rect\", \"#\" + labelId).classed(\"er relationshipLabelBox\", true).attr(\"x\", labelPoint.x - labelBBox.width / 2).attr(\"y\", labelPoint.y - labelBBox.height / 2).attr(\"width\", labelBBox.width).attr(\"height\", labelBBox.height);\n};\nconst draw = function(text, id, _version, diagObj) {\n conf = getConfig().er;\n log.info(\"Drawing ER diagram\");\n const securityLevel = getConfig().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n const svg = root.select(`[id='${id}']`);\n erMarkers.insertMarkers(svg, conf);\n let g;\n g = new graphlib.Graph({\n multigraph: true,\n directed: true,\n compound: false\n }).setGraph({\n rankdir: conf.layoutDirection,\n marginx: 20,\n marginy: 20,\n nodesep: 100,\n edgesep: 100,\n ranksep: 100\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g);\n const relationships2 = addRelationships(diagObj.db.getRelationships(), g);\n layout(g);\n adjustEntities(svg, g);\n relationships2.forEach(function(rel) {\n drawRelationshipFromLayout(svg, rel, g, firstEntity, diagObj);\n });\n const padding = conf.diagramPadding;\n utils.insertTitle(svg, \"entityTitleText\", conf.titleTopMargin, diagObj.db.getDiagramTitle());\n const svgBounds = svg.node().getBBox();\n const width = svgBounds.width + padding * 2;\n const height = svgBounds.height + padding * 2;\n configureSvgSize(svg, height, width, conf.useMaxWidth);\n svg.attr(\"viewBox\", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`);\n};\nconst MERMAID_ERDIAGRAM_UUID = \"28e9f9db-3c8d-5aa5-9faf-44286ae5937c\";\nfunction generateId(str = \"\", prefix = \"\") {\n const simplifiedStr = str.replace(BAD_ID_CHARS_REGEXP, \"\");\n return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${v5(\n str,\n MERMAID_ERDIAGRAM_UUID\n )}`;\n}\nfunction strWithHyphen(str = \"\") {\n return str.length > 0 ? `${str}-` : \"\";\n}\nconst erRenderer = {\n setConf,\n draw\n};\nconst getStyles = (options) => `\n .entityBox {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n }\n\n .attributeBoxOdd {\n fill: ${options.attributeBackgroundColorOdd};\n stroke: ${options.nodeBorder};\n }\n\n .attributeBoxEven {\n fill: ${options.attributeBackgroundColorEven};\n stroke: ${options.nodeBorder};\n }\n\n .relationshipLabelBox {\n fill: ${options.tertiaryColor};\n opacity: 0.7;\n background-color: ${options.tertiaryColor};\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ${options.lineColor};\n }\n\n .entityTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n } \n #MD_PARENT_START {\n fill: #f5f5f5 !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n }\n #MD_PARENT_END {\n fill: #f5f5f5 !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n }\n \n`;\nconst erStyles = getStyles;\nconst diagram = {\n parser: erParser,\n db: erDb,\n renderer: erRenderer,\n styles: erStyles\n};\nexport {\n diagram\n};\n"],"names":["REGEX","validate","uuid","parse","v","arr","stringToBytes","str","bytes","i","DNS","URL","v35","name","version","hashfunc","generateUUID","value","namespace","buf","offset","_namespace","unsafeStringify","f","s","x","y","z","ROTL","n","sha1","K","H","msg","l","N","M","j","W","t","a","b","c","d","e","T","v5","v5$1","parser","o","k","o2","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","match","indexed_rule","backup","tempMatch","index","rules","condition","yy_","$avoiding_name_collisions","YY_START","Parser","erParser","entities","relationships","Cardinality","Identification","parseDirective","statement","context","type","mermaidAPI","addEntity","log","getEntities","addAttributes","entityName","attribs","entity","addRelationship","entA","rolA","entB","rSpec","rel","getRelationships","clear","clear$1","erDb","getConfig","setAccTitle","getAccTitle","setAccDescription","getAccDescription","setDiagramTitle","getDiagramTitle","ERMarkers","insertMarkers","elem","conf2","marker","erMarkers","BAD_ID_CHARS_REGEXP","conf","entityNameIds","setConf","cnf","keys","key","drawAttributes","groupNode","entityTextNode","attributes","heightPadding","widthPadding","attrFontSize","labelBBox","attributeNodes","hasKeyType","hasComment","maxTypeWidth","maxNameWidth","maxKeyWidth","maxCommentWidth","cumulativeHeight","attrNum","item","attrPrefix","nodeHeight","attributeType","parseGenericTypes","typeNode","nameNode","attributeNode","typeBBox","nameBBox","keyTypeNodeText","keyTypeNode","keyTypeBBox","commentNode","commentNodeBBox","widthPaddingFactor","maxWidth","bBox","spareColumnWidth","heightOffset","attribStyle","alignY","typeRect","nameXOffset","nameRect","keyTypeAndCommentXOffset","keyTypeRect","drawEntities","svgNode","entities2","graph","firstOne","entityId","generateId","textId","textNode","entityWidth","entityHeight","rectBBox","adjustEntities","getEdgeName","addRelationships","relationships2","g","relCnt","drawRelationshipFromLayout","svg","insert","diagObj","edge","lineFunction","line","curveBasis","svgPath","url","labelPoint","labelId","draw","text","id","_version","securityLevel","sandboxElement","select","graphlib.Graph","firstEntity","layout","padding","utils","svgBounds","width","height","configureSvgSize","MERMAID_ERDIAGRAM_UUID","prefix","simplifiedStr","strWithHyphen","erRenderer","getStyles","options","erStyles","diagram"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}
\ No newline at end of file
+{"version":3,"file":"erDiagram-0ccc0425-c2875da3.js","sources":["../../node_modules/uuid/dist/esm-browser/regex.js","../../node_modules/uuid/dist/esm-browser/validate.js","../../node_modules/uuid/dist/esm-browser/parse.js","../../node_modules/uuid/dist/esm-browser/v35.js","../../node_modules/uuid/dist/esm-browser/sha1.js","../../node_modules/uuid/dist/esm-browser/v5.js","../../node_modules/mermaid/dist/erDiagram-0ccc0425.js"],"sourcesContent":["export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","import { unsafeStringify } from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function v35(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n var _namespace;\n\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (let i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n\n for (let i = 0; i < N; ++i) {\n const arr = new Uint32Array(16);\n\n for (let j = 0; j < 16; ++j) {\n arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n }\n\n M[i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (let i = 0; i < N; ++i) {\n const W = new Uint32Array(80);\n\n for (let t = 0; t < 16; ++t) {\n W[t] = M[i][t];\n }\n\n for (let t = 16; t < 80; ++t) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n\n for (let t = 0; t < 80; ++t) {\n const s = Math.floor(t / 20);\n const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nconst v5 = v35('v5', 0x50, sha1);\nexport default v5;","import { c as getConfig, s as setAccTitle, g as getAccTitle, b as setAccDescription, a as getAccDescription, r as setDiagramTitle, t as getDiagramTitle, m as mermaidAPI, l as log, v as clear$1, u as utils, i as configureSvgSize, x as parseGenericTypes } from \"./mermaid-a98f434b.js\";\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\nimport { select, line, curveBasis } from \"d3\";\nimport { layout } from \"dagre-d3-es/src/dagre/index.js\";\nimport { v5 } from \"uuid\";\nimport \"ts-dedent\";\nimport \"dayjs\";\nimport \"@braintree/sanitize-url\";\nimport \"dompurify\";\nimport \"khroma\";\nimport \"lodash-es/memoize.js\";\nimport \"stylis\";\nimport \"lodash-es/isEmpty.js\";\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 23, 25, 27, 29, 30, 31, 52], $V3 = [1, 17], $V4 = [1, 18], $V5 = [1, 19], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 25], $Va = [1, 30], $Vb = [1, 31], $Vc = [1, 32], $Vd = [1, 33], $Ve = [1, 34], $Vf = [6, 9, 11, 15, 20, 23, 25, 27, 29, 30, 31, 44, 45, 46, 47, 48, 52], $Vg = [1, 46], $Vh = [30, 31, 49, 50], $Vi = [4, 6, 9, 11, 23, 25, 27, 29, 30, 31, 52], $Vj = [44, 45, 46, 47, 48], $Vk = [22, 37], $Vl = [1, 66], $Vm = [1, 65], $Vn = [22, 37, 39, 41];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"ER_DIAGRAM\": 4, \"document\": 5, \"EOF\": 6, \"directive\": 7, \"line\": 8, \"SPACE\": 9, \"statement\": 10, \"NEWLINE\": 11, \"openDirective\": 12, \"typeDirective\": 13, \"closeDirective\": 14, \":\": 15, \"argDirective\": 16, \"entityName\": 17, \"relSpec\": 18, \"role\": 19, \"BLOCK_START\": 20, \"attributes\": 21, \"BLOCK_STOP\": 22, \"title\": 23, \"title_value\": 24, \"acc_title\": 25, \"acc_title_value\": 26, \"acc_descr\": 27, \"acc_descr_value\": 28, \"acc_descr_multiline_value\": 29, \"ALPHANUM\": 30, \"ENTITY_NAME\": 31, \"attribute\": 32, \"attributeType\": 33, \"attributeName\": 34, \"attributeKeyTypeList\": 35, \"attributeComment\": 36, \"ATTRIBUTE_WORD\": 37, \"attributeKeyType\": 38, \"COMMA\": 39, \"ATTRIBUTE_KEY\": 40, \"COMMENT\": 41, \"cardinality\": 42, \"relType\": 43, \"ZERO_OR_ONE\": 44, \"ZERO_OR_MORE\": 45, \"ONE_OR_MORE\": 46, \"ONLY_ONE\": 47, \"MD_PARENT\": 48, \"NON_IDENTIFYING\": 49, \"IDENTIFYING\": 50, \"WORD\": 51, \"open_directive\": 52, \"type_directive\": 53, \"arg_directive\": 54, \"close_directive\": 55, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"ER_DIAGRAM\", 6: \"EOF\", 9: \"SPACE\", 11: \"NEWLINE\", 15: \":\", 20: \"BLOCK_START\", 22: \"BLOCK_STOP\", 23: \"title\", 24: \"title_value\", 25: \"acc_title\", 26: \"acc_title_value\", 27: \"acc_descr\", 28: \"acc_descr_value\", 29: \"acc_descr_multiline_value\", 30: \"ALPHANUM\", 31: \"ENTITY_NAME\", 37: \"ATTRIBUTE_WORD\", 39: \"COMMA\", 40: \"ATTRIBUTE_KEY\", 41: \"COMMENT\", 44: \"ZERO_OR_ONE\", 45: \"ZERO_OR_MORE\", 46: \"ONE_OR_MORE\", 47: \"ONLY_ONE\", 48: \"MD_PARENT\", 49: \"NON_IDENTIFYING\", 50: \"IDENTIFYING\", 51: \"WORD\", 52: \"open_directive\", 53: \"type_directive\", 54: \"arg_directive\", 55: \"close_directive\" },\n productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 5], [10, 4], [10, 3], [10, 1], [10, 2], [10, 2], [10, 2], [10, 1], [17, 1], [17, 1], [21, 1], [21, 2], [32, 2], [32, 3], [32, 3], [32, 4], [33, 1], [34, 1], [35, 1], [35, 3], [38, 1], [36, 1], [18, 3], [42, 1], [42, 1], [42, 1], [42, 1], [42, 1], [43, 1], [43, 1], [19, 1], [19, 1], [19, 1], [12, 1], [13, 1], [16, 1], [14, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n break;\n case 3:\n this.$ = [];\n break;\n case 4:\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n break;\n case 5:\n case 6:\n this.$ = $$[$0];\n break;\n case 7:\n case 8:\n this.$ = [];\n break;\n case 12:\n yy.addEntity($$[$0 - 4]);\n yy.addEntity($$[$0 - 2]);\n yy.addRelationship($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 3]);\n break;\n case 13:\n yy.addEntity($$[$0 - 3]);\n yy.addAttributes($$[$0 - 3], $$[$0 - 1]);\n break;\n case 14:\n yy.addEntity($$[$0 - 2]);\n break;\n case 15:\n yy.addEntity($$[$0]);\n break;\n case 16:\n case 17:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 18:\n case 19:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 20:\n case 44:\n this.$ = $$[$0];\n break;\n case 21:\n case 42:\n case 43:\n this.$ = $$[$0].replace(/\"/g, \"\");\n break;\n case 22:\n case 30:\n this.$ = [$$[$0]];\n break;\n case 23:\n $$[$0].push($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 24:\n this.$ = { attributeType: $$[$0 - 1], attributeName: $$[$0] };\n break;\n case 25:\n this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeKeyTypeList: $$[$0] };\n break;\n case 26:\n this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeComment: $$[$0] };\n break;\n case 27:\n this.$ = { attributeType: $$[$0 - 3], attributeName: $$[$0 - 2], attributeKeyTypeList: $$[$0 - 1], attributeComment: $$[$0] };\n break;\n case 28:\n case 29:\n case 32:\n this.$ = $$[$0];\n break;\n case 31:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 33:\n this.$ = $$[$0].replace(/\"/g, \"\");\n break;\n case 34:\n this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] };\n break;\n case 35:\n this.$ = yy.Cardinality.ZERO_OR_ONE;\n break;\n case 36:\n this.$ = yy.Cardinality.ZERO_OR_MORE;\n break;\n case 37:\n this.$ = yy.Cardinality.ONE_OR_MORE;\n break;\n case 38:\n this.$ = yy.Cardinality.ONLY_ONE;\n break;\n case 39:\n this.$ = yy.Cardinality.MD_PARENT;\n break;\n case 40:\n this.$ = yy.Identification.NON_IDENTIFYING;\n break;\n case 41:\n this.$ = yy.Identification.IDENTIFYING;\n break;\n case 45:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 46:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 47:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 48:\n yy.parseDirective(\"}%%\", \"close_directive\", \"er\");\n break;\n }\n },\n table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 52: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 52: $V1 }, { 13: 8, 53: [1, 9] }, { 53: [2, 45] }, { 6: [1, 10], 7: 15, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: 16, 23: $V3, 25: $V4, 27: $V5, 29: $V6, 30: $V7, 31: $V8, 52: $V1 }, { 1: [2, 2] }, { 14: 23, 15: [1, 24], 55: $V9 }, o([15, 55], [2, 46]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 15, 10: 26, 12: 4, 17: 16, 23: $V3, 25: $V4, 27: $V5, 29: $V6, 30: $V7, 31: $V8, 52: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), o($V2, [2, 15], { 18: 27, 42: 29, 20: [1, 28], 44: $Va, 45: $Vb, 46: $Vc, 47: $Vd, 48: $Ve }), { 24: [1, 35] }, { 26: [1, 36] }, { 28: [1, 37] }, o($V2, [2, 19]), o($Vf, [2, 20]), o($Vf, [2, 21]), { 11: [1, 38] }, { 16: 39, 54: [1, 40] }, { 11: [2, 48] }, o($V2, [2, 5]), { 17: 41, 30: $V7, 31: $V8 }, { 21: 42, 22: [1, 43], 32: 44, 33: 45, 37: $Vg }, { 43: 47, 49: [1, 48], 50: [1, 49] }, o($Vh, [2, 35]), o($Vh, [2, 36]), o($Vh, [2, 37]), o($Vh, [2, 38]), o($Vh, [2, 39]), o($V2, [2, 16]), o($V2, [2, 17]), o($V2, [2, 18]), o($Vi, [2, 9]), { 14: 50, 55: $V9 }, { 55: [2, 47] }, { 15: [1, 51] }, { 22: [1, 52] }, o($V2, [2, 14]), { 21: 53, 22: [2, 22], 32: 44, 33: 45, 37: $Vg }, { 34: 54, 37: [1, 55] }, { 37: [2, 28] }, { 42: 56, 44: $Va, 45: $Vb, 46: $Vc, 47: $Vd, 48: $Ve }, o($Vj, [2, 40]), o($Vj, [2, 41]), { 11: [1, 57] }, { 19: 58, 30: [1, 61], 31: [1, 60], 51: [1, 59] }, o($V2, [2, 13]), { 22: [2, 23] }, o($Vk, [2, 24], { 35: 62, 36: 63, 38: 64, 40: $Vl, 41: $Vm }), o([22, 37, 40, 41], [2, 29]), o([30, 31], [2, 34]), o($Vi, [2, 10]), o($V2, [2, 12]), o($V2, [2, 42]), o($V2, [2, 43]), o($V2, [2, 44]), o($Vk, [2, 25], { 36: 67, 39: [1, 68], 41: $Vm }), o($Vk, [2, 26]), o($Vn, [2, 30]), o($Vk, [2, 33]), o($Vn, [2, 32]), o($Vk, [2, 27]), { 38: 69, 40: $Vl }, o($Vn, [2, 31])],\n defaultActions: { 5: [2, 45], 7: [2, 2], 25: [2, 48], 40: [2, 47], 46: [2, 28], 53: [2, 23] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"acc_title\");\n return 25;\n case 1:\n this.popState();\n return \"acc_title_value\";\n case 2:\n this.begin(\"acc_descr\");\n return 27;\n case 3:\n this.popState();\n return \"acc_descr_value\";\n case 4:\n this.begin(\"acc_descr_multiline\");\n break;\n case 5:\n this.popState();\n break;\n case 6:\n return \"acc_descr_multiline_value\";\n case 7:\n this.begin(\"open_directive\");\n return 52;\n case 8:\n this.begin(\"type_directive\");\n return 53;\n case 9:\n this.popState();\n this.begin(\"arg_directive\");\n return 15;\n case 10:\n this.popState();\n this.popState();\n return 55;\n case 11:\n return 54;\n case 12:\n return 11;\n case 13:\n break;\n case 14:\n return 9;\n case 15:\n return 31;\n case 16:\n return 51;\n case 17:\n return 4;\n case 18:\n this.begin(\"block\");\n return 20;\n case 19:\n return 39;\n case 20:\n break;\n case 21:\n return 40;\n case 22:\n return 37;\n case 23:\n return 37;\n case 24:\n return 41;\n case 25:\n break;\n case 26:\n this.popState();\n return 22;\n case 27:\n return yy_.yytext[0];\n case 28:\n return 44;\n case 29:\n return 46;\n case 30:\n return 46;\n case 31:\n return 46;\n case 32:\n return 44;\n case 33:\n return 44;\n case 34:\n return 45;\n case 35:\n return 45;\n case 36:\n return 45;\n case 37:\n return 45;\n case 38:\n return 45;\n case 39:\n return 46;\n case 40:\n return 45;\n case 41:\n return 46;\n case 42:\n return 47;\n case 43:\n return 47;\n case 44:\n return 47;\n case 45:\n return 47;\n case 46:\n return 44;\n case 47:\n return 45;\n case 48:\n return 46;\n case 49:\n return 48;\n case 50:\n return 49;\n case 51:\n return 50;\n case 52:\n return 50;\n case 53:\n return 49;\n case 54:\n return 49;\n case 55:\n return 49;\n case 56:\n return 30;\n case 57:\n return yy_.yytext[0];\n case 58:\n return 6;\n }\n },\n rules: [/^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:%%\\{)/i, /^(?:((?:(?!\\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\\}%%)/i, /^(?:((?:(?!\\}%%).|\\n)*))/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?:[\\s]+)/i, /^(?:\"[^\"%\\r\\n\\v\\b\\\\]+\")/i, /^(?:\"[^\"]*\")/i, /^(?:erDiagram\\b)/i, /^(?:\\{)/i, /^(?:,)/i, /^(?:\\s+)/i, /^(?:\\b((?:PK)|(?:FK)|(?:UK))\\b)/i, /^(?:(.*?)[~](.*?)*[~])/i, /^(?:[\\*A-Za-z_][A-Za-z0-9\\-_\\[\\]\\(\\)]*)/i, /^(?:\"[^\"]*\")/i, /^(?:[\\n]+)/i, /^(?:\\})/i, /^(?:.)/i, /^(?:one or zero\\b)/i, /^(?:one or more\\b)/i, /^(?:one or many\\b)/i, /^(?:1\\+)/i, /^(?:\\|o\\b)/i, /^(?:zero or one\\b)/i, /^(?:zero or more\\b)/i, /^(?:zero or many\\b)/i, /^(?:0\\+)/i, /^(?:\\}o\\b)/i, /^(?:many\\(0\\))/i, /^(?:many\\(1\\))/i, /^(?:many\\b)/i, /^(?:\\}\\|)/i, /^(?:one\\b)/i, /^(?:only one\\b)/i, /^(?:1\\b)/i, /^(?:\\|\\|)/i, /^(?:o\\|)/i, /^(?:o\\{)/i, /^(?:\\|\\{)/i, /^(?:\\s*u\\b)/i, /^(?:\\.\\.)/i, /^(?:--)/i, /^(?:to\\b)/i, /^(?:optionally to\\b)/i, /^(?:\\.-)/i, /^(?:-\\.)/i, /^(?:[A-Za-z][A-Za-z0-9\\-_]*)/i, /^(?:.)/i, /^(?:$)/i],\n conditions: { \"acc_descr_multiline\": { \"rules\": [5, 6], \"inclusive\": false }, \"acc_descr\": { \"rules\": [3], \"inclusive\": false }, \"acc_title\": { \"rules\": [1], \"inclusive\": false }, \"open_directive\": { \"rules\": [8], \"inclusive\": false }, \"type_directive\": { \"rules\": [9, 10], \"inclusive\": false }, \"arg_directive\": { \"rules\": [10, 11], \"inclusive\": false }, \"block\": { \"rules\": [19, 20, 21, 22, 23, 24, 25, 26, 27], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 2, 4, 7, 12, 13, 14, 15, 16, 17, 18, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst erParser = parser;\nlet entities = {};\nlet relationships = [];\nconst Cardinality = {\n ZERO_OR_ONE: \"ZERO_OR_ONE\",\n ZERO_OR_MORE: \"ZERO_OR_MORE\",\n ONE_OR_MORE: \"ONE_OR_MORE\",\n ONLY_ONE: \"ONLY_ONE\",\n MD_PARENT: \"MD_PARENT\"\n};\nconst Identification = {\n NON_IDENTIFYING: \"NON_IDENTIFYING\",\n IDENTIFYING: \"IDENTIFYING\"\n};\nconst parseDirective = function(statement, context, type) {\n mermaidAPI.parseDirective(this, statement, context, type);\n};\nconst addEntity = function(name) {\n if (entities[name] === void 0) {\n entities[name] = { attributes: [] };\n log.info(\"Added new entity :\", name);\n }\n return entities[name];\n};\nconst getEntities = () => entities;\nconst addAttributes = function(entityName, attribs) {\n let entity = addEntity(entityName);\n let i;\n for (i = attribs.length - 1; i >= 0; i--) {\n entity.attributes.push(attribs[i]);\n log.debug(\"Added attribute \", attribs[i].attributeName);\n }\n};\nconst addRelationship = function(entA, rolA, entB, rSpec) {\n let rel = {\n entityA: entA,\n roleA: rolA,\n entityB: entB,\n relSpec: rSpec\n };\n relationships.push(rel);\n log.debug(\"Added new relationship :\", rel);\n};\nconst getRelationships = () => relationships;\nconst clear = function() {\n entities = {};\n relationships = [];\n clear$1();\n};\nconst erDb = {\n Cardinality,\n Identification,\n parseDirective,\n getConfig: () => getConfig().er,\n addEntity,\n addAttributes,\n getEntities,\n addRelationship,\n getRelationships,\n clear,\n setAccTitle,\n getAccTitle,\n setAccDescription,\n getAccDescription,\n setDiagramTitle,\n getDiagramTitle\n};\nconst ERMarkers = {\n ONLY_ONE_START: \"ONLY_ONE_START\",\n ONLY_ONE_END: \"ONLY_ONE_END\",\n ZERO_OR_ONE_START: \"ZERO_OR_ONE_START\",\n ZERO_OR_ONE_END: \"ZERO_OR_ONE_END\",\n ONE_OR_MORE_START: \"ONE_OR_MORE_START\",\n ONE_OR_MORE_END: \"ONE_OR_MORE_END\",\n ZERO_OR_MORE_START: \"ZERO_OR_MORE_START\",\n ZERO_OR_MORE_END: \"ZERO_OR_MORE_END\",\n MD_PARENT_END: \"MD_PARENT_END\",\n MD_PARENT_START: \"MD_PARENT_START\"\n};\nconst insertMarkers = function(elem, conf2) {\n let marker;\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.MD_PARENT_START).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.MD_PARENT_END).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ONLY_ONE_START).attr(\"refX\", 0).attr(\"refY\", 9).attr(\"markerWidth\", 18).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\").append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M9,0 L9,18 M15,0 L15,18\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ONLY_ONE_END).attr(\"refX\", 18).attr(\"refY\", 9).attr(\"markerWidth\", 18).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\").append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M3,0 L3,18 M9,0 L9,18\");\n marker = elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ZERO_OR_ONE_START).attr(\"refX\", 0).attr(\"refY\", 9).attr(\"markerWidth\", 30).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\");\n marker.append(\"circle\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"white\").attr(\"cx\", 21).attr(\"cy\", 9).attr(\"r\", 6);\n marker.append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M9,0 L9,18\");\n marker = elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ZERO_OR_ONE_END).attr(\"refX\", 30).attr(\"refY\", 9).attr(\"markerWidth\", 30).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\");\n marker.append(\"circle\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"white\").attr(\"cx\", 9).attr(\"cy\", 9).attr(\"r\", 6);\n marker.append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M21,0 L21,18\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ONE_OR_MORE_START).attr(\"refX\", 18).attr(\"refY\", 18).attr(\"markerWidth\", 45).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\").append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ONE_OR_MORE_END).attr(\"refX\", 27).attr(\"refY\", 18).attr(\"markerWidth\", 45).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\").append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18\");\n marker = elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ZERO_OR_MORE_START).attr(\"refX\", 18).attr(\"refY\", 18).attr(\"markerWidth\", 57).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\");\n marker.append(\"circle\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"white\").attr(\"cx\", 48).attr(\"cy\", 18).attr(\"r\", 6);\n marker.append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M0,18 Q18,0 36,18 Q18,36 0,18\");\n marker = elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ZERO_OR_MORE_END).attr(\"refX\", 39).attr(\"refY\", 18).attr(\"markerWidth\", 57).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\");\n marker.append(\"circle\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"white\").attr(\"cx\", 9).attr(\"cy\", 18).attr(\"r\", 6);\n marker.append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M21,18 Q39,0 57,18 Q39,36 21,18\");\n return;\n};\nconst erMarkers = {\n ERMarkers,\n insertMarkers\n};\nconst BAD_ID_CHARS_REGEXP = /[^\\dA-Za-z](\\W)*/g;\nlet conf = {};\nlet entityNameIds = /* @__PURE__ */ new Map();\nconst setConf = function(cnf) {\n const keys = Object.keys(cnf);\n for (const key of keys) {\n conf[key] = cnf[key];\n }\n};\nconst drawAttributes = (groupNode, entityTextNode, attributes) => {\n const heightPadding = conf.entityPadding / 3;\n const widthPadding = conf.entityPadding / 3;\n const attrFontSize = conf.fontSize * 0.85;\n const labelBBox = entityTextNode.node().getBBox();\n const attributeNodes = [];\n let hasKeyType = false;\n let hasComment = false;\n let maxTypeWidth = 0;\n let maxNameWidth = 0;\n let maxKeyWidth = 0;\n let maxCommentWidth = 0;\n let cumulativeHeight = labelBBox.height + heightPadding * 2;\n let attrNum = 1;\n attributes.forEach((item) => {\n if (item.attributeKeyTypeList !== void 0 && item.attributeKeyTypeList.length > 0) {\n hasKeyType = true;\n }\n if (item.attributeComment !== void 0) {\n hasComment = true;\n }\n });\n attributes.forEach((item) => {\n const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`;\n let nodeHeight = 0;\n const attributeType = parseGenericTypes(item.attributeType);\n const typeNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", `${attrPrefix}-type`).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"left\").style(\"font-family\", getConfig().fontFamily).style(\"font-size\", attrFontSize + \"px\").text(attributeType);\n const nameNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", `${attrPrefix}-name`).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"left\").style(\"font-family\", getConfig().fontFamily).style(\"font-size\", attrFontSize + \"px\").text(item.attributeName);\n const attributeNode = {};\n attributeNode.tn = typeNode;\n attributeNode.nn = nameNode;\n const typeBBox = typeNode.node().getBBox();\n const nameBBox = nameNode.node().getBBox();\n maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width);\n maxNameWidth = Math.max(maxNameWidth, nameBBox.width);\n nodeHeight = Math.max(typeBBox.height, nameBBox.height);\n if (hasKeyType) {\n const keyTypeNodeText = item.attributeKeyTypeList !== void 0 ? item.attributeKeyTypeList.join(\",\") : \"\";\n const keyTypeNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", `${attrPrefix}-key`).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"left\").style(\"font-family\", getConfig().fontFamily).style(\"font-size\", attrFontSize + \"px\").text(keyTypeNodeText);\n attributeNode.kn = keyTypeNode;\n const keyTypeBBox = keyTypeNode.node().getBBox();\n maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width);\n nodeHeight = Math.max(nodeHeight, keyTypeBBox.height);\n }\n if (hasComment) {\n const commentNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", `${attrPrefix}-comment`).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"left\").style(\"font-family\", getConfig().fontFamily).style(\"font-size\", attrFontSize + \"px\").text(item.attributeComment || \"\");\n attributeNode.cn = commentNode;\n const commentNodeBBox = commentNode.node().getBBox();\n maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width);\n nodeHeight = Math.max(nodeHeight, commentNodeBBox.height);\n }\n attributeNode.height = nodeHeight;\n attributeNodes.push(attributeNode);\n cumulativeHeight += nodeHeight + heightPadding * 2;\n attrNum += 1;\n });\n let widthPaddingFactor = 4;\n if (hasKeyType) {\n widthPaddingFactor += 2;\n }\n if (hasComment) {\n widthPaddingFactor += 2;\n }\n const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth;\n const bBox = {\n width: Math.max(\n conf.minEntityWidth,\n Math.max(\n labelBBox.width + conf.entityPadding * 2,\n maxWidth + widthPadding * widthPaddingFactor\n )\n ),\n height: attributes.length > 0 ? cumulativeHeight : Math.max(conf.minEntityHeight, labelBBox.height + conf.entityPadding * 2)\n };\n if (attributes.length > 0) {\n const spareColumnWidth = Math.max(\n 0,\n (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2)\n );\n entityTextNode.attr(\n \"transform\",\n \"translate(\" + bBox.width / 2 + \",\" + (heightPadding + labelBBox.height / 2) + \")\"\n );\n let heightOffset = labelBBox.height + heightPadding * 2;\n let attribStyle = \"attributeBoxOdd\";\n attributeNodes.forEach((attributeNode) => {\n const alignY = heightOffset + heightPadding + attributeNode.height / 2;\n attributeNode.tn.attr(\"transform\", \"translate(\" + widthPadding + \",\" + alignY + \")\");\n const typeRect = groupNode.insert(\"rect\", \"#\" + attributeNode.tn.node().id).classed(`er ${attribStyle}`, true).attr(\"x\", 0).attr(\"y\", heightOffset).attr(\"width\", maxTypeWidth + widthPadding * 2 + spareColumnWidth).attr(\"height\", attributeNode.height + heightPadding * 2);\n const nameXOffset = parseFloat(typeRect.attr(\"x\")) + parseFloat(typeRect.attr(\"width\"));\n attributeNode.nn.attr(\n \"transform\",\n \"translate(\" + (nameXOffset + widthPadding) + \",\" + alignY + \")\"\n );\n const nameRect = groupNode.insert(\"rect\", \"#\" + attributeNode.nn.node().id).classed(`er ${attribStyle}`, true).attr(\"x\", nameXOffset).attr(\"y\", heightOffset).attr(\"width\", maxNameWidth + widthPadding * 2 + spareColumnWidth).attr(\"height\", attributeNode.height + heightPadding * 2);\n let keyTypeAndCommentXOffset = parseFloat(nameRect.attr(\"x\")) + parseFloat(nameRect.attr(\"width\"));\n if (hasKeyType) {\n attributeNode.kn.attr(\n \"transform\",\n \"translate(\" + (keyTypeAndCommentXOffset + widthPadding) + \",\" + alignY + \")\"\n );\n const keyTypeRect = groupNode.insert(\"rect\", \"#\" + attributeNode.kn.node().id).classed(`er ${attribStyle}`, true).attr(\"x\", keyTypeAndCommentXOffset).attr(\"y\", heightOffset).attr(\"width\", maxKeyWidth + widthPadding * 2 + spareColumnWidth).attr(\"height\", attributeNode.height + heightPadding * 2);\n keyTypeAndCommentXOffset = parseFloat(keyTypeRect.attr(\"x\")) + parseFloat(keyTypeRect.attr(\"width\"));\n }\n if (hasComment) {\n attributeNode.cn.attr(\n \"transform\",\n \"translate(\" + (keyTypeAndCommentXOffset + widthPadding) + \",\" + alignY + \")\"\n );\n groupNode.insert(\"rect\", \"#\" + attributeNode.cn.node().id).classed(`er ${attribStyle}`, \"true\").attr(\"x\", keyTypeAndCommentXOffset).attr(\"y\", heightOffset).attr(\"width\", maxCommentWidth + widthPadding * 2 + spareColumnWidth).attr(\"height\", attributeNode.height + heightPadding * 2);\n }\n heightOffset += attributeNode.height + heightPadding * 2;\n attribStyle = attribStyle === \"attributeBoxOdd\" ? \"attributeBoxEven\" : \"attributeBoxOdd\";\n });\n } else {\n bBox.height = Math.max(conf.minEntityHeight, cumulativeHeight);\n entityTextNode.attr(\"transform\", \"translate(\" + bBox.width / 2 + \",\" + bBox.height / 2 + \")\");\n }\n return bBox;\n};\nconst drawEntities = function(svgNode, entities2, graph) {\n const keys = Object.keys(entities2);\n let firstOne;\n keys.forEach(function(entityName) {\n const entityId = generateId(entityName, \"entity\");\n entityNameIds.set(entityName, entityId);\n const groupNode = svgNode.append(\"g\").attr(\"id\", entityId);\n firstOne = firstOne === void 0 ? entityId : firstOne;\n const textId = \"text-\" + entityId;\n const textNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", textId).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"middle\").style(\"font-family\", getConfig().fontFamily).style(\"font-size\", conf.fontSize + \"px\").text(entityName);\n const { width: entityWidth, height: entityHeight } = drawAttributes(\n groupNode,\n textNode,\n entities2[entityName].attributes\n );\n const rectNode = groupNode.insert(\"rect\", \"#\" + textId).classed(\"er entityBox\", true).attr(\"x\", 0).attr(\"y\", 0).attr(\"width\", entityWidth).attr(\"height\", entityHeight);\n const rectBBox = rectNode.node().getBBox();\n graph.setNode(entityId, {\n width: rectBBox.width,\n height: rectBBox.height,\n shape: \"rect\",\n id: entityId\n });\n });\n return firstOne;\n};\nconst adjustEntities = function(svgNode, graph) {\n graph.nodes().forEach(function(v) {\n if (v !== void 0 && graph.node(v) !== void 0) {\n svgNode.select(\"#\" + v).attr(\n \"transform\",\n \"translate(\" + (graph.node(v).x - graph.node(v).width / 2) + \",\" + (graph.node(v).y - graph.node(v).height / 2) + \" )\"\n );\n }\n });\n};\nconst getEdgeName = function(rel) {\n return (rel.entityA + rel.roleA + rel.entityB).replace(/\\s/g, \"\");\n};\nconst addRelationships = function(relationships2, g) {\n relationships2.forEach(function(r) {\n g.setEdge(\n entityNameIds.get(r.entityA),\n entityNameIds.get(r.entityB),\n { relationship: r },\n getEdgeName(r)\n );\n });\n return relationships2;\n};\nlet relCnt = 0;\nconst drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) {\n relCnt++;\n const edge = g.edge(\n entityNameIds.get(rel.entityA),\n entityNameIds.get(rel.entityB),\n getEdgeName(rel)\n );\n const lineFunction = line().x(function(d) {\n return d.x;\n }).y(function(d) {\n return d.y;\n }).curve(curveBasis);\n const svgPath = svg.insert(\"path\", \"#\" + insert).classed(\"er relationshipLine\", true).attr(\"d\", lineFunction(edge.points)).style(\"stroke\", conf.stroke).style(\"fill\", \"none\");\n if (rel.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) {\n svgPath.attr(\"stroke-dasharray\", \"8,8\");\n }\n let url = \"\";\n if (conf.arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\");\n url = url.replace(/\\)/g, \"\\\\)\");\n }\n switch (rel.relSpec.cardA) {\n case diagObj.db.Cardinality.ZERO_OR_ONE:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ZERO_OR_ONE_END + \")\");\n break;\n case diagObj.db.Cardinality.ZERO_OR_MORE:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ZERO_OR_MORE_END + \")\");\n break;\n case diagObj.db.Cardinality.ONE_OR_MORE:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ONE_OR_MORE_END + \")\");\n break;\n case diagObj.db.Cardinality.ONLY_ONE:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ONLY_ONE_END + \")\");\n break;\n case diagObj.db.Cardinality.MD_PARENT:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.MD_PARENT_END + \")\");\n break;\n }\n switch (rel.relSpec.cardB) {\n case diagObj.db.Cardinality.ZERO_OR_ONE:\n svgPath.attr(\n \"marker-start\",\n \"url(\" + url + \"#\" + erMarkers.ERMarkers.ZERO_OR_ONE_START + \")\"\n );\n break;\n case diagObj.db.Cardinality.ZERO_OR_MORE:\n svgPath.attr(\n \"marker-start\",\n \"url(\" + url + \"#\" + erMarkers.ERMarkers.ZERO_OR_MORE_START + \")\"\n );\n break;\n case diagObj.db.Cardinality.ONE_OR_MORE:\n svgPath.attr(\n \"marker-start\",\n \"url(\" + url + \"#\" + erMarkers.ERMarkers.ONE_OR_MORE_START + \")\"\n );\n break;\n case diagObj.db.Cardinality.ONLY_ONE:\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ONLY_ONE_START + \")\");\n break;\n case diagObj.db.Cardinality.MD_PARENT:\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.MD_PARENT_START + \")\");\n break;\n }\n const len = svgPath.node().getTotalLength();\n const labelPoint = svgPath.node().getPointAtLength(len * 0.5);\n const labelId = \"rel\" + relCnt;\n const labelNode = svg.append(\"text\").classed(\"er relationshipLabel\", true).attr(\"id\", labelId).attr(\"x\", labelPoint.x).attr(\"y\", labelPoint.y).style(\"text-anchor\", \"middle\").style(\"dominant-baseline\", \"middle\").style(\"font-family\", getConfig().fontFamily).style(\"font-size\", conf.fontSize + \"px\").text(rel.roleA);\n const labelBBox = labelNode.node().getBBox();\n svg.insert(\"rect\", \"#\" + labelId).classed(\"er relationshipLabelBox\", true).attr(\"x\", labelPoint.x - labelBBox.width / 2).attr(\"y\", labelPoint.y - labelBBox.height / 2).attr(\"width\", labelBBox.width).attr(\"height\", labelBBox.height);\n};\nconst draw = function(text, id, _version, diagObj) {\n conf = getConfig().er;\n log.info(\"Drawing ER diagram\");\n const securityLevel = getConfig().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n const svg = root.select(`[id='${id}']`);\n erMarkers.insertMarkers(svg, conf);\n let g;\n g = new graphlib.Graph({\n multigraph: true,\n directed: true,\n compound: false\n }).setGraph({\n rankdir: conf.layoutDirection,\n marginx: 20,\n marginy: 20,\n nodesep: 100,\n edgesep: 100,\n ranksep: 100\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g);\n const relationships2 = addRelationships(diagObj.db.getRelationships(), g);\n layout(g);\n adjustEntities(svg, g);\n relationships2.forEach(function(rel) {\n drawRelationshipFromLayout(svg, rel, g, firstEntity, diagObj);\n });\n const padding = conf.diagramPadding;\n utils.insertTitle(svg, \"entityTitleText\", conf.titleTopMargin, diagObj.db.getDiagramTitle());\n const svgBounds = svg.node().getBBox();\n const width = svgBounds.width + padding * 2;\n const height = svgBounds.height + padding * 2;\n configureSvgSize(svg, height, width, conf.useMaxWidth);\n svg.attr(\"viewBox\", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`);\n};\nconst MERMAID_ERDIAGRAM_UUID = \"28e9f9db-3c8d-5aa5-9faf-44286ae5937c\";\nfunction generateId(str = \"\", prefix = \"\") {\n const simplifiedStr = str.replace(BAD_ID_CHARS_REGEXP, \"\");\n return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${v5(\n str,\n MERMAID_ERDIAGRAM_UUID\n )}`;\n}\nfunction strWithHyphen(str = \"\") {\n return str.length > 0 ? `${str}-` : \"\";\n}\nconst erRenderer = {\n setConf,\n draw\n};\nconst getStyles = (options) => `\n .entityBox {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n }\n\n .attributeBoxOdd {\n fill: ${options.attributeBackgroundColorOdd};\n stroke: ${options.nodeBorder};\n }\n\n .attributeBoxEven {\n fill: ${options.attributeBackgroundColorEven};\n stroke: ${options.nodeBorder};\n }\n\n .relationshipLabelBox {\n fill: ${options.tertiaryColor};\n opacity: 0.7;\n background-color: ${options.tertiaryColor};\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ${options.lineColor};\n }\n\n .entityTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n } \n #MD_PARENT_START {\n fill: #f5f5f5 !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n }\n #MD_PARENT_END {\n fill: #f5f5f5 !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n }\n \n`;\nconst erStyles = getStyles;\nconst diagram = {\n parser: erParser,\n db: erDb,\n renderer: erRenderer,\n styles: erStyles\n};\nexport {\n diagram\n};\n"],"names":["REGEX","validate","uuid","parse","v","arr","stringToBytes","str","bytes","i","DNS","URL","v35","name","version","hashfunc","generateUUID","value","namespace","buf","offset","_namespace","unsafeStringify","f","s","x","y","z","ROTL","n","sha1","K","H","msg","l","N","M","j","W","t","a","b","c","d","e","T","v5","v5$1","parser","o","k","o2","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","match","indexed_rule","backup","tempMatch","index","rules","condition","yy_","$avoiding_name_collisions","YY_START","Parser","erParser","entities","relationships","Cardinality","Identification","parseDirective","statement","context","type","mermaidAPI","addEntity","log","getEntities","addAttributes","entityName","attribs","entity","addRelationship","entA","rolA","entB","rSpec","rel","getRelationships","clear","clear$1","erDb","getConfig","setAccTitle","getAccTitle","setAccDescription","getAccDescription","setDiagramTitle","getDiagramTitle","ERMarkers","insertMarkers","elem","conf2","marker","erMarkers","BAD_ID_CHARS_REGEXP","conf","entityNameIds","setConf","cnf","keys","key","drawAttributes","groupNode","entityTextNode","attributes","heightPadding","widthPadding","attrFontSize","labelBBox","attributeNodes","hasKeyType","hasComment","maxTypeWidth","maxNameWidth","maxKeyWidth","maxCommentWidth","cumulativeHeight","attrNum","item","attrPrefix","nodeHeight","attributeType","parseGenericTypes","typeNode","nameNode","attributeNode","typeBBox","nameBBox","keyTypeNodeText","keyTypeNode","keyTypeBBox","commentNode","commentNodeBBox","widthPaddingFactor","maxWidth","bBox","spareColumnWidth","heightOffset","attribStyle","alignY","typeRect","nameXOffset","nameRect","keyTypeAndCommentXOffset","keyTypeRect","drawEntities","svgNode","entities2","graph","firstOne","entityId","generateId","textId","textNode","entityWidth","entityHeight","rectBBox","adjustEntities","getEdgeName","addRelationships","relationships2","g","relCnt","drawRelationshipFromLayout","svg","insert","diagObj","edge","lineFunction","line","curveBasis","svgPath","url","labelPoint","labelId","draw","text","id","_version","securityLevel","sandboxElement","select","graphlib.Graph","firstEntity","layout","padding","utils","svgBounds","width","height","configureSvgSize","MERMAID_ERDIAGRAM_UUID","prefix","simplifiedStr","strWithHyphen","erRenderer","getStyles","options","erStyles","diagram"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}
\ No newline at end of file
diff --git a/docs/assets/flowDb-8f9fc471-5ea2ae65.js b/docs/assets/flowDb-8f9fc471-2bfe761b.js
similarity index 99%
rename from docs/assets/flowDb-8f9fc471-5ea2ae65.js
rename to docs/assets/flowDb-8f9fc471-2bfe761b.js
index c29f7f0c..0c7dd619 100644
--- a/docs/assets/flowDb-8f9fc471-5ea2ae65.js
+++ b/docs/assets/flowDb-8f9fc471-2bfe761b.js
@@ -1,7 +1,7 @@
-import{c as U2,o as Ne,s as Oe,g as Pe,a as we,b as Ue,p as Me,q as Ge,m as Ke,l as M2,u as G2,r as je,j as We,h as n2}from"./intro.stories-2707f0d7.js";var P2=function(){var e=function(z1,a,o,T){for(o=o||{},T=z1.length;T--;o[z1[T]]=a);return o},u=[1,9],r=[1,7],i=[1,6],c=[1,8],_=[1,20,21,22,23,38,44,46,48,52,67,68,88,89,90,91,92,93,97,107,108,111,113,114,120,121,122,123,124,125,126,127,128,129],B=[2,10],u1=[1,20],z=[1,21],s1=[1,22],f1=[1,23],Y1=[1,30],Q1=[1,32],X1=[1,33],s2=[1,34],q=[1,63],c1=[1,49],m1=[1,53],o2=[1,36],l2=[1,37],h2=[1,38],A2=[1,39],f2=[1,40],v1=[1,57],V1=[1,64],x1=[1,52],R1=[1,54],L1=[1,56],I1=[1,60],N1=[1,61],p2=[1,41],d2=[1,42],E2=[1,43],b2=[1,44],O1=[1,62],P1=[1,51],w1=[1,55],U1=[1,58],M1=[1,59],G1=[1,50],j2=[1,67],u2=[1,72],Q=[1,20,21,22,23,38,42,44,46,48,52,67,68,88,89,90,91,92,93,97,107,108,111,113,114,120,121,122,123,124,125,126,127,128,129],p1=[1,76],d1=[1,75],E1=[1,77],k2=[20,21,23,82,83],r1=[1,100],l=[1,105],h=[1,108],A=[1,109],i1=[1,102],f=[1,107],p=[1,110],n1=[1,103],d=[1,115],E=[1,114],b=[1,104],k=[1,106],D=[1,111],g=[1,112],F=[1,113],C=[1,116],D2=[20,21,22,23,82,83],t1=[20,21,22,23,54,82,83],Z=[20,21,22,23,40,52,54,56,58,60,62,64,66,67,68,70,72,74,75,77,82,83,93,97,107,108,111,113,114,124,125,126,127,128,129],Y=[20,21,23],W2=[20,21,23,52,67,68,82,83,93,97,107,108,111,113,114,124,125,126,127,128,129],v2=[1,12,20,21,22,23,24,38,42,44,46,48,52,67,68,88,89,90,91,92,93,97,107,108,111,113,114,120,121,122,123,124,125,126,127,128,129],r2=[52,67,68,93,97,107,108,111,113,114,124,125,126,127,128,129],S=[1,151],m=[1,159],v=[1,160],V=[1,161],x=[1,162],R=[1,146],L=[1,147],J=[1,142],$=[1,143],I=[1,154],N=[1,155],O=[1,156],P=[1,157],w=[1,158],U=[1,163],M=[1,164],G=[1,149],K=[1,152],j=[1,148],W=[1,145],V2=[20,21,22,23,38,42,44,46,48,52,67,68,88,89,90,91,92,93,97,107,108,111,113,114,120,121,122,123,124,125,126,127,128,129],Y2=[1,167],$1=[20,21,22,23,26,52,67,68,93,107,108,111,113,114,124,125,126,127,128,129],y=[20,21,22,23,24,26,38,40,41,42,52,57,59,61,63,65,67,68,69,71,73,74,76,78,82,83,88,89,90,91,92,93,94,97,107,108,111,113,114,115,116,124,125,126,127,128,129],H2=[12,21,22,24],z2=[22,108],b1=[1,252],k1=[1,247],D1=[1,248],g1=[1,256],F1=[1,253],C1=[1,250],_1=[1,249],B1=[1,251],T1=[1,254],y1=[1,255],S1=[1,257],H1=[1,275],Q2=[20,21,23,108],o1=[20,21,22,23,67,68,88,104,107,108,111,112,113,114,115],x2={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,acc_title:44,acc_title_value:45,acc_descr:46,acc_descr_value:47,acc_descr_multiline_value:48,link:49,node:50,styledVertex:51,AMP:52,vertex:53,STYLE_SEPARATOR:54,idString:55,DOUBLECIRCLESTART:56,DOUBLECIRCLEEND:57,PS:58,PE:59,"(-":60,"-)":61,STADIUMSTART:62,STADIUMEND:63,SUBROUTINESTART:64,SUBROUTINEEND:65,VERTEX_WITH_PROPS_START:66,ALPHA:67,COLON:68,PIPE:69,CYLINDERSTART:70,CYLINDEREND:71,DIAMOND_START:72,DIAMOND_STOP:73,TAGEND:74,TRAPSTART:75,TRAPEND:76,INVTRAPSTART:77,INVTRAPEND:78,linkStatement:79,arrowText:80,TESTSTR:81,START_LINK:82,LINK:83,textToken:84,STR:85,MD_STR:86,keywords:87,STYLE:88,LINKSTYLE:89,CLASSDEF:90,CLASS:91,CLICK:92,DOWN:93,UP:94,textNoTags:95,textNoTagsToken:96,DEFAULT:97,stylesOpt:98,alphaNum:99,CALLBACKNAME:100,CALLBACKARGS:101,HREF:102,LINK_TARGET:103,HEX:104,numList:105,INTERPOLATE:106,NUM:107,COMMA:108,style:109,styleComponent:110,MINUS:111,UNIT:112,BRKT:113,DOT:114,PCT:115,TAGSTART:116,alphaNumToken:117,idStringToken:118,alphaNumStatement:119,direction_tb:120,direction_bt:121,direction_rl:122,direction_lr:123,PUNCTUATION:124,UNICODE_TEXT:125,PLUS:126,EQUALS:127,MULT:128,UNDERSCORE:129,graphCodeTokens:130,ARROW_CROSS:131,ARROW_POINT:132,ARROW_CIRCLE:133,ARROW_OPEN:134,QUOTE:135,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",44:"acc_title",45:"acc_title_value",46:"acc_descr",47:"acc_descr_value",48:"acc_descr_multiline_value",52:"AMP",54:"STYLE_SEPARATOR",56:"DOUBLECIRCLESTART",57:"DOUBLECIRCLEEND",58:"PS",59:"PE",60:"(-",61:"-)",62:"STADIUMSTART",63:"STADIUMEND",64:"SUBROUTINESTART",65:"SUBROUTINEEND",66:"VERTEX_WITH_PROPS_START",67:"ALPHA",68:"COLON",69:"PIPE",70:"CYLINDERSTART",71:"CYLINDEREND",72:"DIAMOND_START",73:"DIAMOND_STOP",74:"TAGEND",75:"TRAPSTART",76:"TRAPEND",77:"INVTRAPSTART",78:"INVTRAPEND",81:"TESTSTR",82:"START_LINK",83:"LINK",85:"STR",86:"MD_STR",88:"STYLE",89:"LINKSTYLE",90:"CLASSDEF",91:"CLASS",92:"CLICK",93:"DOWN",94:"UP",97:"DEFAULT",100:"CALLBACKNAME",101:"CALLBACKARGS",102:"HREF",103:"LINK_TARGET",104:"HEX",106:"INTERPOLATE",107:"NUM",108:"COMMA",111:"MINUS",112:"UNIT",113:"BRKT",114:"DOT",115:"PCT",116:"TAGSTART",120:"direction_tb",121:"direction_bt",122:"direction_rl",123:"direction_lr",124:"PUNCTUATION",125:"UNICODE_TEXT",126:"PLUS",127:"EQUALS",128:"MULT",129:"UNDERSCORE",131:"ARROW_CROSS",132:"ARROW_POINT",133:"ARROW_CIRCLE",134:"ARROW_OPEN",135:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[19,2],[19,2],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[50,1],[50,5],[51,1],[51,3],[53,4],[53,4],[53,6],[53,4],[53,4],[53,4],[53,8],[53,4],[53,4],[53,4],[53,6],[53,4],[53,4],[53,4],[53,4],[53,4],[53,1],[49,2],[49,3],[49,3],[49,1],[49,3],[79,1],[80,3],[39,1],[39,2],[39,1],[39,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[95,1],[95,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[105,1],[105,3],[98,1],[98,3],[109,1],[109,2],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[84,1],[84,1],[84,1],[84,1],[84,1],[84,1],[96,1],[96,1],[96,1],[96,1],[55,1],[55,2],[99,1],[99,2],[119,1],[119,1],[119,1],[119,1],[43,1],[43,1],[43,1],[43,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1]],performAction:function(a,o,T,n,X,t,i2){var s=t.length-1;switch(X){case 5:n.parseDirective("%%{","open_directive");break;case 6:n.parseDirective(t[s],"type_directive");break;case 7:t[s]=t[s].trim().replace(/'/g,'"'),n.parseDirective(t[s],"arg_directive");break;case 8:n.parseDirective("}%%","close_directive","flowchart");break;case 10:this.$=[];break;case 11:(!Array.isArray(t[s])||t[s].length>0)&&t[s-1].push(t[s]),this.$=t[s-1];break;case 12:case 98:case 154:case 156:case 157:this.$=t[s];break;case 19:n.setDirection("TB"),this.$="TB";break;case 20:n.setDirection(t[s-1]),this.$=t[s-1];break;case 35:this.$=t[s-1].nodes;break;case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 41:this.$=n.addSubGraph(t[s-6],t[s-1],t[s-4]);break;case 42:this.$=n.addSubGraph(t[s-3],t[s-1],t[s-3]);break;case 43:this.$=n.addSubGraph(void 0,t[s-1],void 0);break;case 45:this.$=t[s].trim(),n.setAccTitle(this.$);break;case 46:case 47:this.$=t[s].trim(),n.setAccDescription(this.$);break;case 51:n.addLink(t[s-2].stmt,t[s],t[s-1]),this.$={stmt:t[s],nodes:t[s].concat(t[s-2].nodes)};break;case 52:n.addLink(t[s-3].stmt,t[s-1],t[s-2]),this.$={stmt:t[s-1],nodes:t[s-1].concat(t[s-3].nodes)};break;case 53:this.$={stmt:t[s-1],nodes:t[s-1]};break;case 54:this.$={stmt:t[s],nodes:t[s]};break;case 55:this.$=[t[s]];break;case 56:this.$=t[s-4].concat(t[s]);break;case 57:this.$=t[s];break;case 58:this.$=t[s-2],n.setClass(t[s-2],t[s]);break;case 59:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"square");break;case 60:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"doublecircle");break;case 61:this.$=t[s-5],n.addVertex(t[s-5],t[s-2],"circle");break;case 62:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"ellipse");break;case 63:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"stadium");break;case 64:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"subroutine");break;case 65:this.$=t[s-7],n.addVertex(t[s-7],t[s-1],"rect",void 0,void 0,void 0,Object.fromEntries([[t[s-5],t[s-3]]]));break;case 66:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"cylinder");break;case 67:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"round");break;case 68:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"diamond");break;case 69:this.$=t[s-5],n.addVertex(t[s-5],t[s-2],"hexagon");break;case 70:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"odd");break;case 71:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"trapezoid");break;case 72:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"inv_trapezoid");break;case 73:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"lean_right");break;case 74:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"lean_left");break;case 75:this.$=t[s],n.addVertex(t[s]);break;case 76:t[s-1].text=t[s],this.$=t[s-1];break;case 77:case 78:t[s-2].text=t[s-1],this.$=t[s-2];break;case 79:this.$=t[s];break;case 80:var l1=n.destructLink(t[s],t[s-2]);this.$={type:l1.type,stroke:l1.stroke,length:l1.length,text:t[s-1]};break;case 81:var l1=n.destructLink(t[s]);this.$={type:l1.type,stroke:l1.stroke,length:l1.length};break;case 82:this.$=t[s-1];break;case 83:this.$={text:t[s],type:"text"};break;case 84:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 85:this.$={text:t[s],type:"text"};break;case 86:this.$={text:t[s],type:"markdown"};break;case 99:case 155:this.$=t[s-1]+""+t[s];break;case 100:case 101:this.$=t[s-4],n.addClass(t[s-2],t[s]);break;case 102:this.$=t[s-4],n.setClass(t[s-2],t[s]);break;case 103:case 111:this.$=t[s-1],n.setClickEvent(t[s-1],t[s]);break;case 104:case 112:this.$=t[s-3],n.setClickEvent(t[s-3],t[s-2]),n.setTooltip(t[s-3],t[s]);break;case 105:this.$=t[s-2],n.setClickEvent(t[s-2],t[s-1],t[s]);break;case 106:this.$=t[s-4],n.setClickEvent(t[s-4],t[s-3],t[s-2]),n.setTooltip(t[s-4],t[s]);break;case 107:case 113:this.$=t[s-1],n.setLink(t[s-1],t[s]);break;case 108:case 114:this.$=t[s-3],n.setLink(t[s-3],t[s-2]),n.setTooltip(t[s-3],t[s]);break;case 109:case 115:this.$=t[s-3],n.setLink(t[s-3],t[s-2],t[s]);break;case 110:case 116:this.$=t[s-5],n.setLink(t[s-5],t[s-4],t[s]),n.setTooltip(t[s-5],t[s-2]);break;case 117:this.$=t[s-4],n.addVertex(t[s-2],void 0,void 0,t[s]);break;case 118:case 120:this.$=t[s-4],n.updateLink(t[s-2],t[s]);break;case 119:this.$=t[s-4],n.updateLink([t[s-2]],t[s]);break;case 121:this.$=t[s-8],n.updateLinkInterpolate([t[s-6]],t[s-2]),n.updateLink([t[s-6]],t[s]);break;case 122:this.$=t[s-8],n.updateLinkInterpolate(t[s-6],t[s-2]),n.updateLink(t[s-6],t[s]);break;case 123:this.$=t[s-6],n.updateLinkInterpolate([t[s-4]],t[s]);break;case 124:this.$=t[s-6],n.updateLinkInterpolate(t[s-4],t[s]);break;case 125:case 127:this.$=[t[s]];break;case 126:case 128:t[s-2].push(t[s]),this.$=t[s-2];break;case 130:this.$=t[s-1]+t[s];break;case 152:this.$=t[s];break;case 153:this.$=t[s-1]+""+t[s];break;case 158:this.$="v";break;case 159:this.$="-";break;case 160:this.$={stmt:"dir",value:"TB"};break;case 161:this.$={stmt:"dir",value:"BT"};break;case 162:this.$={stmt:"dir",value:"RL"};break;case 163:this.$={stmt:"dir",value:"LR"};break}},table:[{3:1,4:2,5:3,6:5,12:u,16:4,21:r,22:i,24:c},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:u,16:4,21:r,22:i,24:c},e(_,B,{17:11}),{7:12,13:[1,13]},{16:14,21:r,22:i,24:c},{16:15,21:r,22:i,24:c},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:u1,21:z,22:s1,23:f1,32:24,33:25,34:26,35:27,36:28,37:29,38:Y1,43:31,44:Q1,46:X1,48:s2,50:35,51:45,52:q,53:46,55:47,67:c1,68:m1,88:o2,89:l2,90:h2,91:A2,92:f2,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,120:p2,121:d2,122:E2,123:b2,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},{8:65,10:[1,66],15:j2},e([10,15],[2,6]),e(_,[2,17]),e(_,[2,18]),e(_,[2,19]),{20:[1,69],21:[1,70],22:u2,27:68,30:71},e(Q,[2,11]),e(Q,[2,12]),e(Q,[2,13]),e(Q,[2,14]),e(Q,[2,15]),e(Q,[2,16]),{9:73,20:p1,21:d1,23:E1,49:74,79:78,82:[1,79],83:[1,80]},{9:81,20:p1,21:d1,23:E1},{9:82,20:p1,21:d1,23:E1},{9:83,20:p1,21:d1,23:E1},{9:84,20:p1,21:d1,23:E1},{9:85,20:p1,21:d1,23:E1},{9:87,20:p1,21:d1,22:[1,86],23:E1},e(Q,[2,44]),{45:[1,88]},{47:[1,89]},e(Q,[2,47]),e(k2,[2,54],{30:90,22:u2}),{22:[1,91]},{22:[1,92]},{22:[1,93]},{22:[1,94]},{26:r1,52:l,67:h,68:A,85:[1,98],93:i1,99:97,100:[1,95],102:[1,96],107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},e(Q,[2,160]),e(Q,[2,161]),e(Q,[2,162]),e(Q,[2,163]),e(D2,[2,55]),e(D2,[2,57],{54:[1,117]}),e(t1,[2,75],{118:130,40:[1,118],52:q,56:[1,119],58:[1,120],60:[1,121],62:[1,122],64:[1,123],66:[1,124],67:c1,68:m1,70:[1,125],72:[1,126],74:[1,127],75:[1,128],77:[1,129],93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1}),e(Z,[2,152]),e(Z,[2,177]),e(Z,[2,178]),e(Z,[2,179]),e(Z,[2,180]),e(Z,[2,181]),e(Z,[2,182]),e(Z,[2,183]),e(Z,[2,184]),e(Z,[2,185]),e(Z,[2,186]),e(Z,[2,187]),e(Z,[2,188]),e(Z,[2,189]),e(Z,[2,190]),e(Z,[2,191]),e(Z,[2,192]),{9:131,20:p1,21:d1,23:E1},{11:132,14:[1,133]},e(Y,[2,8]),e(_,[2,20]),e(_,[2,26]),e(_,[2,27]),{21:[1,134]},e(W2,[2,34],{30:135,22:u2}),e(Q,[2,35]),{50:136,51:45,52:q,53:46,55:47,67:c1,68:m1,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},e(v2,[2,48]),e(v2,[2,49]),e(v2,[2,50]),e(r2,[2,79],{80:137,69:[1,139],81:[1,138]}),{22:S,24:m,26:v,38:V,39:140,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e([52,67,68,69,81,93,97,107,108,111,113,114,124,125,126,127,128,129],[2,81]),e(Q,[2,36]),e(Q,[2,37]),e(Q,[2,38]),e(Q,[2,39]),e(Q,[2,40]),{22:S,24:m,26:v,38:V,39:165,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(V2,B,{17:166}),e(Q,[2,45]),e(Q,[2,46]),e(k2,[2,53],{52:Y2}),{26:r1,52:l,67:h,68:A,93:i1,99:168,104:[1,169],107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},{97:[1,170],105:171,107:[1,172]},{26:r1,52:l,67:h,68:A,93:i1,97:[1,173],99:174,107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},{26:r1,52:l,67:h,68:A,93:i1,99:175,107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},e(Y,[2,103],{22:[1,176],101:[1,177]}),e(Y,[2,107],{22:[1,178]}),e(Y,[2,111],{117:101,119:180,22:[1,179],26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,124:b,125:k,126:D,127:g,128:F,129:C}),e(Y,[2,113],{22:[1,181]}),e($1,[2,154]),e($1,[2,156]),e($1,[2,157]),e($1,[2,158]),e($1,[2,159]),e(y,[2,164]),e(y,[2,165]),e(y,[2,166]),e(y,[2,167]),e(y,[2,168]),e(y,[2,169]),e(y,[2,170]),e(y,[2,171]),e(y,[2,172]),e(y,[2,173]),e(y,[2,174]),e(y,[2,175]),e(y,[2,176]),{52:q,55:182,67:c1,68:m1,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},{22:S,24:m,26:v,38:V,39:183,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:184,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:186,42:x,52:l,58:[1,185],67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:187,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:188,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:189,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{67:[1,190]},{22:S,24:m,26:v,38:V,39:191,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:192,42:x,52:l,67:h,68:A,72:[1,193],74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:194,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:195,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:196,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(Z,[2,153]),e(H2,[2,3]),{8:197,15:j2},{15:[2,7]},e(_,[2,28]),e(W2,[2,33]),e(k2,[2,51],{30:198,22:u2}),e(r2,[2,76],{22:[1,199]}),{22:[1,200]},{22:S,24:m,26:v,38:V,39:201,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,74:R,82:L,83:[1,202],84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(y,[2,83]),e(y,[2,85]),e(y,[2,86]),e(y,[2,142]),e(y,[2,143]),e(y,[2,144]),e(y,[2,145]),e(y,[2,146]),e(y,[2,147]),e(y,[2,148]),e(y,[2,149]),e(y,[2,150]),e(y,[2,151]),e(y,[2,87]),e(y,[2,88]),e(y,[2,89]),e(y,[2,90]),e(y,[2,91]),e(y,[2,92]),e(y,[2,93]),e(y,[2,94]),e(y,[2,95]),e(y,[2,96]),e(y,[2,97]),{9:205,20:p1,21:d1,22:S,23:E1,24:m,26:v,38:V,40:[1,204],42:x,52:l,67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{18:18,19:19,20:u1,21:z,22:s1,23:f1,32:24,33:25,34:26,35:27,36:28,37:29,38:Y1,42:[1,206],43:31,44:Q1,46:X1,48:s2,50:35,51:45,52:q,53:46,55:47,67:c1,68:m1,88:o2,89:l2,90:h2,91:A2,92:f2,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,120:p2,121:d2,122:E2,123:b2,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},{22:u2,30:207},{22:[1,208],26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,117:101,119:180,124:b,125:k,126:D,127:g,128:F,129:C},{22:[1,209]},{22:[1,210]},{22:[1,211],108:[1,212]},e(z2,[2,125]),{22:[1,213]},{22:[1,214],26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,117:101,119:180,124:b,125:k,126:D,127:g,128:F,129:C},{22:[1,215],26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,117:101,119:180,124:b,125:k,126:D,127:g,128:F,129:C},{85:[1,216]},e(Y,[2,105],{22:[1,217]}),{85:[1,218],103:[1,219]},{85:[1,220]},e($1,[2,155]),{85:[1,221],103:[1,222]},e(D2,[2,58],{118:130,52:q,67:c1,68:m1,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1}),{22:S,24:m,26:v,38:V,41:[1,223],42:x,52:l,67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,57:[1,224],67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:225,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,59:[1,226],67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,61:[1,227],67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,63:[1,228],67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,65:[1,229],67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{68:[1,230]},{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,71:[1,231],74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,73:[1,232],74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:233,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,41:[1,234],42:x,52:l,67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,74:R,76:[1,235],78:[1,236],82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,74:R,76:[1,238],78:[1,237],82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{9:239,20:p1,21:d1,23:E1},e(k2,[2,52],{52:Y2}),e(r2,[2,78]),e(r2,[2,77]),{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,69:[1,240],74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(r2,[2,80]),e(y,[2,84]),{22:S,24:m,26:v,38:V,39:241,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(V2,B,{17:242}),e(Q,[2,43]),{51:243,52:q,53:46,55:47,67:c1,68:m1,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},{22:b1,67:k1,68:D1,88:g1,98:244,104:F1,107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{22:b1,67:k1,68:D1,88:g1,98:258,104:F1,107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{22:b1,67:k1,68:D1,88:g1,98:259,104:F1,106:[1,260],107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{22:b1,67:k1,68:D1,88:g1,98:261,104:F1,106:[1,262],107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{107:[1,263]},{22:b1,67:k1,68:D1,88:g1,98:264,104:F1,107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{22:b1,67:k1,68:D1,88:g1,98:265,104:F1,107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{26:r1,52:l,67:h,68:A,93:i1,99:266,107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},e(Y,[2,104]),{85:[1,267]},e(Y,[2,108],{22:[1,268]}),e(Y,[2,109]),e(Y,[2,112]),e(Y,[2,114],{22:[1,269]}),e(Y,[2,115]),e(t1,[2,59]),e(t1,[2,60]),{22:S,24:m,26:v,38:V,42:x,52:l,59:[1,270],67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(t1,[2,67]),e(t1,[2,62]),e(t1,[2,63]),e(t1,[2,64]),{67:[1,271]},e(t1,[2,66]),e(t1,[2,68]),{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,73:[1,272],74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(t1,[2,70]),e(t1,[2,71]),e(t1,[2,73]),e(t1,[2,72]),e(t1,[2,74]),e(H2,[2,4]),e([22,52,67,68,93,97,107,108,111,113,114,124,125,126,127,128,129],[2,82]),{22:S,24:m,26:v,38:V,41:[1,273],42:x,52:l,67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{18:18,19:19,20:u1,21:z,22:s1,23:f1,32:24,33:25,34:26,35:27,36:28,37:29,38:Y1,42:[1,274],43:31,44:Q1,46:X1,48:s2,50:35,51:45,52:q,53:46,55:47,67:c1,68:m1,88:o2,89:l2,90:h2,91:A2,92:f2,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,120:p2,121:d2,122:E2,123:b2,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},e(D2,[2,56]),e(Y,[2,117],{108:H1}),e(Q2,[2,127],{110:276,22:b1,67:k1,68:D1,88:g1,104:F1,107:C1,111:_1,112:B1,113:T1,114:y1,115:S1}),e(o1,[2,129]),e(o1,[2,131]),e(o1,[2,132]),e(o1,[2,133]),e(o1,[2,134]),e(o1,[2,135]),e(o1,[2,136]),e(o1,[2,137]),e(o1,[2,138]),e(o1,[2,139]),e(o1,[2,140]),e(o1,[2,141]),e(Y,[2,118],{108:H1}),e(Y,[2,119],{108:H1}),{22:[1,277]},e(Y,[2,120],{108:H1}),{22:[1,278]},e(z2,[2,126]),e(Y,[2,100],{108:H1}),e(Y,[2,101],{108:H1}),e(Y,[2,102],{117:101,119:180,26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,124:b,125:k,126:D,127:g,128:F,129:C}),e(Y,[2,106]),{103:[1,279]},{103:[1,280]},{59:[1,281]},{69:[1,282]},{73:[1,283]},{9:284,20:p1,21:d1,23:E1},e(Q,[2,42]),{22:b1,67:k1,68:D1,88:g1,104:F1,107:C1,109:285,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},e(o1,[2,130]),{26:r1,52:l,67:h,68:A,93:i1,99:286,107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},{26:r1,52:l,67:h,68:A,93:i1,99:287,107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},e(Y,[2,110]),e(Y,[2,116]),e(t1,[2,61]),{22:S,24:m,26:v,38:V,39:288,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(t1,[2,69]),e(V2,B,{17:289}),e(Q2,[2,128],{110:276,22:b1,67:k1,68:D1,88:g1,104:F1,107:C1,111:_1,112:B1,113:T1,114:y1,115:S1}),e(Y,[2,123],{117:101,119:180,22:[1,290],26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,124:b,125:k,126:D,127:g,128:F,129:C}),e(Y,[2,124],{117:101,119:180,22:[1,291],26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,124:b,125:k,126:D,127:g,128:F,129:C}),{22:S,24:m,26:v,38:V,41:[1,292],42:x,52:l,67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{18:18,19:19,20:u1,21:z,22:s1,23:f1,32:24,33:25,34:26,35:27,36:28,37:29,38:Y1,42:[1,293],43:31,44:Q1,46:X1,48:s2,50:35,51:45,52:q,53:46,55:47,67:c1,68:m1,88:o2,89:l2,90:h2,91:A2,92:f2,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,120:p2,121:d2,122:E2,123:b2,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},{22:b1,67:k1,68:D1,88:g1,98:294,104:F1,107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{22:b1,67:k1,68:D1,88:g1,98:295,104:F1,107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},e(t1,[2,65]),e(Q,[2,41]),e(Y,[2,121],{108:H1}),e(Y,[2,122],{108:H1})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],133:[2,7]},parseError:function(a,o){if(o.recoverable)this.trace(a);else{var T=new Error(a);throw T.hash=o,T}},parse:function(a){var o=this,T=[0],n=[],X=[null],t=[],i2=this.table,s="",l1=0,X2=0,xe=2,q2=1,Re=t.slice.call(arguments,1),e1=Object.create(this.lexer),q1={yy:{}};for(var L2 in this.yy)Object.prototype.hasOwnProperty.call(this.yy,L2)&&(q1.yy[L2]=this.yy[L2]);e1.setInput(a,q1.yy),q1.yy.lexer=e1,q1.yy.parser=this,typeof e1.yylloc>"u"&&(e1.yylloc={});var I2=e1.yylloc;t.push(I2);var Le=e1.options&&e1.options.ranges;typeof q1.yy.parseError=="function"?this.parseError=q1.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ie(){var j1;return j1=n.pop()||e1.lex()||q2,typeof j1!="number"&&(j1 instanceof Array&&(n=j1,j1=n.pop()),j1=o.symbols_[j1]||j1),j1}for(var a1,Z1,h1,N2,e2={},g2,K1,Z2,F2;;){if(Z1=T[T.length-1],this.defaultActions[Z1]?h1=this.defaultActions[Z1]:((a1===null||typeof a1>"u")&&(a1=Ie()),h1=i2[Z1]&&i2[Z1][a1]),typeof h1>"u"||!h1.length||!h1[0]){var O2="";F2=[];for(g2 in i2[Z1])this.terminals_[g2]&&g2>xe&&F2.push("'"+this.terminals_[g2]+"'");e1.showPosition?O2="Parse error on line "+(l1+1)+`:
+import{c as U2,o as Ne,s as Oe,g as Pe,a as we,b as Ue,p as Me,q as Ge,m as Ke,l as M2,u as G2,r as je,j as We,h as n2}from"./intro.stories-8786330d.js";var P2=function(){var e=function(z1,a,o,T){for(o=o||{},T=z1.length;T--;o[z1[T]]=a);return o},u=[1,9],r=[1,7],i=[1,6],c=[1,8],_=[1,20,21,22,23,38,44,46,48,52,67,68,88,89,90,91,92,93,97,107,108,111,113,114,120,121,122,123,124,125,126,127,128,129],B=[2,10],u1=[1,20],z=[1,21],s1=[1,22],f1=[1,23],Y1=[1,30],Q1=[1,32],X1=[1,33],s2=[1,34],q=[1,63],c1=[1,49],m1=[1,53],o2=[1,36],l2=[1,37],h2=[1,38],A2=[1,39],f2=[1,40],v1=[1,57],V1=[1,64],x1=[1,52],R1=[1,54],L1=[1,56],I1=[1,60],N1=[1,61],p2=[1,41],d2=[1,42],E2=[1,43],b2=[1,44],O1=[1,62],P1=[1,51],w1=[1,55],U1=[1,58],M1=[1,59],G1=[1,50],j2=[1,67],u2=[1,72],Q=[1,20,21,22,23,38,42,44,46,48,52,67,68,88,89,90,91,92,93,97,107,108,111,113,114,120,121,122,123,124,125,126,127,128,129],p1=[1,76],d1=[1,75],E1=[1,77],k2=[20,21,23,82,83],r1=[1,100],l=[1,105],h=[1,108],A=[1,109],i1=[1,102],f=[1,107],p=[1,110],n1=[1,103],d=[1,115],E=[1,114],b=[1,104],k=[1,106],D=[1,111],g=[1,112],F=[1,113],C=[1,116],D2=[20,21,22,23,82,83],t1=[20,21,22,23,54,82,83],Z=[20,21,22,23,40,52,54,56,58,60,62,64,66,67,68,70,72,74,75,77,82,83,93,97,107,108,111,113,114,124,125,126,127,128,129],Y=[20,21,23],W2=[20,21,23,52,67,68,82,83,93,97,107,108,111,113,114,124,125,126,127,128,129],v2=[1,12,20,21,22,23,24,38,42,44,46,48,52,67,68,88,89,90,91,92,93,97,107,108,111,113,114,120,121,122,123,124,125,126,127,128,129],r2=[52,67,68,93,97,107,108,111,113,114,124,125,126,127,128,129],S=[1,151],m=[1,159],v=[1,160],V=[1,161],x=[1,162],R=[1,146],L=[1,147],J=[1,142],$=[1,143],I=[1,154],N=[1,155],O=[1,156],P=[1,157],w=[1,158],U=[1,163],M=[1,164],G=[1,149],K=[1,152],j=[1,148],W=[1,145],V2=[20,21,22,23,38,42,44,46,48,52,67,68,88,89,90,91,92,93,97,107,108,111,113,114,120,121,122,123,124,125,126,127,128,129],Y2=[1,167],$1=[20,21,22,23,26,52,67,68,93,107,108,111,113,114,124,125,126,127,128,129],y=[20,21,22,23,24,26,38,40,41,42,52,57,59,61,63,65,67,68,69,71,73,74,76,78,82,83,88,89,90,91,92,93,94,97,107,108,111,113,114,115,116,124,125,126,127,128,129],H2=[12,21,22,24],z2=[22,108],b1=[1,252],k1=[1,247],D1=[1,248],g1=[1,256],F1=[1,253],C1=[1,250],_1=[1,249],B1=[1,251],T1=[1,254],y1=[1,255],S1=[1,257],H1=[1,275],Q2=[20,21,23,108],o1=[20,21,22,23,67,68,88,104,107,108,111,112,113,114,115],x2={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,acc_title:44,acc_title_value:45,acc_descr:46,acc_descr_value:47,acc_descr_multiline_value:48,link:49,node:50,styledVertex:51,AMP:52,vertex:53,STYLE_SEPARATOR:54,idString:55,DOUBLECIRCLESTART:56,DOUBLECIRCLEEND:57,PS:58,PE:59,"(-":60,"-)":61,STADIUMSTART:62,STADIUMEND:63,SUBROUTINESTART:64,SUBROUTINEEND:65,VERTEX_WITH_PROPS_START:66,ALPHA:67,COLON:68,PIPE:69,CYLINDERSTART:70,CYLINDEREND:71,DIAMOND_START:72,DIAMOND_STOP:73,TAGEND:74,TRAPSTART:75,TRAPEND:76,INVTRAPSTART:77,INVTRAPEND:78,linkStatement:79,arrowText:80,TESTSTR:81,START_LINK:82,LINK:83,textToken:84,STR:85,MD_STR:86,keywords:87,STYLE:88,LINKSTYLE:89,CLASSDEF:90,CLASS:91,CLICK:92,DOWN:93,UP:94,textNoTags:95,textNoTagsToken:96,DEFAULT:97,stylesOpt:98,alphaNum:99,CALLBACKNAME:100,CALLBACKARGS:101,HREF:102,LINK_TARGET:103,HEX:104,numList:105,INTERPOLATE:106,NUM:107,COMMA:108,style:109,styleComponent:110,MINUS:111,UNIT:112,BRKT:113,DOT:114,PCT:115,TAGSTART:116,alphaNumToken:117,idStringToken:118,alphaNumStatement:119,direction_tb:120,direction_bt:121,direction_rl:122,direction_lr:123,PUNCTUATION:124,UNICODE_TEXT:125,PLUS:126,EQUALS:127,MULT:128,UNDERSCORE:129,graphCodeTokens:130,ARROW_CROSS:131,ARROW_POINT:132,ARROW_CIRCLE:133,ARROW_OPEN:134,QUOTE:135,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",44:"acc_title",45:"acc_title_value",46:"acc_descr",47:"acc_descr_value",48:"acc_descr_multiline_value",52:"AMP",54:"STYLE_SEPARATOR",56:"DOUBLECIRCLESTART",57:"DOUBLECIRCLEEND",58:"PS",59:"PE",60:"(-",61:"-)",62:"STADIUMSTART",63:"STADIUMEND",64:"SUBROUTINESTART",65:"SUBROUTINEEND",66:"VERTEX_WITH_PROPS_START",67:"ALPHA",68:"COLON",69:"PIPE",70:"CYLINDERSTART",71:"CYLINDEREND",72:"DIAMOND_START",73:"DIAMOND_STOP",74:"TAGEND",75:"TRAPSTART",76:"TRAPEND",77:"INVTRAPSTART",78:"INVTRAPEND",81:"TESTSTR",82:"START_LINK",83:"LINK",85:"STR",86:"MD_STR",88:"STYLE",89:"LINKSTYLE",90:"CLASSDEF",91:"CLASS",92:"CLICK",93:"DOWN",94:"UP",97:"DEFAULT",100:"CALLBACKNAME",101:"CALLBACKARGS",102:"HREF",103:"LINK_TARGET",104:"HEX",106:"INTERPOLATE",107:"NUM",108:"COMMA",111:"MINUS",112:"UNIT",113:"BRKT",114:"DOT",115:"PCT",116:"TAGSTART",120:"direction_tb",121:"direction_bt",122:"direction_rl",123:"direction_lr",124:"PUNCTUATION",125:"UNICODE_TEXT",126:"PLUS",127:"EQUALS",128:"MULT",129:"UNDERSCORE",131:"ARROW_CROSS",132:"ARROW_POINT",133:"ARROW_CIRCLE",134:"ARROW_OPEN",135:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[19,2],[19,2],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[50,1],[50,5],[51,1],[51,3],[53,4],[53,4],[53,6],[53,4],[53,4],[53,4],[53,8],[53,4],[53,4],[53,4],[53,6],[53,4],[53,4],[53,4],[53,4],[53,4],[53,1],[49,2],[49,3],[49,3],[49,1],[49,3],[79,1],[80,3],[39,1],[39,2],[39,1],[39,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[95,1],[95,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[105,1],[105,3],[98,1],[98,3],[109,1],[109,2],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[84,1],[84,1],[84,1],[84,1],[84,1],[84,1],[96,1],[96,1],[96,1],[96,1],[55,1],[55,2],[99,1],[99,2],[119,1],[119,1],[119,1],[119,1],[43,1],[43,1],[43,1],[43,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[118,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1],[130,1]],performAction:function(a,o,T,n,X,t,i2){var s=t.length-1;switch(X){case 5:n.parseDirective("%%{","open_directive");break;case 6:n.parseDirective(t[s],"type_directive");break;case 7:t[s]=t[s].trim().replace(/'/g,'"'),n.parseDirective(t[s],"arg_directive");break;case 8:n.parseDirective("}%%","close_directive","flowchart");break;case 10:this.$=[];break;case 11:(!Array.isArray(t[s])||t[s].length>0)&&t[s-1].push(t[s]),this.$=t[s-1];break;case 12:case 98:case 154:case 156:case 157:this.$=t[s];break;case 19:n.setDirection("TB"),this.$="TB";break;case 20:n.setDirection(t[s-1]),this.$=t[s-1];break;case 35:this.$=t[s-1].nodes;break;case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 41:this.$=n.addSubGraph(t[s-6],t[s-1],t[s-4]);break;case 42:this.$=n.addSubGraph(t[s-3],t[s-1],t[s-3]);break;case 43:this.$=n.addSubGraph(void 0,t[s-1],void 0);break;case 45:this.$=t[s].trim(),n.setAccTitle(this.$);break;case 46:case 47:this.$=t[s].trim(),n.setAccDescription(this.$);break;case 51:n.addLink(t[s-2].stmt,t[s],t[s-1]),this.$={stmt:t[s],nodes:t[s].concat(t[s-2].nodes)};break;case 52:n.addLink(t[s-3].stmt,t[s-1],t[s-2]),this.$={stmt:t[s-1],nodes:t[s-1].concat(t[s-3].nodes)};break;case 53:this.$={stmt:t[s-1],nodes:t[s-1]};break;case 54:this.$={stmt:t[s],nodes:t[s]};break;case 55:this.$=[t[s]];break;case 56:this.$=t[s-4].concat(t[s]);break;case 57:this.$=t[s];break;case 58:this.$=t[s-2],n.setClass(t[s-2],t[s]);break;case 59:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"square");break;case 60:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"doublecircle");break;case 61:this.$=t[s-5],n.addVertex(t[s-5],t[s-2],"circle");break;case 62:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"ellipse");break;case 63:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"stadium");break;case 64:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"subroutine");break;case 65:this.$=t[s-7],n.addVertex(t[s-7],t[s-1],"rect",void 0,void 0,void 0,Object.fromEntries([[t[s-5],t[s-3]]]));break;case 66:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"cylinder");break;case 67:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"round");break;case 68:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"diamond");break;case 69:this.$=t[s-5],n.addVertex(t[s-5],t[s-2],"hexagon");break;case 70:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"odd");break;case 71:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"trapezoid");break;case 72:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"inv_trapezoid");break;case 73:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"lean_right");break;case 74:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"lean_left");break;case 75:this.$=t[s],n.addVertex(t[s]);break;case 76:t[s-1].text=t[s],this.$=t[s-1];break;case 77:case 78:t[s-2].text=t[s-1],this.$=t[s-2];break;case 79:this.$=t[s];break;case 80:var l1=n.destructLink(t[s],t[s-2]);this.$={type:l1.type,stroke:l1.stroke,length:l1.length,text:t[s-1]};break;case 81:var l1=n.destructLink(t[s]);this.$={type:l1.type,stroke:l1.stroke,length:l1.length};break;case 82:this.$=t[s-1];break;case 83:this.$={text:t[s],type:"text"};break;case 84:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 85:this.$={text:t[s],type:"text"};break;case 86:this.$={text:t[s],type:"markdown"};break;case 99:case 155:this.$=t[s-1]+""+t[s];break;case 100:case 101:this.$=t[s-4],n.addClass(t[s-2],t[s]);break;case 102:this.$=t[s-4],n.setClass(t[s-2],t[s]);break;case 103:case 111:this.$=t[s-1],n.setClickEvent(t[s-1],t[s]);break;case 104:case 112:this.$=t[s-3],n.setClickEvent(t[s-3],t[s-2]),n.setTooltip(t[s-3],t[s]);break;case 105:this.$=t[s-2],n.setClickEvent(t[s-2],t[s-1],t[s]);break;case 106:this.$=t[s-4],n.setClickEvent(t[s-4],t[s-3],t[s-2]),n.setTooltip(t[s-4],t[s]);break;case 107:case 113:this.$=t[s-1],n.setLink(t[s-1],t[s]);break;case 108:case 114:this.$=t[s-3],n.setLink(t[s-3],t[s-2]),n.setTooltip(t[s-3],t[s]);break;case 109:case 115:this.$=t[s-3],n.setLink(t[s-3],t[s-2],t[s]);break;case 110:case 116:this.$=t[s-5],n.setLink(t[s-5],t[s-4],t[s]),n.setTooltip(t[s-5],t[s-2]);break;case 117:this.$=t[s-4],n.addVertex(t[s-2],void 0,void 0,t[s]);break;case 118:case 120:this.$=t[s-4],n.updateLink(t[s-2],t[s]);break;case 119:this.$=t[s-4],n.updateLink([t[s-2]],t[s]);break;case 121:this.$=t[s-8],n.updateLinkInterpolate([t[s-6]],t[s-2]),n.updateLink([t[s-6]],t[s]);break;case 122:this.$=t[s-8],n.updateLinkInterpolate(t[s-6],t[s-2]),n.updateLink(t[s-6],t[s]);break;case 123:this.$=t[s-6],n.updateLinkInterpolate([t[s-4]],t[s]);break;case 124:this.$=t[s-6],n.updateLinkInterpolate(t[s-4],t[s]);break;case 125:case 127:this.$=[t[s]];break;case 126:case 128:t[s-2].push(t[s]),this.$=t[s-2];break;case 130:this.$=t[s-1]+t[s];break;case 152:this.$=t[s];break;case 153:this.$=t[s-1]+""+t[s];break;case 158:this.$="v";break;case 159:this.$="-";break;case 160:this.$={stmt:"dir",value:"TB"};break;case 161:this.$={stmt:"dir",value:"BT"};break;case 162:this.$={stmt:"dir",value:"RL"};break;case 163:this.$={stmt:"dir",value:"LR"};break}},table:[{3:1,4:2,5:3,6:5,12:u,16:4,21:r,22:i,24:c},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:u,16:4,21:r,22:i,24:c},e(_,B,{17:11}),{7:12,13:[1,13]},{16:14,21:r,22:i,24:c},{16:15,21:r,22:i,24:c},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:u1,21:z,22:s1,23:f1,32:24,33:25,34:26,35:27,36:28,37:29,38:Y1,43:31,44:Q1,46:X1,48:s2,50:35,51:45,52:q,53:46,55:47,67:c1,68:m1,88:o2,89:l2,90:h2,91:A2,92:f2,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,120:p2,121:d2,122:E2,123:b2,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},{8:65,10:[1,66],15:j2},e([10,15],[2,6]),e(_,[2,17]),e(_,[2,18]),e(_,[2,19]),{20:[1,69],21:[1,70],22:u2,27:68,30:71},e(Q,[2,11]),e(Q,[2,12]),e(Q,[2,13]),e(Q,[2,14]),e(Q,[2,15]),e(Q,[2,16]),{9:73,20:p1,21:d1,23:E1,49:74,79:78,82:[1,79],83:[1,80]},{9:81,20:p1,21:d1,23:E1},{9:82,20:p1,21:d1,23:E1},{9:83,20:p1,21:d1,23:E1},{9:84,20:p1,21:d1,23:E1},{9:85,20:p1,21:d1,23:E1},{9:87,20:p1,21:d1,22:[1,86],23:E1},e(Q,[2,44]),{45:[1,88]},{47:[1,89]},e(Q,[2,47]),e(k2,[2,54],{30:90,22:u2}),{22:[1,91]},{22:[1,92]},{22:[1,93]},{22:[1,94]},{26:r1,52:l,67:h,68:A,85:[1,98],93:i1,99:97,100:[1,95],102:[1,96],107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},e(Q,[2,160]),e(Q,[2,161]),e(Q,[2,162]),e(Q,[2,163]),e(D2,[2,55]),e(D2,[2,57],{54:[1,117]}),e(t1,[2,75],{118:130,40:[1,118],52:q,56:[1,119],58:[1,120],60:[1,121],62:[1,122],64:[1,123],66:[1,124],67:c1,68:m1,70:[1,125],72:[1,126],74:[1,127],75:[1,128],77:[1,129],93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1}),e(Z,[2,152]),e(Z,[2,177]),e(Z,[2,178]),e(Z,[2,179]),e(Z,[2,180]),e(Z,[2,181]),e(Z,[2,182]),e(Z,[2,183]),e(Z,[2,184]),e(Z,[2,185]),e(Z,[2,186]),e(Z,[2,187]),e(Z,[2,188]),e(Z,[2,189]),e(Z,[2,190]),e(Z,[2,191]),e(Z,[2,192]),{9:131,20:p1,21:d1,23:E1},{11:132,14:[1,133]},e(Y,[2,8]),e(_,[2,20]),e(_,[2,26]),e(_,[2,27]),{21:[1,134]},e(W2,[2,34],{30:135,22:u2}),e(Q,[2,35]),{50:136,51:45,52:q,53:46,55:47,67:c1,68:m1,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},e(v2,[2,48]),e(v2,[2,49]),e(v2,[2,50]),e(r2,[2,79],{80:137,69:[1,139],81:[1,138]}),{22:S,24:m,26:v,38:V,39:140,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e([52,67,68,69,81,93,97,107,108,111,113,114,124,125,126,127,128,129],[2,81]),e(Q,[2,36]),e(Q,[2,37]),e(Q,[2,38]),e(Q,[2,39]),e(Q,[2,40]),{22:S,24:m,26:v,38:V,39:165,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(V2,B,{17:166}),e(Q,[2,45]),e(Q,[2,46]),e(k2,[2,53],{52:Y2}),{26:r1,52:l,67:h,68:A,93:i1,99:168,104:[1,169],107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},{97:[1,170],105:171,107:[1,172]},{26:r1,52:l,67:h,68:A,93:i1,97:[1,173],99:174,107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},{26:r1,52:l,67:h,68:A,93:i1,99:175,107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},e(Y,[2,103],{22:[1,176],101:[1,177]}),e(Y,[2,107],{22:[1,178]}),e(Y,[2,111],{117:101,119:180,22:[1,179],26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,124:b,125:k,126:D,127:g,128:F,129:C}),e(Y,[2,113],{22:[1,181]}),e($1,[2,154]),e($1,[2,156]),e($1,[2,157]),e($1,[2,158]),e($1,[2,159]),e(y,[2,164]),e(y,[2,165]),e(y,[2,166]),e(y,[2,167]),e(y,[2,168]),e(y,[2,169]),e(y,[2,170]),e(y,[2,171]),e(y,[2,172]),e(y,[2,173]),e(y,[2,174]),e(y,[2,175]),e(y,[2,176]),{52:q,55:182,67:c1,68:m1,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},{22:S,24:m,26:v,38:V,39:183,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:184,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:186,42:x,52:l,58:[1,185],67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:187,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:188,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:189,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{67:[1,190]},{22:S,24:m,26:v,38:V,39:191,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:192,42:x,52:l,67:h,68:A,72:[1,193],74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:194,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:195,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:196,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(Z,[2,153]),e(H2,[2,3]),{8:197,15:j2},{15:[2,7]},e(_,[2,28]),e(W2,[2,33]),e(k2,[2,51],{30:198,22:u2}),e(r2,[2,76],{22:[1,199]}),{22:[1,200]},{22:S,24:m,26:v,38:V,39:201,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,74:R,82:L,83:[1,202],84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(y,[2,83]),e(y,[2,85]),e(y,[2,86]),e(y,[2,142]),e(y,[2,143]),e(y,[2,144]),e(y,[2,145]),e(y,[2,146]),e(y,[2,147]),e(y,[2,148]),e(y,[2,149]),e(y,[2,150]),e(y,[2,151]),e(y,[2,87]),e(y,[2,88]),e(y,[2,89]),e(y,[2,90]),e(y,[2,91]),e(y,[2,92]),e(y,[2,93]),e(y,[2,94]),e(y,[2,95]),e(y,[2,96]),e(y,[2,97]),{9:205,20:p1,21:d1,22:S,23:E1,24:m,26:v,38:V,40:[1,204],42:x,52:l,67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{18:18,19:19,20:u1,21:z,22:s1,23:f1,32:24,33:25,34:26,35:27,36:28,37:29,38:Y1,42:[1,206],43:31,44:Q1,46:X1,48:s2,50:35,51:45,52:q,53:46,55:47,67:c1,68:m1,88:o2,89:l2,90:h2,91:A2,92:f2,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,120:p2,121:d2,122:E2,123:b2,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},{22:u2,30:207},{22:[1,208],26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,117:101,119:180,124:b,125:k,126:D,127:g,128:F,129:C},{22:[1,209]},{22:[1,210]},{22:[1,211],108:[1,212]},e(z2,[2,125]),{22:[1,213]},{22:[1,214],26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,117:101,119:180,124:b,125:k,126:D,127:g,128:F,129:C},{22:[1,215],26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,117:101,119:180,124:b,125:k,126:D,127:g,128:F,129:C},{85:[1,216]},e(Y,[2,105],{22:[1,217]}),{85:[1,218],103:[1,219]},{85:[1,220]},e($1,[2,155]),{85:[1,221],103:[1,222]},e(D2,[2,58],{118:130,52:q,67:c1,68:m1,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1}),{22:S,24:m,26:v,38:V,41:[1,223],42:x,52:l,67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,57:[1,224],67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:225,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,59:[1,226],67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,61:[1,227],67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,63:[1,228],67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,65:[1,229],67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{68:[1,230]},{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,71:[1,231],74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,73:[1,232],74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,39:233,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,41:[1,234],42:x,52:l,67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,74:R,76:[1,235],78:[1,236],82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,74:R,76:[1,238],78:[1,237],82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{9:239,20:p1,21:d1,23:E1},e(k2,[2,52],{52:Y2}),e(r2,[2,78]),e(r2,[2,77]),{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,69:[1,240],74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(r2,[2,80]),e(y,[2,84]),{22:S,24:m,26:v,38:V,39:241,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(V2,B,{17:242}),e(Q,[2,43]),{51:243,52:q,53:46,55:47,67:c1,68:m1,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},{22:b1,67:k1,68:D1,88:g1,98:244,104:F1,107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{22:b1,67:k1,68:D1,88:g1,98:258,104:F1,107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{22:b1,67:k1,68:D1,88:g1,98:259,104:F1,106:[1,260],107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{22:b1,67:k1,68:D1,88:g1,98:261,104:F1,106:[1,262],107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{107:[1,263]},{22:b1,67:k1,68:D1,88:g1,98:264,104:F1,107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{22:b1,67:k1,68:D1,88:g1,98:265,104:F1,107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{26:r1,52:l,67:h,68:A,93:i1,99:266,107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},e(Y,[2,104]),{85:[1,267]},e(Y,[2,108],{22:[1,268]}),e(Y,[2,109]),e(Y,[2,112]),e(Y,[2,114],{22:[1,269]}),e(Y,[2,115]),e(t1,[2,59]),e(t1,[2,60]),{22:S,24:m,26:v,38:V,42:x,52:l,59:[1,270],67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(t1,[2,67]),e(t1,[2,62]),e(t1,[2,63]),e(t1,[2,64]),{67:[1,271]},e(t1,[2,66]),e(t1,[2,68]),{22:S,24:m,26:v,38:V,42:x,52:l,67:h,68:A,73:[1,272],74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(t1,[2,70]),e(t1,[2,71]),e(t1,[2,73]),e(t1,[2,72]),e(t1,[2,74]),e(H2,[2,4]),e([22,52,67,68,93,97,107,108,111,113,114,124,125,126,127,128,129],[2,82]),{22:S,24:m,26:v,38:V,41:[1,273],42:x,52:l,67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{18:18,19:19,20:u1,21:z,22:s1,23:f1,32:24,33:25,34:26,35:27,36:28,37:29,38:Y1,42:[1,274],43:31,44:Q1,46:X1,48:s2,50:35,51:45,52:q,53:46,55:47,67:c1,68:m1,88:o2,89:l2,90:h2,91:A2,92:f2,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,120:p2,121:d2,122:E2,123:b2,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},e(D2,[2,56]),e(Y,[2,117],{108:H1}),e(Q2,[2,127],{110:276,22:b1,67:k1,68:D1,88:g1,104:F1,107:C1,111:_1,112:B1,113:T1,114:y1,115:S1}),e(o1,[2,129]),e(o1,[2,131]),e(o1,[2,132]),e(o1,[2,133]),e(o1,[2,134]),e(o1,[2,135]),e(o1,[2,136]),e(o1,[2,137]),e(o1,[2,138]),e(o1,[2,139]),e(o1,[2,140]),e(o1,[2,141]),e(Y,[2,118],{108:H1}),e(Y,[2,119],{108:H1}),{22:[1,277]},e(Y,[2,120],{108:H1}),{22:[1,278]},e(z2,[2,126]),e(Y,[2,100],{108:H1}),e(Y,[2,101],{108:H1}),e(Y,[2,102],{117:101,119:180,26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,124:b,125:k,126:D,127:g,128:F,129:C}),e(Y,[2,106]),{103:[1,279]},{103:[1,280]},{59:[1,281]},{69:[1,282]},{73:[1,283]},{9:284,20:p1,21:d1,23:E1},e(Q,[2,42]),{22:b1,67:k1,68:D1,88:g1,104:F1,107:C1,109:285,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},e(o1,[2,130]),{26:r1,52:l,67:h,68:A,93:i1,99:286,107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},{26:r1,52:l,67:h,68:A,93:i1,99:287,107:f,108:p,111:n1,113:d,114:E,117:101,119:99,124:b,125:k,126:D,127:g,128:F,129:C},e(Y,[2,110]),e(Y,[2,116]),e(t1,[2,61]),{22:S,24:m,26:v,38:V,39:288,42:x,52:l,67:h,68:A,74:R,82:L,84:141,85:J,86:$,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},e(t1,[2,69]),e(V2,B,{17:289}),e(Q2,[2,128],{110:276,22:b1,67:k1,68:D1,88:g1,104:F1,107:C1,111:_1,112:B1,113:T1,114:y1,115:S1}),e(Y,[2,123],{117:101,119:180,22:[1,290],26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,124:b,125:k,126:D,127:g,128:F,129:C}),e(Y,[2,124],{117:101,119:180,22:[1,291],26:r1,52:l,67:h,68:A,93:i1,107:f,108:p,111:n1,113:d,114:E,124:b,125:k,126:D,127:g,128:F,129:C}),{22:S,24:m,26:v,38:V,41:[1,292],42:x,52:l,67:h,68:A,74:R,82:L,84:203,87:153,88:I,89:N,90:O,91:P,92:w,93:U,94:M,96:144,97:G,107:f,108:p,111:K,113:d,114:E,115:j,116:W,117:150,124:b,125:k,126:D,127:g,128:F,129:C},{18:18,19:19,20:u1,21:z,22:s1,23:f1,32:24,33:25,34:26,35:27,36:28,37:29,38:Y1,42:[1,293],43:31,44:Q1,46:X1,48:s2,50:35,51:45,52:q,53:46,55:47,67:c1,68:m1,88:o2,89:l2,90:h2,91:A2,92:f2,93:v1,97:V1,107:x1,108:R1,111:L1,113:I1,114:N1,118:48,120:p2,121:d2,122:E2,123:b2,124:O1,125:P1,126:w1,127:U1,128:M1,129:G1},{22:b1,67:k1,68:D1,88:g1,98:294,104:F1,107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},{22:b1,67:k1,68:D1,88:g1,98:295,104:F1,107:C1,109:245,110:246,111:_1,112:B1,113:T1,114:y1,115:S1},e(t1,[2,65]),e(Q,[2,41]),e(Y,[2,121],{108:H1}),e(Y,[2,122],{108:H1})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],133:[2,7]},parseError:function(a,o){if(o.recoverable)this.trace(a);else{var T=new Error(a);throw T.hash=o,T}},parse:function(a){var o=this,T=[0],n=[],X=[null],t=[],i2=this.table,s="",l1=0,X2=0,xe=2,q2=1,Re=t.slice.call(arguments,1),e1=Object.create(this.lexer),q1={yy:{}};for(var L2 in this.yy)Object.prototype.hasOwnProperty.call(this.yy,L2)&&(q1.yy[L2]=this.yy[L2]);e1.setInput(a,q1.yy),q1.yy.lexer=e1,q1.yy.parser=this,typeof e1.yylloc>"u"&&(e1.yylloc={});var I2=e1.yylloc;t.push(I2);var Le=e1.options&&e1.options.ranges;typeof q1.yy.parseError=="function"?this.parseError=q1.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ie(){var j1;return j1=n.pop()||e1.lex()||q2,typeof j1!="number"&&(j1 instanceof Array&&(n=j1,j1=n.pop()),j1=o.symbols_[j1]||j1),j1}for(var a1,Z1,h1,N2,e2={},g2,K1,Z2,F2;;){if(Z1=T[T.length-1],this.defaultActions[Z1]?h1=this.defaultActions[Z1]:((a1===null||typeof a1>"u")&&(a1=Ie()),h1=i2[Z1]&&i2[Z1][a1]),typeof h1>"u"||!h1.length||!h1[0]){var O2="";F2=[];for(g2 in i2[Z1])this.terminals_[g2]&&g2>xe&&F2.push("'"+this.terminals_[g2]+"'");e1.showPosition?O2="Parse error on line "+(l1+1)+`:
`+e1.showPosition()+`
Expecting `+F2.join(", ")+", got '"+(this.terminals_[a1]||a1)+"'":O2="Parse error on line "+(l1+1)+": Unexpected "+(a1==q2?"end of input":"'"+(this.terminals_[a1]||a1)+"'"),this.parseError(O2,{text:e1.match,token:this.terminals_[a1]||a1,line:e1.yylineno,loc:I2,expected:F2})}if(h1[0]instanceof Array&&h1.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Z1+", token: "+a1);switch(h1[0]){case 1:T.push(a1),X.push(e1.yytext),t.push(e1.yylloc),T.push(h1[1]),a1=null,X2=e1.yyleng,s=e1.yytext,l1=e1.yylineno,I2=e1.yylloc;break;case 2:if(K1=this.productions_[h1[1]][1],e2.$=X[X.length-K1],e2._$={first_line:t[t.length-(K1||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(K1||1)].first_column,last_column:t[t.length-1].last_column},Le&&(e2._$.range=[t[t.length-(K1||1)].range[0],t[t.length-1].range[1]]),N2=this.performAction.apply(e2,[s,X2,l1,q1.yy,h1[1],X,t].concat(Re)),typeof N2<"u")return N2;K1&&(T=T.slice(0,-1*K1*2),X=X.slice(0,-1*K1),t=t.slice(0,-1*K1)),T.push(this.productions_[h1[1]][0]),X.push(e2.$),t.push(e2._$),Z2=i2[T[T.length-2]][T[T.length-1]],T.push(Z2);break;case 3:return!0}}return!0}},Ve=function(){var z1={EOF:1,parseError:function(o,T){if(this.yy.parser)this.yy.parser.parseError(o,T);else throw new Error(o)},setInput:function(a,o){return this.yy=o||this.yy||{},this._input=a,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var o=a.match(/(?:\r\n?|\n).*/g);return o?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var o=a.length,T=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-o),this.offset-=o;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),T.length-1&&(this.yylineno-=T.length-1);var X=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:T?(T.length===n.length?this.yylloc.first_column:0)+n[n.length-T.length].length-T[0].length:this.yylloc.first_column-o},this.options.ranges&&(this.yylloc.range=[X[0],X[0]+this.yyleng-o]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),o=new Array(a.length+1).join("-");return a+this.upcomingInput()+`
`+o+"^"},test_match:function(a,o){var T,n,X;if(this.options.backtrack_lexer&&(X={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(X.yylloc.range=this.yylloc.range.slice(0))),n=a[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+a[0].length},this.yytext+=a[0],this.match+=a[0],this.matches=a,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(a[0].length),this.matched+=a[0],T=this.performAction.call(this,this.yy,this,o,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),T)return T;if(this._backtrack){for(var t in X)this[t]=X[t];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,o,T,n;this._more||(this.yytext="",this.match="");for(var X=this._currentRules(),t=0;to[0].length)){if(o=T,n=t,this.options.backtrack_lexer){if(a=this.test_match(T,X[t]),a!==!1)return a;if(this._backtrack){o=!1;continue}else return!1}else if(!this.options.flex)break}return o?(a=this.test_match(o,X[n]),a!==!1?a:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var o=this.next();return o||this.lex()},begin:function(o){this.conditionStack.push(o)},popState:function(){var o=this.conditionStack.length-1;return o>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(o){return o=this.conditionStack.length-1-Math.abs(o||0),o>=0?this.conditionStack[o]:"INITIAL"},pushState:function(o){this.begin(o)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(o,T,n,X){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:return this.begin("acc_title"),44;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),46;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:this.begin("md_string");break;case 13:return"MD_STR";case 14:this.popState();break;case 15:this.begin("string");break;case 16:this.popState();break;case 17:return"STR";case 18:return 88;case 19:return 97;case 20:return 89;case 21:return 106;case 22:return 90;case 23:return 91;case 24:this.begin("href");break;case 25:this.popState();break;case 26:return 102;case 27:this.begin("callbackname");break;case 28:this.popState();break;case 29:this.popState(),this.begin("callbackargs");break;case 30:return 100;case 31:this.popState();break;case 32:return 101;case 33:this.begin("click");break;case 34:this.popState();break;case 35:return 92;case 36:return o.lex.firstGraph()&&this.begin("dir"),24;case 37:return o.lex.firstGraph()&&this.begin("dir"),24;case 38:return o.lex.firstGraph()&&this.begin("dir"),24;case 39:return 38;case 40:return 42;case 41:return 103;case 42:return 103;case 43:return 103;case 44:return 103;case 45:return this.popState(),25;case 46:return this.popState(),26;case 47:return this.popState(),26;case 48:return this.popState(),26;case 49:return this.popState(),26;case 50:return this.popState(),26;case 51:return this.popState(),26;case 52:return this.popState(),26;case 53:return this.popState(),26;case 54:return this.popState(),26;case 55:return this.popState(),26;case 56:return 120;case 57:return 121;case 58:return 122;case 59:return 123;case 60:return 107;case 61:return 113;case 62:return 54;case 63:return 68;case 64:return 52;case 65:return 20;case 66:return 108;case 67:return 128;case 68:return 83;case 69:return 83;case 70:return 83;case 71:return 83;case 72:return 82;case 73:return 82;case 74:return 82;case 75:return 60;case 76:return 61;case 77:return 62;case 78:return 63;case 79:return 64;case 80:return 65;case 81:return 66;case 82:return 70;case 83:return 71;case 84:return 56;case 85:return 57;case 86:return 111;case 87:return 114;case 88:return 129;case 89:return 126;case 90:return 115;case 91:return 127;case 92:return 127;case 93:return 116;case 94:return 74;case 95:return 94;case 96:return"SEP";case 97:return 93;case 98:return 67;case 99:return 76;case 100:return 75;case 101:return 78;case 102:return 77;case 103:return 124;case 104:return 125;case 105:return 69;case 106:return 58;case 107:return 59;case 108:return 40;case 109:return 41;case 110:return 72;case 111:return 73;case 112:return 135;case 113:return 21;case 114:return 22;case 115:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\])/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[31,32],inclusive:!1},callbackname:{rules:[28,29,30],inclusive:!1},href:{rules:[25,26],inclusive:!1},click:{rules:[34,35],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[45,46,47,48,49,50,51,52,53,54,55],inclusive:!1},acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},md_string:{rules:[13,14],inclusive:!1},string:{rules:[16,17],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,15,18,19,20,21,22,23,24,27,33,36,37,38,39,40,41,42,43,44,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115],inclusive:!0}}};return z1}();x2.lexer=Ve;function R2(){this.yy={}}return R2.prototype=x2,x2.Parser=R2,new R2}();P2.parser=P2;const et=P2,Ye="flowchart-";let J2=0,K2=U2(),H={},J1=[],t2={},W1=[],_2={},B2={},C2=0,w2=!0,A1,T2,y2=[];const S2=e=>We.sanitizeText(e,K2),$2=function(e,u,r){Ke.parseDirective(this,e,u,r)},c2=function(e){const u=Object.keys(H);for(const r of u)if(H[r].id===e)return H[r].domId;return e},ee=function(e,u,r,i,c,_,B={}){let u1,z=e;z!==void 0&&z.trim().length!==0&&(H[z]===void 0&&(H[z]={id:z,labelType:"text",domId:Ye+z+"-"+J2,styles:[],classes:[]}),J2++,u!==void 0?(K2=U2(),u1=S2(u.text.trim()),H[z].labelType=u.type,u1[0]==='"'&&u1[u1.length-1]==='"'&&(u1=u1.substring(1,u1.length-1)),H[z].text=u1):H[z].text===void 0&&(H[z].text=e),r!==void 0&&(H[z].type=r),i!=null&&i.forEach(function(s1){H[z].styles.push(s1)}),c!=null&&c.forEach(function(s1){H[z].classes.push(s1)}),_!==void 0&&(H[z].dir=_),H[z].props===void 0?H[z].props=B:B!==void 0&&Object.assign(H[z].props,B))},te=function(e,u,r){const _={start:e,end:u,type:void 0,text:"",labelType:"text"};M2.info("abc78 Got edge...",_);const B=r.text;B!==void 0&&(_.text=S2(B.text.trim()),_.text[0]==='"'&&_.text[_.text.length-1]==='"'&&(_.text=_.text.substring(1,_.text.length-1)),_.labelType=B.type),r!==void 0&&(_.type=r.type,_.stroke=r.stroke,_.length=r.length),J1.push(_)},se=function(e,u,r){M2.info("addLink (abc78)",e,u,r);let i,c;for(i=0;i/)&&(A1="LR"),A1.match(/.*v/)&&(A1="TB"),A1==="TD"&&(A1="TB")},m2=function(e,u){e.split(",").forEach(function(r){let i=r;H[i]!==void 0&&H[i].classes.push(u),_2[i]!==void 0&&_2[i].classes.push(u)})},He=function(e,u){e.split(",").forEach(function(r){u!==void 0&&(B2[T2==="gen-1"?c2(r):r]=S2(u))})},ze=function(e,u,r){let i=c2(e);if(U2().securityLevel!=="loose"||u===void 0)return;let c=[];if(typeof r=="string"){c=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let _=0;_")),c.classed("hover",!0)}).on("mouseout",function(){u.transition().duration(500).style("opacity",0),n2(this).classed("hover",!1)})};y2.push(de);const Ee=function(e="gen-1"){H={},t2={},J1=[],y2=[de],W1=[],_2={},C2=0,B2={},w2=!0,T2=e,je()},be=e=>{T2=e||"gen-2"},ke=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},De=function(e,u,r){let i=e.text.trim(),c=r.text;e===r&&r.text.match(/\s/)&&(i=void 0);function _(f1){const Y1={boolean:{},number:{},string:{}},Q1=[];let X1;return{nodeList:f1.filter(function(q){const c1=typeof q;return q.stmt&&q.stmt==="dir"?(X1=q.value,!1):q.trim()===""?!1:c1 in Y1?Y1[c1].hasOwnProperty(q)?!1:Y1[c1][q]=!0:Q1.includes(q)?!1:Q1.push(q)}),dir:X1}}let B=[];const{nodeList:u1,dir:z}=_(B.concat.apply(B,u));if(B=u1,T2==="gen-1")for(let f1=0;f12e3)return;if(ge[a2]=u,W1[u].id===e)return{result:!0,count:0};let i=0,c=1;for(;i=0){const B=Fe(e,_);if(B.result)return{result:!0,count:c+B.count};c=c+B.count}i=i+1}return{result:!1,count:c}},Ce=function(e){return ge[e]},_e=function(){a2=-1,W1.length>0&&Fe("none",W1.length-1)},Be=function(){return W1},Te=()=>w2?(w2=!1,!0):!1,Xe=e=>{let u=e.trim(),r="arrow_open";switch(u[0]){case"<":r="arrow_point",u=u.slice(1);break;case"x":r="arrow_cross",u=u.slice(1);break;case"o":r="arrow_circle",u=u.slice(1);break}let i="normal";return u.includes("=")&&(i="thick"),u.includes(".")&&(i="dotted"),{type:r,stroke:i}},qe=(e,u)=>{const r=u.length;let i=0;for(let c=0;c