payload-lexical-typography
Version:
PayloadCMS lexical-editor typography extension plugin
1 lines • 7.66 kB
Source Map (JSON)
{"version":3,"sources":["../src/converters/HTMLConverters/TextHTMLConverter.tsx","../src/converters/HTMLConverters/index.tsx","../src/converters/JSXConverters/TextJSXConverter.tsx","../src/converters/JSXConverters/index.tsx"],"sourcesContent":["import { type HTMLConverter } from \"@payloadcms/richtext-lexical\";\nimport {\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\";\n\nimport escapeHTML from \"escape-html\";\n\nexport const TextHTMLConverter: HTMLConverter<SerializedTextNode> = {\n converter({ 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 nodeTypes: [\"text\"],\n};\n","import { TextHTMLConverter } from \"./TextHTMLConverter\";\n\nexport const TypographyHTMLConverters = [TextHTMLConverter];\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 = <span style={styles}>{node.text}</span>;\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":";AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAEP,OAAO,gBAAgB;AAEhB,IAAM,oBAAuD;AAAA,EAClE,UAAU,EAAE,KAAK,GAAG;AAClB,QAAI,SAAS;AAEb,QAAI,KAAK,OAAO;AACd,UAAI,QAAQ,2BAA2B,KAAK,KAAK,KAAK;AACtD,UAAI,OAAO;AACT,iBAAS,GAAG,MAAM,WAAW,MAAM,CAAC,CAAC;AAAA,MACvC;AAEA,cAAQ,+BAA+B,KAAK,KAAK,KAAK;AACtD,UAAI,OAAO;AACT,iBAAS,GAAG,MAAM,eAAe,MAAM,CAAC,CAAC;AAAA,MAC3C;AAEA,cAAQ,oCAAoC,KAAK,KAAK,KAAK;AAC3D,UAAI,OAAO;AACT,iBAAS,GAAG,MAAM,oBAAoB,MAAM,CAAC,CAAC;AAAA,MAChD;AAEA,cAAQ,iCAAiC,KAAK,KAAK,KAAK;AACxD,UAAI,OAAO;AACT,iBAAS,GAAG,MAAM,iBAAiB,MAAM,CAAC,CAAC;AAAA,MAC7C;AAEA,cAAQ,iCAAiC,KAAK,KAAK,KAAK;AACxD,UAAI,OAAO;AACT,iBAAS,GAAG,MAAM,iBAAiB,MAAM,CAAC,CAAC;AAAA,MAC7C;AAAA,IACF;AAEA,UAAM,YAAY,SAAS,WAAW,MAAM,MAAM;AAElD,QAAI,OAAO,WAAW,KAAK,IAAI;AAC/B,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AAEA,UAAM,aAAkF;AAAA,MACtF,CAAC,OAAO,GAAG,CAAC,YAAY,WAAW,OAAO;AAAA,MAC1C,CAAC,SAAS,GAAG,CAAC,YAAY,OAAO,OAAO;AAAA,MACxC,CAAC,gBAAgB,GAAG,CAAC,YAAY;AAC/B,eAAO,+CAA+C,OAAO;AAAA,MAC/D;AAAA,MACA,CAAC,YAAY,GAAG,CAAC,YAAY;AAC3B,eAAO,4CAA4C,OAAO;AAAA,MAC5D;AAAA,MACA,CAAC,OAAO,GAAG,CAAC,YAAY,SAAS,OAAO;AAAA,MACxC,CAAC,YAAY,GAAG,CAAC,YAAY,QAAQ,OAAO;AAAA,MAC5C,CAAC,cAAc,GAAG,CAAC,YAAY,QAAQ,OAAO;AAAA,IAChD;AAEA,WAAO,SAAS,QAAQ,SAAS,IAAI,IAAI,YAAY;AAErD,WAAO,QAAQ,UAAU,EAAE,QAAQ,CAAC,CAAC,YAAY,SAAS,MAAM;AAC9D,UAAI,KAAK,SAAS,OAAO,UAAU,GAAG;AACpC,eAAO,UAAU,MAAM,SAAS;AAAA,MAClC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EACA,WAAW,CAAC,MAAM;AACpB;;;AC3EO,IAAM,2BAA2B,CAAC,iBAAiB;;;ACF1D;AAAA,EACE,WAAAA;AAAA,EACA,aAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,kBAAAC;AAAA,OAEK;AAyBkB;AAtBlB,IAAM,mBAAsD;AAAA,EACjE,MAAM,CAAC,EAAE,KAAK,MAAoC;AAChD,UAAM,SAA8B,CAAC;AAErC,QAAI,KAAK,OAAO;AACd,UAAI,QAAQ,2BAA2B,KAAK,KAAK,KAAK;AACtD,UAAI,MAAO,QAAO,QAAQ,MAAM,CAAC;AAEjC,cAAQ,+BAA+B,KAAK,KAAK,KAAK;AACtD,UAAI,MAAO,QAAO,WAAW,MAAM,CAAC;AAEpC,cAAQ,oCAAoC,KAAK,KAAK,KAAK;AAC3D,UAAI,MAAO,QAAO,gBAAgB,MAAM,CAAC;AAEzC,cAAQ,iCAAiC,KAAK,KAAK,KAAK;AACxD,UAAI,MAAO,QAAO,aAAa,MAAM,CAAC;AAEtC,cAAQ,iCAAiC,KAAK,KAAK,KAAK;AACxD,UAAI,MAAO,QAAO,aAAa,MAAM,CAAC;AAAA,IACxC;AAEA,UAAM,aAAkF;AAAA,MACtF,CAACN,QAAO,GAAG,CAAC,OAAO,oBAAC,YAAQ,cAAG;AAAA,MAC/B,CAACC,UAAS,GAAG,CAAC,OAAO,oBAAC,QAAI,cAAG;AAAA,MAC7B,CAACC,iBAAgB,GAAG,CAAC,OAAO,oBAAC,UAAK,OAAO,EAAE,gBAAgB,eAAe,GAAI,cAAG;AAAA,MACjF,CAACC,aAAY,GAAG,CAAC,OAAO,oBAAC,UAAK,OAAO,EAAE,gBAAgB,YAAY,GAAI,cAAG;AAAA,MAC1E,CAACC,QAAO,GAAG,CAAC,OAAO,oBAAC,UAAM,cAAG;AAAA,MAC7B,CAACC,aAAY,GAAG,CAAC,OAAO,oBAAC,SAAK,cAAG;AAAA,MACjC,CAACC,eAAc,GAAG,CAAC,OAAO,oBAAC,SAAK,cAAG;AAAA,IACrC;AAEA,QAAI,cAAc,oBAAC,UAAK,OAAO,QAAS,eAAK,MAAK;AAElD,WAAO,QAAQ,UAAU,EAAE,QAAQ,CAAC,CAAC,YAAY,SAAS,MAAM;AAC9D,UAAI,KAAK,SAAS,OAAO,UAAU,GAAG;AACpC,sBAAc,UAAU,WAAW;AAAA,MACrC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AACF;;;ACnDO,IAAM,0BAA0B,EAAE,GAAG,iBAAiB;","names":["IS_BOLD","IS_ITALIC","IS_STRIKETHROUGH","IS_UNDERLINE","IS_CODE","IS_SUBSCRIPT","IS_SUPERSCRIPT"]}