@codecademy/gamut

73.6.373.6.4-alpha.215ece.0
dist/Markdown/index.js
~dist/Markdown/index.jsModified
+19−10
Index: package/dist/Markdown/index.js
===================================================================
--- package/dist/Markdown/index.js
+++ package/dist/Markdown/index.js
@@ -8,12 +8,10 @@
 import { omitProps } from '../utils/omitProps';
 import { createCodeBlockOverride, createInputOverride, createTagOverride, createVideoOverride, standardOverrides } from './libs/overrides';
 import { MarkdownCheckbox } from './libs/overrides/Checkbox';
 import { Details } from './libs/overrides/Details';
-import { Iframe } from './libs/overrides/Iframe';
 import { MarkdownAnchor } from './libs/overrides/MarkdownAnchor';
 import { Table } from './libs/overrides/Table';
-import { MarkdownVideo } from './libs/overrides/Video';
 import { createPreprocessingInstructions } from './libs/preprocessing';
 import { defaultSanitizationConfig } from './libs/sanitizationConfig';
 import { markdownStyles } from './styles';
 import { jsx as _jsx } from "react/jsx-runtime";
@@ -21,8 +19,18 @@
   xmlMode: true
 });
 const preprocessingInstructions = createPreprocessingInstructions();
 const isValidNode = () => true;
