markdown-flow-ui 0.2.36-dev.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -12
- package/dist/_virtual/index.es4.js +5 -5
- package/dist/_virtual/index.es5.js +5 -5
- package/dist/_virtual/index4.cjs +1 -1
- package/dist/_virtual/index5.cjs +1 -1
- package/dist/_virtual/variable-marker.cjs +2 -0
- package/dist/_virtual/variable-marker.cjs.map +1 -0
- package/dist/_virtual/variable-marker.es.js +5 -0
- package/dist/_virtual/variable-marker.es.js.map +1 -0
- package/dist/components/ContentRender/ContentRender.cjs +2 -2
- package/dist/components/ContentRender/ContentRender.cjs.map +1 -1
- package/dist/components/ContentRender/ContentRender.es.js +206 -205
- package/dist/components/ContentRender/ContentRender.es.js.map +1 -1
- package/dist/components/ContentRender/utils/inline-code-ranges.cjs +9 -9
- package/dist/components/ContentRender/utils/inline-code-ranges.cjs.map +1 -1
- package/dist/components/ContentRender/utils/inline-code-ranges.d.ts +3 -0
- package/dist/components/ContentRender/utils/inline-code-ranges.es.js +185 -161
- package/dist/components/ContentRender/utils/inline-code-ranges.es.js.map +1 -1
- package/dist/components/ContentRender/utils/mermaid-parse.cjs +4 -4
- package/dist/components/ContentRender/utils/mermaid-parse.cjs.map +1 -1
- package/dist/components/ContentRender/utils/mermaid-parse.es.js +53 -48
- package/dist/components/ContentRender/utils/mermaid-parse.es.js.map +1 -1
- package/dist/components/ContentRender/utils/split-content.cjs +6 -6
- package/dist/components/ContentRender/utils/split-content.cjs.map +1 -1
- package/dist/components/ContentRender/utils/split-content.d.ts +1 -0
- package/dist/components/ContentRender/utils/split-content.es.js +361 -313
- package/dist/components/ContentRender/utils/split-content.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.map +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js +278 -283
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/components/VariableSelect.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/components/VariableSelect.cjs.map +1 -1
- package/dist/components/MarkdownFlowEditor/components/VariableSelect.es.js +57 -58
- package/dist/components/MarkdownFlowEditor/components/VariableSelect.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.es.js +1 -1
- package/dist/components/MarkdownFlowEditor/locales/de-DE.json.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/locales/de-DE.json.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/locales/de-DE.json.es.js +19 -19
- package/dist/components/MarkdownFlowEditor/locales/en-US.json.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/locales/en-US.json.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/locales/en-US.json.es.js +5 -5
- package/dist/components/MarkdownFlowEditor/locales/es-ES.json.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/locales/es-ES.json.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/locales/es-ES.json.es.js +1 -1
- package/dist/components/MarkdownFlowEditor/locales/fil-PH.json.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/locales/fil-PH.json.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/locales/fil-PH.json.es.js +15 -15
- package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.es.js +13 -13
- package/dist/components/MarkdownFlowEditor/locales/ja-JP.json.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/locales/ja-JP.json.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/locales/ja-JP.json.es.js +1 -1
- package/dist/components/MarkdownFlowEditor/locales/th-TH.json.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/locales/th-TH.json.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/locales/th-TH.json.es.js +1 -1
- package/dist/components/MarkdownFlowEditor/locales/ur-PK.json.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/locales/ur-PK.json.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/locales/ur-PK.json.es.js +1 -1
- package/dist/components/MarkdownFlowEditor/locales/vi-VN.json.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/locales/vi-VN.json.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/locales/vi-VN.json.es.js +15 -15
- package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.es.js +1 -1
- package/dist/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.cjs +3 -3
- package/dist/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.cjs.map +1 -1
- package/dist/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.es.js +177 -176
- package/dist/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/plugins/VariablePlaceholder.cjs +2 -1
- package/dist/components/MarkdownFlowEditor/plugins/VariablePlaceholder.cjs.map +1 -1
- package/dist/components/MarkdownFlowEditor/plugins/VariablePlaceholder.d.ts +3 -1
- package/dist/components/MarkdownFlowEditor/plugins/VariablePlaceholder.es.js +38 -55
- package/dist/components/MarkdownFlowEditor/plugins/VariablePlaceholder.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/utils.cjs +1 -1
- package/dist/components/MarkdownFlowEditor/utils.cjs.map +1 -1
- package/dist/components/MarkdownFlowEditor/utils.d.ts +2 -2
- package/dist/components/MarkdownFlowEditor/utils.es.js +34 -31
- package/dist/components/MarkdownFlowEditor/utils.es.js.map +1 -1
- package/dist/components/ui/inputGroup/textarea.cjs +1 -1
- package/dist/components/ui/inputGroup/textarea.es.js +1 -1
- package/dist/lib/interaction-defaults.cjs +1 -1
- package/dist/lib/interaction-defaults.cjs.map +1 -1
- package/dist/lib/interaction-defaults.es.js +124 -133
- package/dist/lib/interaction-defaults.es.js.map +1 -1
- package/dist/lib/interaction-defaults.failure.test.d.ts +1 -0
- package/dist/node_modules/rc-input/es/BaseInput.cjs +1 -1
- package/dist/node_modules/rc-input/es/BaseInput.es.js +1 -1
- package/dist/node_modules/rc-textarea/es/ResizableTextArea.cjs +1 -1
- package/dist/node_modules/rc-textarea/es/ResizableTextArea.es.js +1 -1
- package/dist/node_modules/rc-textarea/es/TextArea.cjs +1 -1
- package/dist/node_modules/rc-textarea/es/TextArea.es.js +1 -1
- package/dist/node_modules/rc-textarea/es/index.cjs +1 -1
- package/dist/node_modules/rc-textarea/es/index.es.js +1 -1
- package/dist/node_modules/remark-flow/dist/escaping.cjs +2 -2
- package/dist/node_modules/remark-flow/dist/escaping.cjs.map +1 -1
- package/dist/node_modules/remark-flow/dist/escaping.es.js +128 -63
- package/dist/node_modules/remark-flow/dist/escaping.es.js.map +1 -1
- package/dist/node_modules/remark-flow/dist/index.cjs +1 -1
- package/dist/node_modules/remark-flow/dist/index.cjs.map +1 -1
- package/dist/node_modules/remark-flow/dist/index.es.js +49 -37
- package/dist/node_modules/remark-flow/dist/index.es.js.map +1 -1
- package/dist/node_modules/remark-flow/dist/interaction-parser.cjs +1 -1
- package/dist/node_modules/remark-flow/dist/interaction-parser.cjs.map +1 -1
- package/dist/node_modules/remark-flow/dist/interaction-parser.es.js +260 -255
- package/dist/node_modules/remark-flow/dist/interaction-parser.es.js.map +1 -1
- package/dist/node_modules/remark-flow/dist/interaction-plugin-core.cjs +1 -1
- package/dist/node_modules/remark-flow/dist/interaction-plugin-core.cjs.map +1 -1
- package/dist/node_modules/remark-flow/dist/interaction-plugin-core.es.js +71 -42
- package/dist/node_modules/remark-flow/dist/interaction-plugin-core.es.js.map +1 -1
- package/dist/node_modules/remark-flow/dist/interaction-syntax.cjs +1 -1
- package/dist/node_modules/remark-flow/dist/interaction-syntax.cjs.map +1 -1
- package/dist/node_modules/remark-flow/dist/interaction-syntax.es.js +501 -46
- package/dist/node_modules/remark-flow/dist/interaction-syntax.es.js.map +1 -1
- package/dist/node_modules/remark-flow/dist/variable-marker.cjs +2 -0
- package/dist/node_modules/remark-flow/dist/variable-marker.cjs.map +1 -0
- package/dist/node_modules/remark-flow/dist/variable-marker.es.js +77 -0
- package/dist/node_modules/remark-flow/dist/variable-marker.es.js.map +1 -0
- package/dist/node_modules/remark-flow/dist/variable-name.cjs +14 -1
- package/dist/node_modules/remark-flow/dist/variable-name.cjs.map +1 -1
- package/dist/node_modules/remark-flow/dist/variable-name.es.js +742 -25
- package/dist/node_modules/remark-flow/dist/variable-name.es.js.map +1 -1
- package/dist/node_modules/unified/lib/index.cjs +1 -1
- package/dist/node_modules/unified/lib/index.es.js +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interaction-syntax.cjs","sources":["../../../../node_modules/remark-flow/dist/interaction-syntax.js"],"sourcesContent":["\"use strict\";\n/**\n * Read `?[...]` as one piece of text while the Markdown is being tokenized.\n *\n * The plugins find interactions by walking the tree's text nodes, which only exist once the\n * Markdown has been parsed -- and by then the parse has already rewritten what is inside the\n * brackets. A backslash escape is Markdown's own syntax too, so `https:\\/\\/example.com` reaches the\n * text node as `https://example.com`: the escape the option relied on is gone and the `//` splits\n * it into a display and a value. Worse, GFM turns that URL into a link node of its own, so the\n * interaction is no longer inside one text node at all and is shown to the learner as raw text.\n * The same happens to anything else Markdown reads inline: `$...$` with remark-math, `*...*`,\n * an entity.\n *\n * So the brackets are claimed before any of that runs. This construct starts at `?[` and ends at\n * the first `]` the escape rule leaves unescaped, exactly where `INTERACTION_CONTENT_SOURCE` ends\n * it, and the whole span becomes one node carrying the source unchanged (see `INTERACTION_NODE`),\n * which the plugins then parse from what the author wrote.\n *\n * `?[text](url)` is a link, not an interaction, as the visitor's lookahead has always said, so a\n * `]` followed by `(` gives the span back to Markdown.\n *\n * The types are declared here rather than imported, so the published declarations do not reach\n * into micromark's packages, which this one does not depend on at runtime.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TOKENIZED_TREE = exports.INTERACTION_NODE = void 0;\nexports.interactionSyntax = interactionSyntax;\nexports.interactionFromMarkdown = interactionFromMarkdown;\nexports.registerInteractionSyntax = registerInteractionSyntax;\n/**\n * The node type this construct produces.\n *\n * Its own type, not `text`: GFM finds `www.` links and emails by rewriting text nodes after the\n * parse, and it cut an interaction whose option carried `https://www.postgresql.org` into\n * text and a link, so the question was never recognised. Nothing that rewrites text touches a\n * node of another type; the plugins turn each one into an element, or back into text.\n */\nexports.INTERACTION_NODE = 'flowInteraction';\n/**\n * Set on the root of a tree parsed with this construct registered.\n *\n * Whether a plugin is attached to a processor says nothing about the tree it is given:\n * `runSync(tree)` can hand it one parsed by another processor, or built by hand, in which nothing\n * was tokenized. The visitor reads this mark, not the registration, to know which it has.\n */\nexports.TOKENIZED_TREE = 'flowInteractionTokenized';\nconst QUESTION_MARK = 63;\nconst LEFT_BRACKET = 91;\nconst RIGHT_BRACKET = 93;\nconst LEFT_PAREN = 40;\nconst BACKSLASH = 92;\n// The characters a backslash escapes inside an interaction: `|`, `/`, `.`, `]`. Mirrors ESCAPABLE.\nconst ESCAPABLE_CODES = new Set([124, 47, 46, 93]);\nconst INTERACTION = 'flowInteraction';\nconst MARKER = 'flowInteractionMarker';\nconst DATA = 'flowInteractionData';\nconst LINE_ENDING = 'lineEnding';\n/** Whether `code` is one of micromark's virtual line endings (CR, LF, CRLF). */\nconst isLineEnding = (code) => code !== null && code < -2;\nfunction tokenizeInteraction(effects, ok, nok) {\n return start;\n // Every character is consumed inside a token of its own kind -- the `?[` and `]` markers, the\n // data between them, line endings -- because micromark only lets a construct consume while a\n // token is open.\n function start(code) {\n effects.enter(INTERACTION);\n effects.enter(MARKER);\n effects.consume(code);\n return open;\n }\n function open(code) {\n if (code !== LEFT_BRACKET) {\n return nok(code);\n }\n effects.consume(code);\n effects.exit(MARKER);\n return beforeContent;\n }\n // Data is only opened on a character it will hold: micromark rejects an empty token.\n function beforeContent(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === RIGHT_BRACKET) {\n return close(code);\n }\n if (isLineEnding(code)) {\n return lineEnding(code);\n }\n effects.enter(DATA);\n return content(code);\n }\n function lineEnding(code) {\n // An interaction may run across lines, as the regex it mirrors allows. A line ending is its\n // own token in micromark, so it sits between runs of data rather than inside one.\n effects.enter(LINE_ENDING);\n effects.consume(code);\n effects.exit(LINE_ENDING);\n return beforeContent;\n }\n function content(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === RIGHT_BRACKET) {\n effects.exit(DATA);\n return close(code);\n }\n if (isLineEnding(code)) {\n effects.exit(DATA);\n return lineEnding(code);\n }\n effects.consume(code);\n return code === BACKSLASH ? afterBackslash : content;\n }\n function afterBackslash(code) {\n // `\\]` is an escaped bracket and does not close; any other backslash is literal text and\n // the character after it is read as usual. Only the escapable characters pair up.\n if (code !== null && ESCAPABLE_CODES.has(code)) {\n effects.consume(code);\n return content;\n }\n return content(code);\n }\n function close(code) {\n effects.enter(MARKER);\n effects.consume(code);\n effects.exit(MARKER);\n return after;\n }\n function after(code) {\n if (code === LEFT_PAREN) {\n return nok(code);\n }\n effects.exit(INTERACTION);\n return ok(code);\n }\n}\n/** The micromark syntax extension: `?` may open an interaction wherever inline text is read. */\nfunction interactionSyntax() {\n return {\n text: {\n [QUESTION_MARK]: {\n name: 'flowInteraction',\n tokenize: tokenizeInteraction,\n },\n },\n };\n}\n/** The mdast extension: the whole span becomes one node holding the source as written. */\nfunction interactionFromMarkdown() {\n return {\n transforms: [\n (tree) => {\n tree.data = { ...tree.data, [exports.TOKENIZED_TREE]: true };\n },\n ],\n enter: {\n [INTERACTION](token) {\n this.enter({ type: exports.INTERACTION_NODE, value: '' }, token);\n },\n },\n exit: {\n [INTERACTION](token) {\n const node = this.stack[this.stack.length - 1];\n node.value = this.sliceSerialize(token);\n this.exit(token);\n },\n },\n };\n}\n// A unified processor is a callable instance, so `typeof` says function, not object.\nconst isProcessor = (value) => (typeof value === 'object' || typeof value === 'function') &&\n value !== null &&\n typeof value.data === 'function';\n/**\n * Teach the processor a plugin is attached to to tokenize interactions.\n *\n * A plugin called through `unified().use()` runs with the processor as `this`; one called by hand\n * -- `remarkFlow()(tree)`, as older code and the tests do -- has none, and keeps working on the\n * tree it is given as before.\n */\nfunction registerInteractionSyntax(self) {\n if (!isProcessor(self)) {\n return;\n }\n const data = self.data();\n const add = (field, value) => {\n const list = data[field] ?? [];\n if (!list.includes(value)) {\n list.push(value);\n }\n data[field] = list;\n };\n add('micromarkExtensions', SYNTAX);\n add('fromMarkdownExtensions', FROM_MARKDOWN);\n}\n// One instance each, so a processor that attaches several of these plugins registers once.\nconst SYNTAX = interactionSyntax();\nconst FROM_MARKDOWN = interactionFromMarkdown();\n//# sourceMappingURL=interaction-syntax.js.map"],"names":["exports","interactionSyntax","interactionFromMarkdown","registerInteractionSyntax","QUESTION_MARK","LEFT_BRACKET","RIGHT_BRACKET","LEFT_PAREN","BACKSLASH","ESCAPABLE_CODES","INTERACTION","MARKER","DATA","LINE_ENDING","isLineEnding","code","tokenizeInteraction","effects","ok","nok","start","open","beforeContent","close","lineEnding","content","afterBackslash","after","tree","token","node","isProcessor","value","self","data","add","field","list","SYNTAX","FROM_MARKDOWN"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"interaction-syntax.cjs","sources":["../../../../node_modules/remark-flow/dist/interaction-syntax.js"],"sourcesContent":["\"use strict\";\n/**\n * Read `?[...]` as one piece of text while the Markdown is being tokenized.\n *\n * The plugins find interactions by walking the tree's text nodes, which only exist once the\n * Markdown has been parsed -- and by then the parse has already rewritten what is inside the\n * brackets. A backslash escape is Markdown's own syntax too, so `https:\\/\\/example.com` reaches the\n * text node as `https://example.com`: the escape the option relied on is gone and the `//` splits\n * it into a display and a value. Worse, GFM turns that URL into a link node of its own, so the\n * interaction is no longer inside one text node at all and is shown to the learner as raw text.\n * The same happens to anything else Markdown reads inline: `$...$` with remark-math, `*...*`,\n * an entity.\n *\n * So the brackets are claimed before any of that runs. This construct starts at `?[` and ends at\n * the first `]` the escape rule leaves unescaped outside any `{{...}}` marker, exactly where\n * `INTERACTION_CONTENT_SOURCE` ends it. Every marker is opaque until its first literal `}}`.\n * The whole span becomes one node carrying the source unchanged (see `INTERACTION_NODE`),\n * which the plugins then parse from what the author wrote.\n *\n * `?[text](url)` is a link, not an interaction, as the visitor's lookahead has always said, so a\n * `]` followed by `(` gives the span back to Markdown.\n *\n * The types are declared here rather than imported, so the published declarations do not reach\n * into micromark's packages, which this one does not depend on at runtime.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TOKENIZED_TREE = exports.OPAQUE_PARAGRAPH = exports.VARIABLE_NODE = exports.INTERACTION_NODE = void 0;\nexports.interactionSyntax = interactionSyntax;\nexports.interactionFromMarkdown = interactionFromMarkdown;\nexports.registerInteractionSyntax = registerInteractionSyntax;\nconst variable_name_1 = require(\"./variable-name\");\n/**\n * The node type this construct produces.\n *\n * Its own type, not `text`: GFM finds `www.` links and emails by rewriting text nodes after the\n * parse, and it cut an interaction whose option carried `https://www.postgresql.org` into\n * text and a link, so the question was never recognised. Nothing that rewrites text touches a\n * node of another type; the plugins turn each one into an element, or back into text.\n */\nexports.INTERACTION_NODE = 'flowInteraction';\nexports.VARIABLE_NODE = 'flowVariableMarker';\nexports.OPAQUE_PARAGRAPH = 'flowOpaqueParagraph';\nconst OPAQUE_HEADING = 'flowOpaqueHeading';\n/**\n * Set on the root of a tree parsed with this construct registered.\n *\n * Whether a plugin is attached to a processor says nothing about the tree it is given:\n * `runSync(tree)` can hand it one parsed by another processor, or built by hand, in which nothing\n * was tokenized. The visitor reads this mark, not the registration, to know which it has.\n */\nexports.TOKENIZED_TREE = 'flowInteractionTokenized';\nconst QUESTION_MARK = 63;\nconst LEFT_BRACKET = 91;\nconst RIGHT_BRACKET = 93;\nconst LEFT_PAREN = 40;\nconst LESS_THAN = 60;\nconst BACKSLASH = 92;\nconst BACKTICK = 96;\nconst NUMBER_SIGN = 35;\nconst DOLLAR_SIGN = 36;\nconst EXCLAMATION_MARK = 33;\nconst SPACE = 32;\nconst HEADING_DEPTH_MAX = 6;\nconst LEFT_BRACE = 123;\nconst RIGHT_BRACE = 125;\n// The characters a backslash escapes inside an interaction: `|`, `/`, `.`, `]`. Mirrors ESCAPABLE.\nconst ESCAPABLE_CODES = new Set([124, 47, 46, 93]);\nconst INTERACTION = 'flowInteraction';\nconst VARIABLE = 'flowVariableMarker';\nconst MARKER = 'flowInteractionMarker';\nconst DATA = 'flowInteractionData';\nconst LINE_ENDING = 'lineEnding';\nconst REPLACEMENT_CHARACTER = 0xfffd;\nconst CARRIAGE_RETURN_LINE_FEED = -3;\nconst HORIZONTAL_TAB = -2;\nconst VIRTUAL_SPACE = -1;\nconst literalInlineOpenings = new WeakMap();\nconst sourceInlineOpenings = new WeakMap();\nconst sourceInlineSeeds = [];\nconst EMPTY_INLINE_SEED = new Uint32Array();\nfunction rejectedSourceOpening(parser, offset) {\n let offsets = sourceInlineOpenings.get(parser);\n if (offsets === undefined) {\n offsets =\n sourceInlineSeeds[sourceInlineSeeds.length - 1] ?? EMPTY_INLINE_SEED;\n sourceInlineOpenings.set(parser, offsets);\n }\n let low = 0;\n let high = offsets.length;\n while (low < high) {\n const middle = (low + high) >>> 1;\n if (offsets[middle] < offset)\n low = middle + 1;\n else\n high = middle;\n }\n return offsets[low] === offset;\n}\nfunction previousLiteralCodeOpening(code) {\n const native = this.parser.constructs.text[BACKTICK]?.find(construct => construct.name === 'codeText');\n return native?.previous?.call(this, code) ?? true;\n}\nfunction previousLiteralMathOpening(code) {\n const native = this.parser.constructs.text[DOLLAR_SIGN]?.find(construct => construct.name === 'mathText');\n return native?.previous?.call(this, code) ?? true;\n}\n/** A rejected opening cannot pair with a delimiter exposed only by opaque-marker flow protection. */\nfunction tokenizeLiteralInlineOpening(effects, ok, nok) {\n if (!rejectedSourceOpening(this.parser, this.now().offset) &&\n !literalInlineOpenings.get(this.parser)?.has(this.now().offset))\n return nok;\n let opening;\n return start;\n function start(code) {\n opening = code;\n effects.enter('data');\n return run(code);\n }\n function run(code) {\n if (code === opening) {\n effects.consume(code);\n return run;\n }\n effects.exit('data');\n return ok(code);\n }\n}\n/** Preserve NUL provenance before a serialized token loses the distinction from literal U+FFFD. */\nfunction preserveTokenNulls(context, token) {\n const offsets = [];\n let offset = 0;\n let afterTab = false;\n for (const chunk of context.sliceStream(token)) {\n // sliceSerialize omits the virtual padding after a real tab when expandTabs is false.\n if (chunk === VIRTUAL_SPACE && afterTab)\n continue;\n if (chunk === REPLACEMENT_CHARACTER)\n offsets.push(offset);\n offset +=\n typeof chunk === 'string'\n ? chunk.length\n : chunk === CARRIAGE_RETURN_LINE_FEED\n ? 2\n : 1;\n afterTab = chunk === HORIZONTAL_TAB;\n }\n if (offsets.length)\n token.flowNullOffsets = offsets;\n}\n/** Restore only known raw NULs while keeping Markdown's container-prefix serialization. */\nfunction tokenValue(context, token) {\n const value = context.sliceSerialize(token);\n if (!token.flowNullOffsets)\n return value;\n const parts = [];\n let at = 0;\n for (const offset of token.flowNullOffsets) {\n parts.push(value.slice(at, offset), '\\u0000');\n at = offset + 1;\n }\n parts.push(value.slice(at));\n return parts.join('');\n}\n/** Whether `code` is one of micromark's virtual line endings (CR, LF, CRLF). */\nconst isLineEnding = (code) => code !== null && code < -2;\nfunction tokenizeInteraction(effects, ok, nok) {\n const finish = () => preserveTokenNulls(this, effects.exit(INTERACTION));\n return start;\n // Every character is consumed inside a token of its own kind -- the `?[` and `]` markers, the\n // data between them, line endings -- because micromark only lets a construct consume while a\n // token is open.\n function start(code) {\n effects.enter(INTERACTION);\n effects.enter(MARKER);\n effects.consume(code);\n return open;\n }\n function open(code) {\n if (code !== LEFT_BRACKET) {\n return nok(code);\n }\n effects.consume(code);\n effects.exit(MARKER);\n return beforeContent;\n }\n // Data is only opened on a character it will hold: micromark rejects an empty token.\n function beforeContent(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === RIGHT_BRACKET) {\n return close(code);\n }\n if (isLineEnding(code)) {\n return lineEnding(code);\n }\n effects.enter(DATA);\n return content(code);\n }\n function variableSecondBrace(code) {\n if (code !== LEFT_BRACE)\n return content(code);\n effects.consume(code);\n return variableBody;\n }\n function variableBody(code) {\n if (code === null) {\n // A confirmed marker owns its tail even when it never closes. Rolling back here\n // would let Markdown discover an inner `?[...]` and invent buttons inside the key.\n effects.exit(DATA);\n finish();\n return ok(code);\n }\n if (isLineEnding(code)) {\n effects.exit(DATA);\n return variableLineEnding(code);\n }\n // Neither backslashes nor brackets have special meaning inside the marker.\n effects.consume(code);\n return code === RIGHT_BRACE ? variableAfterBrace : variableBody;\n }\n function variableAfterBrace(code) {\n if (code !== RIGHT_BRACE)\n return variableBody(code);\n effects.consume(code);\n return content;\n }\n function variableLineEnding(code) {\n effects.enter(LINE_ENDING);\n effects.consume(code);\n effects.exit(LINE_ENDING);\n return variableBeforeData;\n }\n function variableBeforeData(code) {\n if (code === null) {\n finish();\n return ok(code);\n }\n if (isLineEnding(code))\n return variableLineEnding(code);\n effects.enter(DATA);\n return variableBody(code);\n }\n function lineEnding(code) {\n // An interaction may run across lines, as the regex it mirrors allows. A line ending is its\n // own token in micromark, so it sits between runs of data rather than inside one.\n effects.enter(LINE_ENDING);\n effects.consume(code);\n effects.exit(LINE_ENDING);\n return beforeContent;\n }\n function content(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === RIGHT_BRACKET) {\n effects.exit(DATA);\n return close(code);\n }\n if (isLineEnding(code)) {\n effects.exit(DATA);\n return lineEnding(code);\n }\n effects.consume(code);\n if (code === LEFT_BRACE)\n return variableSecondBrace;\n return code === BACKSLASH ? afterBackslash : content;\n }\n function afterBackslash(code) {\n // `\\]` is an escaped bracket and does not close; any other backslash is literal text and\n // the character after it is read as usual. Only the escapable characters pair up.\n if (code !== null && ESCAPABLE_CODES.has(code)) {\n effects.consume(code);\n return content;\n }\n return content(code);\n }\n function close(code) {\n effects.enter(MARKER);\n effects.consume(code);\n effects.exit(MARKER);\n return after;\n }\n function after(code) {\n if (code === LEFT_PAREN) {\n return nok(code);\n }\n finish();\n return ok(code);\n }\n}\n/** Claim standalone references before Markdown can recognize syntax inside their opaque body. */\nfunction tokenizeVariable(effects, ok, nok) {\n const finish = () => preserveTokenNulls(this, effects.exit(VARIABLE));\n return start;\n function start(code) {\n effects.enter(VARIABLE);\n effects.consume(code);\n return second;\n }\n function second(code) {\n if (code !== LEFT_BRACE)\n return nok(code);\n effects.consume(code);\n return beforeBody;\n }\n function beforeBody(code) {\n if (code === null) {\n finish();\n return ok(code);\n }\n if (isLineEnding(code)) {\n effects.enter(LINE_ENDING);\n effects.consume(code);\n effects.exit(LINE_ENDING);\n return beforeBody;\n }\n effects.enter(DATA);\n return body(code);\n }\n function body(code) {\n if (code === null || isLineEnding(code)) {\n effects.exit(DATA);\n return beforeBody(code);\n }\n effects.consume(code);\n return code === RIGHT_BRACE ? afterBrace : body;\n }\n function afterBrace(code) {\n if (code !== RIGHT_BRACE)\n return body(code);\n effects.consume(code);\n effects.exit(DATA);\n finish();\n return ok;\n }\n}\n/** Keep block-looking lines inside a multiline marker in the same inline text stream. */\nfunction tokenizeOpaqueParagraph(effects, ok, nok) {\n const opaque = tokenizeOpaqueBlock(this, effects, ok, nok, false);\n const definition = this.parser.constructs.contentInitial?.[LEFT_BRACKET]?.find(construct => construct.name === 'definition');\n if (!definition || this.interrupt)\n return opaque;\n return code => code === LEFT_BRACKET\n ? effects.check({\n partial: true,\n tokenize(effects, yes, no) {\n // Native definition checks register labels. Keep speculative labels local.\n const native = Object.create(this, {\n parser: {\n value: Object.create(this.parser, {\n defined: { value: [] },\n }),\n },\n });\n return definition.tokenize.call(native, effects, yes, no);\n },\n }, nok, opaque)(code)\n : opaque(code);\n}\n/** The same marker ownership applies when its opening is inside an ATX heading. */\nfunction tokenizeOpaqueHeading(effects, ok, nok) {\n return tokenizeOpaqueBlock(this, effects, ok, nok, true);\n}\nfunction tokenizeOpaqueBlock(context, effects, ok, nok, heading, probe = false) {\n let marker = false;\n let brace = false;\n let multiline = false;\n let interaction = false;\n let question = false;\n let headingDepth = 0;\n let checkedSize = 0;\n let codeOpeningSize = 0;\n let codeOpeningOffset = 0;\n let codeOpeningCrossedBoundary = false;\n let mathOpeningSize = 0;\n let mathOpeningOffset = 0;\n let mathOpeningCrossedBoundary = false;\n let previousCode = null;\n let rejectedDelimiter = null;\n const labels = [];\n const activeLinkLabels = new Set();\n const rejectedInlineOpenings = new Set();\n let chunk;\n let outer;\n const outerType = heading ? OPAQUE_HEADING : 'content';\n const html = context.parser.constructs.text[LESS_THAN]?.find(construct => construct.name === 'htmlText');\n const autolink = context.parser.constructs.text[LESS_THAN]?.find(construct => construct.name === 'autolink');\n const math = context.parser.constructs.text[DOLLAR_SIGN]?.find(construct => construct.name === 'mathText');\n const labelEnd = context.parser.constructs.text[RIGHT_BRACKET]?.find(construct => construct.name === 'labelEnd');\n let closingLabel;\n const continuationConstruct = { partial: true, tokenize: continuation };\n const inlineContinuationConstruct = {\n partial: true,\n tokenize: inlineContinuation,\n };\n const markerLineConstruct = { partial: true, tokenize: markerLine };\n const active = { ...context.currentConstruct, concrete: true };\n const inactive = { ...context.currentConstruct, concrete: false };\n // A flow lookahead can request another document line (notably GFM tables).\n // Keep this concrete construct active while probing, so list containers cannot\n // start inside a marker before that speculative lookahead has rolled back.\n const interruptFlow = Object.fromEntries(Object.entries(context.parser.constructs.flow).map(([code, constructs]) => [\n code,\n constructs.map(construct => ({ ...construct, partial: true })),\n ]));\n return start;\n function start(code) {\n // The continuation check must use Markdown's other block constructs without\n // recursively starting another speculative opaque paragraph.\n if (context.interrupt)\n return nok(code);\n if (!probe)\n context.currentConstruct = inactive;\n outer = effects.enter(outerType);\n if (heading) {\n effects.enter(MARKER);\n return headingSequence(code);\n }\n effects.enter('paragraph');\n return beforeContent(code);\n }\n function headingSequence(code) {\n if (code === NUMBER_SIGN) {\n if (++headingDepth > HEADING_DEPTH_MAX)\n return nok(code);\n effects.consume(code);\n return headingSequence;\n }\n if (code !== null && !isLineEnding(code) && !isSpace(code))\n return nok(code);\n outer.flowHeadingDepth = headingDepth;\n return headingPadding(code);\n }\n function headingPadding(code) {\n if (isSpace(code)) {\n effects.consume(code);\n return headingPadding;\n }\n effects.exit(MARKER);\n return beforeContent(code);\n }\n function beforeContent(code) {\n if (code === null || isLineEnding(code))\n return nok(code);\n chunk = effects.enter('chunkText', { contentType: 'text' });\n return content(code);\n }\n function content(code) {\n if (code === null || isLineEnding(code)) {\n if (probe) {\n if (!marker || code === null)\n return nok(code);\n effects.exit('chunkText');\n closeOuter();\n return ok(code);\n }\n if (marker && code !== null) {\n multiline = true;\n brace = false;\n effects.consume(code);\n effects.exit('chunkText');\n return nextLine;\n }\n if (code !== null && !heading) {\n return effects.check(continuationConstruct, continueLine, finish)(code);\n }\n return finish(code);\n }\n if (!marker) {\n // Inline code and HTML already own their braces. Check before claiming a\n // marker so a later real code fence remains in Markdown's flow.\n if (!interaction && code === BACKTICK) {\n if (rejectedSourceOpening(context.parser, context.now().offset)) {\n rejectedDelimiter = code;\n return skipRejectedOpening(code);\n }\n checkedSize = 0;\n codeOpeningSize = 0;\n codeOpeningOffset = context.now().offset;\n codeOpeningCrossedBoundary = false;\n return effects.check({ partial: true, tokenize: codeSpan }, skipChecked, skipCodeOpening)(code);\n }\n if (!interaction && code === LESS_THAN && (autolink || html)) {\n checkedSize = 0;\n return effects.check({ partial: true, tokenize: autolinkSpan }, skipChecked, tryHtml)(code);\n }\n if (!interaction && code === DOLLAR_SIGN && math) {\n if (rejectedSourceOpening(context.parser, context.now().offset)) {\n rejectedDelimiter = code;\n return skipRejectedOpening(code);\n }\n checkedSize = 0;\n mathOpeningSize = 0;\n mathOpeningOffset = context.now().offset;\n mathOpeningCrossedBoundary = false;\n return effects.check({ partial: true, tokenize: mathSpan }, skipChecked, skipMathOpening)(code);\n }\n if (code === RIGHT_BRACKET && labels.length && labelEnd) {\n closingLabel = labels.pop();\n if (closingLabel)\n activeLinkLabels.delete(closingLabel);\n if (!closingLabel?.inactive) {\n checkedSize = 0;\n return effects.check({ partial: true, tokenize: linkResourceSpan }, skipLinkResource, ordinary)(code);\n }\n }\n if (heading && isSpace(code)) {\n checkedSize = 0;\n return effects.check({ partial: true, tokenize: headingTail }, headingEnd, skipChecked)(code);\n }\n if (code === BACKSLASH) {\n effects.consume(code);\n brace = false;\n question = false;\n return escaped;\n }\n }\n return ordinary(code);\n }\n function skipRejectedOpening(code) {\n if (code !== rejectedDelimiter)\n return content(code);\n effects.consume(code);\n previousCode = code;\n brace = false;\n question = false;\n return skipRejectedOpening;\n }\n function ordinary(code) {\n const prior = previousCode;\n effects.consume(code);\n previousCode = code;\n if (!marker && code === LEFT_BRACKET) {\n const label = {\n type: prior === EXCLAMATION_MARK ? 'labelImage' : 'labelLink',\n end: context.now(),\n };\n labels.push(label);\n if (label.type === 'labelLink')\n activeLinkLabels.add(label);\n }\n const wasMarker = marker;\n if (marker) {\n if (brace && code === RIGHT_BRACE) {\n marker = false;\n brace = false;\n }\n else {\n brace = code === RIGHT_BRACE;\n }\n }\n else if (brace && code === LEFT_BRACE) {\n marker = true;\n brace = false;\n }\n else {\n brace = code === LEFT_BRACE;\n }\n if (!probe && wasMarker !== marker) {\n context.currentConstruct = marker ? active : inactive;\n }\n if (!marker) {\n if (question && code === LEFT_BRACKET)\n interaction = true;\n if (code === RIGHT_BRACKET)\n interaction = false;\n question = code === QUESTION_MARK;\n }\n return content;\n }\n function escaped(code) {\n if (interaction && (code === null || !ESCAPABLE_CODES.has(code))) {\n return content(code);\n }\n if (code === null || isLineEnding(code))\n return content(code);\n effects.consume(code);\n previousCode = null;\n return content;\n }\n function codeSpan(check, yes, no) {\n let opening = 0;\n let closing = 0;\n return open;\n function consume(code) {\n check.consume(code);\n checkedSize++;\n }\n function open(code) {\n if (code === BACKTICK) {\n opening++;\n codeOpeningSize++;\n consume(code);\n return open;\n }\n return body(code);\n }\n function body(code) {\n if (code === null)\n return no(code);\n if (isLineEnding(code)) {\n if (probe || heading) {\n codeOpeningCrossedBoundary = heading;\n return no(code);\n }\n return check.check(continuationConstruct, line, blockedLine)(code);\n }\n if (code === BACKTICK) {\n closing = 0;\n return close(code);\n }\n consume(code);\n return body;\n }\n function line(code) {\n consume(code);\n return body;\n }\n function blockedLine(code) {\n return check.check({ partial: true, tokenize: inlineBoundary }, boundary, no)(code);\n }\n function boundary(code) {\n codeOpeningCrossedBoundary = true;\n return no(code);\n }\n function inlineBoundary(probe, yes, no) {\n let line = '';\n return start;\n function start(code) {\n probe.consume(code);\n return content;\n }\n function content(code) {\n if (code === null || isLineEnding(code)) {\n return (0, variable_name_1.isInlineCodeBoundaryLine)(line) ? yes(code) : no(code);\n }\n line +=\n code === HORIZONTAL_TAB\n ? '\\t'\n : code === VIRTUAL_SPACE\n ? ' '\n : String.fromCodePoint(code);\n probe.consume(code);\n return content;\n }\n }\n function close(code) {\n if (code === BACKTICK) {\n closing++;\n consume(code);\n return close;\n }\n return closing === opening ? yes(code) : body(code);\n }\n }\n function htmlSpan(check, yes, no) {\n if (!html)\n return no;\n return nativeSpan.call(this, html, 'htmlText', check, yes, no);\n }\n function autolinkSpan(check, yes, no) {\n if (!autolink)\n return no;\n return nativeSpan.call(this, autolink, 'autolink', check, yes, no);\n }\n function tryHtml(code) {\n // A failed native autolink trial rolls its tokens back, so reset its byte count too.\n checkedSize = 0;\n return effects.check({ partial: true, tokenize: htmlSpan }, skipChecked, ordinary)(code);\n }\n function mathSpan(check, yes, no) {\n if (!math)\n return no;\n let opening = true;\n let trailingSize = 0;\n // A complete run is tried only once, including when its first dollar was escaped.\n const nativeContext = Object.create(this, { previous: { value: null } });\n return nativeSpan.call(nativeContext, math, 'mathText', {\n ...check,\n consume(code) {\n if (opening && code === DOLLAR_SIGN)\n mathOpeningSize++;\n else\n opening = false;\n trailingSize = code === DOLLAR_SIGN ? trailingSize + 1 : 0;\n check.consume(code);\n },\n }, yes, no, () => trailingSize === mathOpeningSize, () => {\n mathOpeningCrossedBoundary = true;\n });\n }\n function linkResourceSpan(check, yes, no) {\n if (!labelEnd || !closingLabel)\n return no;\n // The native label-end tokenizer owns resource destinations and titles. Its\n // matching opening is tracked here because flow has not tokenized inline labels yet.\n // Older tokenizers read events; newer ones mutate a label-start stack. Keep\n // both representations local so speculative checks cannot change parser state.\n const labelStart = { ...closingLabel };\n const nativeContext = Object.create(this, {\n events: { value: [['enter', labelStart]] },\n _labelStarts: { value: [labelStart] },\n });\n return nativeSpan.call(nativeContext, labelEnd, 'resource', check, yes, no);\n }\n function nativeSpan(construct, tokenType, check, yes, no, closesBeforeLineEnding = () => false, onBoundary = () => undefined) {\n // Use the registered grammar, including HTML attributes, math options, and link titles.\n let closed = false;\n let done = false;\n const state = construct.tokenize.call(this, tracedEffects(check), complete, failed);\n return withinParagraph(state);\n function tracedEffects(check) {\n return {\n ...check,\n consume(code) {\n checkedSize++;\n check.consume(code);\n },\n exit(type) {\n const token = check.exit(type);\n if (type === tokenType)\n closed = true;\n return token;\n },\n attempt(construct, yes, no) {\n return check.attempt({\n ...construct,\n tokenize(effects, yes, no) {\n return construct.tokenize.call(this, tracedEffects(effects), yes, no);\n },\n }, yes, no);\n },\n };\n }\n function complete(code) {\n done = true;\n return closed ? yes(code) : no(code);\n }\n function failed(code) {\n done = true;\n return no(code);\n }\n function withinParagraph(state) {\n return code => {\n // Inline constructs normally see only one paragraph. Flow lookahead must impose\n // the same boundary before passing it a blank line or a new flow block.\n // A closed HTML token still receives this code so its `ok` state can run.\n if (!closed && isLineEnding(code) && !closesBeforeLineEnding()) {\n if (probe || heading)\n return boundary(code);\n return check.check(inlineContinuationConstruct, advance, boundary)(code);\n }\n return advance(code);\n function advance(code) {\n const next = state(code);\n return next && !done ? withinParagraph(next) : next;\n }\n };\n }\n function boundary(code) {\n onBoundary();\n return no(code);\n }\n }\n function skipChecked(code) {\n if (!checkedSize)\n return content(code);\n effects.consume(code);\n previousCode = code;\n checkedSize--;\n brace = false;\n question = false;\n if (isLineEnding(code)) {\n effects.exit('chunkText');\n return nextCheckedLine;\n }\n return skipChecked;\n }\n function nextCheckedLine(code) {\n openNextChunk();\n return skipChecked(code);\n }\n function skipCodeOpening(code) {\n if (!probe && codeOpeningCrossedBoundary)\n rejectedInlineOpenings.add(codeOpeningOffset);\n checkedSize = codeOpeningSize;\n return skipChecked(code);\n }\n function skipMathOpening(code) {\n if (!probe && mathOpeningCrossedBoundary)\n rejectedInlineOpenings.add(mathOpeningOffset);\n checkedSize = mathOpeningSize;\n return skipChecked(code);\n }\n function skipLinkResource(code) {\n if (closingLabel?.type === 'labelLink') {\n for (const label of activeLinkLabels)\n label.inactive = true;\n activeLinkLabels.clear();\n }\n interaction = false;\n return skipChecked(code);\n }\n function headingTail(check, yes, no) {\n let hashes = false;\n return padding;\n function consume(code) {\n check.consume(code);\n checkedSize++;\n }\n function padding(code) {\n if (isSpace(code)) {\n consume(code);\n return padding;\n }\n return sequence(code);\n }\n function sequence(code) {\n if (code === NUMBER_SIGN) {\n hashes = true;\n consume(code);\n return sequence;\n }\n if (!hashes)\n return no(code);\n return after(code);\n }\n function after(code) {\n if (isSpace(code)) {\n consume(code);\n return after;\n }\n return code === null || isLineEnding(code) ? yes(code) : no(code);\n }\n }\n function headingEnd(code) {\n if (!multiline)\n return nok(code);\n effects.exit('chunkText');\n effects.enter(MARKER);\n return headingEndTail(code);\n }\n function headingEndTail(code) {\n if (checkedSize) {\n effects.consume(code);\n checkedSize--;\n return headingEndTail;\n }\n effects.exit(MARKER);\n retainLiteralInlineOpenings();\n effects.exit(outerType);\n return ok(code);\n }\n function nextLine(code) {\n if (code === null) {\n closeOuter();\n return ok(code);\n }\n openNextChunk();\n return content(code);\n }\n function openNextChunk() {\n chunk.next = effects.enter('chunkText', {\n contentType: 'text',\n previous: chunk,\n });\n chunk = chunk.next;\n }\n function closeOuter() {\n retainLiteralInlineOpenings();\n if (!heading)\n effects.exit('paragraph');\n effects.exit(outerType);\n }\n function retainLiteralInlineOpenings() {\n if (probe || !rejectedInlineOpenings.size)\n return;\n let openings = literalInlineOpenings.get(context.parser);\n if (!openings) {\n openings = new Set();\n literalInlineOpenings.set(context.parser, openings);\n }\n for (const opening of rejectedInlineOpenings)\n openings.add(opening);\n }\n function finish(code) {\n if (!multiline)\n return nok(code);\n effects.exit('chunkText');\n closeOuter();\n return ok(code);\n }\n function continueLine(code) {\n effects.consume(code);\n previousCode = null;\n effects.exit('chunkText');\n return nextLine;\n }\n function continuation(check, yes, no) {\n return line;\n function line(code) {\n check.consume(code);\n return prefix;\n }\n function prefix(code) {\n if (isSpace(code)) {\n check.consume(code);\n return prefix;\n }\n if (code === null || isLineEnding(code))\n return no(code);\n return check.check(markerLineConstruct, yes, check.interrupt(interruptFlow, no, yes))(code);\n }\n }\n function inlineContinuation(check, yes, no) {\n // A native inline state may have just exited a token and still need this\n // character to finish. Give the speculative boundary check its own token.\n return code => {\n check.enter(DATA);\n return continuation(check, finish(yes), finish(no))(code);\n };\n function finish(next) {\n return code => {\n check.exit(DATA);\n return next(code);\n };\n }\n }\n function markerLine(check, yes, no) {\n return tokenizeOpaqueBlock(this, check, yes, no, false, true);\n }\n}\nconst isSpace = (code) => code === SPACE || code === HORIZONTAL_TAB || code === VIRTUAL_SPACE;\n/** The micromark syntax extension: `?` may open an interaction wherever inline text is read. */\nfunction interactionSyntax() {\n return {\n flow: {\n [NUMBER_SIGN]: {\n name: OPAQUE_HEADING,\n concrete: true,\n tokenize: tokenizeOpaqueHeading,\n },\n null: {\n name: exports.OPAQUE_PARAGRAPH,\n concrete: true,\n tokenize: tokenizeOpaqueParagraph,\n },\n },\n text: {\n [BACKTICK]: {\n name: 'flowLiteralCodeOpening',\n previous: previousLiteralCodeOpening,\n tokenize: tokenizeLiteralInlineOpening,\n },\n [DOLLAR_SIGN]: {\n name: 'flowLiteralMathOpening',\n previous: previousLiteralMathOpening,\n tokenize: tokenizeLiteralInlineOpening,\n },\n [QUESTION_MARK]: {\n name: 'flowInteraction',\n tokenize: tokenizeInteraction,\n },\n [LEFT_BRACE]: { name: VARIABLE, tokenize: tokenizeVariable },\n },\n };\n}\n/** The mdast extension: the whole span becomes one node holding the source as written. */\nfunction interactionFromMarkdown() {\n return {\n transforms: [\n (tree) => {\n tree.data = { ...tree.data, [exports.TOKENIZED_TREE]: true };\n },\n ],\n enter: {\n [OPAQUE_HEADING](token) {\n this.enter({ type: 'heading', depth: token.flowHeadingDepth, children: [] }, token);\n },\n [VARIABLE](token) {\n this.enter({ type: exports.VARIABLE_NODE, value: '' }, token);\n },\n [INTERACTION](token) {\n this.enter({ type: exports.INTERACTION_NODE, value: '' }, token);\n },\n },\n exit: {\n [OPAQUE_HEADING](token) {\n this.exit(token);\n },\n [VARIABLE](token) {\n const node = this.stack[this.stack.length - 1];\n node.value = tokenValue(this, token);\n this.exit(token);\n },\n [INTERACTION](token) {\n const node = this.stack[this.stack.length - 1];\n node.value = tokenValue(this, token);\n this.exit(token);\n },\n },\n };\n}\nconst seededProcessors = new WeakSet();\nconst seededParsers = new WeakMap();\nconst seededParserWrappers = new WeakSet();\nfunction seedParser(parser) {\n if (typeof parser !== 'function')\n return parser;\n const original = parser;\n if (seededParserWrappers.has(original))\n return original;\n let wrapped = seededParsers.get(original);\n if (!wrapped) {\n wrapped = function (document, file) {\n // Micromark strips one leading BOM before assigning source offsets.\n const source = document.startsWith('\\uFEFF')\n ? document.slice(1)\n : document;\n sourceInlineSeeds.push((0, variable_name_1.findRejectedDocumentInlineOpenings)(source));\n try {\n return original.call(this, document, file);\n }\n finally {\n sourceInlineSeeds.pop();\n }\n };\n seededParsers.set(original, wrapped);\n seededParserWrappers.add(wrapped);\n }\n return wrapped;\n}\n/** Keep parser assignment working in either plugin order and on copied processors. */\nfunction registerSourceSeeds(processor) {\n if (seededProcessors.has(processor))\n return;\n seededProcessors.add(processor);\n for (const key of ['parser', 'Parser']) {\n const descriptor = Object.getOwnPropertyDescriptor(processor, key);\n if (descriptor && !descriptor.configurable) {\n if ('value' in descriptor && descriptor.writable)\n processor[key] = seedParser(processor[key]);\n continue;\n }\n let current = processor[key];\n const writable = !descriptor ||\n !!descriptor.set ||\n ('value' in descriptor && descriptor.writable);\n Object.defineProperty(processor, key, {\n configurable: descriptor?.configurable ?? true,\n enumerable: descriptor?.enumerable ?? true,\n get() {\n // Later attachers such as GFM install competing flow constructs. Marker\n // ownership must run first regardless of the user's plugin order.\n const data = processor.data();\n const extensions = data.micromarkExtensions;\n if (extensions?.includes(SYNTAX) &&\n extensions[extensions.length - 1] !== SYNTAX)\n data.micromarkExtensions = [\n ...extensions.filter(extension => extension !== SYNTAX),\n SYNTAX,\n ];\n return seedParser(descriptor?.get ? descriptor.get.call(this) : current);\n },\n ...(writable\n ? {\n set(value) {\n if (descriptor?.set)\n descriptor.set.call(this, value);\n else\n current = value;\n },\n }\n : {}),\n });\n }\n}\n// A unified processor is a callable instance, so `typeof` says function, not object.\nconst isProcessor = (value) => (typeof value === 'object' || typeof value === 'function') &&\n value !== null &&\n typeof value.data === 'function';\n/**\n * Teach the processor a plugin is attached to to tokenize interactions.\n *\n * A plugin called through `unified().use()` runs with the processor as `this`; one called by hand\n * -- `remarkFlow()(tree)`, as older code and the tests do -- has none, and keeps working on the\n * tree it is given as before.\n */\nfunction registerInteractionSyntax(self) {\n if (!isProcessor(self)) {\n return;\n }\n const data = self.data();\n registerSourceSeeds(self);\n const add = (field, value) => {\n const list = data[field] ?? [];\n if (!list.includes(value)) {\n list.push(value);\n }\n data[field] = list;\n };\n add('micromarkExtensions', SYNTAX);\n add('fromMarkdownExtensions', FROM_MARKDOWN);\n}\n// One instance each, so a processor that attaches several of these plugins registers once.\nconst SYNTAX = interactionSyntax();\nconst FROM_MARKDOWN = interactionFromMarkdown();\n//# sourceMappingURL=interaction-syntax.js.map"],"names":["exports","interactionSyntax","interactionFromMarkdown","registerInteractionSyntax","variable_name_1","require$$0","OPAQUE_HEADING","QUESTION_MARK","LEFT_BRACKET","RIGHT_BRACKET","LEFT_PAREN","LESS_THAN","BACKSLASH","BACKTICK","NUMBER_SIGN","DOLLAR_SIGN","EXCLAMATION_MARK","SPACE","HEADING_DEPTH_MAX","LEFT_BRACE","RIGHT_BRACE","ESCAPABLE_CODES","INTERACTION","VARIABLE","MARKER","DATA","LINE_ENDING","REPLACEMENT_CHARACTER","CARRIAGE_RETURN_LINE_FEED","HORIZONTAL_TAB","VIRTUAL_SPACE","literalInlineOpenings","sourceInlineOpenings","sourceInlineSeeds","EMPTY_INLINE_SEED","rejectedSourceOpening","parser","offset","offsets","low","high","middle","previousLiteralCodeOpening","code","construct","previousLiteralMathOpening","tokenizeLiteralInlineOpening","effects","ok","nok","opening","start","run","preserveTokenNulls","context","token","afterTab","chunk","tokenValue","value","parts","at","isLineEnding","tokenizeInteraction","finish","open","beforeContent","close","lineEnding","content","variableSecondBrace","variableBody","variableLineEnding","variableAfterBrace","variableBeforeData","afterBackslash","after","tokenizeVariable","second","beforeBody","body","afterBrace","tokenizeOpaqueParagraph","opaque","tokenizeOpaqueBlock","definition","yes","no","native","tokenizeOpaqueHeading","heading","probe","marker","brace","multiline","interaction","question","headingDepth","checkedSize","codeOpeningSize","codeOpeningOffset","codeOpeningCrossedBoundary","mathOpeningSize","mathOpeningOffset","mathOpeningCrossedBoundary","previousCode","rejectedDelimiter","labels","activeLinkLabels","rejectedInlineOpenings","outer","outerType","html","autolink","math","labelEnd","closingLabel","continuationConstruct","continuation","inlineContinuationConstruct","inlineContinuation","markerLineConstruct","markerLine","active","inactive","interruptFlow","constructs","headingSequence","isSpace","headingPadding","closeOuter","nextLine","continueLine","skipRejectedOpening","codeSpan","skipChecked","skipCodeOpening","autolinkSpan","tryHtml","mathSpan","skipMathOpening","linkResourceSpan","skipLinkResource","ordinary","headingTail","headingEnd","escaped","prior","label","wasMarker","check","closing","consume","line","blockedLine","inlineBoundary","boundary","htmlSpan","nativeSpan","trailingSize","nativeContext","labelStart","tokenType","closesBeforeLineEnding","onBoundary","closed","done","state","tracedEffects","complete","failed","withinParagraph","type","advance","next","nextCheckedLine","openNextChunk","hashes","padding","sequence","headingEndTail","retainLiteralInlineOpenings","openings","prefix","tree","node","seededProcessors","seededParsers","seededParserWrappers","seedParser","original","wrapped","document","file","source","registerSourceSeeds","processor","key","descriptor","current","writable","data","extensions","SYNTAX","extension","isProcessor","self","add","field","list","FROM_MARKDOWN"],"mappings":"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","x_google_ignoreList":[0]}
|