{"version":3,"sources":["../../../node_modules/.pnpm/markdown-to-jsx@7.7.3_react@19.0.0/node_modules/markdown-to-jsx/index.tsx","../src/components/VenueContent/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 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} as const\n\nif (process.env.NODE_ENV !== 'production') {\n  Object.keys(RuleType).forEach(key => (RuleType[key] = key))\n}\n\nexport type RuleType = (typeof RuleType)[keyof typeof RuleType]\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  '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  { class: 'className', 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\\n|$)/\nconst BLOCKQUOTE_TRIM_LEFT_MULTILINE_R = /^ *> ?/gm\nconst BLOCKQUOTE_ALERT_R = /^(?:\\[!([^\\]]*)\\]\\n)?([\\s\\S]*)/\nconst BREAK_LINE_R = /^ {2,}\\n/\nconst BREAK_THEMATIC_R = /^(?:( *[-*_])){3,} *(?:\\n *)+\\n/\nconst CODE_BLOCK_FENCED_R =\n  /^(?: {1,3})?(`{3,}|~{3,}) *(\\S+)? *([^\\n]*?)?\\n([\\s\\S]*?)(?:\\1\\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?/\nconst PARAGRAPH_R = /^[^\\n]+(?:  \\n|\\n{2,})/\nconst REFERENCE_IMAGE_OR_LINK = /^\\[([^\\]]*)\\]:\\s+<?([^\\s>]+)>?\\s*(\"([^\"]*)\")?/\nconst REFERENCE_IMAGE_R = /^!\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/\nconst REFERENCE_LINK_R = /^\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/\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) {\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(state.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\n  state.inTable = true\n\n  let cells: MarkdownToJSX.ParserResult[][] = [[]]\n  let acc = ''\n\n  function flush() {\n    if (!acc) return\n\n    const cell = cells[cells.length - 1]\n    cell.push.apply(cell, parse(acc, state))\n    acc = ''\n  }\n\n  source\n    .trim()\n    // isolate situations where a pipe should be ignored (inline code, escaped, etc)\n    .split(/(`[^`]*`|\\\\\\||\\|)/)\n    .filter(Boolean)\n    .forEach((fragment, i, arr) => {\n      if (fragment.trim() === '|') {\n        flush()\n\n        if (tableOutput) {\n          if (i !== 0 && i !== arr.length - 1) {\n            // Split the current row\n            cells.push([])\n          }\n\n          return\n        }\n      }\n\n      acc += fragment\n    })\n\n  flush()\n\n  state.inTable = prevInTable\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  tag: MarkdownToJSX.HTMLTags,\n  key: keyof React.AllHTMLAttributes<Element>,\n  value: string,\n  sanitizeUrlFn: MarkdownToJSX.Options['sanitizer']\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 sanitizeUrlFn(value, tag, key)\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    state.prevCapture = state.prevCapture || ''\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    while (source) {\n      let i = 0\n      while (i < ruleList.length) {\n        const ruleType = ruleList[i]\n        const rule = rules[ruleType]\n\n        const capture = rule.match(source, state)\n\n        if (capture) {\n          const currCaptureString = capture[0]\n\n          // retain what's been processed so far for lookbacks\n          state.prevCapture += currCaptureString\n\n          source = source.substring(currCaptureString.length)\n\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          break\n        }\n\n        i++\n      }\n    }\n\n    // reset on exit\n    state.prevCapture = ''\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(source: string, state: MarkdownToJSX.State) {\n  if (state.inline || state.simple) {\n    return null\n  }\n\n  let match = ''\n\n  source.split('\\n').every(line => {\n    line += '\\n'\n\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\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\nexport function sanitizer(url: string): string {\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 null\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.ReactNode[] {\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.ReactNode {\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.sanitizer = options.sanitizer || sanitizer\n  options.slugify = options.slugify || slugify\n  options.namedCodesToUnicode = options.namedCodesToUnicode\n    ? { ...namedCodesToUnicode, ...options.namedCodesToUnicode }\n    : namedCodesToUnicode\n\n  options.createElement = 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 options.createElement(\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): React.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 options.createElement(\n      wrapper,\n      { key: 'outer' },\n      jsx\n    ) as React.JSX.Element\n  }\n\n  function attrStringToMap(\n    tag: MarkdownToJSX.HTMLTags,\n    str: string\n  ): React.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) {\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\n        // bail out, not supported\n        if (mappedKey === 'ref') return map\n\n        const normalizedValue = (map[mappedKey] = attributeValueToJSXPropValue(\n          tag,\n          key,\n          value,\n          options.sanitizer\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] = compile(normalizedValue.trim())\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        const [, alert, content] = capture[0]\n          .replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, '')\n          .match(BLOCKQUOTE_ALERT_R)\n\n        return {\n          alert,\n          children: parse(content, state),\n        }\n      },\n      render(node, output, state) {\n        const props = {\n          key: state.key,\n        } as Record<string, unknown>\n\n        if (node.alert) {\n          props.className =\n            'markdown-alert-' +\n            options.slugify(node.alert.toLowerCase(), slugify)\n\n          node.children.unshift({\n            attrs: {},\n            children: [{ type: RuleType.text, text: node.alert }],\n            noInnerParse: true,\n            type: RuleType.htmlBlock,\n            tag: 'header',\n          })\n        }\n\n        return h('blockquote', props, output(node.children, state))\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('code', 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], slugify)}`,\n          text: capture[1],\n        }\n      },\n      render(node, output, state) {\n        return (\n          <a key={state.key} href={options.sanitizer(node.target, 'a', 'href')}>\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], slugify),\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 tag = (\n          noInnerParse ? tagName : capture[1]\n        ).trim() as MarkdownToJSX.HTMLTags\n\n        const ast = {\n          attrs: attrStringToMap(tag, capture[2]),\n          noInnerParse: noInnerParse,\n          tag,\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 || (node.children ? 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        const tag = capture[1].trim() as MarkdownToJSX.HTMLTags\n\n        return {\n          attrs: attrStringToMap(tag, capture[2] || ''),\n          tag,\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={options.sanitizer(node.target, 'img', 'src')}\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\n            key={state.key}\n            href={options.sanitizer(node.target, 'a', 'href')}\n            title={node.title}\n          >\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 || options.disableAutoLink) {\n          return null\n        }\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={options.sanitizer(refs[node.ref].target, 'img', 'src')}\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: capture[0],\n          ref: capture[2],\n        }\n      },\n      render(node, output, state) {\n        return refs[node.ref] ? (\n          <a\n            key={state.key}\n            href={options.sanitizer(refs[node.ref].target, 'a', 'href')}\n            title={refs[node.ref].title}\n          >\n            {output(node.children, state)}\n          </a>\n        ) : (\n          <span key={state.key}>{node.fallbackChildren}</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\n                id={options.slugify(def.identifier, slugify)}\n                key={def.identifier}\n              >\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  Omit<React.HTMLAttributes<Element>, 'children'> & {\n    children: string\n    options?: MarkdownToJSX.Options\n  }\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 React.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 React.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    /** used for lookbacks */\n    prevCapture?: string\n    /** true if parsing in inline context w/o links */\n    simple?: boolean\n  }\n\n  export interface BlockQuoteNode {\n    alert?: string\n    children: MarkdownToJSX.ParserResult[]\n    type: typeof RuleType.blockQuote\n  }\n\n  export interface BreakLineNode {\n    type: typeof RuleType.breakLine\n  }\n\n  export interface BreakThematicNode {\n    type: typeof RuleType.breakThematic\n  }\n\n  export interface CodeBlockNode {\n    type: typeof RuleType.codeBlock\n    attrs?: React.JSX.IntrinsicAttributes\n    lang?: string\n    text: string\n  }\n\n  export interface CodeFencedNode {\n    type: typeof RuleType.codeFenced\n  }\n\n  export interface CodeInlineNode {\n    type: typeof RuleType.codeInline\n    text: string\n  }\n\n  export interface FootnoteNode {\n    type: typeof RuleType.footnote\n  }\n\n  export interface FootnoteReferenceNode {\n    type: typeof RuleType.footnoteReference\n    target: string\n    text: string\n  }\n\n  export interface GFMTaskNode {\n    type: typeof RuleType.gfmTask\n    completed: boolean\n  }\n\n  export interface HeadingNode {\n    type: typeof 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: typeof RuleType.headingSetext\n  }\n\n  export interface HTMLCommentNode {\n    type: typeof RuleType.htmlComment\n  }\n\n  export interface ImageNode {\n    type: typeof RuleType.image\n    alt?: string\n    target: string\n    title?: string\n  }\n\n  export interface LinkNode {\n    type: typeof RuleType.link\n    children: MarkdownToJSX.ParserResult[]\n    target: string\n    title?: string\n  }\n\n  export interface LinkAngleBraceNode {\n    type: typeof RuleType.linkAngleBraceStyleDetector\n  }\n\n  export interface LinkBareURLNode {\n    type: typeof RuleType.linkBareUrlDetector\n  }\n\n  export interface LinkMailtoNode {\n    type: typeof RuleType.linkMailtoDetector\n  }\n\n  export interface OrderedListNode {\n    type: typeof RuleType.orderedList\n    items: MarkdownToJSX.ParserResult[][]\n    ordered: true\n    start?: number\n  }\n\n  export interface UnorderedListNode {\n    type: typeof RuleType.unorderedList\n    items: MarkdownToJSX.ParserResult[][]\n    ordered: false\n  }\n\n  export interface NewlineNode {\n    type: typeof RuleType.newlineCoalescer\n  }\n\n  export interface ParagraphNode {\n    type: typeof RuleType.paragraph\n    children: MarkdownToJSX.ParserResult[]\n  }\n\n  export interface ReferenceNode {\n    type: typeof RuleType.ref\n  }\n\n  export interface ReferenceImageNode {\n    type: typeof RuleType.refImage\n    alt?: string\n    ref: string\n  }\n\n  export interface ReferenceLinkNode {\n    type: typeof RuleType.refLink\n    children: MarkdownToJSX.ParserResult[]\n    fallbackChildren: string\n    ref: string\n  }\n\n  export interface TableNode {\n    type: typeof 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: typeof RuleType.tableSeparator\n  }\n\n  export interface TextNode {\n    type: typeof RuleType.text\n    text: string\n  }\n\n  export interface BoldTextNode {\n    type: typeof RuleType.textBolded\n    children: MarkdownToJSX.ParserResult[]\n  }\n\n  export interface ItalicTextNode {\n    type: typeof RuleType.textEmphasized\n    children: MarkdownToJSX.ParserResult[]\n  }\n\n  export interface EscapedTextNode {\n    type: typeof RuleType.textEscaped\n  }\n\n  export interface MarkedTextNode {\n    type: typeof RuleType.textMarked\n    children: MarkdownToJSX.ParserResult[]\n  }\n\n  export interface StrikethroughTextNode {\n    type: typeof RuleType.textStrikethroughed\n    children: MarkdownToJSX.ParserResult[]\n  }\n\n  export interface HTMLNode {\n    type: typeof RuleType.htmlBlock\n    attrs: React.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: typeof RuleType.htmlSelfClosing\n    attrs: React.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  ) => React.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.ReactNode\n  }\n\n  export type Rules = {\n    [K in ParserResult['type']]: K extends typeof RuleType.table\n      ? Rule<Extract<ParserResult, { type: K | typeof 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: React.JSX.IntrinsicAttributes,\n      ...children: React.ReactNode[]\n    ) => React.ReactNode\n\n    /**\n     * The library automatically generates an anchor tag for bare URLs included in the markdown\n     * document, but this behavior can be disabled if desired.\n     */\n    disableAutoLink: boolean\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.ReactNode,\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.ReactNode\n\n    /**\n     * Override the built-in sanitizer function for URLs, etc if desired. The built-in version is available as a library export called `sanitizer`.\n     */\n    sanitizer: (\n      value: string,\n      tag: HTMLTags,\n      attribute: string\n    ) => string | null\n\n    /**\n     * Override normalization of non-URI-safe characters for use in generating\n     * HTML IDs for anchor linking purposes.\n     */\n    slugify: (input: string, defaultFn: (input: string) => 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","// @ts-nocheck\n/*\n * Content Renderer with defaults\n * Adapted from tiptap-react-render: https://github.com/troop-dev/tiptap-react-render\n */\nimport { LocalizedContent } from \"@venuecms/sdk\";\nimport { VenueImage } from \"../VenueImage\";\nimport Markdown from \"markdown-to-jsx\";\nimport React, { JSX, ReactNode } from \"react\";\n\ntype ElementClasses = {\n  text?: string;\n  p?: string;\n  ul?: string;\n  ol?: string;\n  li?: string;\n  code?: string;\n  heading?: string;\n  hardBreak?: string;\n  img?: string;\n  image?: string;\n  iframe?: string;\n  h1?: string;\n  h2?: string;\n  h3?: string;\n  a?: string;\n};\n\nconst marks = {\n  bold: \"font-bold\",\n  italic: \"italic\",\n  underline: \"underline\",\n  strike: \"line-through\",\n  link: \"underline underline-offset-[3px] cursor-pointer\",\n} as const;\n\nconst elMarks = {\n  link: (props: any): ReactNode => <a {...props} />,\n} as const;\n\nconst getDefaultHandlers = (classes: ElementClasses = {}) => {\n  const defaultHandlers: NodeHandlers = {\n    text: (props) => {\n      if (props.node.marks) {\n        const className = props.node.marks\n          .reduce((accum, mark) => {\n            if (elMarks[mark.type as keyof typeof elMarks]) {\n              // elMarks are handled separately\n              return accum;\n            }\n            return `${marks[mark.type as keyof typeof marks] ?? \"\"} ${accum}`;\n          }, \"\")\n          .trim();\n\n        let hasWrappers = false;\n        const elWrappers = props.node.marks.reduce((accum, mark) => {\n          if (mark.type in elMarks) {\n            hasWrappers = true;\n            const el = elMarks[mark.type as keyof typeof elMarks];\n\n            return el({ ...mark.attrs, className, children: accum });\n          }\n\n          return accum;\n        }, props.node.text);\n\n        if (hasWrappers) {\n          return elWrappers;\n        }\n\n        return <span className={`${className}`}>{props.node.text}</span>;\n      }\n\n      if (classes.text) {\n        <span className={classes.text}>{props.node.text}</span>;\n      }\n\n      return <>{props.node.text}</>;\n    },\n    paragraph: (props) => <p className={classes.p}>{props.children}</p>,\n    bulletList: (props) => <ul className={classes.ul}>{props.children}</ul>,\n    orderedList: (props) => <ol className={classes.ol}>{props.children}</ol>,\n    listItem: (props) => <li className={classes.li}>{props.children}</li>,\n    codeBlock: (props) => (\n      <pre>\n        <code className={classes.code}>{props.children}</code>\n      </pre>\n    ),\n    heading: (props) => {\n      switch (props.node.attrs?.level) {\n        case 1:\n          return <h1 className={classes.h1}>{props.children}</h1>;\n        case 2:\n          return <h2 className={classes.h2}>{props.children}</h2>;\n        case 3:\n          return <h3 className={classes.h3}>{props.children}</h3>;\n        default:\n          return <>{props.children}</>;\n      }\n    },\n    hardBreak: () => <br />,\n    image: (props) => {\n      const { src, alt } = props.node.attrs ?? {};\n\n      const image = {\n        url: src.split(/^\\/media\\//).join(\"\"),\n        metadata: {\n          altText: alt,\n        },\n      };\n\n      return <VenueImage className={classes.image} image={image} />;\n    },\n    img: (props) => {\n      const { src, alt } = props.node;\n      const image = {\n        url: src.split(/^\\/media\\//).join(\"\"),\n        metadata: {\n          altText: alt,\n        },\n      };\n      return <VenueImage className={classes.img} image={image} />;\n    },\n    youtube: (props) => {\n      //@ts-ignore\n      const { src, start } = props.node.attrs;\n      const key = src.split(\"v=\")[1];\n\n      return (\n        <iframe\n          src={`https://www.youtube.com/embed/${key}?modestbranding=1${start ? `&amp;start=${start}` : \"\"}`}\n          frameBorder=\"0\"\n          allowFullScreen={true}\n          width=\"100%\"\n          height=\"auto\"\n          style={{\n            aspectRatio: \"4 / 3\",\n            maxWidth: \"100%\",\n          }}\n        ></iframe>\n      );\n    },\n    iframe: (props) => {\n      const {\n        // @ts-ignore\n        src,\n        // @ts-ignore\n        style,\n        // @ts-ignore\n        frameborder,\n        // @ts-ignore\n        allowfullscreen,\n        // @ts-ignore\n        referrerpolicy,\n        ...rest\n      } = props.node?.attrs ?? props; // TODO: why do we need to do this? we are getting different shapes at times and not sure why\n\n      const styles =\n        typeof style === \"string\"\n          ? style\n              ?.split(\";\")\n              .reduce((accum: Record<string, string>, style: string) => {\n                const [key, value] = style.split(\":\");\n                if (value !== undefined) {\n                  return { ...accum, [key]: value.trim() };\n                }\n                return accum;\n              }, {})\n          : style;\n\n      // TODO: We need iframely. A hack for now to check and iron out some common quirks\n      const isVideo = (() => {\n        return !!(src.match(/youtube.com/) || src.match(/vimeo.com/));\n      })();\n\n      const isBandcamp = (() => {\n        return !!src.match(/bandcamp.com/);\n      })();\n\n      const isVimeo = (() => {\n        return !!src.match(/vimeo.com/);\n      })();\n\n      return (\n        <iframe\n          src={src}\n          style={{\n            ...styles,\n            ...(isVideo\n              ? { maxWidth: \"100%\", aspectRatio: \"4 / 3\", height: \"auto\" }\n              : {}),\n            ...(isBandcamp && !styles?.height\n              ? { width: \"100%\", maxWidth: \"700px\", height: \"42px\" }\n              : {}),\n\n            ...(isVimeo && !styles?.height\n              ? {\n                  width: \"100%\",\n                  aspectRatio: (rest as any).width / (rest as any).height,\n                }\n              : {}),\n          }}\n          frameBorder={frameborder}\n          allowFullScreen={allowfullscreen}\n          referrerPolicy={referrerpolicy}\n          {...rest}\n        />\n      );\n    },\n  } as const;\n  return defaultHandlers;\n};\n\nconst getMarkdownHandlers = (classes: ElementClasses = {}) => {\n  const handlers = getDefaultHandlers(classes);\n  // the markdown renderer uses a more standard format for overriding styles, so we map it here\n  return {\n    ...handlers,\n    p: handlers.paragraph,\n    ul: handlers.bulletList,\n    ol: handlers.orderedList,\n    li: handlers.listItem,\n    code: handlers.codeBlock,\n    h1: (props: any) =>\n      handlers.heading({ ...props, node: { attrs: { level: 1 } } }),\n    h2: (props: any) =>\n      handlers.heading({ ...props, node: { attrs: { level: 2 } } }),\n    h3: (props: any) =>\n      handlers.heading({ ...props, node: { attrs: { level: 3 } } }),\n    img: (props: any) =>\n      handlers.image({\n        ...props,\n        node: { attrs: { src: props.src, alt: props.alt } },\n      }),\n    hr: (props: any) => <hr {...props} />,\n    a: (props: any) => (\n      <a href={props.href} className={classes.a}>\n        {props.children}\n      </a>\n    ),\n    span: ({ children }: { children: ReactNode }) => <span>{children}</span>, // strip out custom colors and all that (since they are usually pasted in accidentally)\n  };\n};\n\nexport type ContentStyles = Partial<\n  Record<keyof ReturnType<typeof getDefaultHandlers>, string>\n>;\n\nconst ContentRender = (props: {\n  node: RenderNode;\n  handlers?: NodeHandlers;\n  classes?: ContentStyles;\n}): JSX.Element => {\n  const { node, handlers: handlerOverrides = {} } = props;\n  const handlers = {\n    ...getDefaultHandlers(props.classes),\n    ...handlerOverrides,\n  };\n\n  // recursively render child content\n  const children: JSX.Element[] = [];\n  node.content &&\n    node.content.forEach((child, ix) => {\n      children.push(\n        <ContentRender\n          node={child}\n          handlers={handlers}\n          key={`${child.type}- ${ix} `}\n        />,\n      );\n    });\n\n  // return empty if we are missing a handler for this type\n  if (!(node.type in handlers)) {\n    console.warn(`missing type`, node);\n    return <></>;\n  }\n  // render the handler for this type\n  const Handler = handlers[node.type];\n  return <Handler node={node}>{children}</Handler>;\n};\n\n\n\ninterface Attrs {\n  readonly [attr: string]: any;\n}\n\nexport interface RenderNode {\n  type: string;\n  attrs?: Attrs;\n  marks?: Attrs[];\n  content?: RenderNode[];\n  readonly [attr: string]: any;\n}\n\nexport interface NodeProps {\n  children?: React.ReactNode;\n  node: RenderNode;\n}\n\nexport type NodeHandler = (props: NodeProps) => JSX.Element;\n\nexport interface NodeHandlers {\n  readonly [attr: string]: NodeHandler;\n}\n\nexport const VenueContent = ({\n  content,\n  contentStyles,\n  className,\n}: {\n  content: LocalizedContent;\n  contentStyles?: ContentStyles;\n  className?: string;\n}) => {\n  const { contentJSON } = content;\n\n  if (contentJSON) {\n    return (\n      <div className={className}>\n        {(contentJSON.content as Array<RenderNode>).map((node, i) => (\n          <ContentRender key={i} classes={contentStyles} node={node} />\n        ))}\n      </div>\n    );\n  }\n\n  if (content.content) {\n    return (\n      <Markdown\n        className={className}\n        options={{\n          overrides: {\n            ...getMarkdownHandlers(contentStyles),\n          },\n        }}\n      >\n        {\n          /* There are issues with <hr> tags in the parsing so we fix that with a regex */\n          // @ts-ignore\n          content.content.replaceAll(\n            /(?:\\n|\\r\\n)\\*\\*\\*(?:\\n|\\r\\n)/g,\n            \"\\n\\n***\\n\\n\",\n          )\n        }\n      </Markdown>\n    );\n  }\n\n  return null;\n};\n"],"mappings":"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","names":["Priority","RuleType","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","ATTRIBUTE_TO_JSX_PROP_MAP","reduce","obj","x","toLowerCase","class","for","namedCodesToUnicode","amp","apos","gt","lt","nbsp","quot","DO_NOT_PROCESS_HTML_ELEMENTS","ATTR_EXTRACTOR_R","AUTOLINK_MAILTO_CHECK_R","BLOCK_END_R","BLOCKQUOTE_R","BLOCKQUOTE_TRIM_LEFT_MULTILINE_R","BLOCKQUOTE_ALERT_R","BREAK_LINE_R","BREAK_THEMATIC_R","CODE_BLOCK_FENCED_R","CODE_BLOCK_R","CODE_INLINE_R","CONSECUTIVE_NEWLINE_R","CR_NEWLINE_R","FOOTNOTE_R","FOOTNOTE_REFERENCE_R","FORMFEED_R","FRONT_MATTER_R","GFM_TASK_R","HEADING_R","HEADING_ATX_COMPLIANT_R","HEADING_SETEXT_R","HTML_BLOCK_ELEMENT_R","HTML_CHAR_CODE_R","HTML_COMMENT_R","HTML_CUSTOM_ATTR_R","HTML_SELF_CLOSING_ELEMENT_R","INTERPOLATION_R","LINK_AUTOLINK_BARE_URL_R","LINK_AUTOLINK_MAILTO_R","LINK_AUTOLINK_R","CAPTURE_LETTER_AFTER_HYPHEN","NP_TABLE_R","REFERENCE_IMAGE_OR_LINK","REFERENCE_IMAGE_R","REFERENCE_LINK_R","SHOULD_RENDER_AS_BLOCK_R","TAB_R","TABLE_TRIM_PIPES","TABLE_CENTER_ALIGN","TABLE_LEFT_ALIGN","TABLE_RIGHT_ALIGN","INLINE_SKIP_R","TEXT_BOLD_R","RegExp","TEXT_EMPHASIZED_R","TEXT_MARKED_R","TEXT_STRIKETHROUGHED_R","TEXT_ESCAPED_R","TEXT_PLAIN_R","TRIM_STARTING_NEWLINES","HTML_LEFT_TRIM_AMOUNT_R","UNESCAPE_URL_R","LIST_ITEM_END_R","LIST_LOOKBEHIND_R","ORDERED_LIST_BULLET","UNORDERED_LIST_BULLET","generateListItemPrefix","type","ORDERED_LIST_ITEM_PREFIX","UNORDERED_LIST_ITEM_PREFIX","generateListItemPrefixRegex","ORDERED_LIST_ITEM_PREFIX_R","UNORDERED_LIST_ITEM_PREFIX_R","generateListItemRegex","ORDERED_LIST_ITEM_R","UNORDERED_LIST_ITEM_R","generateListRegex","bullet","ORDERED_LIST_R","UNORDERED_LIST_R","generateListRule","h","ordered","LIST_R","LIST_ITEM_R","LIST_ITEM_PREFIX_R","match","source","state","isStartOfLine","exec","prevCapture","list","inline","simple","order","parse","capture","start","items","replace","lastItemWasAParagraph","map","item","i","space","length","spaceRegex","content","isLastItem","thisItemIsAParagraph","indexOf","adjustedContent","oldStateInline","oldStateList","result","render","node","output","key","undefined","LINK_R","IMAGE_R","NON_PARAGRAPH_BLOCK_SYNTAXES","BLOCK_SYNTAXES","concat","slugify","str","parseTableAlignCapture","alignCapture","test","parseTableRow","tableOutput","prevInTable","inTable","cells","acc","flush","cell","push","apply","trim","split","filter","Boolean","forEach","fragment","arr","parseTable","align","rowText","header","children","getTableStyle","colIndex","textAlign","inlineRegex","regex","simpleInlineRegex","blockRegex","anyScopeRegex","matchParagraph","every","line","some","captured","trimEnd","sanitizer","url","decodeURIComponent","e","unescapeUrl","rawUrlString","parseInline","isCurrentlyInline","isCurrentlySimple","parseSimpleInline","parseBlock","parseCaptureInline","captureNothing","renderNothing","cx","slice","call","arguments","join","get","src","path","fb","ptr","frags","shift","getTag","tag","overrides","override","compiler","markdown","options","props","overrideProps","_options","createElement","_extends","className","compile","input","forceInline","forceBlock","emitter","parser","pop","wrapper","jsx","forceWrapper","attrStringToMap","attributes","raw","delimiterIdx","_","letter","toUpperCase","value","first","mappedKey","normalizedValue","sanitizeUrlFn","styles","kvPair","substr","footnotes","refs","rules","_rules","_capture$0$replace$ma","alert","unshift","attrs","noInnerParse","__","lang","identifier","target","href","completed","checked","readOnly","enforceAtxHeadings","id","level","_capture$3$match","trimmer","trimmed","parseFunc","r","tagName","ast","inAnchor","alt","title","disableAutoLink","address","fallbackChildren","style","row","c","full","inner","disableParsingRawHTML","ruleList","Object","keys","nestedParse","ruleType","rule","currCaptureString","substring","parsed","sort","typeA","typeB","orderA","orderB","userRender","renderer","renderRule","patchedRender","Array","isArray","oldKey","lastWasString","nodeOut","isString","def","index_module_default","_ref","_ref$children","_excluded","cloneElement","Fragment","jsx","marks","elMarks","props","getDefaultHandlers","classes","className","accum","mark","hasWrappers","elWrappers","el","src","alt","image","VenueImage","start","key","style","frameborder","allowfullscreen","referrerpolicy","rest","styles","value","isVideo","isBandcamp","isVimeo","getMarkdownHandlers","handlers","children","ContentRender","node","handlerOverrides","child","ix","Handler","VenueContent","content","contentStyles","contentJSON","i","index_module_default"]}