+
+/**
+ * Puts each <video> block on its own lines so marked emits an HTML block.
+ * A single-line <video>...</video> is parsed as paragraph text, which wraps
+ * the video's block-level output in a <p>.
+ */
+const normalizeVideoBlocks = text => text.replace(/(<video\b[^>]*>)([\s\S]*?)(<\/video>)/gi, (_match, open, inner, close) => {
+  const body = inner.trim();
+  return `\n\n${open}\n${body ? `${body}\n` : ''}${close}\n\n`;
+});
 const MarkdownWrapper = /*#__PURE__*/_styled("div", {
   target: "e1mjarmv0",
   label: "MarkdownWrapper"
 })(({
@@ -30,9 +38,9 @@
   spacing
 }) => {
   const spacingStyleFunction = markdownStyles[spacing];
   return spacingStyleFunction ? spacingStyleFunction(theme) : '';
-}, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9NYXJrZG93bi9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0MyRSIsImZpbGUiOiIuLi8uLi9zcmMvTWFya2Rvd24vaW5kZXgudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEh0bWxUb1JlYWN0IGZyb20gJ2h0bWwtdG8tcmVhY3QnO1xuaW1wb3J0IHsgbWFya2VkIH0gZnJvbSAnbWFya2VkJztcbmltcG9ydCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc2FuaXRpemVNYXJrZG93biBmcm9tICdzYW5pdGl6ZS1tYXJrZG93bic7XG5cbmltcG9ydCB7IG9taXRQcm9wcyB9IGZyb20gJy4uL3V0aWxzL29taXRQcm9wcyc7XG5pbXBvcnQge1xuICBjcmVhdGVDb2RlQmxvY2tPdmVycmlkZSxcbiAgY3JlYXRlSW5wdXRPdmVycmlkZSxcbiAgY3JlYXRlVGFnT3ZlcnJpZGUsXG4gIGNyZWF0ZVZpZGVvT3ZlcnJpZGUsXG4gIE1hcmtkb3duT3ZlcnJpZGVTZXR0aW5ncyxcbiAgc3RhbmRhcmRPdmVycmlkZXMsXG59IGZyb20gJy4vbGlicy9vdmVycmlkZXMnO1xuaW1wb3J0IHsgTWFya2Rvd25DaGVja2JveCB9IGZyb20gJy4vbGlicy9vdmVycmlkZXMvQ2hlY2tib3gnO1xuaW1wb3J0IHsgRGV0YWlscyB9IGZyb20gJy4vbGlicy9vdmVycmlkZXMvRGV0YWlscyc7XG5pbXBvcnQgeyBJZnJhbWUgfSBmcm9tICcuL2xpYnMvb3ZlcnJpZGVzL0lmcmFtZSc7XG5pbXBvcnQge1xuICBNYXJrZG93bkFuY2hvcixcbiAgTWFya2Rvd25BbmNob3JQcm9wcyxcbn0gZnJvbSAnLi9saWJzL292ZXJyaWRlcy9NYXJrZG93bkFuY2hvcic7XG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJy4vbGlicy9vdmVycmlkZXMvVGFibGUnO1xuaW1wb3J0IHsgTWFya2Rvd25WaWRlbyB9IGZyb20gJy4vbGlicy9vdmVycmlkZXMvVmlkZW8nO1xuaW1wb3J0IHsgY3JlYXRlUHJlcHJvY2Vzc2luZ0luc3RydWN0aW9ucyB9IGZyb20gJy4vbGlicy9wcmVwcm9jZXNzaW5nJztcbmltcG9ydCB7IGRlZmF1bHRTYW5pdGl6YXRpb25Db25maWcgfSBmcm9tICcuL2xpYnMvc2FuaXRpemF0aW9uQ29uZmlnJztcbmltcG9ydCB7IG1hcmtkb3duU3R5bGVzIH0gZnJvbSAnLi9zdHlsZXMnO1xuXG5jb25zdCBodG1sVG9SZWFjdFBhcnNlciA9IEh0bWxUb1JlYWN0LlBhcnNlcih7XG4gIHhtbE1vZGU6IHRydWUsXG59KTtcblxuY29uc3QgcHJlcHJvY2Vzc2luZ0luc3RydWN0aW9ucyA9IGNyZWF0ZVByZXByb2Nlc3NpbmdJbnN0cnVjdGlvbnMoKTtcblxuY29uc3QgaXNWYWxpZE5vZGUgPSAoKSA9PiB0cnVlO1xuXG5jb25zdCBNYXJrZG93bldyYXBwZXIgPSBzdHlsZWQuZGl2PHsgc3BhY2luZzogJ2xvb3NlJyB8ICd0aWdodCcgfCAnbm9uZScgfT5gXG4gICR7KHsgdGhlbWUsIHNwYWNpbmcgfSkgPT4ge1xuICAgIGNvbnN0IHNwYWNpbmdTdHlsZUZ1bmN0aW9uID0gbWFya2Rvd25TdHlsZXNbc3BhY2luZ107XG4gICAgcmV0dXJuIHNwYWNpbmdTdHlsZUZ1bmN0aW9uID8gc3BhY2luZ1N0eWxlRnVuY3Rpb24odGhlbWUpIDogJyc7XG4gIH19XG5gO1xuXG5leHBvcnQgdHlwZSBTa2lwRGVmYXVsdE92ZXJyaWRlc1NldHRpbmdzID0ge1xuICBhPzogYm9vbGVhbjtcbiAgY2hlY2tib3g/OiBib29sZWFuO1xuICBkZXRhaWxzPzogYm9vbGVhbjtcbiAgaWZyYW1lPzogYm9vbGVhbjtcbiAgdGFibGU/OiBib29sZWFuO1xuICB2aWRlbz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBNYXJrZG93blByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlubGluZT86IGJvb2xlYW47XG4gIG92ZXJyaWRlcz86IE1hcmtkb3duT3ZlcnJpZGVTZXR0aW5ncztcbiAgc2tpcERlZmF1bHRPdmVycmlkZXM/OiBTa2lwRGVmYXVsdE92ZXJyaWRlc1NldHRpbmdzO1xuICAvKipcbiAgICogRW5hYmxlcyBnZW5lcmF0ZWQgaGVhZGVyIGlkcyBmb3IgSDEtNiB0YWdzXG4gICAqIENhbiBnZW5lcmF0ZSBkdXBsaWNhdGUgSURzIGlmIHVzZWQgb24gc2VwYXJhdGUgbWFya2Rvd24gY29tcG9uZW50cyBvbiB0aGUgc2FtZSBwYWdlXG4gICAqL1xuICBoZWFkZXJJZHM/OiBib29sZWFuO1xuICBzcGFjaW5nPzogJ2xvb3NlJyB8ICd0aWdodCcgfCAnbm9uZSc7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDYWxsYmFjayB3aGVuIGEgbWFya2Rvd24gYW5jaG9yIHRhZyBpcyBjbGlja2VkXG4gICAqL1xuICBvbkFuY2hvckNsaWNrPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxBbmNob3JFbGVtZW50PikgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBjbGFzcyBNYXJrZG93biBleHRlbmRzIFB1cmVDb21wb25lbnQ8TWFya2Rvd25Qcm9wcz4ge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3BhY2luZyA9ICd0aWdodCcsXG4gICAgICB0ZXh0ID0gJycsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBvdmVycmlkZXM6IHVzZXJPdmVycmlkZXMgPSB7fSxcbiAgICAgIHNraXBEZWZhdWx0T3ZlcnJpZGVzID0ge30sXG4gICAgICBpbmxpbmUgPSBmYWxzZSxcbiAgICAgIGhlYWRlcklkcyA9IHRydWUsXG4gICAgICBvbkFuY2hvckNsaWNrLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG92ZXJyaWRlcyA9IE9iamVjdC5rZXlzKHVzZXJPdmVycmlkZXMpLm1hcCgodGFnTmFtZSkgPT4ge1xuICAgICAgaWYgKHRhZ05hbWUgPT09ICdDb2RlQmxvY2snKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDb2RlQmxvY2tPdmVycmlkZSh0YWdOYW1lLCB1c2VyT3ZlcnJpZGVzW3RhZ05hbWVdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVUYWdPdmVycmlkZSh0YWdOYW1lLCB1c2VyT3ZlcnJpZGVzW3RhZ05hbWVdKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByb2Nlc3NpbmdJbnN0cnVjdGlvbnMgPSBbXG4gICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAhc2tpcERlZmF1bHRPdmVycmlkZXMuaWZyYW1lICYmXG4gICAgICAgIGNyZWF0ZVRhZ092ZXJyaWRlKCdpZnJhbWUnLCB7XG4gICAgICAgICAgY29tcG9uZW50OiBJZnJhbWUsXG4gICAgICAgIH0pLFxuICAgICAgIXNraXBEZWZhdWx0T3ZlcnJpZGVzLmEgJiZcbiAgICAgICAgY3JlYXRlVGFnT3ZlcnJpZGUoJ2EnLCB7XG4gICAgICAgICAgY29tcG9uZW50OiBNYXJrZG93bkFuY2hvcixcbiAgICAgICAgICBwcm9jZXNzTm9kZTogKG5vZGUsIHByb3BzKSA9PiB7XG4gICAgICAgICAgICAvLyBOb3RlOiB0aGlzIHByb2Nlc3NOb2RlIG92ZXJyaWRlIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdyYXBwaW5nIHRoaXMgY29tcG9uZW50XG4gICAgICAgICAgICAvLyBpbiBhbiBhbm9ueW1vdXMgZnVuY3Rpb25hbCBjb21wb25lbnQgYXMgd2l0aCB0aGUgVGFibGUgYmVsb3cgY2F1c2VzIHJlYWN0IHJlbmRlcmluZ1xuICAgICAgICAgICAgLy8gdG8gY3Jhc2ggd2l0aCBzb21lIGNocm9tZSB0cmFuc2xhdGlvbiBmZWF0dXJlcy5cbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2NvZGVjYWRlbXkuYXRsYXNzaWFuLm5ldC9icm93c2UvV0VCLTEyMTRcbiAgICAgICAgICAgIGNvbnN0IHsga2V5OiBlbGVtZW50S2V5LCAuLi5yZXN0IH0gPVxuICAgICAgICAgICAgICBwcm9wcyBhcyBNYXJrZG93bkFuY2hvclByb3BzICYgeyBrZXk/OiBSZWFjdC5LZXkgfTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxNYXJrZG93bkFuY2hvclxuICAgICAgICAgICAgICAgIGtleT17ZWxlbWVudEtleX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkFuY2hvckNsaWNrfVxuICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICFza2lwRGVmYXVsdE92ZXJyaWRlcy50YWJsZSAmJlxuICAgICAgICBjcmVhdGVUYWdPdmVycmlkZSgndGFibGUnLCB7XG4gICAgICAgICAgY29tcG9uZW50OiBUYWJsZSxcbiAgICAgICAgICBhbGxvd2VkQXR0cmlidXRlczogWydzdHlsZSddLFxuICAgICAgICB9KSxcbiAgICAgICFza2lwRGVmYXVsdE92ZXJyaWRlcy52aWRlbyAmJlxuICAgICAgICBjcmVhdGVWaWRlb092ZXJyaWRlKCd2aWRlbycsIHtcbiAgICAgICAgICBjb21wb25lbnQ6IE1hcmtkb3duVmlkZW8sXG4gICAgICAgIH0pLFxuICAgICAgIXNraXBEZWZhdWx0T3ZlcnJpZGVzLmRldGFpbHMgJiZcbiAgICAgICAgY3JlYXRlVGFnT3ZlcnJpZGUoJ2RldGFpbHMnLCB7XG4gICAgICAgICAgY29tcG9uZW50OiBEZXRhaWxzLFxuICAgICAgICAgIGFsbG93ZWRBdHRyaWJ1dGVzOiBbJ3N0eWxlJywgJ29wZW4nXSxcbiAgICAgICAgfSksXG4gICAgICAhc2tpcERlZmF1bHRPdmVycmlkZXMuY2hlY2tib3ggJiZcbiAgICAgICAgY3JlYXRlSW5wdXRPdmVycmlkZSgnY2hlY2tib3gnLCB7XG4gICAgICAgICAgY29tcG9uZW50OiBNYXJrZG93bkNoZWNrYm94LFxuICAgICAgICB9KSxcbiAgICAgIC4uLnN0YW5kYXJkT3ZlcnJpZGVzLFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgY29uc3QgbWFya2VkT3B0aW9ucyA9IHtcbiAgICAgIHNtYXJ0eXBhbnRzOiB0cnVlLFxuICAgICAgaGVhZGVySWRzLFxuICAgICAgaGVhZGVyUHJlZml4OiAnaGVhZGluZy0nLFxuICAgICAgbWFuZ2xlOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gUmVuZGVyIG1hcmtkb3duIHRvIGh0bWxcbiAgICBjb25zdCByYXdIdG1sID0gaW5saW5lXG4gICAgICA/IG1hcmtlZC5wYXJzZUlubGluZSh0ZXh0LCBtYXJrZWRPcHRpb25zKVxuICAgICAgOiBtYXJrZWQodGV4dCwgbWFya2VkT3B0aW9ucyk7XG5cbiAgICBjb25zdCBzYW5pdGl6YXRpb25Db25maWcgPSB7XG4gICAgICAuLi5kZWZhdWx0U2FuaXRpemF0aW9uQ29uZmlnLFxuICAgICAgYWxsb3dlZFRhZ3M6IFtcbiAgICAgICAgLi4uZGVmYXVsdFNhbml0aXphdGlvbkNvbmZpZy5hbGxvd2VkVGFncyxcbiAgICAgICAgLi4uT2JqZWN0LmtleXModXNlck92ZXJyaWRlcykubWFwKCh0YWdOYW1lKSA9PiB0YWdOYW1lLnRvTG93ZXJDYXNlKCkpLFxuICAgICAgXSxcbiAgICAgIGFsbG93ZWRBdHRyaWJ1dGVzOiB7XG4gICAgICAgIC4uLmRlZmF1bHRTYW5pdGl6YXRpb25Db25maWcuYWxsb3dlZEF0dHJpYnV0ZXMsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHVzZXJPdmVycmlkZXMpLnJlZHVjZSgoYWNjLCB0YWdOYW1lKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgIFt0YWdOYW1lLnRvTG93ZXJDYXNlKCldOiAoXG4gICAgICAgICAgICAgIHVzZXJPdmVycmlkZXNbdGFnTmFtZV0uYWxsb3dlZEF0dHJpYnV0ZXMgfHwgW11cbiAgICAgICAgICAgICkubWFwKChhdHRyKSA9PiBhdHRyLnRvTG93ZXJDYXNlKCkpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sIHt9KSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGh0bWwgPSBzYW5pdGl6ZU1hcmtkb3duKHJhd0h0bWwsIHNhbml0aXphdGlvbkNvbmZpZyk7XG5cbiAgICAvLyBSZW5kZXIgaHRtbCB0byBhIHJlYWN0IHRyZWVcbiAgICBjb25zdCByZWFjdCA9IGh0bWxUb1JlYWN0UGFyc2VyLnBhcnNlV2l0aEluc3RydWN0aW9ucyhcbiAgICAgIGh0bWwsXG4gICAgICBpc1ZhbGlkTm9kZSxcbiAgICAgIHByb2Nlc3NpbmdJbnN0cnVjdGlvbnMsXG4gICAgICBwcmVwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25zXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8TWFya2Rvd25XcmFwcGVyXG4gICAgICAgIGFzPXtpbmxpbmUgPyAnc3BhbicgOiAnZGl2J31cbiAgICAgICAgey4uLm9taXRQcm9wcyhPYmplY3Qua2V5cyh0aGlzLnByb3BzKSwgdGhpcy5wcm9wcyl9XG4gICAgICAgIGNsYXNzTmFtZT17Y3goY2xhc3NOYW1lKX1cbiAgICAgICAgc3BhY2luZz17c3BhY2luZ31cbiAgICAgID5cbiAgICAgICAge3JlYWN0fVxuICAgICAgPC9NYXJrZG93bldyYXBwZXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSB7XG4gIE1hcmtkb3duT3ZlcnJpZGVTZXR0aW5nLFxuICBNYXJrZG93bk92ZXJyaWRlU2V0dGluZ3MsXG59IGZyb20gJy4vbGlicy9vdmVycmlkZXMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlQ29kZUJsb2NrT3ZlcnJpZGUsXG4gIGNyZWF0ZUlucHV0T3ZlcnJpZGUsXG4gIGNyZWF0ZVRhZ092ZXJyaWRlLFxuICBjcmVhdGVWaWRlb092ZXJyaWRlLFxuICBzdGFuZGFyZE92ZXJyaWRlcyxcbn0gZnJvbSAnLi9saWJzL292ZXJyaWRlcyc7XG4iXX0= */"));
+}, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9NYXJrZG93bi9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUQyRSIsImZpbGUiOiIuLi8uLi9zcmMvTWFya2Rvd24vaW5kZXgudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEh0bWxUb1JlYWN0IGZyb20gJ2h0bWwtdG8tcmVhY3QnO1xuaW1wb3J0IHsgbWFya2VkIH0gZnJvbSAnbWFya2VkJztcbmltcG9ydCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc2FuaXRpemVNYXJrZG93biBmcm9tICdzYW5pdGl6ZS1tYXJrZG93bic7XG5cbmltcG9ydCB7IG9taXRQcm9wcyB9IGZyb20gJy4uL3V0aWxzL29taXRQcm9wcyc7XG5pbXBvcnQge1xuICBjcmVhdGVDb2RlQmxvY2tPdmVycmlkZSxcbiAgY3JlYXRlSW5wdXRPdmVycmlkZSxcbiAgY3JlYXRlVGFnT3ZlcnJpZGUsXG4gIGNyZWF0ZVZpZGVvT3ZlcnJpZGUsXG4gIE1hcmtkb3duT3ZlcnJpZGVTZXR0aW5nLFxuICBNYXJrZG93bk92ZXJyaWRlU2V0dGluZ3MsXG4gIHN0YW5kYXJkT3ZlcnJpZGVzLFxufSBmcm9tICcuL2xpYnMvb3ZlcnJpZGVzJztcbmltcG9ydCB7IE1hcmtkb3duQ2hlY2tib3ggfSBmcm9tICcuL2xpYnMvb3ZlcnJpZGVzL0NoZWNrYm94JztcbmltcG9ydCB7IERldGFpbHMgfSBmcm9tICcuL2xpYnMvb3ZlcnJpZGVzL0RldGFpbHMnO1xuaW1wb3J0IHtcbiAgTWFya2Rvd25BbmNob3IsXG4gIE1hcmtkb3duQW5jaG9yUHJvcHMsXG59IGZyb20gJy4vbGlicy9vdmVycmlkZXMvTWFya2Rvd25BbmNob3InO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICcuL2xpYnMvb3ZlcnJpZGVzL1RhYmxlJztcbmltcG9ydCB7IGNyZWF0ZVByZXByb2Nlc3NpbmdJbnN0cnVjdGlvbnMgfSBmcm9tICcuL2xpYnMvcHJlcHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBkZWZhdWx0U2FuaXRpemF0aW9uQ29uZmlnIH0gZnJvbSAnLi9saWJzL3Nhbml0aXphdGlvbkNvbmZpZyc7XG5pbXBvcnQgeyBtYXJrZG93blN0eWxlcyB9IGZyb20gJy4vc3R5bGVzJztcblxuY29uc3QgaHRtbFRvUmVhY3RQYXJzZXIgPSBIdG1sVG9SZWFjdC5QYXJzZXIoe1xuICB4bWxNb2RlOiB0cnVlLFxufSk7XG5cbmNvbnN0IHByZXByb2Nlc3NpbmdJbnN0cnVjdGlvbnMgPSBjcmVhdGVQcmVwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25zKCk7XG5cbmNvbnN0IGlzVmFsaWROb2RlID0gKCkgPT4gdHJ1ZTtcblxuLyoqXG4gKiBQdXRzIGVhY2ggPHZpZGVvPiBibG9jayBvbiBpdHMgb3duIGxpbmVzIHNvIG1hcmtlZCBlbWl0cyBhbiBIVE1MIGJsb2NrLlxuICogQSBzaW5nbGUtbGluZSA8dmlkZW8+Li4uPC92aWRlbz4gaXMgcGFyc2VkIGFzIHBhcmFncmFwaCB0ZXh0LCB3aGljaCB3cmFwc1xuICogdGhlIHZpZGVvJ3MgYmxvY2stbGV2ZWwgb3V0cHV0IGluIGEgPHA+LlxuICovXG5jb25zdCBub3JtYWxpemVWaWRlb0Jsb2NrcyA9ICh0ZXh0OiBzdHJpbmcpID0+XG4gIHRleHQucmVwbGFjZShcbiAgICAvKDx2aWRlb1xcYltePl0qPikoW1xcc1xcU10qPykoPFxcL3ZpZGVvPikvZ2ksXG4gICAgKF9tYXRjaCwgb3Blbjogc3RyaW5nLCBpbm5lcjogc3RyaW5nLCBjbG9zZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBib2R5ID0gaW5uZXIudHJpbSgpO1xuICAgICAgcmV0dXJuIGBcXG5cXG4ke29wZW59XFxuJHtib2R5ID8gYCR7Ym9keX1cXG5gIDogJyd9JHtjbG9zZX1cXG5cXG5gO1xuICAgIH1cbiAgKTtcblxuY29uc3QgTWFya2Rvd25XcmFwcGVyID0gc3R5bGVkLmRpdjx7IHNwYWNpbmc6ICdsb29zZScgfCAndGlnaHQnIHwgJ25vbmUnIH0+YFxuICAkeyh7IHRoZW1lLCBzcGFjaW5nIH0pID0+IHtcbiAgICBjb25zdCBzcGFjaW5nU3R5bGVGdW5jdGlvbiA9IG1hcmtkb3duU3R5bGVzW3NwYWNpbmddO1xuICAgIHJldHVybiBzcGFjaW5nU3R5bGVGdW5jdGlvbiA/IHNwYWNpbmdTdHlsZUZ1bmN0aW9uKHRoZW1lKSA6ICcnO1xuICB9fVxuYDtcblxuZXhwb3J0IHR5cGUgU2tpcERlZmF1bHRPdmVycmlkZXNTZXR0aW5ncyA9IHtcbiAgYT86IGJvb2xlYW47XG4gIGNoZWNrYm94PzogYm9vbGVhbjtcbiAgZGV0YWlscz86IGJvb2xlYW47XG4gIHRhYmxlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIE1hcmtkb3duUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaW5saW5lPzogYm9vbGVhbjtcbiAgb3ZlcnJpZGVzPzogTWFya2Rvd25PdmVycmlkZVNldHRpbmdzO1xuICBza2lwRGVmYXVsdE92ZXJyaWRlcz86IFNraXBEZWZhdWx0T3ZlcnJpZGVzU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBFbmFibGVzIGdlbmVyYXRlZCBoZWFkZXIgaWRzIGZvciBIMS02IHRhZ3NcbiAgICogQ2FuIGdlbmVyYXRlIGR1cGxpY2F0ZSBJRHMgaWYgdXNlZCBvbiBzZXBhcmF0ZSBtYXJrZG93biBjb21wb25lbnRzIG9uIHRoZSBzYW1lIHBhZ2VcbiAgICovXG4gIGhlYWRlcklkcz86IGJvb2xlYW47XG4gIHNwYWNpbmc/OiAnbG9vc2UnIHwgJ3RpZ2h0JyB8ICdub25lJztcbiAgdGV4dD86IHN0cmluZztcbiAgLyoqXG4gICAqIENhbGxiYWNrIHdoZW4gYSBtYXJrZG93biBhbmNob3IgdGFnIGlzIGNsaWNrZWRcbiAgICovXG4gIG9uQW5jaG9yQ2xpY2s/OiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQ+KSA9PiB2b2lkO1xuICAvKipcbiAgICogUmVuZGVycyA8aWZyYW1lPiB0YWdzIHdpdGggdGhlIGdpdmVuIGNvbXBvbmVudCAoZS5nLiBJZnJhbWUgZnJvbVxuICAgKiAnQGNvZGVjYWRlbXkvZ2FtdXQvVmlkZW8nKSBpbnN0ZWFkIG9mIGEgYmFyZSBpZnJhbWUuIE9wdC1pbiBzbyBNYXJrZG93blxuICAgKiBkb2Vzbid0IHN0YXRpY2FsbHkgZGVwZW5kIG9uIHJlYWN0LXBsYXllciB1bmxlc3MgeW91IG5lZWQgaXQuXG4gICAqL1xuICBpZnJhbWVPdmVycmlkZT86IE1hcmtkb3duT3ZlcnJpZGVTZXR0aW5nO1xuICAvKipcbiAgICogUmVuZGVycyA8dmlkZW8+IHRhZ3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcG9uZW50IChlLmcuIE1hcmtkb3duVmlkZW8gZnJvbVxuICAgKiAnQGNvZGVjYWRlbXkvZ2FtdXQvVmlkZW8nKSBpbnN0ZWFkIG9mIGEgYmFyZSB2aWRlbyB0YWcuIE9wdC1pbiBzb1xuICAgKiBNYXJrZG93biBkb2Vzbid0IHN0YXRpY2FsbHkgZGVwZW5kIG9uIHJlYWN0LXBsYXllciB1bmxlc3MgeW91IG5lZWQgaXQuXG4gICAqL1xuICB2aWRlb092ZXJyaWRlPzogTWFya2Rvd25PdmVycmlkZVNldHRpbmc7XG59O1xuXG5leHBvcnQgY2xhc3MgTWFya2Rvd24gZXh0ZW5kcyBQdXJlQ29tcG9uZW50PE1hcmtkb3duUHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNwYWNpbmcgPSAndGlnaHQnLFxuICAgICAgdGV4dCA9ICcnLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgb3ZlcnJpZGVzOiB1c2VyT3ZlcnJpZGVzID0ge30sXG4gICAgICBza2lwRGVmYXVsdE92ZXJyaWRlcyA9IHt9LFxuICAgICAgaW5saW5lID0gZmFsc2UsXG4gICAgICBoZWFkZXJJZHMgPSB0cnVlLFxuICAgICAgb25BbmNob3JDbGljayxcbiAgICAgIGlmcmFtZU92ZXJyaWRlLFxuICAgICAgdmlkZW9PdmVycmlkZSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmICghdGV4dCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBvdmVycmlkZXMgPSBPYmplY3Qua2V5cyh1c2VyT3ZlcnJpZGVzKS5tYXAoKHRhZ05hbWUpID0+IHtcbiAgICAgIGlmICh0YWdOYW1lID09PSAnQ29kZUJsb2NrJykge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ29kZUJsb2NrT3ZlcnJpZGUodGFnTmFtZSwgdXNlck92ZXJyaWRlc1t0YWdOYW1lXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlVGFnT3ZlcnJpZGUodGFnTmFtZSwgdXNlck92ZXJyaWRlc1t0YWdOYW1lXSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25zID0gW1xuICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgaWZyYW1lT3ZlcnJpZGUgJiYgY3JlYXRlVGFnT3ZlcnJpZGUoJ2lmcmFtZScsIGlmcmFtZU92ZXJyaWRlKSxcbiAgICAgICFza2lwRGVmYXVsdE92ZXJyaWRlcy5hICYmXG4gICAgICAgIGNyZWF0ZVRhZ092ZXJyaWRlKCdhJywge1xuICAgICAgICAgIGNvbXBvbmVudDogTWFya2Rvd25BbmNob3IsXG4gICAgICAgICAgcHJvY2Vzc05vZGU6IChub2RlLCBwcm9wcykgPT4ge1xuICAgICAgICAgICAgLy8gTm90ZTogdGhpcyBwcm9jZXNzTm9kZSBvdmVycmlkZSBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3cmFwcGluZyB0aGlzIGNvbXBvbmVudFxuICAgICAgICAgICAgLy8gaW4gYW4gYW5vbnltb3VzIGZ1bmN0aW9uYWwgY29tcG9uZW50IGFzIHdpdGggdGhlIFRhYmxlIGJlbG93IGNhdXNlcyByZWFjdCByZW5kZXJpbmdcbiAgICAgICAgICAgIC8vIHRvIGNyYXNoIHdpdGggc29tZSBjaHJvbWUgdHJhbnNsYXRpb24gZmVhdHVyZXMuXG4gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9jb2RlY2FkZW15LmF0bGFzc2lhbi5uZXQvYnJvd3NlL1dFQi0xMjE0XG4gICAgICAgICAgICBjb25zdCB7IGtleTogZWxlbWVudEtleSwgLi4ucmVzdCB9ID1cbiAgICAgICAgICAgICAgcHJvcHMgYXMgTWFya2Rvd25BbmNob3JQcm9wcyAmIHsga2V5PzogUmVhY3QuS2V5IH07XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8TWFya2Rvd25BbmNob3JcbiAgICAgICAgICAgICAgICBrZXk9e2VsZW1lbnRLZXl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17b25BbmNob3JDbGlja31cbiAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAhc2tpcERlZmF1bHRPdmVycmlkZXMudGFibGUgJiZcbiAgICAgICAgY3JlYXRlVGFnT3ZlcnJpZGUoJ3RhYmxlJywge1xuICAgICAgICAgIGNvbXBvbmVudDogVGFibGUsXG4gICAgICAgICAgYWxsb3dlZEF0dHJpYnV0ZXM6IFsnc3R5bGUnXSxcbiAgICAgICAgfSksXG4gICAgICB2aWRlb092ZXJyaWRlICYmXG4gICAgICAgIGNyZWF0ZVZpZGVvT3ZlcnJpZGUoeyB0YWdOYW1lOiAndmlkZW8nLCBPdmVycmlkZTogdmlkZW9PdmVycmlkZSB9KSxcbiAgICAgICFza2lwRGVmYXVsdE92ZXJyaWRlcy5kZXRhaWxzICYmXG4gICAgICAgIGNyZWF0ZVRhZ092ZXJyaWRlKCdkZXRhaWxzJywge1xuICAgICAgICAgIGNvbXBvbmVudDogRGV0YWlscyxcbiAgICAgICAgICBhbGxvd2VkQXR0cmlidXRlczogWydzdHlsZScsICdvcGVuJ10sXG4gICAgICAgIH0pLFxuICAgICAgIXNraXBEZWZhdWx0T3ZlcnJpZGVzLmNoZWNrYm94ICYmXG4gICAgICAgIGNyZWF0ZUlucHV0T3ZlcnJpZGUoJ2NoZWNrYm94Jywge1xuICAgICAgICAgIGNvbXBvbmVudDogTWFya2Rvd25DaGVja2JveCxcbiAgICAgICAgfSksXG4gICAgICAuLi5zdGFuZGFyZE92ZXJyaWRlcyxcbiAgICBdLmZpbHRlcihCb29sZWFuKTtcblxuICAgIGNvbnN0IG1hcmtlZE9wdGlvbnMgPSB7XG4gICAgICBzbWFydHlwYW50czogdHJ1ZSxcbiAgICAgIGhlYWRlcklkcyxcbiAgICAgIGhlYWRlclByZWZpeDogJ2hlYWRpbmctJyxcbiAgICAgIG1hbmdsZTogZmFsc2UsXG4gICAgfTtcblxuICAgIC8vIFJlbmRlciBtYXJrZG93biB0byBodG1sXG4gICAgY29uc3QgcmF3SHRtbCA9IGlubGluZVxuICAgICAgPyBtYXJrZWQucGFyc2VJbmxpbmUodGV4dCwgbWFya2VkT3B0aW9ucylcbiAgICAgIDogbWFya2VkKG5vcm1hbGl6ZVZpZGVvQmxvY2tzKHRleHQpLCBtYXJrZWRPcHRpb25zKTtcblxuICAgIGNvbnN0IHNhbml0aXphdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmRlZmF1bHRTYW5pdGl6YXRpb25Db25maWcsXG4gICAgICBhbGxvd2VkVGFnczogW1xuICAgICAgICAuLi5kZWZhdWx0U2FuaXRpemF0aW9uQ29uZmlnLmFsbG93ZWRUYWdzLFxuICAgICAgICAuLi5PYmplY3Qua2V5cyh1c2VyT3ZlcnJpZGVzKS5tYXAoKHRhZ05hbWUpID0+IHRhZ05hbWUudG9Mb3dlckNhc2UoKSksXG4gICAgICBdLFxuICAgICAgYWxsb3dlZEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgLi4uZGVmYXVsdFNhbml0aXphdGlvbkNvbmZpZy5hbGxvd2VkQXR0cmlidXRlcyxcbiAgICAgICAgLi4uT2JqZWN0LmtleXModXNlck92ZXJyaWRlcykucmVkdWNlKChhY2MsIHRhZ05hbWUpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgW3RhZ05hbWUudG9Mb3dlckNhc2UoKV06IChcbiAgICAgICAgICAgICAgdXNlck92ZXJyaWRlc1t0YWdOYW1lXS5hbGxvd2VkQXR0cmlidXRlcyB8fCBbXVxuICAgICAgICAgICAgKS5tYXAoKGF0dHIpID0+IGF0dHIudG9Mb3dlckNhc2UoKSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwge30pLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgaHRtbCA9IHNhbml0aXplTWFya2Rvd24ocmF3SHRtbCwgc2FuaXRpemF0aW9uQ29uZmlnKTtcblxuICAgIC8vIFJlbmRlciBodG1sIHRvIGEgcmVhY3QgdHJlZVxuICAgIGNvbnN0IHJlYWN0ID0gaHRtbFRvUmVhY3RQYXJzZXIucGFyc2VXaXRoSW5zdHJ1Y3Rpb25zKFxuICAgICAgaHRtbCxcbiAgICAgIGlzVmFsaWROb2RlLFxuICAgICAgcHJvY2Vzc2luZ0luc3RydWN0aW9ucyxcbiAgICAgIHByZXByb2Nlc3NpbmdJbnN0cnVjdGlvbnNcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNYXJrZG93bldyYXBwZXJcbiAgICAgICAgYXM9e2lubGluZSA/ICdzcGFuJyA6ICdkaXYnfVxuICAgICAgICB7Li4ub21pdFByb3BzKE9iamVjdC5rZXlzKHRoaXMucHJvcHMpLCB0aGlzLnByb3BzKX1cbiAgICAgICAgY2xhc3NOYW1lPXtjeChjbGFzc05hbWUpfVxuICAgICAgICBzcGFjaW5nPXtzcGFjaW5nfVxuICAgICAgPlxuICAgICAgICB7cmVhY3R9XG4gICAgICA8L01hcmtkb3duV3JhcHBlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIHtcbiAgTWFya2Rvd25PdmVycmlkZVNldHRpbmcsXG4gIE1hcmtkb3duT3ZlcnJpZGVTZXR0aW5ncyxcbn0gZnJvbSAnLi9saWJzL292ZXJyaWRlcyc7XG5leHBvcnQge1xuICBjcmVhdGVDb2RlQmxvY2tPdmVycmlkZSxcbiAgY3JlYXRlSW5wdXRPdmVycmlkZSxcbiAgY3JlYXRlVGFnT3ZlcnJpZGUsXG4gIGNyZWF0ZVZpZGVvT3ZlcnJpZGUsXG4gIHN0YW5kYXJkT3ZlcnJpZGVzLFxufSBmcm9tICcuL2xpYnMvb3ZlcnJpZGVzJztcbiJdfQ== */"));
 export class Markdown extends PureComponent {
   render() {
     const {
       spacing = 'tight',
@@ -41,20 +49,20 @@
       overrides: userOverrides = {},
       skipDefaultOverrides = {},
       inline = false,
       headerIds = true,
-      onAnchorClick
+      onAnchorClick,
+      iframeOverride,
+      videoOverride
     } = this.props;
     if (!text) return null;
     const overrides = Object.keys(userOverrides).map(tagName => {
       if (tagName === 'CodeBlock') {
         return createCodeBlockOverride(tagName, userOverrides[tagName]);
       }
       return createTagOverride(tagName, userOverrides[tagName]);
     });
-    const processingInstructions = [...overrides, !skipDefaultOverrides.iframe && createTagOverride('iframe', {
-      component: Iframe
-    }), !skipDefaultOverrides.a && createTagOverride('a', {
+    const processingInstructions = [...overrides, iframeOverride && createTagOverride('iframe', iframeOverride), !skipDefaultOverrides.a && createTagOverride('a', {
       component: MarkdownAnchor,
       processNode: (node, props) => {
         // Note: this processNode override is necessary because wrapping this component
         // in an anonymous functional component as with the Table below causes react rendering
@@ -71,10 +79,11 @@
       }
     }), !skipDefaultOverrides.table && createTagOverride('table', {
       component: Table,
       allowedAttributes: ['style']
-    }), !skipDefaultOverrides.video && createVideoOverride('video', {
-      component: MarkdownVideo
+    }), videoOverride && createVideoOverride({
+      tagName: 'video',
+      Override: videoOverride
     }), !skipDefaultOverrides.details && createTagOverride('details', {
       component: Details,
       allowedAttributes: ['style', 'open']
     }), !skipDefaultOverrides.checkbox && createInputOverride('checkbox', {
@@ -87,9 +96,9 @@
       mangle: false
     };
 
     // Render markdown to html
-    const rawHtml = inline ? marked.parseInline(text, markedOptions) : marked(text, markedOptions);
+    const rawHtml = inline ? marked.parseInline(text, markedOptions) : marked(normalizeVideoBlocks(text), markedOptions);
     const sanitizationConfig = {
       ...defaultSanitizationConfig,
       allowedTags: [...defaultSanitizationConfig.allowedTags, ...Object.keys(userOverrides).map(tagName => tagName.toLowerCase())],
       allowedAttributes: {