{"version":3,"file":"static/js/745.ad849dbd.chunk.js","mappings":"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","sources":["../node_modules/markdown-to-jsx/index.tsx"],"sourcesContent":["/* @jsx h */\n/**\n * markdown-to-jsx is a fork of\n * [simple-markdown v0.2.2](https://github.com/Khan/simple-markdown)\n * from Khan Academy. Thank you Khan devs for making such an awesome\n * and extensible parsing infra... without it, half of the\n * optimizations here wouldn't be feasible. 🙏🏼\n */\nimport * as React from 'react'\n\n/**\n * Analogous to `node.type`. Please note that the values here may change at any time,\n * so do not hard code against the value directly.\n */\nexport const enum RuleType {\n  blockQuote = '0',\n  breakLine = '1',\n  breakThematic = '2',\n  codeBlock = '3',\n  codeFenced = '4',\n  codeInline = '5',\n  footnote = '6',\n  footnoteReference = '7',\n  gfmTask = '8',\n  heading = '9',\n  headingSetext = '10',\n  /** only available if not `disableHTMLParsing` */\n  htmlBlock = '11',\n  htmlComment = '12',\n  /** only available if not `disableHTMLParsing` */\n  htmlSelfClosing = '13',\n  image = '14',\n  link = '15',\n  /** emits a `link` 'node', does not render directly */\n  linkAngleBraceStyleDetector = '16',\n  /** emits a `link` 'node', does not render directly */\n  linkBareUrlDetector = '17',\n  /** emits a `link` 'node', does not render directly */\n  linkMailtoDetector = '18',\n  newlineCoalescer = '19',\n  orderedList = '20',\n  paragraph = '21',\n  ref = '22',\n  refImage = '23',\n  refLink = '24',\n  table = '25',\n  tableSeparator = '26',\n  text = '27',\n  textBolded = '28',\n  textEmphasized = '29',\n  textEscaped = '30',\n  textMarked = '31',\n  textStrikethroughed = '32',\n  unorderedList = '33',\n}\n\nconst enum Priority {\n  /**\n   * anything that must scan the tree before everything else\n   */\n  MAX,\n  /**\n   * scans for block-level constructs\n   */\n  HIGH,\n  /**\n   * inline w/ more priority than other inline\n   */\n  MED,\n  /**\n   * inline elements\n   */\n  LOW,\n  /**\n   * bare text and stuff that is considered leftovers\n   */\n  MIN,\n}\n\n/** TODO: Drop for React 16? */\nconst ATTRIBUTE_TO_JSX_PROP_MAP = [\n  'allowFullScreen',\n  'allowTransparency',\n  'autoComplete',\n  'autoFocus',\n  'autoPlay',\n  'cellPadding',\n  'cellSpacing',\n  'charSet',\n  'className',\n  'classId',\n  'colSpan',\n  'contentEditable',\n  'contextMenu',\n  'crossOrigin',\n  'encType',\n  'formAction',\n  'formEncType',\n  'formMethod',\n  'formNoValidate',\n  'formTarget',\n  'frameBorder',\n  'hrefLang',\n  'inputMode',\n  'keyParams',\n  'keyType',\n  'marginHeight',\n  'marginWidth',\n  'maxLength',\n  'mediaGroup',\n  'minLength',\n  'noValidate',\n  'radioGroup',\n  'readOnly',\n  'rowSpan',\n  'spellCheck',\n  'srcDoc',\n  'srcLang',\n  'srcSet',\n  'tabIndex',\n  'useMap',\n].reduce(\n  (obj, x) => {\n    obj[x.toLowerCase()] = x\n    return obj\n  },\n  { for: 'htmlFor' }\n)\n\nconst namedCodesToUnicode = {\n  amp: '\\u0026',\n  apos: '\\u0027',\n  gt: '\\u003e',\n  lt: '\\u003c',\n  nbsp: '\\u00a0',\n  quot: '\\u201c',\n} as const\n\nconst DO_NOT_PROCESS_HTML_ELEMENTS = ['style', 'script']\n\n/**\n * the attribute extractor regex looks for a valid attribute name,\n * followed by an equal sign (whitespace around the equal sign is allowed), followed\n * by one of the following:\n *\n * 1. a single quote-bounded string, e.g. 'foo'\n * 2. a double quote-bounded string, e.g. \"bar\"\n * 3. an interpolation, e.g. {something}\n *\n * JSX can be be interpolated into itself and is passed through the compiler using\n * the same options and setup as the current run.\n *\n * <Something children={<SomeOtherThing />} />\n *                      ==================\n *                              ↳ children: [<SomeOtherThing />]\n *\n * Otherwise, interpolations are handled as strings or simple booleans\n * unless HTML syntax is detected.\n *\n * <Something color={green} disabled={true} />\n *                   =====            ====\n *                     ↓                ↳ disabled: true\n *                     ↳ color: \"green\"\n *\n * Numbers are not parsed at this time due to complexities around int, float,\n * and the upcoming bigint functionality that would make handling it unwieldy.\n * Parse the string in your component as desired.\n *\n * <Something someBigNumber={123456789123456789} />\n *                           ==================\n *                                   ↳ someBigNumber: \"123456789123456789\"\n */\nconst ATTR_EXTRACTOR_R =\n  /([-A-Z0-9_:]+)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|(?:\\{((?:\\\\.|{[^}]*?}|[^}])*)\\})))?/gi\n\n/** TODO: Write explainers for each of these */\n\nconst AUTOLINK_MAILTO_CHECK_R = /mailto:/i\nconst BLOCK_END_R = /\\n{2,}$/\nconst BLOCKQUOTE_R = /^(\\s*>[\\s\\S]*?)(?=\\n{2,})/\nconst BLOCKQUOTE_TRIM_LEFT_MULTILINE_R = /^ *> ?/gm\nconst BREAK_LINE_R = /^ {2,}\\n/\nconst BREAK_THEMATIC_R = /^(?:( *[-*_])){3,} *(?:\\n *)+\\n/\nconst CODE_BLOCK_FENCED_R =\n  /^\\s*(`{3,}|~{3,}) *(\\S+)?([^\\n]*?)?\\n([\\s\\S]+?)\\s*\\1 *(?:\\n *)*\\n?/\nconst CODE_BLOCK_R = /^(?: {4}[^\\n]+\\n*)+(?:\\n *)+\\n?/\nconst CODE_INLINE_R = /^(`+)\\s*([\\s\\S]*?[^`])\\s*\\1(?!`)/\nconst CONSECUTIVE_NEWLINE_R = /^(?:\\n *)*\\n/\nconst CR_NEWLINE_R = /\\r\\n?/g\n\n/**\n * Matches footnotes on the format:\n *\n * [^key]: value\n *\n * Matches multiline footnotes\n *\n * [^key]: row\n * row\n * row\n *\n * And empty lines in indented multiline footnotes\n *\n * [^key]: indented with\n *     row\n *\n *     row\n *\n * Explanation:\n *\n * 1. Look for the starting tag, eg: [^key]\n *    ^\\[\\^([^\\]]+)]\n *\n * 2. The first line starts with a colon, and continues for the rest of the line\n *   :(.*)\n *\n * 3. Parse as many additional lines as possible. Matches new non-empty lines that doesn't begin with a new footnote definition.\n *    (\\n(?!\\[\\^).+)\n *\n * 4. ...or allows for repeated newlines if the next line begins with at least four whitespaces.\n *    (\\n+ {4,}.*)\n */\nconst FOOTNOTE_R = /^\\[\\^([^\\]]+)](:(.*)((\\n+ {4,}.*)|(\\n(?!\\[\\^).+))*)/\n\nconst FOOTNOTE_REFERENCE_R = /^\\[\\^([^\\]]+)]/\nconst FORMFEED_R = /\\f/g\nconst FRONT_MATTER_R = /^---[ \\t]*\\n(.|\\n)*\\n---[ \\t]*\\n/\nconst GFM_TASK_R = /^\\s*?\\[(x|\\s)\\]/\nconst HEADING_R = /^ *(#{1,6}) *([^\\n]+?)(?: +#*)?(?:\\n *)*(?:\\n|$)/\nconst HEADING_ATX_COMPLIANT_R =\n  /^ *(#{1,6}) +([^\\n]+?)(?: +#*)?(?:\\n *)*(?:\\n|$)/\nconst HEADING_SETEXT_R = /^([^\\n]+)\\n *(=|-){3,} *(?:\\n *)+\\n/\n\n/**\n * Explanation:\n *\n * 1. Look for a starting tag, preceded by any amount of spaces\n *    ^ *<\n *\n * 2. Capture the tag name (capture 1)\n *    ([^ >/]+)\n *\n * 3. Ignore a space after the starting tag and capture the attribute portion of the tag (capture 2)\n *     ?([^>]*)>\n *\n * 4. Ensure a matching closing tag is present in the rest of the input string\n *    (?=[\\s\\S]*<\\/\\1>)\n *\n * 5. Capture everything until the matching closing tag -- this might include additional pairs\n *    of the same tag type found in step 2 (capture 3)\n *    ((?:[\\s\\S]*?(?:<\\1[^>]*>[\\s\\S]*?<\\/\\1>)*[\\s\\S]*?)*?)<\\/\\1>\n *\n * 6. Capture excess newlines afterward\n *    \\n*\n */\nconst HTML_BLOCK_ELEMENT_R =\n  /^ *(?!<[a-z][^ >/]* ?\\/>)<([a-z][^ >/]*) ?((?:[^>]*[^/])?)>\\n?(\\s*(?:<\\1[^>]*?>[\\s\\S]*?<\\/\\1>|(?!<\\1\\b)[\\s\\S])*?)<\\/\\1>(?!<\\/\\1>)\\n*/i\n\nconst HTML_CHAR_CODE_R = /&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-fA-F]{1,6});/gi\n\nconst HTML_COMMENT_R = /^<!--[\\s\\S]*?(?:-->)/\n\n/**\n * borrowed from React 15(https://github.com/facebook/react/blob/894d20744cba99383ffd847dbd5b6e0800355a5c/src/renderers/dom/shared/HTMLDOMPropertyConfig.js)\n */\nconst HTML_CUSTOM_ATTR_R = /^(data|aria|x)-[a-z_][a-z\\d_.-]*$/\n\nconst HTML_SELF_CLOSING_ELEMENT_R =\n  /^ *<([a-z][a-z0-9:]*)(?:\\s+((?:<.*?>|[^>])*))?\\/?>(?!<\\/\\1>)(\\s*\\n)?/i\nconst INTERPOLATION_R = /^\\{.*\\}$/\nconst LINK_AUTOLINK_BARE_URL_R = /^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/\nconst LINK_AUTOLINK_MAILTO_R = /^<([^ >]+@[^ >]+)>/\nconst LINK_AUTOLINK_R = /^<([^ >]+:\\/[^ >]+)>/\nconst CAPTURE_LETTER_AFTER_HYPHEN = /-([a-z])?/gi\nconst NP_TABLE_R =\n  /^(.*\\|.*)\\n(?: *(\\|? *[-:]+ *\\|[-| :]*)\\n((?:.*\\|.*\\n)*))?\\n?/\nconst PARAGRAPH_R = /^[^\\n]+(?:  \\n|\\n{2,})/\nconst REFERENCE_IMAGE_OR_LINK = /^\\[([^\\]]*)\\]:\\s+<?([^\\s>]+)>?\\s*(\"([^\"]*)\")?/\nconst REFERENCE_IMAGE_R = /^!\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/\nconst REFERENCE_LINK_R = /^\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/\nconst SQUARE_BRACKETS_R = /(\\[|\\])/g\nconst SHOULD_RENDER_AS_BLOCK_R = /(\\n|^[-*]\\s|^#|^ {2,}|^-{2,}|^>\\s)/\nconst TAB_R = /\\t/g\nconst TABLE_TRIM_PIPES = /(^ *\\||\\| *$)/g\nconst TABLE_CENTER_ALIGN = /^ *:-+: *$/\nconst TABLE_LEFT_ALIGN = /^ *:-+ *$/\nconst TABLE_RIGHT_ALIGN = /^ *-+: *$/\n\n/**\n * For inline formatting, this partial attempts to ignore characters that\n * may appear in nested formatting that could prematurely trigger detection\n * and therefore miss content that should have been included.\n */\nconst INLINE_SKIP_R =\n  '((?:\\\\[.*?\\\\][([].*?[)\\\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~~.*?~~|==.*?==|.|\\\\n)*?)'\n\n/**\n * Detect a sequence like **foo** or __foo__. Note that bold has a higher priority\n * than emphasized to support nesting of both since they share a delimiter.\n */\nconst TEXT_BOLD_R = new RegExp(`^([*_])\\\\1${INLINE_SKIP_R}\\\\1\\\\1(?!\\\\1)`)\n\n/**\n * Detect a sequence like *foo* or _foo_.\n */\nconst TEXT_EMPHASIZED_R = new RegExp(`^([*_])${INLINE_SKIP_R}\\\\1(?!\\\\1|\\\\w)`)\n\n/**\n * Detect a sequence like ==foo==.\n */\nconst TEXT_MARKED_R = new RegExp(`^==${INLINE_SKIP_R}==`)\n\n/**\n * Detect a sequence like ~~foo~~.\n */\nconst TEXT_STRIKETHROUGHED_R = new RegExp(`^~~${INLINE_SKIP_R}~~`)\n\nconst TEXT_ESCAPED_R = /^\\\\([^0-9A-Za-z\\s])/\n\nconst TEXT_PLAIN_R =\n  /^[\\s\\S]+?(?=[^0-9A-Z\\s\\u00c0-\\uffff&#;.()'\"]|\\d+\\.|\\n\\n| {2,}\\n|\\w+:\\S|$)/i\n\nconst TRIM_STARTING_NEWLINES = /^\\n+/\n\nconst HTML_LEFT_TRIM_AMOUNT_R = /^([ \\t]*)/\n\nconst UNESCAPE_URL_R = /\\\\([^\\\\])/g\n\ntype LIST_TYPE = 1 | 2\nconst ORDERED: LIST_TYPE = 1\nconst UNORDERED: LIST_TYPE = 2\n\nconst LIST_ITEM_END_R = / *\\n+$/\nconst LIST_LOOKBEHIND_R = /(?:^|\\n)( *)$/\n\n// recognize a `*` `-`, `+`, `1.`, `2.`... list bullet\nconst ORDERED_LIST_BULLET = '(?:\\\\d+\\\\.)'\nconst UNORDERED_LIST_BULLET = '(?:[*+-])'\n\nfunction generateListItemPrefix(type: LIST_TYPE) {\n  return (\n    '( *)(' +\n    (type === ORDERED ? ORDERED_LIST_BULLET : UNORDERED_LIST_BULLET) +\n    ') +'\n  )\n}\n\n// recognize the start of a list item:\n// leading space plus a bullet plus a space (`   * `)\nconst ORDERED_LIST_ITEM_PREFIX = generateListItemPrefix(ORDERED)\nconst UNORDERED_LIST_ITEM_PREFIX = generateListItemPrefix(UNORDERED)\n\nfunction generateListItemPrefixRegex(type: LIST_TYPE) {\n  return new RegExp(\n    '^' +\n      (type === ORDERED ? ORDERED_LIST_ITEM_PREFIX : UNORDERED_LIST_ITEM_PREFIX)\n  )\n}\n\nconst ORDERED_LIST_ITEM_PREFIX_R = generateListItemPrefixRegex(ORDERED)\nconst UNORDERED_LIST_ITEM_PREFIX_R = generateListItemPrefixRegex(UNORDERED)\n\nfunction generateListItemRegex(type: LIST_TYPE) {\n  // recognize an individual list item:\n  //  * hi\n  //    this is part of the same item\n  //\n  //    as is this, which is a new paragraph in the same item\n  //\n  //  * but this is not part of the same item\n  return new RegExp(\n    '^' +\n      (type === ORDERED\n        ? ORDERED_LIST_ITEM_PREFIX\n        : UNORDERED_LIST_ITEM_PREFIX) +\n      '[^\\\\n]*(?:\\\\n' +\n      '(?!\\\\1' +\n      (type === ORDERED ? ORDERED_LIST_BULLET : UNORDERED_LIST_BULLET) +\n      ' )[^\\\\n]*)*(\\\\n|$)',\n    'gm'\n  )\n}\n\nconst ORDERED_LIST_ITEM_R = generateListItemRegex(ORDERED)\nconst UNORDERED_LIST_ITEM_R = generateListItemRegex(UNORDERED)\n\n// check whether a list item has paragraphs: if it does,\n// we leave the newlines at the end\nfunction generateListRegex(type: LIST_TYPE) {\n  const bullet = type === ORDERED ? ORDERED_LIST_BULLET : UNORDERED_LIST_BULLET\n\n  return new RegExp(\n    '^( *)(' +\n      bullet +\n      ') ' +\n      '[\\\\s\\\\S]+?(?:\\\\n{2,}(?! )' +\n      '(?!\\\\1' +\n      bullet +\n      ' (?!' +\n      bullet +\n      ' ))\\\\n*' +\n      // the \\\\s*$ here is so that we can parse the inside of nested\n      // lists, where our content might end before we receive two `\\n`s\n      '|\\\\s*\\\\n*$)'\n  )\n}\n\nconst ORDERED_LIST_R = generateListRegex(ORDERED)\nconst UNORDERED_LIST_R = generateListRegex(UNORDERED)\n\nfunction generateListRule(\n  h: any,\n  type: LIST_TYPE\n): MarkdownToJSX.Rule<\n  MarkdownToJSX.OrderedListNode | MarkdownToJSX.UnorderedListNode\n> {\n  const ordered = type === ORDERED\n  const LIST_R = ordered ? ORDERED_LIST_R : UNORDERED_LIST_R\n  const LIST_ITEM_R = ordered ? ORDERED_LIST_ITEM_R : UNORDERED_LIST_ITEM_R\n  const LIST_ITEM_PREFIX_R = ordered\n    ? ORDERED_LIST_ITEM_PREFIX_R\n    : UNORDERED_LIST_ITEM_PREFIX_R\n\n  return {\n    match(source, state, prevCapture) {\n      // We only want to break into a list if we are at the start of a\n      // line. This is to avoid parsing \"hi * there\" with \"* there\"\n      // becoming a part of a list.\n      // You might wonder, \"but that's inline, so of course it wouldn't\n      // start a list?\". You would be correct! Except that some of our\n      // lists can be inline, because they might be inside another list,\n      // in which case we can parse with inline scope, but need to allow\n      // nested lists inside this inline scope.\n      const isStartOfLine = LIST_LOOKBEHIND_R.exec(prevCapture)\n      const isListBlock = state.list || (!state.inline && !state.simple)\n\n      if (isStartOfLine && isListBlock) {\n        source = isStartOfLine[1] + source\n\n        return LIST_R.exec(source)\n      } else {\n        return null\n      }\n    },\n    order: Priority.HIGH,\n    parse(capture, parse, state) {\n      const bullet = capture[2]\n      const start = ordered ? +bullet : undefined\n      const items = capture[0]\n        // recognize the end of a paragraph block inside a list item:\n        // two or more newlines at end end of the item\n        .replace(BLOCK_END_R, '\\n')\n        .match(LIST_ITEM_R)\n\n      let lastItemWasAParagraph = false\n      const itemContent = items.map(function (item, i) {\n        // We need to see how far indented the item is:\n        const space = LIST_ITEM_PREFIX_R.exec(item)[0].length\n\n        // And then we construct a regex to \"unindent\" the subsequent\n        // lines of the items by that amount:\n        const spaceRegex = new RegExp('^ {1,' + space + '}', 'gm')\n\n        // Before processing the item, we need a couple things\n        const content = item\n          // remove indents on trailing lines:\n          .replace(spaceRegex, '')\n          // remove the bullet:\n          .replace(LIST_ITEM_PREFIX_R, '')\n\n        // Handling \"loose\" lists, like:\n        //\n        //  * this is wrapped in a paragraph\n        //\n        //  * as is this\n        //\n        //  * as is this\n        const isLastItem = i === items.length - 1\n        const containsBlocks = content.indexOf('\\n\\n') !== -1\n\n        // Any element in a list is a block if it contains multiple\n        // newlines. The last element in the list can also be a block\n        // if the previous item in the list was a block (this is\n        // because non-last items in the list can end with \\n\\n, but\n        // the last item can't, so we just \"inherit\" this property\n        // from our previous element).\n        const thisItemIsAParagraph =\n          containsBlocks || (isLastItem && lastItemWasAParagraph)\n        lastItemWasAParagraph = thisItemIsAParagraph\n\n        // backup our state for restoration afterwards. We're going to\n        // want to set state.list to true, and state.inline depending\n        // on our list's looseness.\n        const oldStateInline = state.inline\n        const oldStateList = state.list\n        state.list = true\n\n        // Parse inline if we're in a tight list, or block if we're in\n        // a loose list.\n        let adjustedContent\n        if (thisItemIsAParagraph) {\n          state.inline = false\n          adjustedContent = content.replace(LIST_ITEM_END_R, '\\n\\n')\n        } else {\n          state.inline = true\n          adjustedContent = content.replace(LIST_ITEM_END_R, '')\n        }\n\n        const result = parse(adjustedContent, state)\n\n        // Restore our state before returning\n        state.inline = oldStateInline\n        state.list = oldStateList\n\n        return result\n      })\n\n      return {\n        items: itemContent,\n        ordered: ordered,\n        start: start,\n      }\n    },\n    render(node, output, state) {\n      const Tag = node.ordered ? 'ol' : 'ul'\n\n      return (\n        <Tag\n          key={state.key}\n          start={node.type === RuleType.orderedList ? node.start : undefined}\n        >\n          {node.items.map(function generateListItem(item, i) {\n            return <li key={i}>{output(item, state)}</li>\n          })}\n        </Tag>\n      )\n    },\n  }\n}\n\nconst LINK_INSIDE = '(?:\\\\[[^\\\\]]*\\\\]|[^\\\\[\\\\]]|\\\\](?=[^\\\\[]*\\\\]))*'\nconst LINK_HREF_AND_TITLE =\n  '\\\\s*<?((?:\\\\([^)]*\\\\)|[^\\\\s\\\\\\\\]|\\\\\\\\.)*?)>?(?:\\\\s+[\\'\"]([\\\\s\\\\S]*?)[\\'\"])?\\\\s*'\nconst LINK_R = new RegExp(\n  '^\\\\[(' + LINK_INSIDE + ')\\\\]\\\\(' + LINK_HREF_AND_TITLE + '\\\\)'\n)\nconst IMAGE_R = /^!\\[(.*?)\\]\\( *((?:\\([^)]*\\)|[^() ])*) *\"?([^)\"]*)?\"?\\)/\n\nconst NON_PARAGRAPH_BLOCK_SYNTAXES = [\n  BLOCKQUOTE_R,\n  CODE_BLOCK_FENCED_R,\n  CODE_BLOCK_R,\n  HEADING_R,\n  HEADING_SETEXT_R,\n  HEADING_ATX_COMPLIANT_R,\n  HTML_COMMENT_R,\n  NP_TABLE_R,\n  ORDERED_LIST_ITEM_R,\n  ORDERED_LIST_R,\n  UNORDERED_LIST_ITEM_R,\n  UNORDERED_LIST_R,\n]\n\nconst BLOCK_SYNTAXES = [\n  ...NON_PARAGRAPH_BLOCK_SYNTAXES,\n  PARAGRAPH_R,\n  HTML_BLOCK_ELEMENT_R,\n  HTML_SELF_CLOSING_ELEMENT_R,\n]\n\nfunction containsBlockSyntax(input: string) {\n  return BLOCK_SYNTAXES.some(r => r.test(input))\n}\n\n/** Remove symmetrical leading and trailing quotes */\nfunction unquote(str: string) {\n  const first = str[0]\n  if (\n    (first === '\"' || first === \"'\") &&\n    str.length >= 2 &&\n    str[str.length - 1] === first\n  ) {\n    return str.slice(1, -1)\n  }\n  return str\n}\n\n// based on https://stackoverflow.com/a/18123682/1141611\n// not complete, but probably good enough\nexport function slugify(str: string) {\n  return str\n    .replace(/[ÀÁÂÃÄÅàáâãäåæÆ]/g, 'a')\n    .replace(/[çÇ]/g, 'c')\n    .replace(/[ðÐ]/g, 'd')\n    .replace(/[ÈÉÊËéèêë]/g, 'e')\n    .replace(/[ÏïÎîÍíÌì]/g, 'i')\n    .replace(/[Ññ]/g, 'n')\n    .replace(/[øØœŒÕõÔôÓóÒò]/g, 'o')\n    .replace(/[ÜüÛûÚúÙù]/g, 'u')\n    .replace(/[ŸÿÝý]/g, 'y')\n    .replace(/[^a-z0-9- ]/gi, '')\n    .replace(/ /gi, '-')\n    .toLowerCase()\n}\n\nfunction parseTableAlignCapture(alignCapture: string) {\n  if (TABLE_RIGHT_ALIGN.test(alignCapture)) {\n    return 'right'\n  } else if (TABLE_CENTER_ALIGN.test(alignCapture)) {\n    return 'center'\n  } else if (TABLE_LEFT_ALIGN.test(alignCapture)) {\n    return 'left'\n  }\n\n  return null\n}\n\nfunction parseTableRow(\n  source: string,\n  parse: MarkdownToJSX.NestedParser,\n  state: MarkdownToJSX.State,\n  tableOutput: boolean\n): MarkdownToJSX.ParserResult[][] {\n  const prevInTable = state.inTable\n  state.inTable = true\n  let tableRow = source\n    .trim()\n    // isolate situations where a pipe should be ignored (inline code, HTML)\n    .split(/( *(?:`[^`]*`|<.*?>.*?<\\/.*?>(?!<\\/.*?>)|\\\\\\||\\|) *)/)\n    .reduce((nodes, fragment) => {\n      if (fragment.trim() === '|')\n        nodes.push(\n          tableOutput\n            ? { type: RuleType.tableSeparator }\n            : { type: RuleType.text, text: fragment }\n        )\n      else if (fragment !== '') nodes.push.apply(nodes, parse(fragment, state))\n      return nodes\n    }, [] as MarkdownToJSX.ParserResult[])\n  state.inTable = prevInTable\n\n  let cells = [[]]\n  tableRow.forEach(function (node, i) {\n    if (node.type === RuleType.tableSeparator) {\n      // Filter out empty table separators at the start/end:\n      if (i !== 0 && i !== tableRow.length - 1) {\n        // Split the current row:\n        cells.push([])\n      }\n    } else {\n      if (\n        node.type === RuleType.text &&\n        (tableRow[i + 1] == null ||\n          tableRow[i + 1].type === RuleType.tableSeparator)\n      ) {\n        node.text = node.text.trimEnd()\n      }\n      cells[cells.length - 1].push(node)\n    }\n  })\n  return cells\n}\n\nfunction parseTableAlign(source: string /*, parse, state*/) {\n  const alignText = source.replace(TABLE_TRIM_PIPES, '').split('|')\n\n  return alignText.map(parseTableAlignCapture)\n}\n\nfunction parseTableCells(\n  source: string,\n  parse: MarkdownToJSX.NestedParser,\n  state: MarkdownToJSX.State\n) {\n  const rowsText = source.trim().split('\\n')\n\n  return rowsText.map(function (rowText) {\n    return parseTableRow(rowText, parse, state, true)\n  })\n}\n\nfunction parseTable(\n  capture: RegExpMatchArray,\n  parse: MarkdownToJSX.NestedParser,\n  state: MarkdownToJSX.State\n) {\n  /**\n   * The table syntax makes some other parsing angry so as a bit of a hack even if alignment and/or cell rows are missing,\n   * we'll still run a detected first row through the parser and then just emit a paragraph.\n   */\n  state.inline = true\n  const align = capture[2] ? parseTableAlign(capture[2]) : []\n  const cells = capture[3] ? parseTableCells(capture[3], parse, state) : []\n  const header = parseTableRow(capture[1], parse, state, !!cells.length)\n  state.inline = false\n\n  return cells.length\n    ? {\n        align: align,\n        cells: cells,\n        header: header,\n        type: RuleType.table,\n      }\n    : {\n        children: header,\n        type: RuleType.paragraph,\n      }\n}\n\nfunction getTableStyle(node, colIndex) {\n  return node.align[colIndex] == null\n    ? {}\n    : {\n        textAlign: node.align[colIndex],\n      }\n}\n\n/** TODO: remove for react 16 */\nfunction normalizeAttributeKey(key) {\n  const hyphenIndex = key.indexOf('-')\n\n  if (hyphenIndex !== -1 && key.match(HTML_CUSTOM_ATTR_R) === null) {\n    key = key.replace(CAPTURE_LETTER_AFTER_HYPHEN, function (_, letter) {\n      return letter.toUpperCase()\n    })\n  }\n\n  return key\n}\n\nfunction attributeValueToJSXPropValue(\n  key: keyof React.AllHTMLAttributes<Element>,\n  value: string\n): any {\n  if (key === 'style') {\n    return value.split(/;\\s?/).reduce(function (styles, kvPair) {\n      const key = kvPair.slice(0, kvPair.indexOf(':'))\n\n      // snake-case to camelCase\n      // also handles PascalCasing vendor prefixes\n      const camelCasedKey = key\n        .trim()\n        .replace(/(-[a-z])/g, substr => substr[1].toUpperCase())\n\n      // key.length + 1 to skip over the colon\n      styles[camelCasedKey] = kvPair.slice(key.length + 1).trim()\n\n      return styles\n    }, {})\n  } else if (key === 'href' || key === 'src') {\n    return sanitizeUrl(value)\n  } else if (value.match(INTERPOLATION_R)) {\n    // return as a string and let the consumer decide what to do with it\n    value = value.slice(1, value.length - 1)\n  }\n\n  if (value === 'true') {\n    return true\n  } else if (value === 'false') {\n    return false\n  }\n\n  return value\n}\n\nfunction normalizeWhitespace(source: string): string {\n  return source\n    .replace(CR_NEWLINE_R, '\\n')\n    .replace(FORMFEED_R, '')\n    .replace(TAB_R, '    ')\n}\n\n/**\n * Creates a parser for a given set of rules, with the precedence\n * specified as a list of rules.\n *\n * @rules: an object containing\n * rule type -> {match, order, parse} objects\n * (lower order is higher precedence)\n * (Note: `order` is added to defaultRules after creation so that\n *  the `order` of defaultRules in the source matches the `order`\n *  of defaultRules in terms of `order` fields.)\n *\n * @returns The resulting parse function, with the following parameters:\n *   @source: the input source string to be parsed\n *   @state: an optional object to be threaded through parse\n *     calls. Allows clients to add stateful operations to\n *     parsing, such as keeping track of how many levels deep\n *     some nesting is. For an example use-case, see passage-ref\n *     parsing in src/widgets/passage/passage-markdown.jsx\n */\nfunction parserFor(\n  rules: MarkdownToJSX.Rules\n): (\n  source: string,\n  state: MarkdownToJSX.State\n) => ReturnType<MarkdownToJSX.NestedParser> {\n  // Sorts rules in order of increasing order, then\n  // ascending rule name in case of ties.\n  let ruleList = Object.keys(rules)\n\n  if (process.env.NODE_ENV !== 'production') {\n    ruleList.forEach(function (type) {\n      let order = rules[type].order\n      if (\n        process.env.NODE_ENV !== 'production' &&\n        (typeof order !== 'number' || !isFinite(order))\n      ) {\n        console.warn(\n          'markdown-to-jsx: Invalid order for rule `' + type + '`: ' + order\n        )\n      }\n    })\n  }\n\n  ruleList.sort(function (typeA, typeB) {\n    let orderA = rules[typeA].order\n    let orderB = rules[typeB].order\n\n    // Sort based on increasing order\n    if (orderA !== orderB) {\n      return orderA - orderB\n    } else if (typeA < typeB) {\n      return -1\n    }\n\n    return 1\n  })\n\n  function nestedParse(\n    source: string,\n    state: MarkdownToJSX.State\n  ): MarkdownToJSX.ParserResult[] {\n    let result = []\n\n    // We store the previous capture so that match functions can\n    // use some limited amount of lookbehind. Lists use this to\n    // ensure they don't match arbitrary '- ' or '* ' in inline\n    // text (see the list rule for more information).\n    let prevCapture = ''\n    while (source) {\n      let i = 0\n      while (i < ruleList.length) {\n        const ruleType = ruleList[i]\n        const rule = rules[ruleType]\n        const capture = rule.match(source, state, prevCapture)\n\n        if (capture) {\n          const currCaptureString = capture[0]\n          source = source.substring(currCaptureString.length)\n          const parsed = rule.parse(capture, nestedParse, state)\n\n          // We also let rules override the default type of\n          // their parsed node if they would like to, so that\n          // there can be a single output function for all links,\n          // even if there are several rules to parse them.\n          if (parsed.type == null) {\n            parsed.type = ruleType as unknown as RuleType\n          }\n\n          result.push(parsed)\n\n          prevCapture = currCaptureString\n          break\n        }\n\n        i++\n      }\n    }\n\n    return result\n  }\n\n  return function outerParse(source, state) {\n    return nestedParse(normalizeWhitespace(source), state)\n  }\n}\n\n// Creates a match function for an inline scoped or simple element from a regex\nfunction inlineRegex(regex: RegExp) {\n  return function match(source, state: MarkdownToJSX.State) {\n    if (state.inline) {\n      return regex.exec(source)\n    } else {\n      return null\n    }\n  }\n}\n\n// basically any inline element except links\nfunction simpleInlineRegex(regex: RegExp) {\n  return function match(source: string, state: MarkdownToJSX.State) {\n    if (state.inline || state.simple) {\n      return regex.exec(source)\n    } else {\n      return null\n    }\n  }\n}\n\n// Creates a match function for a block scoped element from a regex\nfunction blockRegex(regex: RegExp) {\n  return function match(source: string, state: MarkdownToJSX.State) {\n    if (state.inline || state.simple) {\n      return null\n    } else {\n      return regex.exec(source)\n    }\n  }\n}\n\n// Creates a match function from a regex, ignoring block/inline scope\nfunction anyScopeRegex(regex: RegExp) {\n  return function match(source: string /*, state*/) {\n    return regex.exec(source)\n  }\n}\n\nfunction matchParagraph(\n  source: string,\n  state: MarkdownToJSX.State,\n  prevCapturedString?: string\n) {\n  if (state.inline || state.simple) {\n    return null\n  }\n\n  if (prevCapturedString && !prevCapturedString.endsWith('\\n')) {\n    // don't match continuation of a line\n    return null\n  }\n\n  let match = ''\n\n  source.split('\\n').every(line => {\n    // bail out on first sign of non-paragraph block\n    if (NON_PARAGRAPH_BLOCK_SYNTAXES.some(regex => regex.test(line))) {\n      return false\n    }\n    match += line + '\\n'\n    return line.trim()\n  })\n\n  const captured = match.trimEnd()\n  if (captured == '') {\n    return null\n  }\n\n  return [match, captured]\n}\n\nfunction sanitizeUrl(url: string): string | undefined {\n  try {\n    const decoded = decodeURIComponent(url).replace(/[^A-Za-z0-9/:]/g, '')\n\n    if (decoded.match(/^\\s*(javascript|vbscript|data(?!:image)):/i)) {\n      if (process.env.NODE_ENV !== 'production') {\n        console.warn(\n          'Anchor URL contains an unsafe JavaScript/VBScript/data expression, it will not be rendered.',\n          decoded\n        )\n      }\n\n      return undefined\n    }\n  } catch (e) {\n    if (process.env.NODE_ENV !== 'production') {\n      console.warn(\n        'Anchor URL could not be decoded due to malformed syntax or characters, it will not be rendered.',\n        url\n      )\n    }\n\n    // decodeURIComponent sometimes throws a URIError\n    // See `decodeURIComponent('a%AFc');`\n    // http://stackoverflow.com/questions/9064536/javascript-decodeuricomponent-malformed-uri-exception\n    return null\n  }\n\n  return url\n}\n\nfunction unescapeUrl(rawUrlString: string): string {\n  return rawUrlString.replace(UNESCAPE_URL_R, '$1')\n}\n\n/**\n * Everything inline, including links.\n */\nfunction parseInline(\n  parse: MarkdownToJSX.NestedParser,\n  children: string,\n  state: MarkdownToJSX.State\n): MarkdownToJSX.ParserResult[] {\n  const isCurrentlyInline = state.inline || false\n  const isCurrentlySimple = state.simple || false\n  state.inline = true\n  state.simple = true\n  const result = parse(children, state)\n  state.inline = isCurrentlyInline\n  state.simple = isCurrentlySimple\n  return result\n}\n\n/**\n * Anything inline that isn't a link.\n */\nfunction parseSimpleInline(\n  parse: MarkdownToJSX.NestedParser,\n  children: string,\n  state: MarkdownToJSX.State\n): MarkdownToJSX.ParserResult[] {\n  const isCurrentlyInline = state.inline || false\n  const isCurrentlySimple = state.simple || false\n  state.inline = false\n  state.simple = true\n  const result = parse(children, state)\n  state.inline = isCurrentlyInline\n  state.simple = isCurrentlySimple\n  return result\n}\n\nfunction parseBlock(\n  parse,\n  children,\n  state: MarkdownToJSX.State\n): MarkdownToJSX.ParserResult[] {\n  const isCurrentlyInline = state.inline || false\n  state.inline = false\n  const result = parse(children, state)\n  state.inline = isCurrentlyInline\n  return result\n}\n\nconst parseCaptureInline: MarkdownToJSX.Parser<{\n  children: MarkdownToJSX.ParserResult[]\n}> = (capture, parse, state: MarkdownToJSX.State) => {\n  return {\n    children: parseInline(parse, capture[1], state),\n  }\n}\n\nfunction captureNothing() {\n  return {}\n}\n\nfunction renderNothing() {\n  return null\n}\n\nfunction reactFor(render) {\n  return function patchedRender(\n    ast: MarkdownToJSX.ParserResult | MarkdownToJSX.ParserResult[],\n    state: MarkdownToJSX.State = {}\n  ): React.ReactChild[] {\n    if (Array.isArray(ast)) {\n      const oldKey = state.key\n      const result = []\n\n      // map nestedOutput over the ast, except group any text\n      // nodes together into a single string output.\n      let lastWasString = false\n\n      for (let i = 0; i < ast.length; i++) {\n        state.key = i\n\n        const nodeOut = patchedRender(ast[i], state)\n        const isString = typeof nodeOut === 'string'\n\n        if (isString && lastWasString) {\n          result[result.length - 1] += nodeOut\n        } else if (nodeOut !== null) {\n          result.push(nodeOut)\n        }\n\n        lastWasString = isString\n      }\n\n      state.key = oldKey\n\n      return result\n    }\n\n    return render(ast, patchedRender, state)\n  }\n}\n\nfunction createRenderer(\n  rules: MarkdownToJSX.Rules,\n  userRender?: MarkdownToJSX.Options['renderRule']\n) {\n  return function renderRule(\n    ast: MarkdownToJSX.ParserResult,\n    render: MarkdownToJSX.RuleOutput,\n    state: MarkdownToJSX.State\n  ): React.ReactChild {\n    const renderer = rules[ast.type].render as MarkdownToJSX.Rule['render']\n\n    return userRender\n      ? userRender(() => renderer(ast, render, state), ast, render, state)\n      : renderer(ast, render, state)\n  }\n}\n\nfunction cx(...args) {\n  return args.filter(Boolean).join(' ')\n}\n\nfunction get(src: Object, path: string, fb?: any) {\n  let ptr = src\n  const frags = path.split('.')\n\n  while (frags.length) {\n    ptr = ptr[frags[0]]\n\n    if (ptr === undefined) break\n    else frags.shift()\n  }\n\n  return ptr || fb\n}\n\nfunction getTag(tag: string, overrides: MarkdownToJSX.Overrides) {\n  const override = get(overrides, tag)\n\n  if (!override) return tag\n\n  return typeof override === 'function' ||\n    (typeof override === 'object' && 'render' in override)\n    ? override\n    : get(overrides, `${tag}.component`, tag)\n}\n\nexport function compiler(\n  markdown: string = '',\n  options: MarkdownToJSX.Options = {}\n) {\n  options.overrides = options.overrides || {}\n  options.slugify = options.slugify || slugify\n  options.namedCodesToUnicode = options.namedCodesToUnicode\n    ? { ...namedCodesToUnicode, ...options.namedCodesToUnicode }\n    : namedCodesToUnicode\n\n  const createElementFn = options.createElement || React.createElement\n\n  // JSX custom pragma\n  // eslint-disable-next-line no-unused-vars\n  function h(\n    // locally we always will render a known string tag\n    tag: MarkdownToJSX.HTMLTags,\n    props: Parameters<MarkdownToJSX.CreateElement>[1] & {\n      className?: string\n      id?: string\n    },\n    ...children\n  ) {\n    const overrideProps = get(options.overrides, `${tag}.props`, {})\n\n    return createElementFn(\n      getTag(tag, options.overrides),\n      {\n        ...props,\n        ...overrideProps,\n        className: cx(props?.className, overrideProps.className) || undefined,\n      },\n      ...children\n    )\n  }\n\n  function compile(input: string): JSX.Element {\n    input = input.replace(FRONT_MATTER_R, '')\n\n    let inline = false\n\n    if (options.forceInline) {\n      inline = true\n    } else if (!options.forceBlock) {\n      /**\n       * should not contain any block-level markdown like newlines, lists, headings,\n       * thematic breaks, blockquotes, tables, etc\n       */\n      inline = SHOULD_RENDER_AS_BLOCK_R.test(input) === false\n    }\n\n    const arr = emitter(\n      parser(\n        inline\n          ? input\n          : `${input.trimEnd().replace(TRIM_STARTING_NEWLINES, '')}\\n\\n`,\n        {\n          inline,\n        }\n      )\n    )\n\n    while (\n      typeof arr[arr.length - 1] === 'string' &&\n      !arr[arr.length - 1].trim()\n    ) {\n      arr.pop()\n    }\n\n    if (options.wrapper === null) {\n      return arr\n    }\n\n    const wrapper = options.wrapper || (inline ? 'span' : 'div')\n    let jsx\n\n    if (arr.length > 1 || options.forceWrapper) {\n      jsx = arr\n    } else if (arr.length === 1) {\n      jsx = arr[0]\n\n      // TODO: remove this for React 16\n      if (typeof jsx === 'string') {\n        return <span key=\"outer\">{jsx}</span>\n      } else {\n        return jsx\n      }\n    } else {\n      // TODO: return null for React 16\n      jsx = null\n    }\n\n    return React.createElement(wrapper, { key: 'outer' }, jsx)\n  }\n\n  function attrStringToMap(str: string): JSX.IntrinsicAttributes {\n    const attributes = str.match(ATTR_EXTRACTOR_R)\n    if (!attributes) {\n      return null\n    }\n\n    return attributes.reduce(function (map, raw, index) {\n      const delimiterIdx = raw.indexOf('=')\n\n      if (delimiterIdx !== -1) {\n        const key = normalizeAttributeKey(raw.slice(0, delimiterIdx)).trim()\n        const value = unquote(raw.slice(delimiterIdx + 1).trim())\n\n        const mappedKey = ATTRIBUTE_TO_JSX_PROP_MAP[key] || key\n        const normalizedValue = (map[mappedKey] = attributeValueToJSXPropValue(\n          key,\n          value\n        ))\n\n        if (\n          typeof normalizedValue === 'string' &&\n          (HTML_BLOCK_ELEMENT_R.test(normalizedValue) ||\n            HTML_SELF_CLOSING_ELEMENT_R.test(normalizedValue))\n        ) {\n          map[mappedKey] = React.cloneElement(compile(normalizedValue.trim()), {\n            key: index,\n          })\n        }\n      } else if (raw !== 'style') {\n        map[ATTRIBUTE_TO_JSX_PROP_MAP[raw] || raw] = true\n      }\n\n      return map\n    }, {})\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof markdown !== 'string') {\n      throw new Error(`markdown-to-jsx: the first argument must be\n                             a string`)\n    }\n\n    if (\n      Object.prototype.toString.call(options.overrides) !== '[object Object]'\n    ) {\n      throw new Error(`markdown-to-jsx: options.overrides (second argument property) must be\n                             undefined or an object literal with shape:\n                             {\n                                htmltagname: {\n                                    component: string|ReactComponent(optional),\n                                    props: object(optional)\n                                }\n                             }`)\n    }\n  }\n\n  const footnotes: { footnote: string; identifier: string }[] = []\n  const refs: { [key: string]: { target: string; title: string } } = {}\n\n  /**\n   * each rule's react() output function goes through our custom\n   * h() JSX pragma; this allows the override functionality to be\n   * automatically applied\n   */\n  // @ts-ignore\n  const rules: MarkdownToJSX.Rules = {\n    [RuleType.blockQuote]: {\n      match: blockRegex(BLOCKQUOTE_R),\n      order: Priority.HIGH,\n      parse(capture, parse, state) {\n        return {\n          children: parse(\n            capture[0].replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, ''),\n            state\n          ),\n        }\n      },\n      render(node, output, state) {\n        return (\n          <blockquote key={state.key}>\n            {output(node.children, state)}\n          </blockquote>\n        )\n      },\n    },\n\n    [RuleType.breakLine]: {\n      match: anyScopeRegex(BREAK_LINE_R),\n      order: Priority.HIGH,\n      parse: captureNothing,\n      render(_, __, state) {\n        return <br key={state.key} />\n      },\n    },\n\n    [RuleType.breakThematic]: {\n      match: blockRegex(BREAK_THEMATIC_R),\n      order: Priority.HIGH,\n      parse: captureNothing,\n      render(_, __, state) {\n        return <hr key={state.key} />\n      },\n    },\n\n    [RuleType.codeBlock]: {\n      match: blockRegex(CODE_BLOCK_R),\n      order: Priority.MAX,\n      parse(capture /*, parse, state*/) {\n        return {\n          lang: undefined,\n          text: capture[0].replace(/^ {4}/gm, '').replace(/\\n+$/, ''),\n        }\n      },\n\n      render(node, output, state) {\n        return (\n          <pre key={state.key}>\n            <code\n              {...node.attrs}\n              className={node.lang ? `lang-${node.lang}` : ''}\n            >\n              {node.text}\n            </code>\n          </pre>\n        )\n      },\n    } as MarkdownToJSX.Rule<{\n      attrs?: ReturnType<typeof attrStringToMap>\n      lang?: string\n      text: string\n    }>,\n\n    [RuleType.codeFenced]: {\n      match: blockRegex(CODE_BLOCK_FENCED_R),\n      order: Priority.MAX,\n      parse(capture /*, parse, state*/) {\n        return {\n          // if capture[3] it's additional metadata\n          attrs: attrStringToMap(capture[3] || ''),\n          lang: capture[2] || undefined,\n          text: capture[4],\n          type: RuleType.codeBlock,\n        }\n      },\n    },\n\n    [RuleType.codeInline]: {\n      match: simpleInlineRegex(CODE_INLINE_R),\n      order: Priority.LOW,\n      parse(capture /*, parse, state*/) {\n        return {\n          text: capture[2],\n        }\n      },\n      render(node, output, state) {\n        return <code key={state.key}>{node.text}</code>\n      },\n    },\n\n    /**\n     * footnotes are emitted at the end of compilation in a special <footer> block\n     */\n    [RuleType.footnote]: {\n      match: blockRegex(FOOTNOTE_R),\n      order: Priority.MAX,\n      parse(capture /*, parse, state*/) {\n        footnotes.push({\n          footnote: capture[2],\n          identifier: capture[1],\n        })\n\n        return {}\n      },\n      render: renderNothing,\n    },\n\n    [RuleType.footnoteReference]: {\n      match: inlineRegex(FOOTNOTE_REFERENCE_R),\n      order: Priority.HIGH,\n      parse(capture /*, parse*/) {\n        return {\n          target: `#${options.slugify(capture[1])}`,\n          text: capture[1],\n        }\n      },\n      render(node, output, state) {\n        return (\n          <a key={state.key} href={sanitizeUrl(node.target)}>\n            <sup key={state.key}>{node.text}</sup>\n          </a>\n        )\n      },\n    } as MarkdownToJSX.Rule<{ target: string; text: string }>,\n\n    [RuleType.gfmTask]: {\n      match: inlineRegex(GFM_TASK_R),\n      order: Priority.HIGH,\n      parse(capture /*, parse, state*/) {\n        return {\n          completed: capture[1].toLowerCase() === 'x',\n        }\n      },\n      render(node, output, state) {\n        return (\n          <input\n            checked={node.completed}\n            key={state.key}\n            readOnly\n            type=\"checkbox\"\n          />\n        )\n      },\n    } as MarkdownToJSX.Rule<{ completed: boolean }>,\n\n    [RuleType.heading]: {\n      match: blockRegex(\n        options.enforceAtxHeadings ? HEADING_ATX_COMPLIANT_R : HEADING_R\n      ),\n      order: Priority.HIGH,\n      parse(capture, parse, state) {\n        return {\n          children: parseInline(parse, capture[2], state),\n          id: options.slugify(capture[2]),\n          level: capture[1].length as MarkdownToJSX.HeadingNode['level'],\n        }\n      },\n      render(node, output, state) {\n        return h(\n          `h${node.level}`,\n          { id: node.id, key: state.key },\n          output(node.children, state)\n        )\n      },\n    },\n\n    [RuleType.headingSetext]: {\n      match: blockRegex(HEADING_SETEXT_R),\n      order: Priority.MAX,\n      parse(capture, parse, state) {\n        return {\n          children: parseInline(parse, capture[1], state),\n          level: capture[2] === '=' ? 1 : 2,\n          type: RuleType.heading,\n        }\n      },\n    },\n\n    [RuleType.htmlBlock]: {\n      /**\n       * find the first matching end tag and process the interior\n       */\n      match: anyScopeRegex(HTML_BLOCK_ELEMENT_R),\n      order: Priority.HIGH,\n      parse(capture, parse, state) {\n        const [, whitespace] = capture[3].match(HTML_LEFT_TRIM_AMOUNT_R)\n\n        const trimmer = new RegExp(`^${whitespace}`, 'gm')\n        const trimmed = capture[3].replace(trimmer, '')\n\n        const parseFunc = containsBlockSyntax(trimmed)\n          ? parseBlock\n          : parseInline\n\n        const tagName = capture[1].toLowerCase() as MarkdownToJSX.HTMLTags\n        const noInnerParse =\n          DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(tagName) !== -1\n\n        const ast = {\n          attrs: attrStringToMap(capture[2]),\n          noInnerParse: noInnerParse,\n          tag: (noInnerParse ? tagName : capture[1]).trim(),\n        } as {\n          attrs: ReturnType<typeof attrStringToMap>\n          children?: ReturnType<MarkdownToJSX.NestedParser> | undefined\n          noInnerParse: Boolean\n          tag: MarkdownToJSX.HTMLTags\n          text?: string | undefined\n        }\n\n        state.inAnchor = state.inAnchor || tagName === 'a'\n\n        if (noInnerParse) {\n          ast.text = capture[3]\n        } else {\n          ast.children = parseFunc(parse, trimmed, state)\n        }\n\n        /**\n         * if another html block is detected within, parse as block,\n         * otherwise parse as inline to pick up any further markdown\n         */\n        state.inAnchor = false\n\n        return ast\n      },\n      render(node, output, state) {\n        return (\n          <node.tag key={state.key} {...node.attrs}>\n            {node.text || output(node.children, state)}\n          </node.tag>\n        )\n      },\n    },\n\n    [RuleType.htmlSelfClosing]: {\n      /**\n       * find the first matching end tag and process the interior\n       */\n      match: anyScopeRegex(HTML_SELF_CLOSING_ELEMENT_R),\n      order: Priority.HIGH,\n      parse(capture /*, parse, state*/) {\n        return {\n          attrs: attrStringToMap(capture[2] || ''),\n          tag: capture[1].trim(),\n        }\n      },\n      render(node, output, state) {\n        return <node.tag {...node.attrs} key={state.key} />\n      },\n    },\n\n    [RuleType.htmlComment]: {\n      match: anyScopeRegex(HTML_COMMENT_R),\n      order: Priority.HIGH,\n      parse() {\n        return {}\n      },\n      render: renderNothing,\n    },\n\n    [RuleType.image]: {\n      match: simpleInlineRegex(IMAGE_R),\n      order: Priority.HIGH,\n      parse(capture /*, parse, state*/) {\n        return {\n          alt: capture[1],\n          target: unescapeUrl(capture[2]),\n          title: capture[3],\n        }\n      },\n      render(node, output, state) {\n        return (\n          <img\n            key={state.key}\n            alt={node.alt || undefined}\n            title={node.title || undefined}\n            src={sanitizeUrl(node.target)}\n          />\n        )\n      },\n    } as MarkdownToJSX.Rule<{\n      alt?: string\n      target: string\n      title?: string\n    }>,\n\n    [RuleType.link]: {\n      match: inlineRegex(LINK_R),\n      order: Priority.LOW,\n      parse(capture, parse, state) {\n        return {\n          children: parseSimpleInline(parse, capture[1], state),\n          target: unescapeUrl(capture[2]),\n          title: capture[3],\n        }\n      },\n      render(node, output, state) {\n        return (\n          <a key={state.key} href={sanitizeUrl(node.target)} title={node.title}>\n            {output(node.children, state)}\n          </a>\n        )\n      },\n    },\n\n    // https://daringfireball.net/projects/markdown/syntax#autolink\n    [RuleType.linkAngleBraceStyleDetector]: {\n      match: inlineRegex(LINK_AUTOLINK_R),\n      order: Priority.MAX,\n      parse(capture /*, parse, state*/) {\n        return {\n          children: [\n            {\n              text: capture[1],\n              type: RuleType.text,\n            },\n          ],\n          target: capture[1],\n          type: RuleType.link,\n        }\n      },\n    },\n\n    [RuleType.linkBareUrlDetector]: {\n      match: (source, state) => {\n        if (state.inAnchor) {\n          return null\n        }\n        return inlineRegex(LINK_AUTOLINK_BARE_URL_R)(source, state)\n      },\n      order: Priority.MAX,\n      parse(capture /*, parse, state*/) {\n        return {\n          children: [\n            {\n              text: capture[1],\n              type: RuleType.text,\n            },\n          ],\n          target: capture[1],\n          title: undefined,\n          type: RuleType.link,\n        }\n      },\n    },\n\n    [RuleType.linkMailtoDetector]: {\n      match: inlineRegex(LINK_AUTOLINK_MAILTO_R),\n      order: Priority.MAX,\n      parse(capture /*, parse, state*/) {\n        let address = capture[1]\n        let target = capture[1]\n\n        // Check for a `mailto:` already existing in the link:\n        if (!AUTOLINK_MAILTO_CHECK_R.test(target)) {\n          target = 'mailto:' + target\n        }\n\n        return {\n          children: [\n            {\n              text: address.replace('mailto:', ''),\n              type: RuleType.text,\n            },\n          ],\n          target: target,\n          type: RuleType.link,\n        }\n      },\n    },\n\n    [RuleType.orderedList]: generateListRule(\n      h,\n      ORDERED\n    ) as MarkdownToJSX.Rule<MarkdownToJSX.OrderedListNode>,\n\n    [RuleType.unorderedList]: generateListRule(\n      h,\n      UNORDERED\n    ) as MarkdownToJSX.Rule<MarkdownToJSX.UnorderedListNode>,\n\n    [RuleType.newlineCoalescer]: {\n      match: blockRegex(CONSECUTIVE_NEWLINE_R),\n      order: Priority.LOW,\n      parse: captureNothing,\n      render(/*node, output, state*/) {\n        return '\\n'\n      },\n    },\n\n    [RuleType.paragraph]: {\n      match: matchParagraph,\n      order: Priority.LOW,\n      parse: parseCaptureInline,\n      render(node, output, state) {\n        return <p key={state.key}>{output(node.children, state)}</p>\n      },\n    } as MarkdownToJSX.Rule<ReturnType<typeof parseCaptureInline>>,\n\n    [RuleType.ref]: {\n      match: inlineRegex(REFERENCE_IMAGE_OR_LINK),\n      order: Priority.MAX,\n      parse(capture /*, parse*/) {\n        refs[capture[1]] = {\n          target: capture[2],\n          title: capture[4],\n        }\n\n        return {}\n      },\n      render: renderNothing,\n    },\n\n    [RuleType.refImage]: {\n      match: simpleInlineRegex(REFERENCE_IMAGE_R),\n      order: Priority.MAX,\n      parse(capture) {\n        return {\n          alt: capture[1] || undefined,\n          ref: capture[2],\n        }\n      },\n      render(node, output, state) {\n        return refs[node.ref] ? (\n          <img\n            key={state.key}\n            alt={node.alt}\n            src={sanitizeUrl(refs[node.ref].target)}\n            title={refs[node.ref].title}\n          />\n        ) : null\n      },\n    } as MarkdownToJSX.Rule<{ alt?: string; ref: string }>,\n\n    [RuleType.refLink]: {\n      match: inlineRegex(REFERENCE_LINK_R),\n      order: Priority.MAX,\n      parse(capture, parse, state) {\n        return {\n          children: parse(capture[1], state),\n          fallbackChildren: parse(\n            capture[0].replace(SQUARE_BRACKETS_R, '\\\\$1'),\n            state\n          ),\n          ref: capture[2],\n        }\n      },\n      render(node, output, state) {\n        return refs[node.ref] ? (\n          <a\n            key={state.key}\n            href={sanitizeUrl(refs[node.ref].target)}\n            title={refs[node.ref].title}\n          >\n            {output(node.children, state)}\n          </a>\n        ) : (\n          <span key={state.key}>{output(node.fallbackChildren, state)}</span>\n        )\n      },\n    },\n\n    [RuleType.table]: {\n      match: blockRegex(NP_TABLE_R),\n      order: Priority.HIGH,\n      parse: parseTable,\n      render(node, output, state) {\n        const table = node as MarkdownToJSX.TableNode\n        return (\n          <table key={state.key}>\n            <thead>\n              <tr>\n                {table.header.map(function generateHeaderCell(content, i) {\n                  return (\n                    <th key={i} style={getTableStyle(table, i)}>\n                      {output(content, state)}\n                    </th>\n                  )\n                })}\n              </tr>\n            </thead>\n\n            <tbody>\n              {table.cells.map(function generateTableRow(row, i) {\n                return (\n                  <tr key={i}>\n                    {row.map(function generateTableCell(content, c) {\n                      return (\n                        <td key={c} style={getTableStyle(table, c)}>\n                          {output(content, state)}\n                        </td>\n                      )\n                    })}\n                  </tr>\n                )\n              })}\n            </tbody>\n          </table>\n        )\n      },\n    },\n\n    [RuleType.text]: {\n      // Here we look for anything followed by non-symbols,\n      // double newlines, or double-space-newlines\n      // We break on any symbol characters so that this grammar\n      // is easy to extend without needing to modify this regex\n      match: anyScopeRegex(TEXT_PLAIN_R),\n      order: Priority.MIN,\n      parse(capture /*, parse, state*/) {\n        return {\n          text: capture[0]\n            // nbsp -> unicode equivalent for named chars\n            .replace(HTML_CHAR_CODE_R, (full, inner) => {\n              return options.namedCodesToUnicode[inner]\n                ? options.namedCodesToUnicode[inner]\n                : full\n            }),\n        }\n      },\n      render(node /*, output, state*/) {\n        return node.text\n      },\n    },\n\n    [RuleType.textBolded]: {\n      match: simpleInlineRegex(TEXT_BOLD_R),\n      order: Priority.MED,\n      parse(capture, parse, state) {\n        return {\n          // capture[1] -> the syntax control character\n          // capture[2] -> inner content\n          children: parse(capture[2], state),\n        }\n      },\n      render(node, output, state) {\n        return <strong key={state.key}>{output(node.children, state)}</strong>\n      },\n    },\n\n    [RuleType.textEmphasized]: {\n      match: simpleInlineRegex(TEXT_EMPHASIZED_R),\n      order: Priority.LOW,\n      parse(capture, parse, state) {\n        return {\n          // capture[1] -> opening * or _\n          // capture[2] -> inner content\n          children: parse(capture[2], state),\n        }\n      },\n      render(node, output, state) {\n        return <em key={state.key}>{output(node.children, state)}</em>\n      },\n    },\n\n    [RuleType.textEscaped]: {\n      // We don't allow escaping numbers, letters, or spaces here so that\n      // backslashes used in plain text still get rendered. But allowing\n      // escaping anything else provides a very flexible escape mechanism,\n      // regardless of how this grammar is extended.\n      match: simpleInlineRegex(TEXT_ESCAPED_R),\n      order: Priority.HIGH,\n      parse(capture /*, parse, state*/) {\n        return {\n          text: capture[1],\n          type: RuleType.text,\n        }\n      },\n    },\n\n    [RuleType.textMarked]: {\n      match: simpleInlineRegex(TEXT_MARKED_R),\n      order: Priority.LOW,\n      parse: parseCaptureInline,\n      render(node, output, state) {\n        return <mark key={state.key}>{output(node.children, state)}</mark>\n      },\n    },\n\n    [RuleType.textStrikethroughed]: {\n      match: simpleInlineRegex(TEXT_STRIKETHROUGHED_R),\n      order: Priority.LOW,\n      parse: parseCaptureInline,\n      render(node, output, state) {\n        return <del key={state.key}>{output(node.children, state)}</del>\n      },\n    },\n  }\n\n  // Object.keys(rules).forEach(key => {\n  //   let { match: match, parse: parse } = rules[key]\n\n  //   rules[key].match = (...args) => {\n  //     const start = performance.now()\n  //     const result = match(...args)\n  //     const delta = performance.now() - start\n\n  //     if (delta > 5)\n  //       console.warn(\n  //         `Slow match for ${key}: ${delta.toFixed(3)}ms, input: ${args[0]}`\n  //       )\n\n  //     return result\n  //   }\n\n  //   rules[key].parse = (...args) => {\n  //     const start = performance.now()\n  //     const result = parse(...args)\n  //     const delta = performance.now() - start\n\n  //     if (delta > 5)\n  //       console.warn(`Slow parse for ${key}: ${delta.toFixed(3)}ms`)\n\n  //     console.log(`${key}:parse`, `${delta.toFixed(3)}ms`, args[0])\n\n  //     return result\n  //   }\n  // })\n\n  if (options.disableParsingRawHTML === true) {\n    delete rules[RuleType.htmlBlock]\n    delete rules[RuleType.htmlSelfClosing]\n  }\n\n  const parser = parserFor(rules)\n  const emitter: Function = reactFor(createRenderer(rules, options.renderRule))\n\n  const jsx = compile(markdown)\n\n  if (footnotes.length) {\n    return (\n      <div>\n        {jsx}\n        <footer key=\"footer\">\n          {footnotes.map(function createFootnote(def) {\n            return (\n              <div id={options.slugify(def.identifier)} key={def.identifier}>\n                {def.identifier}\n                {emitter(parser(def.footnote, { inline: true }))}\n              </div>\n            )\n          })}\n        </footer>\n      </div>\n    )\n  }\n\n  return jsx\n}\n\n/**\n * A simple HOC for easy React use. Feed the markdown content as a direct child\n * and the rest is taken care of automatically.\n */\nconst Markdown: React.FC<{\n  [key: string]: any\n  children: string\n  options?: MarkdownToJSX.Options\n}> = ({ children = '', options, ...props }) => {\n  if (process.env.NODE_ENV !== 'production' && typeof children !== 'string') {\n    console.error(\n      'markdown-to-jsx: <Markdown> component only accepts a single string as a child, received:',\n      children\n    )\n  }\n\n  return React.cloneElement(\n    compiler(children, options),\n    props as JSX.IntrinsicAttributes\n  )\n}\n\nexport namespace MarkdownToJSX {\n  /**\n   * RequireAtLeastOne<{ ... }> <- only requires at least one key\n   */\n  type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<\n    T,\n    Exclude<keyof T, Keys>\n  > &\n    {\n      [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>\n    }[Keys]\n\n  export type CreateElement = typeof React.createElement\n\n  export type HTMLTags = keyof JSX.IntrinsicElements\n\n  export type State = {\n    /** true if the current content is inside anchor link grammar */\n    inAnchor?: boolean\n    /** true if parsing in an inline context (subset of rules around formatting and links) */\n    inline?: boolean\n    /** true if in a table */\n    inTable?: boolean\n    /** use this for the `key` prop */\n    key?: React.Key\n    /** true if in a list */\n    list?: boolean\n    /** true if parsing in inline context w/o links */\n    simple?: boolean\n  }\n\n  export interface BlockQuoteNode {\n    children: MarkdownToJSX.ParserResult[]\n    type: RuleType.blockQuote\n  }\n\n  export interface BreakLineNode {\n    type: RuleType.breakLine\n  }\n\n  export interface BreakThematicNode {\n    type: RuleType.breakThematic\n  }\n\n  export interface CodeBlockNode {\n    type: RuleType.codeBlock\n    attrs?: JSX.IntrinsicAttributes\n    lang?: string\n    text: string\n  }\n\n  export interface CodeFencedNode {\n    type: RuleType.codeFenced\n  }\n\n  export interface CodeInlineNode {\n    type: RuleType.codeInline\n    text: string\n  }\n\n  export interface FootnoteNode {\n    type: RuleType.footnote\n  }\n\n  export interface FootnoteReferenceNode {\n    type: RuleType.footnoteReference\n    target: string\n    text: string\n  }\n\n  export interface GFMTaskNode {\n    type: RuleType.gfmTask\n    completed: boolean\n  }\n\n  export interface HeadingNode {\n    type: RuleType.heading\n    children: MarkdownToJSX.ParserResult[]\n    id: string\n    level: 1 | 2 | 3 | 4 | 5 | 6\n  }\n\n  export interface HeadingSetextNode {\n    type: RuleType.headingSetext\n  }\n\n  export interface HTMLCommentNode {\n    type: RuleType.htmlComment\n  }\n\n  export interface ImageNode {\n    type: RuleType.image\n    alt?: string\n    target: string\n    title?: string\n  }\n\n  export interface LinkNode {\n    type: RuleType.link\n    children: MarkdownToJSX.ParserResult[]\n    target: string\n    title?: string\n  }\n\n  export interface LinkAngleBraceNode {\n    type: RuleType.linkAngleBraceStyleDetector\n  }\n\n  export interface LinkBareURLNode {\n    type: RuleType.linkBareUrlDetector\n  }\n\n  export interface LinkMailtoNode {\n    type: RuleType.linkMailtoDetector\n  }\n\n  export interface OrderedListNode {\n    type: RuleType.orderedList\n    items: MarkdownToJSX.ParserResult[][]\n    ordered: true\n    start?: number\n  }\n\n  export interface UnorderedListNode {\n    type: RuleType.unorderedList\n    items: MarkdownToJSX.ParserResult[][]\n    ordered: false\n  }\n\n  export interface NewlineNode {\n    type: RuleType.newlineCoalescer\n  }\n\n  export interface ParagraphNode {\n    type: RuleType.paragraph\n    children: MarkdownToJSX.ParserResult[]\n  }\n\n  export interface ReferenceNode {\n    type: RuleType.ref\n  }\n\n  export interface ReferenceImageNode {\n    type: RuleType.refImage\n    alt?: string\n    ref: string\n  }\n\n  export interface ReferenceLinkNode {\n    type: RuleType.refLink\n    children: MarkdownToJSX.ParserResult[]\n    fallbackChildren: MarkdownToJSX.ParserResult[]\n    ref: string\n  }\n\n  export interface TableNode {\n    type: RuleType.table\n    /**\n     * alignment for each table column\n     */\n    align: ('left' | 'right' | 'center')[]\n    cells: MarkdownToJSX.ParserResult[][][]\n    header: MarkdownToJSX.ParserResult[][]\n  }\n\n  export interface TableSeparatorNode {\n    type: RuleType.tableSeparator\n  }\n\n  export interface TextNode {\n    type: RuleType.text\n    text: string\n  }\n\n  export interface BoldTextNode {\n    type: RuleType.textBolded\n    children: MarkdownToJSX.ParserResult[]\n  }\n\n  export interface ItalicTextNode {\n    type: RuleType.textEmphasized\n    children: MarkdownToJSX.ParserResult[]\n  }\n\n  export interface EscapedTextNode {\n    type: RuleType.textEscaped\n  }\n\n  export interface MarkedTextNode {\n    type: RuleType.textMarked\n    children: MarkdownToJSX.ParserResult[]\n  }\n\n  export interface StrikethroughTextNode {\n    type: RuleType.textStrikethroughed\n    children: MarkdownToJSX.ParserResult[]\n  }\n\n  export interface HTMLNode {\n    type: RuleType.htmlBlock\n    attrs: JSX.IntrinsicAttributes\n    children?: ReturnType<MarkdownToJSX.NestedParser> | undefined\n    noInnerParse: Boolean\n    tag: MarkdownToJSX.HTMLTags\n    text?: string | undefined\n  }\n\n  export interface HTMLSelfClosingNode {\n    type: RuleType.htmlSelfClosing\n    attrs: JSX.IntrinsicAttributes\n    tag: string\n  }\n\n  export type ParserResult =\n    | BlockQuoteNode\n    | BreakLineNode\n    | BreakThematicNode\n    | CodeBlockNode\n    | CodeFencedNode\n    | CodeInlineNode\n    | FootnoteNode\n    | FootnoteReferenceNode\n    | GFMTaskNode\n    | HeadingNode\n    | HeadingSetextNode\n    | HTMLCommentNode\n    | ImageNode\n    | LinkNode\n    | LinkAngleBraceNode\n    | LinkBareURLNode\n    | LinkMailtoNode\n    | OrderedListNode\n    | UnorderedListNode\n    | NewlineNode\n    | ParagraphNode\n    | ReferenceNode\n    | ReferenceImageNode\n    | ReferenceLinkNode\n    | TableNode\n    | TableSeparatorNode\n    | TextNode\n    | BoldTextNode\n    | ItalicTextNode\n    | EscapedTextNode\n    | MarkedTextNode\n    | StrikethroughTextNode\n    | HTMLNode\n    | HTMLSelfClosingNode\n\n  export type NestedParser = (\n    input: string,\n    state?: MarkdownToJSX.State\n  ) => MarkdownToJSX.ParserResult[]\n\n  export type Parser<ParserOutput> = (\n    capture: RegExpMatchArray,\n    nestedParse: NestedParser,\n    state?: MarkdownToJSX.State\n  ) => ParserOutput\n\n  export type RuleOutput = (\n    ast: MarkdownToJSX.ParserResult | MarkdownToJSX.ParserResult[],\n    state: MarkdownToJSX.State\n  ) => JSX.Element\n\n  export type Rule<ParserOutput = MarkdownToJSX.ParserResult> = {\n    match: (\n      source: string,\n      state: MarkdownToJSX.State,\n      prevCapturedString?: string\n    ) => RegExpMatchArray\n    order: Priority\n    parse: MarkdownToJSX.Parser<Omit<ParserOutput, 'type'>>\n    render?: (\n      node: ParserOutput,\n      /**\n       * Continue rendering AST nodes if applicable.\n       */\n      render: RuleOutput,\n      state?: MarkdownToJSX.State\n    ) => React.ReactChild\n  }\n\n  export type Rules = {\n    [K in ParserResult['type']]: K extends RuleType.table\n      ? Rule<Extract<ParserResult, { type: K | RuleType.paragraph }>>\n      : Rule<Extract<ParserResult, { type: K }>>\n  }\n\n  export type Override =\n    | RequireAtLeastOne<{\n        component: React.ElementType\n        props: Object\n      }>\n    | React.ElementType\n\n  export type Overrides = {\n    [tag in HTMLTags]?: Override\n  } & {\n    [customComponent: string]: Override\n  }\n\n  export type Options = Partial<{\n    /**\n     * Ultimate control over the output of all rendered JSX.\n     */\n    createElement: (\n      tag: Parameters<CreateElement>[0],\n      props: JSX.IntrinsicAttributes,\n      ...children: React.ReactChild[]\n    ) => React.ReactChild\n\n    /**\n     * Disable the compiler's best-effort transcription of provided raw HTML\n     * into JSX-equivalent. This is the functionality that prevents the need to\n     * use `dangerouslySetInnerHTML` in React.\n     */\n    disableParsingRawHTML: boolean\n\n    /**\n     * Forces the compiler to have space between hash sign and the header text which\n     * is explicitly stated in the most of the markdown specs.\n     * https://github.github.com/gfm/#atx-heading\n     * `The opening sequence of # characters must be followed by a space or by the end of line.`\n     */\n    enforceAtxHeadings: boolean\n\n    /**\n     * Forces the compiler to always output content with a block-level wrapper\n     * (`<p>` or any block-level syntax your markdown already contains.)\n     */\n    forceBlock: boolean\n\n    /**\n     * Forces the compiler to always output content with an inline wrapper (`<span>`)\n     */\n    forceInline: boolean\n\n    /**\n     * Forces the compiler to wrap results, even if there is only a single\n     * child or no children.\n     */\n    forceWrapper: boolean\n\n    /**\n     * Supply additional HTML entity: unicode replacement mappings.\n     *\n     * Pass only the inner part of the entity as the key,\n     * e.g. `&le;` -> `{ \"le\": \"\\u2264\" }`\n     *\n     * By default\n     * the following entities are replaced with their unicode equivalents:\n     *\n     * ```\n     * &amp;\n     * &apos;\n     * &gt;\n     * &lt;\n     * &nbsp;\n     * &quot;\n     * ```\n     */\n    namedCodesToUnicode: {\n      [key: string]: string\n    }\n\n    /**\n     * Selectively control the output of particular HTML tags as they would be\n     * emitted by the compiler.\n     */\n    overrides: Overrides\n\n    /**\n     * Allows for full control over rendering of particular rules.\n     * For example, to implement a LaTeX renderer such as `react-katex`:\n     *\n     * ```\n     * renderRule(next, node, renderChildren, state) {\n     *   if (node.type === RuleType.codeBlock && node.lang === 'latex') {\n     *     return (\n     *       <TeX as=\"div\" key={state.key}>\n     *         {String.raw`${node.text}`}\n     *       </TeX>\n     *     )\n     *   }\n     *\n     *   return next();\n     * }\n     * ```\n     *\n     * Thar be dragons obviously, but you can do a lot with this\n     * (have fun!) To see how things work internally, check the `render`\n     * method in source for a particular rule.\n     */\n    renderRule: (\n      /** Resume normal processing, call this function as a fallback if you are not returning custom JSX. */\n      next: () => React.ReactChild,\n      /** the current AST node, use `RuleType` against `node.type` for identification */\n      node: ParserResult,\n      /** use as `renderChildren(node.children)` for block nodes */\n      renderChildren: RuleOutput,\n      /** contains `key` which should be supplied to the topmost JSX element */\n      state: State\n    ) => React.ReactChild\n\n    /**\n     * Override normalization of non-URI-safe characters for use in generating\n     * HTML IDs for anchor linking purposes.\n     */\n    slugify: (source: string) => string\n\n    /**\n     * Declare the type of the wrapper to be used when there are multiple\n     * children to render. Set to `null` to get an array of children back\n     * without any wrapper, or use `React.Fragment` to get a React element\n     * that won't show up in the DOM.\n     */\n    wrapper: React.ElementType | null\n  }>\n}\n\nexport default Markdown\n"],"names":["r","i","e","blockQuote","breakLine","breakThematic","codeBlock","codeFenced","codeInline","footnote","footnoteReference","gfmTask","heading","headingSetext","htmlBlock","htmlComment","htmlSelfClosing","image","link","linkAngleBraceStyleDetector","linkBareUrlDetector","linkMailtoDetector","newlineCoalescer","orderedList","paragraph","ref","refImage","refLink","table","tableSeparator","text","textBolded","textEmphasized","textEscaped","textMarked","textStrikethroughed","unorderedList","MAX","HIGH","MED","LOW","MIN","l","reduce","n","toLowerCase","for","o","amp","apos","gt","lt","nbsp","quot","c","a","s","d","u","p","f","h","m","g","y","k","x","v","b","$","E","w","S","C","A","O","T","L","R","z","M","I","U","j","B","N","H","D","P","_","F","W","G","Z","q","V","X","Q","RegExp","concat","J","K","Y","ee","ne","te","re","ie","le","oe","ce","ae","se","de","ue","pe","fe","he","me","ge","ye","ke","xe","ve","be","t","match","exec","list","inline","simple","order","parse","replace","items","map","length","indexOf","ordered","start","render","key","type","$e","Ee","we","Se","Ce","Ae","test","Oe","inTable","trim","split","push","apply","forEach","trimEnd","Te","align","cells","header","children","Le","textAlign","Re","ze","Me","Ie","Ue","endsWith","every","some","je","decodeURIComponent","Be","Ne","He","De","Pe","_e","Fe","We","_len","arguments","Array","_key","filter","Boolean","join","Ge","shift","Ze","undefined","overrides","slugify","namedCodesToUnicode","createElement","_len2","_key2","className","forceInline","forceBlock","pop","wrapper","forceWrapper","toUpperCase","slice","lang","attrs","identifier","target","href","completed","checked","readOnly","enforceAtxHeadings","id","level","noInnerParse","tag","inAnchor","alt","title","src","fallbackChildren","style","disableParsingRawHTML","Object","keys","substring","sort","renderRule","isArray","options"],"sourceRoot":""}