UNPKG

payload-lexical-typography

Version:
1 lines 8.42 kB
{"version":3,"sources":["../src/converters.ts","../src/converters/HTMLConverters/TextHTMLConverter.tsx","../src/converters/HTMLConverters/index.tsx","../src/converters/JSXConverters/TextJSXConverter.tsx","../src/converters/JSXConverters/index.tsx"],"sourcesContent":["export { TypographyHTMLConverters } from \"./converters/HTMLConverters\";\nexport { TypographyJSXConverters } from \"./converters/JSXConverters\";\n","import { type SerializedTextNode } from \"@payloadcms/richtext-lexical\";\nimport { type HTMLConverters } from \"@payloadcms/richtext-lexical/html\";\nimport { type HTMLConverterAsync, type HTMLConvertersAsync } from \"@payloadcms/richtext-lexical/html-async\";\nimport {\n IS_BOLD,\n IS_ITALIC,\n IS_STRIKETHROUGH,\n IS_UNDERLINE,\n IS_CODE,\n IS_SUBSCRIPT,\n IS_SUPERSCRIPT,\n} from \"@payloadcms/richtext-lexical/lexical\";\n\nimport escapeHTML from \"escape-html\";\n\nexport const TextHTMLConverter: HTMLConverters<SerializedTextNode> = {\n text: ({ node }) => {\n let styles = \"\";\n\n if (node.style) {\n let match = /(?:^|;)\\s?color: ([^;]+)/.exec(node.style);\n if (match) {\n styles = `${styles} color: ${match[1]};`;\n }\n\n match = /(?:^|;)\\s?font-size: ([^;]+)/.exec(node.style);\n if (match) {\n styles = `${styles} font-size: ${match[1]};`;\n }\n\n match = /(?:^|;)\\s?letter-spacing: ([^;]+)/.exec(node.style);\n if (match) {\n styles = `${styles} letter-spacing: ${match[1]};`;\n }\n\n match = /(?:^|;)\\s?line-height: ([^;]+)/.exec(node.style);\n if (match) {\n styles = `${styles} line-height: ${match[1]};`;\n }\n\n match = /(?:^|;)\\s?font-family: ([^;]+)/.exec(node.style);\n if (match) {\n styles = `${styles} font-family: ${match[1]};`;\n }\n }\n\n const styleAttr = styles ? ` style=\"${styles}\"` : \"\";\n\n let html = escapeHTML(node.text);\n if (!html) {\n return \"\";\n }\n\n const formatters: Record<number, (content: string, styleAttribute: string) => string> = {\n [IS_BOLD]: (content) => `<strong>${content}</strong>`,\n [IS_ITALIC]: (content) => `<em>${content}</em>`,\n [IS_STRIKETHROUGH]: (content) => {\n return `<span style=\"text-decoration: line-through\">${content}</span>`;\n },\n [IS_UNDERLINE]: (content) => {\n return `<span style=\"text-decoration: underline\">${content}</span>`;\n },\n [IS_CODE]: (content) => `<code>${content}</code>`,\n [IS_SUBSCRIPT]: (content) => `<sub>${content}</sub>`,\n [IS_SUPERSCRIPT]: (content) => `<sup>${content}</sup>`,\n };\n\n html = styles ? `<span${styleAttr}>${html}</span>` : html;\n\n Object.entries(formatters).forEach(([formatFlag, formatter]) => {\n if (node.format & Number(formatFlag)) {\n html = formatter(html, styleAttr);\n }\n });\n\n return html;\n },\n};\n\nexport const TextHTMLConverterAsync: HTMLConvertersAsync<SerializedTextNode> = {\n text: TextHTMLConverter.text as HTMLConverterAsync<SerializedTextNode>,\n};\n","import { type HTMLConverters } from \"@payloadcms/richtext-lexical/html\";\nimport { type HTMLConvertersAsync } from \"@payloadcms/richtext-lexical/html-async\";\n\nimport { TextHTMLConverter, TextHTMLConverterAsync } from \"./TextHTMLConverter\";\n\nexport const TypographyHTMLConverters: HTMLConverters = { ...TextHTMLConverter };\nexport const TypographyHTMLConvertersAsync: HTMLConvertersAsync = { ...TextHTMLConverterAsync };\n","import {\n IS_BOLD,\n IS_ITALIC,\n IS_STRIKETHROUGH,\n IS_UNDERLINE,\n IS_CODE,\n IS_SUBSCRIPT,\n IS_SUPERSCRIPT,\n type SerializedTextNode,\n} from \"@payloadcms/richtext-lexical/lexical\";\nimport { type JSXConverters } from \"@payloadcms/richtext-lexical/react\";\n\nexport const TextJSXConverter: JSXConverters<SerializedTextNode> = {\n text: ({ node }: { node: SerializedTextNode }) => {\n const styles: React.CSSProperties = {};\n\n if (node.style) {\n let match = /(?:^|;)\\s?color: ([^;]+)/.exec(node.style);\n if (match) styles.color = match[1];\n\n match = /(?:^|;)\\s?font-size: ([^;]+)/.exec(node.style);\n if (match) styles.fontSize = match[1];\n\n match = /(?:^|;)\\s?letter-spacing: ([^;]+)/.exec(node.style);\n if (match) styles.letterSpacing = match[1];\n\n match = /(?:^|;)\\s?line-height: ([^;]+)/.exec(node.style);\n if (match) styles.lineHeight = match[1];\n\n match = /(?:^|;)\\s?font-family: ([^;]+)/.exec(node.style);\n if (match) styles.fontFamily = match[1];\n }\n\n const formatters: Record<number, (element: React.ReactElement) => React.ReactElement> = {\n [IS_BOLD]: (el) => <strong>{el}</strong>,\n [IS_ITALIC]: (el) => <em>{el}</em>,\n [IS_STRIKETHROUGH]: (el) => <span style={{ textDecoration: \"line-through\" }}>{el}</span>,\n [IS_UNDERLINE]: (el) => <span style={{ textDecoration: \"underline\" }}>{el}</span>,\n [IS_CODE]: (el) => <code>{el}</code>,\n [IS_SUBSCRIPT]: (el) => <sub>{el}</sub>,\n [IS_SUPERSCRIPT]: (el) => <sup>{el}</sup>,\n };\n\n let textElement =\n Object.keys(styles).length > 0 ? <span style={styles}>{node.text}</span> : <>{node.text}</>;\n\n Object.entries(formatters).forEach(([formatFlag, formatter]) => {\n if (node.format & Number(formatFlag)) {\n textElement = formatter(textElement);\n }\n });\n\n return textElement;\n },\n};\n","import { TextJSXConverter } from \"./TextJSXConverter\";\n\nexport const TypographyJSXConverters = { ...TextJSXConverter };\n"],"mappings":"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","names":["escapeHTML","import_lexical"]}