@frontify/fondue 12.0.0-beta.205 → 12.0.0-beta.207
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/RichTextEditor/serializer/markdown/deserializer/deserialize.es.js +1 -1
- package/dist/components/RichTextEditor/serializer/markdown/deserializer/deserialize.es.js.map +1 -1
- package/dist/components/RichTextEditor/serializer/utils/serializeLeafToHtml.es.js +5 -5
- package/dist/components/RichTextEditor/serializer/utils/serializeLeafToHtml.es.js.map +1 -1
- package/dist/components/RichTextEditor/serializer/utils/serializeNodeToHtmlRecursive.es.js +50 -50
- package/dist/components/RichTextEditor/serializer/utils/serializeNodeToHtmlRecursive.es.js.map +1 -1
- package/dist/index.cjs.js +3 -3
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.umd.js +3 -3
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -63,7 +63,7 @@ function m(e, a) {
|
|
|
63
63
|
break: !0,
|
|
64
64
|
type: t.paragraph,
|
|
65
65
|
children: [{ text: ((u = e.value) == null ? void 0 : u.replace(/<br>/g, "")) || "" }]
|
|
66
|
-
} : { type:
|
|
66
|
+
} : { type: t.paragraph, children: [{ text: e.value || "" }] };
|
|
67
67
|
case "emphasis":
|
|
68
68
|
return {
|
|
69
69
|
[t.emphasisMark]: !0,
|
package/dist/components/RichTextEditor/serializer/markdown/deserializer/deserialize.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deserialize.es.js","sources":["../../../../../../src/components/RichTextEditor/serializer/markdown/deserializer/deserialize.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n BlockQuoteNode,\n CodeBlockNode,\n DeserializedNode,\n HeadingNode,\n ImageNode,\n InputNodeTypes,\n ItalicNode,\n LinkNode,\n ListItemChildNode,\n ListItemNode,\n ListNode,\n MarkdownAstNode,\n OptionType,\n ParagraphNode,\n TextNode,\n ThematicBreakNode,\n} from '../types';\nimport { MENTION_DESERIALIZE_REGEX } from '../utils';\n\nexport default function deserialize<T extends InputNodeTypes>(node: MarkdownAstNode, options: OptionType) {\n const types = options?.nodeTypes as InputNodeTypes;\n const { linkDestinationKey, imageSourceKey, imageCaptionKey } = getOptions(options);\n\n let children: Array<DeserializedNode<T>> = [{ text: '' }];\n\n if (hasNodeChildren(node.children)) {\n children = node.children.flatMap((c: MarkdownAstNode) =>\n deserialize(\n {\n ...c,\n ordered: node.ordered || false,\n },\n options,\n ),\n );\n }\n\n switch (node.type) {\n case 'mention':\n const value = node.children ? node.children[0].value : undefined;\n const matches = value?.match(MENTION_DESERIALIZE_REGEX) as RegExpMatchArray;\n return {\n type: types.mention,\n category: matches[1],\n id: matches[2],\n children: [{ text: '' }],\n };\n case 'heading':\n return {\n type: types.heading[node.depth || 1],\n children,\n } as HeadingNode<T>;\n case 'list':\n return {\n type: node.ordered ? types.olList : types.ulList,\n children,\n } as ListNode<T>;\n case 'listItem':\n return { type: types.listItem, children } as ListItemNode<T>;\n case 'listItemChild':\n return { type: types.listItemChild, children } as ListItemChildNode<T>;\n case 'paragraph':\n return { type: types.paragraph, children } as ParagraphNode<T>;\n case 'link':\n return {\n type: types.link,\n [linkDestinationKey]: node.url,\n target: node.target,\n children,\n } as LinkNode<T>;\n case 'image':\n return {\n type: types.image,\n children: [{ text: '' }],\n [imageSourceKey]: node.url,\n [imageCaptionKey]: node.alt,\n } as ImageNode<T>;\n case 'blockquote':\n return { type: types.blockQuote, children } as BlockQuoteNode<T>;\n case 'code':\n return {\n type: types.codeBlock,\n language: node.lang ?? undefined,\n children: [{ text: node.value }],\n } as CodeBlockNode<T>;\n\n case 'html':\n if (node.value?.includes('<br>')) {\n return {\n break: true,\n type: types.paragraph,\n children: [{ text: node.value?.replace(/<br>/g, '') || '' }],\n } as ParagraphNode<T>;\n }\n return { type:
|
|
1
|
+
{"version":3,"file":"deserialize.es.js","sources":["../../../../../../src/components/RichTextEditor/serializer/markdown/deserializer/deserialize.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n BlockQuoteNode,\n CodeBlockNode,\n DeserializedNode,\n HeadingNode,\n ImageNode,\n InputNodeTypes,\n ItalicNode,\n LinkNode,\n ListItemChildNode,\n ListItemNode,\n ListNode,\n MarkdownAstNode,\n OptionType,\n ParagraphNode,\n TextNode,\n ThematicBreakNode,\n} from '../types';\nimport { MENTION_DESERIALIZE_REGEX } from '../utils';\n\nexport default function deserialize<T extends InputNodeTypes>(node: MarkdownAstNode, options: OptionType) {\n const types = options?.nodeTypes as InputNodeTypes;\n const { linkDestinationKey, imageSourceKey, imageCaptionKey } = getOptions(options);\n\n let children: Array<DeserializedNode<T>> = [{ text: '' }];\n\n if (hasNodeChildren(node.children)) {\n children = node.children.flatMap((c: MarkdownAstNode) =>\n deserialize(\n {\n ...c,\n ordered: node.ordered || false,\n },\n options,\n ),\n );\n }\n\n switch (node.type) {\n case 'mention':\n const value = node.children ? node.children[0].value : undefined;\n const matches = value?.match(MENTION_DESERIALIZE_REGEX) as RegExpMatchArray;\n return {\n type: types.mention,\n category: matches[1],\n id: matches[2],\n children: [{ text: '' }],\n };\n case 'heading':\n return {\n type: types.heading[node.depth || 1],\n children,\n } as HeadingNode<T>;\n case 'list':\n return {\n type: node.ordered ? types.olList : types.ulList,\n children,\n } as ListNode<T>;\n case 'listItem':\n return { type: types.listItem, children } as ListItemNode<T>;\n case 'listItemChild':\n return { type: types.listItemChild, children } as ListItemChildNode<T>;\n case 'paragraph':\n return { type: types.paragraph, children } as ParagraphNode<T>;\n case 'link':\n return {\n type: types.link,\n [linkDestinationKey]: node.url,\n target: node.target,\n children,\n } as LinkNode<T>;\n case 'image':\n return {\n type: types.image,\n children: [{ text: '' }],\n [imageSourceKey]: node.url,\n [imageCaptionKey]: node.alt,\n } as ImageNode<T>;\n case 'blockquote':\n return { type: types.blockQuote, children } as BlockQuoteNode<T>;\n case 'code':\n return {\n type: types.codeBlock,\n language: node.lang ?? undefined,\n children: [{ text: node.value }],\n } as CodeBlockNode<T>;\n\n case 'html':\n if (node.value?.includes('<br>')) {\n return {\n break: true,\n type: types.paragraph,\n children: [{ text: node.value?.replace(/<br>/g, '') || '' }],\n } as ParagraphNode<T>;\n }\n return { type: types.paragraph, children: [{ text: node.value || '' }] };\n\n case 'emphasis':\n return {\n [types.emphasisMark as string]: true,\n ...forceLeafNode(children as Array<TextNode>),\n ...persistLeafFormats(children as Array<MarkdownAstNode>),\n } as unknown as ItalicNode<T>;\n case 'strong':\n return {\n [types.strongMark as string]: true,\n ...forceLeafNode(children as Array<TextNode>),\n ...persistLeafFormats(children as Array<MarkdownAstNode>),\n };\n case 'delete':\n return {\n [types.deleteMark as string]: true,\n ...forceLeafNode(children as Array<TextNode>),\n ...persistLeafFormats(children as Array<MarkdownAstNode>),\n };\n case 'inlineCode':\n return {\n [types.inlineCodeMark as string]: true,\n text: node.value,\n ...persistLeafFormats(children as Array<MarkdownAstNode>),\n };\n case 'thematicBreak':\n return {\n type: types.thematicBreak,\n children: [{ text: '' }],\n } as ThematicBreakNode<T>;\n\n case 'text':\n default:\n return { text: node.value ?? '' };\n }\n}\n\nconst hasNodeChildren = (children: MarkdownAstNode['children']): children is MarkdownAstNode[] =>\n !!children && Array.isArray(children) && children.length > 0;\n\nconst forceLeafNode = (children: Array<TextNode>) => ({\n text: children.map((k) => k?.text).join(''),\n});\n\n// This function is will take any unknown keys, and bring them up a level\n// allowing leaf nodes to have many different formats at once\n// for example, bold and italic on the same node\nconst persistLeafFormats = (children: Array<MarkdownAstNode>): Omit<MarkdownAstNode, 'children' | 'type' | 'text'> => {\n return children.reduce((acc, node) => {\n for (const key of Object.keys(node) as Array<keyof MarkdownAstNode>) {\n if (key === 'children' || key === 'type' || key === 'text') {\n continue;\n }\n\n acc[key] = node[key];\n }\n\n return acc;\n }, {});\n};\n\nconst getOptions = (options: OptionType) => {\n const linkDestinationKey = options.linkDestinationKey ?? 'link';\n const imageSourceKey = options.imageSourceKey ?? 'link';\n const imageCaptionKey = options.imageCaptionKey ?? 'caption';\n\n return { linkDestinationKey, imageSourceKey, imageCaptionKey };\n};\n"],"names":["deserialize","node","options","types","linkDestinationKey","imageSourceKey","imageCaptionKey","getOptions","children","hasNodeChildren","value","matches","MENTION_DESERIALIZE_REGEX","_a","_b","forceLeafNode","persistLeafFormats","k","acc","key"],"mappings":";AAsBwB,SAAAA,EAAsCC,GAAuBC,GAAqB;;AACtG,QAAMC,IAAQD,KAAA,gBAAAA,EAAS,WACjB,EAAE,oBAAAE,GAAoB,gBAAAC,GAAgB,iBAAAC,EAAgB,IAAIC,EAAWL,CAAO;AAElF,MAAIM,IAAuC,CAAC,EAAE,MAAM,GAAI,CAAA;AAcxD,UAZIC,EAAgBR,EAAK,QAAQ,MAC7BO,IAAWP,EAAK,SAAS;AAAA,IAAQ,CAAC,MAC9BD;AAAA,MACI;AAAA,QACI,GAAG;AAAA,QACH,SAASC,EAAK,WAAW;AAAA,MAC7B;AAAA,MACAC;AAAA,IACJ;AAAA,EAAA,IAIAD,EAAK,MAAM;AAAA,IACf,KAAK;AACD,YAAMS,IAAQT,EAAK,WAAWA,EAAK,SAAS,CAAC,EAAE,QAAQ,QACjDU,IAAUD,KAAA,gBAAAA,EAAO,MAAME;AACtB,aAAA;AAAA,QACH,MAAMT,EAAM;AAAA,QACZ,UAAUQ,EAAQ,CAAC;AAAA,QACnB,IAAIA,EAAQ,CAAC;AAAA,QACb,UAAU,CAAC,EAAE,MAAM,IAAI;AAAA,MAAA;AAAA,IAE/B,KAAK;AACM,aAAA;AAAA,QACH,MAAMR,EAAM,QAAQF,EAAK,SAAS,CAAC;AAAA,QACnC,UAAAO;AAAA,MAAA;AAAA,IAER,KAAK;AACM,aAAA;AAAA,QACH,MAAMP,EAAK,UAAUE,EAAM,SAASA,EAAM;AAAA,QAC1C,UAAAK;AAAA,MAAA;AAAA,IAER,KAAK;AACD,aAAO,EAAE,MAAML,EAAM,UAAU,UAAAK,EAAS;AAAA,IAC5C,KAAK;AACD,aAAO,EAAE,MAAML,EAAM,eAAe,UAAAK,EAAS;AAAA,IACjD,KAAK;AACD,aAAO,EAAE,MAAML,EAAM,WAAW,UAAAK,EAAS;AAAA,IAC7C,KAAK;AACM,aAAA;AAAA,QACH,MAAML,EAAM;AAAA,QACZ,CAACC,CAAkB,GAAGH,EAAK;AAAA,QAC3B,QAAQA,EAAK;AAAA,QACb,UAAAO;AAAA,MAAA;AAAA,IAER,KAAK;AACM,aAAA;AAAA,QACH,MAAML,EAAM;AAAA,QACZ,UAAU,CAAC,EAAE,MAAM,IAAI;AAAA,QACvB,CAACE,CAAc,GAAGJ,EAAK;AAAA,QACvB,CAACK,CAAe,GAAGL,EAAK;AAAA,MAAA;AAAA,IAEhC,KAAK;AACD,aAAO,EAAE,MAAME,EAAM,YAAY,UAAAK,EAAS;AAAA,IAC9C,KAAK;AACM,aAAA;AAAA,QACH,MAAML,EAAM;AAAA,QACZ,UAAUF,EAAK,QAAQ;AAAA,QACvB,UAAU,CAAC,EAAE,MAAMA,EAAK,OAAO;AAAA,MAAA;AAAA,IAGvC,KAAK;AACD,cAAIY,IAAAZ,EAAK,UAAL,QAAAY,EAAY,SAAS,UACd;AAAA,QACH,OAAO;AAAA,QACP,MAAMV,EAAM;AAAA,QACZ,UAAU,CAAC,EAAE,QAAMW,IAAAb,EAAK,UAAL,gBAAAa,EAAY,QAAQ,SAAS,QAAO,IAAI;AAAA,MAAA,IAG5D,EAAE,MAAMX,EAAM,WAAW,UAAU,CAAC,EAAE,MAAMF,EAAK,SAAS,GAAG,CAAC,EAAE;AAAA,IAE3E,KAAK;AACM,aAAA;AAAA,QACH,CAACE,EAAM,YAAsB,GAAG;AAAA,QAChC,GAAGY,EAAcP,CAA2B;AAAA,QAC5C,GAAGQ,EAAmBR,CAAkC;AAAA,MAAA;AAAA,IAEhE,KAAK;AACM,aAAA;AAAA,QACH,CAACL,EAAM,UAAoB,GAAG;AAAA,QAC9B,GAAGY,EAAcP,CAA2B;AAAA,QAC5C,GAAGQ,EAAmBR,CAAkC;AAAA,MAAA;AAAA,IAEhE,KAAK;AACM,aAAA;AAAA,QACH,CAACL,EAAM,UAAoB,GAAG;AAAA,QAC9B,GAAGY,EAAcP,CAA2B;AAAA,QAC5C,GAAGQ,EAAmBR,CAAkC;AAAA,MAAA;AAAA,IAEhE,KAAK;AACM,aAAA;AAAA,QACH,CAACL,EAAM,cAAwB,GAAG;AAAA,QAClC,MAAMF,EAAK;AAAA,QACX,GAAGe,EAAmBR,CAAkC;AAAA,MAAA;AAAA,IAEhE,KAAK;AACM,aAAA;AAAA,QACH,MAAML,EAAM;AAAA,QACZ,UAAU,CAAC,EAAE,MAAM,IAAI;AAAA,MAAA;AAAA,IAG/B,KAAK;AAAA,IACL;AACI,aAAO,EAAE,MAAMF,EAAK,SAAS,GAAG;AAAA,EACxC;AACJ;AAEA,MAAMQ,IAAkB,CAACD,MACrB,CAAC,CAACA,KAAY,MAAM,QAAQA,CAAQ,KAAKA,EAAS,SAAS,GAEzDO,IAAgB,CAACP,OAA+B;AAAA,EAClD,MAAMA,EAAS,IAAI,CAACS,MAAMA,KAAA,gBAAAA,EAAG,IAAI,EAAE,KAAK,EAAE;AAC9C,IAKMD,IAAqB,CAACR,MACjBA,EAAS,OAAO,CAACU,GAAKjB,MAAS;AAClC,aAAWkB,KAAO,OAAO,KAAKlB,CAAI;AAC9B,IAAIkB,MAAQ,cAAcA,MAAQ,UAAUA,MAAQ,WAIhDD,EAAAC,CAAG,IAAIlB,EAAKkB,CAAG;AAGhB,SAAAD;AACX,GAAG,CAAE,CAAA,GAGHX,IAAa,CAACL,MAAwB;AAClC,QAAAE,IAAqBF,EAAQ,sBAAsB,QACnDG,IAAiBH,EAAQ,kBAAkB,QAC3CI,IAAkBJ,EAAQ,mBAAmB;AAE5C,SAAA,EAAE,oBAAAE,GAAoB,gBAAAC,GAAgB,iBAAAC;AACjD;"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import n from "escape-html";
|
|
2
2
|
import { BOLD_CLASSES as S } from "../../Plugins/BoldPlugin/BoldMarkupElement.es.js";
|
|
3
|
-
import { ITALIC_CLASSES as
|
|
4
|
-
import { UNDERLINE_CLASSES as
|
|
5
|
-
import { STRIKETHROUGH_CLASSES as
|
|
3
|
+
import { ITALIC_CLASSES as l } from "../../Plugins/ItalicPlugin/ItalicMarkupElement.es.js";
|
|
4
|
+
import { UNDERLINE_CLASSES as e } from "../../Plugins/UnderlinePlugin/UnderlineMarkupElement.es.js";
|
|
5
|
+
import { STRIKETHROUGH_CLASSES as m } from "../../Plugins/StrikethroughPlugin/StrikethroughMarkupElement.es.js";
|
|
6
6
|
import { CODE_CLASSES as f } from "../../Plugins/CodePlugin/CodeMarkupElement.es.js";
|
|
7
7
|
const _ = (r) => {
|
|
8
8
|
let s = n(r.text);
|
|
9
|
-
s = s.
|
|
9
|
+
s = s.replaceAll(`
|
|
10
10
|
`, "<br />");
|
|
11
11
|
const { bold: a, italic: p, underline: t, strikethrough: i, code: o } = r;
|
|
12
|
-
return a && (s = `<span class="${S}">${s}</span>`), p && (s = `<span class="${
|
|
12
|
+
return a && (s = `<span class="${S}">${s}</span>`), p && (s = `<span class="${l}">${s}</span>`), t && (s = `<span class="${e}">${s}</span>`), i && (s = `<span class="${m}">${s}</span>`), o && (s = `<span class="${f}">${s}</span>`), s;
|
|
13
13
|
};
|
|
14
14
|
export {
|
|
15
15
|
_ as serializeLeafToHtml
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializeLeafToHtml.es.js","sources":["../../../../../src/components/RichTextEditor/serializer/utils/serializeLeafToHtml.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n BOLD_CLASSES,\n CODE_CLASSES,\n ITALIC_CLASSES,\n STRIKETHROUGH_CLASSES,\n UNDERLINE_CLASSES,\n} from '@components/RichTextEditor/Plugins';\nimport { TText } from '@udecode/plate';\nimport escapeHtml from 'escape-html';\n\nexport const serializeLeafToHtml = (node: TText): string => {\n let string = escapeHtml(node.text);\n string = string.
|
|
1
|
+
{"version":3,"file":"serializeLeafToHtml.es.js","sources":["../../../../../src/components/RichTextEditor/serializer/utils/serializeLeafToHtml.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n BOLD_CLASSES,\n CODE_CLASSES,\n ITALIC_CLASSES,\n STRIKETHROUGH_CLASSES,\n UNDERLINE_CLASSES,\n} from '@components/RichTextEditor/Plugins';\nimport { TText } from '@udecode/plate';\nimport escapeHtml from 'escape-html';\n\nexport const serializeLeafToHtml = (node: TText): string => {\n let string = escapeHtml(node.text);\n string = string.replaceAll('\\n', '<br />');\n const { bold, italic, underline, strikethrough, code } = node;\n if (bold) {\n string = `<span class=\"${BOLD_CLASSES}\">${string}</span>`;\n }\n if (italic) {\n string = `<span class=\"${ITALIC_CLASSES}\">${string}</span>`;\n }\n if (underline) {\n string = `<span class=\"${UNDERLINE_CLASSES}\">${string}</span>`;\n }\n if (strikethrough) {\n string = `<span class=\"${STRIKETHROUGH_CLASSES}\">${string}</span>`;\n }\n if (code) {\n string = `<span class=\"${CODE_CLASSES}\">${string}</span>`;\n }\n return string;\n};\n"],"names":["serializeLeafToHtml","node","string","escapeHtml","bold","italic","underline","strikethrough","code","BOLD_CLASSES","ITALIC_CLASSES","UNDERLINE_CLASSES","STRIKETHROUGH_CLASSES","CODE_CLASSES"],"mappings":";;;;;;AAYa,MAAAA,IAAsB,CAACC,MAAwB;AACpD,MAAAC,IAASC,EAAWF,EAAK,IAAI;AACxB,EAAAC,IAAAA,EAAO,WAAW;AAAA,GAAM,QAAQ;AACzC,QAAM,EAAE,MAAAE,GAAM,QAAAC,GAAQ,WAAAC,GAAW,eAAAC,GAAe,MAAAC,EAAS,IAAAP;AACzD,SAAIG,MACAF,IAAS,gBAAgBO,MAAiBP,aAE1CG,MACAH,IAAS,gBAAgBQ,MAAmBR,aAE5CI,MACAJ,IAAS,gBAAgBS,MAAsBT,aAE/CK,MACAL,IAAS,gBAAgBU,MAA0BV,aAEnDM,MACAN,IAAS,gBAAgBW,MAAiBX,aAEvCA;AACX;"}
|
|
@@ -1,78 +1,78 @@
|
|
|
1
1
|
import { getUnderlineClassNames as M, getLicElementClassNames as _ } from "../../Plugins/ListPlugin/ListItemContentMarkupElement.es.js";
|
|
2
2
|
import { LI_CLASSNAMES as a, getLiStyles as n } from "../../Plugins/ListPlugin/ListItemMarkupElement.es.js";
|
|
3
|
-
import { isText as p,
|
|
4
|
-
import { merge as
|
|
5
|
-
import { buttonNode as
|
|
6
|
-
import { checkItemNode as
|
|
7
|
-
import { linkNode as
|
|
8
|
-
import { mentionHtmlNode as
|
|
3
|
+
import { isText as p, ELEMENT_UL as c, ELEMENT_OL as i, ELEMENT_LI as f, ELEMENT_LIC as C, ELEMENT_LINK as A, ELEMENT_MENTION as I } from "@udecode/plate";
|
|
4
|
+
import { merge as u } from "../../../../utilities/merge.es.js";
|
|
5
|
+
import { buttonNode as $ } from "../nodes/button.es.js";
|
|
6
|
+
import { checkItemNode as S } from "../nodes/checkItem.es.js";
|
|
7
|
+
import { linkNode as H } from "../nodes/link.es.js";
|
|
8
|
+
import { mentionHtmlNode as O } from "../nodes/mentionHtmlNode.es.js";
|
|
9
9
|
import { reactCssPropsToCss as m } from "./reactCssPropsToCss.es.js";
|
|
10
|
-
import { serializeLeafToHtml as
|
|
11
|
-
import { UL_CLASSES as
|
|
12
|
-
import { getOrderedListClasses as
|
|
13
|
-
import { ELEMENT_BUTTON as
|
|
14
|
-
import { TextStyles as
|
|
15
|
-
import { ELEMENT_CHECK_ITEM as
|
|
16
|
-
import { alignmentClassnames as
|
|
17
|
-
const l = (E, t) => E.reduce((e,
|
|
10
|
+
import { serializeLeafToHtml as G } from "./serializeLeafToHtml.es.js";
|
|
11
|
+
import { UL_CLASSES as y } from "../../Plugins/ListPlugin/UnorderedListPlugin/UnorderedListMarkupElement.es.js";
|
|
12
|
+
import { getOrderedListClasses as U, OL_STYLES as h } from "../../Plugins/ListPlugin/OrderedListPlugin/OrderedListMarkupElement.es.js";
|
|
13
|
+
import { ELEMENT_BUTTON as g } from "../../Plugins/ButtonPlugin/createButtonPlugin.es.js";
|
|
14
|
+
import { TextStyles as r } from "../../Plugins/TextStylePlugin/TextStyles/textStyles.es.js";
|
|
15
|
+
import { ELEMENT_CHECK_ITEM as D } from "../../Plugins/CheckboxListPlugin/id.es.js";
|
|
16
|
+
import { alignmentClassnames as d } from "../../Plugins/TextStylePlugin/TextStyles/alignment.es.js";
|
|
17
|
+
const l = (E, t) => E.reduce((e, s) => (s.type === t && e++, s.children ? e + l(s.children, t) : e), 0), k = (E, { designTokens: t, mappedMentionable: e, nestingCount: s = {} }) => {
|
|
18
18
|
if (p(E))
|
|
19
|
-
return
|
|
20
|
-
const o =
|
|
19
|
+
return G(E);
|
|
20
|
+
const o = s[E.type] || l([E], E.type);
|
|
21
21
|
let T = "";
|
|
22
22
|
for (const L of E.children)
|
|
23
|
-
T +=
|
|
23
|
+
T += k(L, {
|
|
24
24
|
designTokens: t,
|
|
25
25
|
nestingCount: {
|
|
26
|
-
...
|
|
26
|
+
...s,
|
|
27
27
|
[L.type]: o
|
|
28
28
|
},
|
|
29
29
|
mappedMentionable: e
|
|
30
30
|
});
|
|
31
|
-
return
|
|
32
|
-
classNames:
|
|
31
|
+
return P[E.type]({
|
|
32
|
+
classNames: b(E.breakAfterColumn, E.align),
|
|
33
33
|
children: T,
|
|
34
34
|
designTokens: t,
|
|
35
35
|
rootNestingCount: o,
|
|
36
36
|
node: E,
|
|
37
37
|
mappedMentionable: e
|
|
38
38
|
}) ?? T;
|
|
39
|
-
},
|
|
40
|
-
[
|
|
41
|
-
[
|
|
42
|
-
[
|
|
43
|
-
[
|
|
44
|
-
[
|
|
45
|
-
[
|
|
46
|
-
[
|
|
47
|
-
[
|
|
48
|
-
[
|
|
49
|
-
[
|
|
50
|
-
[
|
|
51
|
-
[
|
|
52
|
-
[i]: ({ classNames: E, children: t, node: e, rootNestingCount:
|
|
53
|
-
const o = Math.max(
|
|
54
|
-
return `<ol class="${
|
|
55
|
-
|
|
39
|
+
}, P = {
|
|
40
|
+
[r.ELEMENT_HEADING1]: (E) => N(r.ELEMENT_HEADING1, E, "h1"),
|
|
41
|
+
[r.ELEMENT_HEADING2]: (E) => N(r.ELEMENT_HEADING2, E, "h2"),
|
|
42
|
+
[r.ELEMENT_HEADING3]: (E) => N(r.ELEMENT_HEADING3, E, "h3"),
|
|
43
|
+
[r.ELEMENT_HEADING4]: (E) => N(r.ELEMENT_HEADING4, E, "h4"),
|
|
44
|
+
[r.ELEMENT_PARAGRAPH]: (E) => N(r.ELEMENT_PARAGRAPH, E, "p"),
|
|
45
|
+
[r.ELEMENT_CUSTOM1]: (E) => N(r.ELEMENT_CUSTOM1, E, "p"),
|
|
46
|
+
[r.ELEMENT_CUSTOM2]: (E) => N(r.ELEMENT_CUSTOM2, E, "p"),
|
|
47
|
+
[r.ELEMENT_CUSTOM3]: (E) => N(r.ELEMENT_CUSTOM3, E, "p"),
|
|
48
|
+
[r.ELEMENT_QUOTE]: (E) => N(r.ELEMENT_QUOTE, E, "p"),
|
|
49
|
+
[r.ELEMENT_IMAGE_TITLE]: (E) => N(r.ELEMENT_IMAGE_TITLE, E, "p"),
|
|
50
|
+
[r.ELEMENT_IMAGE_CAPTION]: (E) => N(r.ELEMENT_IMAGE_CAPTION, E, "p"),
|
|
51
|
+
[c]: (E) => `<ul class="${y} ${E.classNames}">${E.children}</ul>`,
|
|
52
|
+
[i]: ({ classNames: E, children: t, node: e, rootNestingCount: s }) => {
|
|
53
|
+
const o = Math.max(s - l([e], i), 0);
|
|
54
|
+
return `<ol class="${U(o)} ${E}" style="${m(
|
|
55
|
+
h
|
|
56
56
|
)}">${t}</ol>`;
|
|
57
57
|
},
|
|
58
|
-
[
|
|
59
|
-
n(t,
|
|
58
|
+
[f]: ({ classNames: E, designTokens: t, children: e, node: s }) => `<li class="${E} ${a}" style="${m(
|
|
59
|
+
n(t, s)
|
|
60
60
|
)}">${e}</li>`,
|
|
61
|
-
[
|
|
62
|
-
const o = M(t,
|
|
61
|
+
[C]: ({ classNames: E, designTokens: t, children: e, node: s }) => {
|
|
62
|
+
const o = M(t, s);
|
|
63
63
|
return `<p class="${E} ${_(
|
|
64
|
-
|
|
64
|
+
s
|
|
65
65
|
)}"><span class="${o}">${e}</span></p>`;
|
|
66
66
|
},
|
|
67
|
-
[
|
|
68
|
-
[
|
|
69
|
-
[
|
|
70
|
-
[
|
|
71
|
-
}, N = (E, { classNames: t, designTokens: e, children:
|
|
72
|
-
const e = "tw-break-words",
|
|
73
|
-
return
|
|
67
|
+
[A]: ({ node: E, children: t, designTokens: e, classNames: s }) => H(E, t, e, s),
|
|
68
|
+
[g]: ({ node: E, children: t, designTokens: e, classNames: s }) => $(E, t, e, s),
|
|
69
|
+
[D]: ({ node: E, children: t, classNames: e }) => S(E, t, e),
|
|
70
|
+
[I]: ({ node: E, mappedMentionable: t }) => O(E, { mentionable: t })
|
|
71
|
+
}, N = (E, { classNames: t, designTokens: e, children: s }, o) => `<${o} class="${t}" style="${m(e[E])}">${s}</${o}>`, b = (E, t) => {
|
|
72
|
+
const e = "tw-break-words", s = E === "active" ? "tw-break-after-column tw-break-inside-avoid-column" : "", o = t ? d[t] : "";
|
|
73
|
+
return u([o, e, s]);
|
|
74
74
|
};
|
|
75
75
|
export {
|
|
76
|
-
|
|
76
|
+
k as serializeNodeToHtmlRecursive
|
|
77
77
|
};
|
|
78
78
|
//# sourceMappingURL=serializeNodeToHtmlRecursive.es.js.map
|
package/dist/components/RichTextEditor/serializer/utils/serializeNodeToHtmlRecursive.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializeNodeToHtmlRecursive.es.js","sources":["../../../../../src/components/RichTextEditor/serializer/utils/serializeNodeToHtmlRecursive.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n ELEMENT_BUTTON,\n ELEMENT_CHECK_ITEM,\n MappedMentionableItems,\n OL_STYLES,\n UL_CLASSES,\n getOrderedListClasses,\n} from '@components/RichTextEditor/Plugins';\nimport {\n getLicElementClassNames,\n getUnderlineClassNames,\n} from '@components/RichTextEditor/Plugins/ListPlugin/ListItemContentMarkupElement';\nimport { LI_CLASSNAMES, getLiStyles } from '@components/RichTextEditor/Plugins/ListPlugin/ListItemMarkupElement';\nimport { TextStyles, alignmentClassnames } from '@components/RichTextEditor/Plugins/TextStylePlugin/TextStyles';\nimport { DesignTokens } from '@components/RichTextEditor/types';\nimport {\n ELEMENT_LI,\n ELEMENT_LIC,\n ELEMENT_LINK,\n ELEMENT_MENTION,\n ELEMENT_OL,\n ELEMENT_PARAGRAPH,\n ELEMENT_UL,\n TDescendant,\n TElement,\n isText,\n} from '@udecode/plate';\nimport { merge } from '@utilities/merge';\nimport { buttonNode } from '../nodes/button';\nimport { checkItemNode } from '../nodes/checkItem';\nimport { linkNode } from '../nodes/link';\nimport { mentionHtmlNode } from '../nodes/mentionHtmlNode';\nimport { reactCssPropsToCss } from './reactCssPropsToCss';\nimport { serializeLeafToHtml } from './serializeLeafToHtml';\n\nconst countNodesOfType = (nodes: TDescendant[], type: string): number => {\n return nodes.reduce((acc, node) => {\n if (node.type === type) {\n acc++;\n }\n if (node.children) {\n return acc + countNodesOfType(node.children as TDescendant[], type);\n }\n return acc;\n }, 0);\n};\n\ntype NestingCount = {\n [type: string]: number;\n};\n\ntype SerializeNodeToHtmlRecursiveOptions = {\n designTokens: DesignTokens;\n mappedMentionable?: MappedMentionableItems;\n nestingCount?: NestingCount;\n};\n\nexport const serializeNodeToHtmlRecursive = (\n node: TDescendant,\n { designTokens, mappedMentionable, nestingCount = {} }: SerializeNodeToHtmlRecursiveOptions,\n): string => {\n if (isText(node)) {\n return serializeLeafToHtml(node);\n }\n\n const rootNestingCount = nestingCount[node.type] || countNodesOfType([node], node.type);\n let children = '';\n for (const element of node.children) {\n children += serializeNodeToHtmlRecursive(element, {\n designTokens,\n nestingCount: {\n ...nestingCount,\n [element.type as string]: rootNestingCount,\n },\n mappedMentionable,\n });\n }\n\n return (\n MapNodeTypesToHtml[node.type]({\n classNames: getClassNames(node.breakAfterColumn as string | undefined, node.align as string | undefined),\n children,\n designTokens,\n rootNestingCount,\n node,\n mappedMentionable,\n }) ?? children\n );\n};\n\ntype Arguments = {\n classNames: string;\n designTokens: DesignTokens;\n children: string;\n rootNestingCount: number;\n node: TElement;\n mappedMentionable?: MappedMentionableItems;\n};\n\nconst MapNodeTypesToHtml: { [key: string]: ({ ...args }: Arguments) => string } = {\n [TextStyles.ELEMENT_HEADING1]: (args) => getTextStyleHtml(TextStyles.ELEMENT_HEADING1, args, 'h1'),\n [TextStyles.ELEMENT_HEADING2]: (args) => getTextStyleHtml(TextStyles.ELEMENT_HEADING2, args, 'h2'),\n [TextStyles.ELEMENT_HEADING3]: (args) => getTextStyleHtml(TextStyles.ELEMENT_HEADING3, args, 'h3'),\n [TextStyles.ELEMENT_HEADING4]: (args) => getTextStyleHtml(TextStyles.ELEMENT_HEADING4, args, 'h4'),\n [ELEMENT_PARAGRAPH]: (args) => getTextStyleHtml(TextStyles.ELEMENT_PARAGRAPH, args, 'p'),\n [TextStyles.ELEMENT_CUSTOM1]: (args) => getTextStyleHtml(TextStyles.ELEMENT_CUSTOM1, args, 'p'),\n [TextStyles.ELEMENT_CUSTOM2]: (args) => getTextStyleHtml(TextStyles.ELEMENT_CUSTOM2, args, 'p'),\n [TextStyles.ELEMENT_CUSTOM3]: (args) => getTextStyleHtml(TextStyles.ELEMENT_CUSTOM3, args, 'p'),\n [TextStyles.ELEMENT_QUOTE]: (args) => getTextStyleHtml(TextStyles.ELEMENT_QUOTE, args, 'p'),\n [TextStyles.ELEMENT_IMAGE_TITLE]: (args) => getTextStyleHtml(TextStyles.ELEMENT_IMAGE_TITLE, args, 'p'),\n [TextStyles.ELEMENT_IMAGE_CAPTION]: (args) => getTextStyleHtml(TextStyles.ELEMENT_IMAGE_CAPTION, args, 'p'),\n [ELEMENT_UL]: (args) => `<ul class=\"${UL_CLASSES} ${args.classNames}\">${args.children}</ul>`,\n [ELEMENT_OL]: ({ classNames, children, node, rootNestingCount }) => {\n const nestingLevel = Math.max(rootNestingCount - countNodesOfType([node], ELEMENT_OL), 0);\n return `<ol class=\"${getOrderedListClasses(nestingLevel)} ${classNames}\" style=\"${reactCssPropsToCss(\n OL_STYLES,\n )}\">${children}</ol>`;\n },\n [ELEMENT_LI]: ({ classNames, designTokens, children, node }) =>\n `<li class=\"${classNames} ${LI_CLASSNAMES}\" style=\"${reactCssPropsToCss(\n getLiStyles(designTokens, node),\n )}\">${children}</li>`,\n [ELEMENT_LIC]: ({ classNames, designTokens, children, node }) => {\n const underline = getUnderlineClassNames(designTokens, node);\n return `<p class=\"${classNames} ${getLicElementClassNames(\n node,\n )}\"><span class=\"${underline}\">${children}</span></p>`;\n },\n [ELEMENT_LINK]: ({ node, children, designTokens, classNames }) =>\n linkNode(node, children, designTokens, classNames),\n [ELEMENT_BUTTON]: ({ node, children, designTokens, classNames }) =>\n buttonNode(node, children, designTokens, classNames),\n [ELEMENT_CHECK_ITEM]: ({ node, children, classNames }) => checkItemNode(node, children, classNames),\n [ELEMENT_MENTION]: ({ node, mappedMentionable }) => mentionHtmlNode(node, { mentionable: mappedMentionable }),\n};\n\nconst getTextStyleHtml = (\n tag: TextStyles,\n { classNames, designTokens, children }: Arguments,\n htmlTag: 'p' | 'h1' | 'h2' | 'h3' | 'h4',\n) => `<${htmlTag} class=\"${classNames}\" style=\"${reactCssPropsToCss(designTokens[tag])}\">${children}</${htmlTag}>`;\n\nconst getClassNames = (breakAfterColumn?: string, align?: string) => {\n const breakWordsClass = 'tw-break-words';\n const columnBreakClasses =\n breakAfterColumn === 'active' ? 'tw-break-after-column tw-break-inside-avoid-column' : '';\n const alignClass = align ? alignmentClassnames[align as string] : '';\n return merge([alignClass, breakWordsClass, columnBreakClasses]);\n};\n"],"names":["countNodesOfType","nodes","type","acc","node","serializeNodeToHtmlRecursive","designTokens","mappedMentionable","nestingCount","isText","serializeLeafToHtml","rootNestingCount","children","element","MapNodeTypesToHtml","getClassNames","TextStyles","args","getTextStyleHtml","ELEMENT_PARAGRAPH","ELEMENT_UL","UL_CLASSES","ELEMENT_OL","classNames","nestingLevel","getOrderedListClasses","reactCssPropsToCss","OL_STYLES","ELEMENT_LI","LI_CLASSNAMES","getLiStyles","ELEMENT_LIC","underline","getUnderlineClassNames","getLicElementClassNames","ELEMENT_LINK","linkNode","ELEMENT_BUTTON","buttonNode","ELEMENT_CHECK_ITEM","checkItemNode","ELEMENT_MENTION","mentionHtmlNode","tag","htmlTag","breakAfterColumn","align","breakWordsClass","columnBreakClasses","alignClass","alignmentClassnames","merge"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"serializeNodeToHtmlRecursive.es.js","sources":["../../../../../src/components/RichTextEditor/serializer/utils/serializeNodeToHtmlRecursive.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n ELEMENT_BUTTON,\n ELEMENT_CHECK_ITEM,\n MappedMentionableItems,\n OL_STYLES,\n UL_CLASSES,\n getOrderedListClasses,\n} from '@components/RichTextEditor/Plugins';\nimport {\n getLicElementClassNames,\n getUnderlineClassNames,\n} from '@components/RichTextEditor/Plugins/ListPlugin/ListItemContentMarkupElement';\nimport { LI_CLASSNAMES, getLiStyles } from '@components/RichTextEditor/Plugins/ListPlugin/ListItemMarkupElement';\nimport { TextStyles, alignmentClassnames } from '@components/RichTextEditor/Plugins/TextStylePlugin/TextStyles';\nimport { DesignTokens } from '@components/RichTextEditor/types';\nimport {\n ELEMENT_LI,\n ELEMENT_LIC,\n ELEMENT_LINK,\n ELEMENT_MENTION,\n ELEMENT_OL,\n ELEMENT_UL,\n TDescendant,\n TElement,\n isText,\n} from '@udecode/plate';\nimport { merge } from '@utilities/merge';\nimport { buttonNode } from '../nodes/button';\nimport { checkItemNode } from '../nodes/checkItem';\nimport { linkNode } from '../nodes/link';\nimport { mentionHtmlNode } from '../nodes/mentionHtmlNode';\nimport { reactCssPropsToCss } from './reactCssPropsToCss';\nimport { serializeLeafToHtml } from './serializeLeafToHtml';\n\nconst countNodesOfType = (nodes: TDescendant[], type: string): number => {\n return nodes.reduce((acc, node) => {\n if (node.type === type) {\n acc++;\n }\n if (node.children) {\n return acc + countNodesOfType(node.children as TDescendant[], type);\n }\n return acc;\n }, 0);\n};\n\ntype NestingCount = {\n [type: string]: number;\n};\n\ntype SerializeNodeToHtmlRecursiveOptions = {\n designTokens: DesignTokens;\n mappedMentionable?: MappedMentionableItems;\n nestingCount?: NestingCount;\n};\n\nexport const serializeNodeToHtmlRecursive = (\n node: TDescendant,\n { designTokens, mappedMentionable, nestingCount = {} }: SerializeNodeToHtmlRecursiveOptions,\n): string => {\n if (isText(node)) {\n return serializeLeafToHtml(node);\n }\n\n const rootNestingCount = nestingCount[node.type] || countNodesOfType([node], node.type);\n let children = '';\n for (const element of node.children) {\n children += serializeNodeToHtmlRecursive(element, {\n designTokens,\n nestingCount: {\n ...nestingCount,\n [element.type as string]: rootNestingCount,\n },\n mappedMentionable,\n });\n }\n\n return (\n MapNodeTypesToHtml[node.type]({\n classNames: getClassNames(node.breakAfterColumn as string | undefined, node.align as string | undefined),\n children,\n designTokens,\n rootNestingCount,\n node,\n mappedMentionable,\n }) ?? children\n );\n};\n\ntype Arguments = {\n classNames: string;\n designTokens: DesignTokens;\n children: string;\n rootNestingCount: number;\n node: TElement;\n mappedMentionable?: MappedMentionableItems;\n};\n\nconst MapNodeTypesToHtml: { [key: string]: ({ ...args }: Arguments) => string } = {\n [TextStyles.ELEMENT_HEADING1]: (args) => getTextStyleHtml(TextStyles.ELEMENT_HEADING1, args, 'h1'),\n [TextStyles.ELEMENT_HEADING2]: (args) => getTextStyleHtml(TextStyles.ELEMENT_HEADING2, args, 'h2'),\n [TextStyles.ELEMENT_HEADING3]: (args) => getTextStyleHtml(TextStyles.ELEMENT_HEADING3, args, 'h3'),\n [TextStyles.ELEMENT_HEADING4]: (args) => getTextStyleHtml(TextStyles.ELEMENT_HEADING4, args, 'h4'),\n [TextStyles.ELEMENT_PARAGRAPH]: (args) => getTextStyleHtml(TextStyles.ELEMENT_PARAGRAPH, args, 'p'),\n [TextStyles.ELEMENT_CUSTOM1]: (args) => getTextStyleHtml(TextStyles.ELEMENT_CUSTOM1, args, 'p'),\n [TextStyles.ELEMENT_CUSTOM2]: (args) => getTextStyleHtml(TextStyles.ELEMENT_CUSTOM2, args, 'p'),\n [TextStyles.ELEMENT_CUSTOM3]: (args) => getTextStyleHtml(TextStyles.ELEMENT_CUSTOM3, args, 'p'),\n [TextStyles.ELEMENT_QUOTE]: (args) => getTextStyleHtml(TextStyles.ELEMENT_QUOTE, args, 'p'),\n [TextStyles.ELEMENT_IMAGE_TITLE]: (args) => getTextStyleHtml(TextStyles.ELEMENT_IMAGE_TITLE, args, 'p'),\n [TextStyles.ELEMENT_IMAGE_CAPTION]: (args) => getTextStyleHtml(TextStyles.ELEMENT_IMAGE_CAPTION, args, 'p'),\n [ELEMENT_UL]: (args) => `<ul class=\"${UL_CLASSES} ${args.classNames}\">${args.children}</ul>`,\n [ELEMENT_OL]: ({ classNames, children, node, rootNestingCount }) => {\n const nestingLevel = Math.max(rootNestingCount - countNodesOfType([node], ELEMENT_OL), 0);\n return `<ol class=\"${getOrderedListClasses(nestingLevel)} ${classNames}\" style=\"${reactCssPropsToCss(\n OL_STYLES,\n )}\">${children}</ol>`;\n },\n [ELEMENT_LI]: ({ classNames, designTokens, children, node }) =>\n `<li class=\"${classNames} ${LI_CLASSNAMES}\" style=\"${reactCssPropsToCss(\n getLiStyles(designTokens, node),\n )}\">${children}</li>`,\n [ELEMENT_LIC]: ({ classNames, designTokens, children, node }) => {\n const underline = getUnderlineClassNames(designTokens, node);\n return `<p class=\"${classNames} ${getLicElementClassNames(\n node,\n )}\"><span class=\"${underline}\">${children}</span></p>`;\n },\n [ELEMENT_LINK]: ({ node, children, designTokens, classNames }) =>\n linkNode(node, children, designTokens, classNames),\n [ELEMENT_BUTTON]: ({ node, children, designTokens, classNames }) =>\n buttonNode(node, children, designTokens, classNames),\n [ELEMENT_CHECK_ITEM]: ({ node, children, classNames }) => checkItemNode(node, children, classNames),\n [ELEMENT_MENTION]: ({ node, mappedMentionable }) => mentionHtmlNode(node, { mentionable: mappedMentionable }),\n};\n\nconst getTextStyleHtml = (\n tag: TextStyles,\n { classNames, designTokens, children }: Arguments,\n htmlTag: 'p' | 'h1' | 'h2' | 'h3' | 'h4',\n) => `<${htmlTag} class=\"${classNames}\" style=\"${reactCssPropsToCss(designTokens[tag])}\">${children}</${htmlTag}>`;\n\nconst getClassNames = (breakAfterColumn?: string, align?: string) => {\n const breakWordsClass = 'tw-break-words';\n const columnBreakClasses =\n breakAfterColumn === 'active' ? 'tw-break-after-column tw-break-inside-avoid-column' : '';\n const alignClass = align ? alignmentClassnames[align as string] : '';\n return merge([alignClass, breakWordsClass, columnBreakClasses]);\n};\n"],"names":["countNodesOfType","nodes","type","acc","node","serializeNodeToHtmlRecursive","designTokens","mappedMentionable","nestingCount","isText","serializeLeafToHtml","rootNestingCount","children","element","MapNodeTypesToHtml","getClassNames","TextStyles","args","getTextStyleHtml","ELEMENT_UL","UL_CLASSES","ELEMENT_OL","classNames","nestingLevel","getOrderedListClasses","reactCssPropsToCss","OL_STYLES","ELEMENT_LI","LI_CLASSNAMES","getLiStyles","ELEMENT_LIC","underline","getUnderlineClassNames","getLicElementClassNames","ELEMENT_LINK","linkNode","ELEMENT_BUTTON","buttonNode","ELEMENT_CHECK_ITEM","checkItemNode","ELEMENT_MENTION","mentionHtmlNode","tag","htmlTag","breakAfterColumn","align","breakWordsClass","columnBreakClasses","alignClass","alignmentClassnames","merge"],"mappings":"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"}
|