{"version":3,"sources":["../src/parser.ts","../src/utils.ts","../src/styles.ts","../src/parseMarkdownToJSX.ts","../src/components/emailMarkdown.tsx"],"sourcesContent":["import { marked, Renderer } from \"marked\";\nimport { StylesType } from \"./types\";\nimport { initRenderer } from \"./utils\";\n\nexport class MarkdownParser {\n private readonly renderer: Renderer;\n\n constructor({ customStyles }: { customStyles?: StylesType }) {\n this.renderer = initRenderer({ customStyles });\n }\n\n parse(markdown: string) {\n return marked.parse(markdown, { renderer: this.renderer });\n }\n}\n","import { CSSProperties } from \"react\";\nimport { StylesType, initRendererProps } from \"./types\";\nimport { Renderer } from \"marked\";\nimport { styles } from \"./styles\";\n\nfunction escapeQuotes(value: unknown) {\n if (typeof value === 'string' && value.includes('\"')) {\n return value.replace(/\"/g, \"'\");\n }\n return value;\n}\n\nexport function camelToKebabCase(str: string): string {\n return str.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nexport function parseCssInJsToInlineCss(\n cssProperties: CSSProperties | undefined\n): string {\n if (!cssProperties) return \"\";\n\n const numericalCssProperties = [\n \"width\",\n \"height\",\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"padding\",\n \"paddingTop\",\n \"paddingRight\",\n \"paddingBottom\",\n \"paddingLeft\",\n \"borderWidth\",\n \"borderTopWidth\",\n \"borderRightWidth\",\n \"borderBottomWidth\",\n \"borderLeftWidth\",\n \"outlineWidth\",\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"fontSize\",\n \"lineHeight\",\n \"letterSpacing\",\n \"wordSpacing\",\n \"maxWidth\",\n \"minWidth\",\n \"maxHeight\",\n \"minHeight\",\n \"borderRadius\",\n \"borderTopLeftRadius\",\n \"borderTopRightRadius\",\n \"borderBottomLeftRadius\",\n \"borderBottomRightRadius\",\n \"textIndent\",\n \"gridColumnGap\",\n \"gridRowGap\",\n \"gridGap\",\n \"translateX\",\n \"translateY\",\n ];\n\n return Object.entries(cssProperties)\n .map(([property, value]) => {\n if (\n typeof value === \"number\" &&\n numericalCssProperties.includes(property)\n ) {\n return `${camelToKebabCase(property)}:${value}px`;\n } else {\n const escapedValue = escapeQuotes(value);\n return `${camelToKebabCase(property)}:${escapedValue}`;\n }\n })\n .join(\";\");\n}\n\nexport const initRenderer = ({\n customStyles,\n}: initRendererProps): Renderer => {\n const finalStyles = { ...styles, ...customStyles };\n\n const customRenderer = new Renderer();\n\n customRenderer.blockquote = (quote) => {\n return `\\n${quote}\\n`;\n }\n\n customRenderer.br = () => {\n return ``;\n }\n\n customRenderer.code = (code) => {\n code = code.replace(/\\n$/, \"\") + \"\\n\";\n\n return `${code}\\n`;\n }\n\n customRenderer.codespan = (text) => {\n return `${text}`;\n }\n\n customRenderer.del = (text) => {\n return `${text}`;\n }\n\n customRenderer.em = (text) => {\n return `${text}`;\n }\n\n customRenderer.heading = (text, level) => {\n return `${text}`;\n }\n\n customRenderer.hr = () => {\n return `\\n`;\n }\n\n customRenderer.image = (href, _, text) => {\n return `\"${text}\"${\n`;\n }\n\n customRenderer.link = (href, _, text) => {\n return `${text}`;\n }\n\n customRenderer.list = (body, ordered, start) => {\n const type = ordered ? \"ol\" : \"ul\";\n const startatt = ordered && start !== 1 ? ' start=\"' + start + '\"' : \"\";\n const styles = parseCssInJsToInlineCss(\n finalStyles[ordered ? \"ol\" : \"ul\"]\n );\n return (\n \"<\" +\n type +\n startatt +\n `${styles !== \"\" ? ` style=\"${styles}\"` : \"\"}>\\n` +\n body +\n \"\\n\"\n );\n }\n\n customRenderer.listitem = (text) => {\n return `${text}\\n`;\n }\n\n customRenderer.paragraph = (text) => {\n return `${text}

\\n`;\n }\n\n customRenderer.strong = (text) => {\n return `${text}`;\n }\n\n customRenderer.table = (header, body) => {\n if (body) body = `${body}`;\n\n return `\\n\\n${header}\\n${body}\\n`;\n }\n\n customRenderer.tablecell = (content, flags) => {\n const type = flags.header ? \"th\" : \"td\";\n const tag = flags.align\n ? `<${type} align=\"${flags.align}\"${\n parseCssInJsToInlineCss(finalStyles.td) !== \"\"\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.td)}\"`\n : \"\"\n }>`\n : `<${type}${\n parseCssInJsToInlineCss(finalStyles.td) !== \"\"\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.td)}\"`\n : \"\"\n }>`;\n return tag + content + `\\n`;\n }\n\n customRenderer.tablerow = (content) => {\n return `\\n${content}\\n`;\n }\n\n return customRenderer;\n};\n","import { StylesType } from \"./types\";\n\nconst emptyStyle = {};\n\nconst baseHeaderStyles = {\n fontWeight: \"500\",\n paddingTop: 20,\n};\n\nconst h1 = {\n ...baseHeaderStyles,\n fontSize: \"2.5rem\",\n};\n\nconst h2 = {\n ...baseHeaderStyles,\n fontSize: \"2rem\",\n};\nconst h3 = {\n ...baseHeaderStyles,\n fontSize: \"1.75rem\",\n};\nconst h4 = {\n ...baseHeaderStyles,\n fontSize: \"1.5rem\",\n};\nconst h5 = {\n ...baseHeaderStyles,\n fontSize: \"1.25rem\",\n};\nconst h6 = {\n ...baseHeaderStyles,\n fontSize: \"1rem\",\n};\n\nconst bold = {\n fontWeight: \"bold\",\n};\n\nconst italic = {\n fontStyle: \"italic\",\n};\n\nconst blockQuote = {\n background: \"#f9f9f9\",\n borderLeft: \"10px solid #ccc\",\n margin: \"1.5em 10px\",\n padding: \"1em 10px\",\n};\n\nconst codeInline = {\n color: \"#212529\",\n fontSize: \"87.5%\",\n display: \"inline\",\n background: \" #f8f8f8\",\n fontFamily: `SFMono-Regular,Menlo,Monaco,Consolas,monospace`,\n};\n\nconst codeBlock = {\n ...codeInline,\n paddingTop: 10,\n paddingRight: 10,\n paddingLeft: 10,\n paddingBottom: 1,\n marginBottom: 20,\n background: \" #f8f8f8\",\n};\n\nconst link = {\n color: \"#007bff\",\n textDecoration: \"underline\",\n backgroundColor: \"transparent\",\n};\n\nexport const styles: StylesType = {\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n blockQuote,\n bold,\n italic,\n link,\n codeBlock: { ...codeBlock, wordWrap: \"break-word\" },\n codeInline: { ...codeInline, wordWrap: \"break-word\" },\n p: emptyStyle,\n li: emptyStyle,\n ul: emptyStyle,\n ol: emptyStyle,\n image: emptyStyle,\n br: emptyStyle,\n hr: emptyStyle,\n table: emptyStyle,\n thead: emptyStyle,\n tbody: emptyStyle,\n th: emptyStyle,\n td: emptyStyle,\n tr: emptyStyle,\n strikethrough: emptyStyle,\n};\n","import { MarkdownParser } from \"./parser\";\nimport { parseMarkdownToJSXProps } from \"./types\";\n\nexport const parseMarkdownToJSX = ({\n markdown,\n customStyles,\n}: parseMarkdownToJSXProps) => {\n const parser = new MarkdownParser({ customStyles });\n return parser.parse(markdown);\n};\n","import * as React from \"react\";\nimport { StylesType } from \"../types\";\nimport { parseMarkdownToJSX } from \"../parseMarkdownToJSX\";\n\ninterface EmailMarkdownProps {\n markdown: string;\n markdownCustomStyles?: StylesType;\n markdownContainerStyles?: React.CSSProperties;\n}\n\nexport const EmailMarkdown: React.FC = ({\n markdown,\n markdownCustomStyles,\n markdownContainerStyles,\n}) => {\n const parsedMarkdown = parseMarkdownToJSX({\n markdown,\n customStyles: markdownCustomStyles,\n });\n\n return (\n \n );\n};\n"],"mappings":"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","names":["styles"]}