@frontify/fondue 12.0.0-beta.55 → 12.0.0-beta.56

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.
@@ -12,7 +12,7 @@ function o(e, a) {
12
12
  )
13
13
  )), e.type) {
14
14
  case "mention":
15
- const c = e.children ? e.children[0].value : void 0, m = c == null ? void 0 : c.match(/@\[([a-z]+):\s(\d+)]/i);
15
+ const c = e.children ? e.children[0].value : void 0, m = c == null ? void 0 : c.match(/@\[([a-z]+):(\d+)]/i);
16
16
  return {
17
17
  type: t.mention,
18
18
  category: m[1],
@@ -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 ListItemNode,\n ListNode,\n MarkdownAstNode,\n OptionType,\n ParagraphNode,\n TextNode,\n ThematicBreakNode,\n} from '../types';\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(/@\\[([a-z]+):\\s(\\d+)]/i) as RegExpMatchArray;\n return {\n type: types.mention,\n category: matches[1],\n key: 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 'paragraph':\n return { type: types.paragraph, children } as ParagraphNode<T>;\n case 'link':\n return {\n type: types.link,\n [linkDestinationKey]: node.url,\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: '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","_a","_b","_c","_d","types","linkDestinationKey","imageSourceKey","imageCaptionKey","getOptions","children","hasNodeChildren","value","matches","forceLeafNode","persistLeafFormats","k","acc","key"],"mappings":"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"}
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 ListItemNode,\n ListNode,\n MarkdownAstNode,\n OptionType,\n ParagraphNode,\n TextNode,\n ThematicBreakNode,\n} from '../types';\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(/@\\[([a-z]+):(\\d+)]/i) as RegExpMatchArray;\n return {\n type: types.mention,\n category: matches[1],\n key: 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 'paragraph':\n return { type: types.paragraph, children } as ParagraphNode<T>;\n case 'link':\n return {\n type: types.link,\n [linkDestinationKey]: node.url,\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: '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","_a","_b","_c","_d","types","linkDestinationKey","imageSourceKey","imageCaptionKey","getOptions","children","hasNodeChildren","value","matches","forceLeafNode","persistLeafFormats","k","acc","key"],"mappings":"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"}
@@ -1,45 +1,48 @@
1
1
  import { visit as s } from "unist-util-visit";
2
2
  const h = (t) => {
3
- s(t, "paragraph", i);
4
- function i(e) {
3
+ s(t, "paragraph", n);
4
+ function n(e) {
5
5
  const { children: r } = e;
6
6
  e.children = [];
7
- for (const n of r) {
8
- if (!o(n, "text") || !n.value) {
9
- e.children.push(n);
7
+ for (const i of r) {
8
+ if (!u(i, "text") || !i.value) {
9
+ e.children.push(i);
10
10
  continue;
11
11
  }
12
- const l = [...n.value.matchAll(/@\[[a-z]+:\s\d+]/gi)];
12
+ const l = [...i.value.matchAll(/@\[[a-z]+:\d+]/gi)];
13
13
  if (l === null || l.length === 0) {
14
- e.children.push(n);
14
+ e.children.push(i);
15
15
  continue;
16
16
  }
17
- u(l, e, n.value);
17
+ p(l, e, i.value);
18
18
  }
19
19
  }
20
- }, o = (t, i) => t[i] !== "" && !!t.value, u = (t, i, e) => {
21
- t[0].index > 0 && i.children.push({
20
+ }, u = (t, n) => t[n] !== "" && !!t.value, p = (t, n, e) => {
21
+ t[0].index > 0 && n.children.push({
22
22
  type: "text",
23
23
  value: e.slice(0, t[0].index)
24
24
  });
25
- for (const [n, l] of t.entries())
26
- if (i.children.push({
25
+ for (const [i, l] of t.entries())
26
+ if (n.children.push({
27
27
  type: "mention",
28
28
  children: [{ type: "text", value: l[0] }]
29
- }), t.length > n + 1 && e) {
29
+ }), t.length > i + 1 && e) {
30
30
  const c = l.index + l[0].length;
31
- i.children.push({
31
+ n.children.push({
32
32
  type: "text",
33
- value: e.slice(c, t[n + 1].index)
33
+ value: e.slice(c, t[i + 1].index)
34
34
  });
35
35
  }
36
36
  const r = t[t.length - 1];
37
- r.index + r[0].length < e.length && i.children.push({
37
+ r.index + r[0].length < e.length ? n.children.push({
38
38
  type: "text",
39
39
  value: e.slice(r.index + r[0].length)
40
+ }) : n.children.push({
41
+ type: "text",
42
+ value: ""
40
43
  });
41
- }, p = () => h, f = p;
44
+ }, o = () => h, x = o;
42
45
  export {
43
- f as default
46
+ x as default
44
47
  };
45
48
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../../../../../src/components/RichTextEditor/serializer/markdown/remarkMention/index.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { VisitorResult, visit } from 'unist-util-visit';\nimport { NodeChild, NodeChildKey, ParagraphNode, RegExpMatchArray, Transformer } from './types';\n\nconst transformer = (tree: ParagraphNode) => {\n visit(tree, 'paragraph', visitor);\n\n function visitor(node: ParagraphNode): VisitorResult {\n const { children } = node;\n node.children = [];\n\n for (const child of children) {\n if (!is(child, 'text') || !child.value) {\n node.children.push(child);\n continue;\n }\n\n const matches = [...child.value.matchAll(/@\\[[a-z]+:\\s\\d+]/gi)] as RegExpMatchArray[];\n\n if (matches === null || matches.length === 0) {\n node.children.push(child);\n continue;\n }\n\n createNodes(matches, node, child.value);\n }\n }\n};\n\nconst is = (node: NodeChild, key: NodeChildKey): boolean => node[key] !== '' && !!node.value;\n\nconst createNodes = (matches: RegExpMatchArray[], node: ParagraphNode, value: string) => {\n if (matches[0].index > 0) {\n node.children.push({\n type: 'text',\n value: value.slice(0, matches[0].index),\n });\n }\n\n for (const [index, match] of matches.entries()) {\n node.children.push({\n type: 'mention',\n children: [{ type: 'text', value: match[0] }],\n });\n\n if (matches.length > index + 1 && value) {\n const startAt = match.index + match[0].length;\n node.children.push({\n type: 'text',\n value: value.slice(startAt, matches[index + 1].index),\n });\n }\n }\n\n const lastMatch = matches[matches.length - 1];\n\n if (lastMatch.index + lastMatch[0].length < value.length) {\n node.children.push({\n type: 'text',\n value: value.slice(lastMatch.index + lastMatch[0].length),\n });\n }\n};\n\nconst plugin = (): Transformer => {\n return transformer;\n};\n\nexport default plugin;\n"],"names":["transformer","tree","visit","visitor","node","children","child","is","matches","createNodes","key","value","index","match","startAt","lastMatch","plugin","remarkMention"],"mappings":";AAKA,MAAMA,IAAc,CAACC,MAAwB;AACnC,EAAAC,EAAAD,GAAM,aAAaE,CAAO;AAEhC,WAASA,EAAQC,GAAoC;AAC3C,UAAA,EAAE,UAAAC,EAAa,IAAAD;AACrB,IAAAA,EAAK,WAAW;AAEhB,eAAWE,KAASD,GAAU;AAC1B,UAAI,CAACE,EAAGD,GAAO,MAAM,KAAK,CAACA,EAAM,OAAO;AAC/B,QAAAF,EAAA,SAAS,KAAKE,CAAK;AACxB;AAAA,MACJ;AAEA,YAAME,IAAU,CAAC,GAAGF,EAAM,MAAM,SAAS,oBAAoB,CAAC;AAE9D,UAAIE,MAAY,QAAQA,EAAQ,WAAW,GAAG;AACrC,QAAAJ,EAAA,SAAS,KAAKE,CAAK;AACxB;AAAA,MACJ;AAEY,MAAAG,EAAAD,GAASJ,GAAME,EAAM,KAAK;AAAA,IAC1C;AAAA,EACJ;AACJ,GAEMC,IAAK,CAACH,GAAiBM,MAA+BN,EAAKM,OAAS,MAAM,CAAC,CAACN,EAAK,OAEjFK,IAAc,CAACD,GAA6BJ,GAAqBO,MAAkB;AACjF,EAAAH,EAAQ,GAAG,QAAQ,KACnBJ,EAAK,SAAS,KAAK;AAAA,IACf,MAAM;AAAA,IACN,OAAOO,EAAM,MAAM,GAAGH,EAAQ,GAAG,KAAK;AAAA,EAAA,CACzC;AAGL,aAAW,CAACI,GAAOC,CAAK,KAAKL,EAAQ;AAMjC,QALAJ,EAAK,SAAS,KAAK;AAAA,MACf,MAAM;AAAA,MACN,UAAU,CAAC,EAAE,MAAM,QAAQ,OAAOS,EAAM,IAAI;AAAA,IAAA,CAC/C,GAEGL,EAAQ,SAASI,IAAQ,KAAKD,GAAO;AACrC,YAAMG,IAAUD,EAAM,QAAQA,EAAM,GAAG;AACvC,MAAAT,EAAK,SAAS,KAAK;AAAA,QACf,MAAM;AAAA,QACN,OAAOO,EAAM,MAAMG,GAASN,EAAQI,IAAQ,GAAG,KAAK;AAAA,MAAA,CACvD;AAAA,IACL;AAGE,QAAAG,IAAYP,EAAQA,EAAQ,SAAS;AAE3C,EAAIO,EAAU,QAAQA,EAAU,GAAG,SAASJ,EAAM,UAC9CP,EAAK,SAAS,KAAK;AAAA,IACf,MAAM;AAAA,IACN,OAAOO,EAAM,MAAMI,EAAU,QAAQA,EAAU,GAAG,MAAM;AAAA,EAAA,CAC3D;AAET,GAEMC,IAAS,MACJhB,GAGXiB,IAAeD;"}
1
+ {"version":3,"file":"index.es.js","sources":["../../../../../../src/components/RichTextEditor/serializer/markdown/remarkMention/index.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { VisitorResult, visit } from 'unist-util-visit';\nimport { NodeChild, NodeChildKey, ParagraphNode, RegExpMatchArray, Transformer } from './types';\n\nconst transformer = (tree: ParagraphNode) => {\n visit(tree, 'paragraph', visitor);\n\n function visitor(node: ParagraphNode): VisitorResult {\n const { children } = node;\n node.children = [];\n\n for (const child of children) {\n if (!is(child, 'text') || !child.value) {\n node.children.push(child);\n continue;\n }\n\n const matches = [...child.value.matchAll(/@\\[[a-z]+:\\d+]/gi)] as RegExpMatchArray[];\n\n if (matches === null || matches.length === 0) {\n node.children.push(child);\n continue;\n }\n\n createNodes(matches, node, child.value);\n }\n }\n};\n\nconst is = (node: NodeChild, key: NodeChildKey): boolean => node[key] !== '' && !!node.value;\n\nconst createNodes = (matches: RegExpMatchArray[], node: ParagraphNode, value: string) => {\n if (matches[0].index > 0) {\n node.children.push({\n type: 'text',\n value: value.slice(0, matches[0].index),\n });\n }\n\n for (const [index, match] of matches.entries()) {\n node.children.push({\n type: 'mention',\n children: [{ type: 'text', value: match[0] }],\n });\n\n if (matches.length > index + 1 && value) {\n const startAt = match.index + match[0].length;\n node.children.push({\n type: 'text',\n value: value.slice(startAt, matches[index + 1].index),\n });\n }\n }\n\n const lastMatch = matches[matches.length - 1];\n\n if (lastMatch.index + lastMatch[0].length < value.length) {\n node.children.push({\n type: 'text',\n value: value.slice(lastMatch.index + lastMatch[0].length),\n });\n } else {\n node.children.push({\n type: 'text',\n value: '',\n });\n }\n};\n\nconst plugin = (): Transformer => {\n return transformer;\n};\n\nexport default plugin;\n"],"names":["transformer","tree","visit","visitor","node","children","child","is","matches","createNodes","key","value","index","match","startAt","lastMatch","plugin","remarkMention"],"mappings":";AAKA,MAAMA,IAAc,CAACC,MAAwB;AACnC,EAAAC,EAAAD,GAAM,aAAaE,CAAO;AAEhC,WAASA,EAAQC,GAAoC;AAC3C,UAAA,EAAE,UAAAC,EAAa,IAAAD;AACrB,IAAAA,EAAK,WAAW;AAEhB,eAAWE,KAASD,GAAU;AAC1B,UAAI,CAACE,EAAGD,GAAO,MAAM,KAAK,CAACA,EAAM,OAAO;AAC/B,QAAAF,EAAA,SAAS,KAAKE,CAAK;AACxB;AAAA,MACJ;AAEA,YAAME,IAAU,CAAC,GAAGF,EAAM,MAAM,SAAS,kBAAkB,CAAC;AAE5D,UAAIE,MAAY,QAAQA,EAAQ,WAAW,GAAG;AACrC,QAAAJ,EAAA,SAAS,KAAKE,CAAK;AACxB;AAAA,MACJ;AAEY,MAAAG,EAAAD,GAASJ,GAAME,EAAM,KAAK;AAAA,IAC1C;AAAA,EACJ;AACJ,GAEMC,IAAK,CAACH,GAAiBM,MAA+BN,EAAKM,OAAS,MAAM,CAAC,CAACN,EAAK,OAEjFK,IAAc,CAACD,GAA6BJ,GAAqBO,MAAkB;AACjF,EAAAH,EAAQ,GAAG,QAAQ,KACnBJ,EAAK,SAAS,KAAK;AAAA,IACf,MAAM;AAAA,IACN,OAAOO,EAAM,MAAM,GAAGH,EAAQ,GAAG,KAAK;AAAA,EAAA,CACzC;AAGL,aAAW,CAACI,GAAOC,CAAK,KAAKL,EAAQ;AAMjC,QALAJ,EAAK,SAAS,KAAK;AAAA,MACf,MAAM;AAAA,MACN,UAAU,CAAC,EAAE,MAAM,QAAQ,OAAOS,EAAM,IAAI;AAAA,IAAA,CAC/C,GAEGL,EAAQ,SAASI,IAAQ,KAAKD,GAAO;AACrC,YAAMG,IAAUD,EAAM,QAAQA,EAAM,GAAG;AACvC,MAAAT,EAAK,SAAS,KAAK;AAAA,QACf,MAAM;AAAA,QACN,OAAOO,EAAM,MAAMG,GAASN,EAAQI,IAAQ,GAAG,KAAK;AAAA,MAAA,CACvD;AAAA,IACL;AAGE,QAAAG,IAAYP,EAAQA,EAAQ,SAAS;AAE3C,EAAIO,EAAU,QAAQA,EAAU,GAAG,SAASJ,EAAM,SAC9CP,EAAK,SAAS,KAAK;AAAA,IACf,MAAM;AAAA,IACN,OAAOO,EAAM,MAAMI,EAAU,QAAQA,EAAU,GAAG,MAAM;AAAA,EAAA,CAC3D,IAEDX,EAAK,SAAS,KAAK;AAAA,IACf,MAAM;AAAA,IACN,OAAO;AAAA,EAAA,CACV;AAET,GAEMY,IAAS,MACJhB,GAGXiB,IAAeD;"}
@@ -1,6 +1,6 @@
1
1
  import u from "escape-html";
2
2
  import { isLeafNode as g } from "./isLeafNode.es.js";
3
- const l = (o) => `@[${o.category}: ${o.key}]`, m = (o, t, s, r) => {
3
+ const l = (o) => `@[${o.category}:${o.key}]`, m = (o, t, s, r) => {
4
4
  const a = s && s.parentType === o.olList, c = s.children.length === 1 && g(s.children[0]);
5
5
  let e = "";
6
6
  for (let n = 0; r > n; n++)
@@ -1 +1 @@
1
- {"version":3,"file":"applyFormattingToBlockNode.es.js","sources":["../../../../../../src/components/RichTextEditor/serializer/markdown/serializer/applyFormattingToBlockNode.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport escapeHtml from 'escape-html';\nimport { BlockType, InputNodeTypes, NodeType, OptionType } from '../types';\nimport { isLeafNode } from './isLeafNode';\n\nconst processMentionNode = (chunk: BlockType) => `@[${chunk.category}: ${chunk.key}]`;\n\nconst processListItemNode = (\n nodeTypes: InputNodeTypes,\n children: string,\n chunk: NodeType,\n listDepth: number,\n): string => {\n const isOL = chunk && chunk.parentType === nodeTypes.olList;\n const treatAsLeaf = (chunk as BlockType).children.length === 1 && isLeafNode((chunk as BlockType).children[0]);\n\n let spacer = '';\n for (let k = 0; listDepth > k; k++) {\n if (isOL) {\n // https://github.com/remarkjs/remark-react/issues/65\n spacer += ' ';\n } else {\n spacer += ' ';\n }\n }\n return `${spacer}${isOL ? '1.' : '-'} ${children}${treatAsLeaf ? '\\n' : ''}`;\n};\n\nconst shouldEscapeNode = (children: string, nodeTypes: InputNodeTypes, type?: string, parentType?: string) => {\n // don't escape if: code block, image, img\n const isCodeBlock = parentType === nodeTypes.codeBlock || type === nodeTypes.codeBlock;\n if (!isCodeBlock) {\n children = escapeHtml(children);\n }\n\n return children;\n};\n\nexport const applyFormattingToBlockNode = (\n options: OptionType,\n children: string,\n chunk: NodeType,\n listDepth: number,\n type?: string,\n parentType?: string,\n) => {\n const nodeTypes = options.nodeTypes as InputNodeTypes;\n\n switch (type) {\n case nodeTypes.heading[1]:\n return `# ${children}\\n`;\n case nodeTypes.heading[2]:\n return `## ${children}\\n`;\n case nodeTypes.heading[3]:\n return `### ${children}\\n`;\n case nodeTypes.heading[4]:\n return `#### ${children}\\n`;\n case nodeTypes.heading[5]:\n return `##### ${children}\\n`;\n case nodeTypes.heading[6]:\n return `###### ${children}\\n`;\n\n case nodeTypes.blockQuote:\n /**\n * For some reason, marked is parsing blockquote w/ one new line as\n * continued blockquote, so adding two new lines ensures that doesn't\n * happen\n */\n return `> ${children}\\n`;\n\n case nodeTypes.codeBlock:\n return `\\`\\`\\`${(chunk as BlockType).language || ''}\\n${children}\\n\\`\\`\\`\\n`;\n\n case nodeTypes.link:\n const linkUrl = (chunk as BlockType).url ?? '';\n return `[${children}](${linkUrl})`;\n\n case nodeTypes.image:\n const imageUrl = (chunk as BlockType).link ?? '';\n return `![${(chunk as BlockType).caption}](${imageUrl})`;\n\n case nodeTypes.ulList:\n case nodeTypes.olList:\n return `\\n${children}\\n`;\n\n case nodeTypes.listItem:\n return processListItemNode(nodeTypes, children, chunk, listDepth);\n\n case nodeTypes.paragraph:\n return `${children}\\n`;\n\n case nodeTypes.thematicBreak:\n return `\\n---${children}\\n\\n`;\n\n case nodeTypes.mention:\n return processMentionNode(chunk as BlockType);\n\n default:\n return shouldEscapeNode(children, nodeTypes, type, parentType);\n }\n};\n"],"names":["processMentionNode","chunk","processListItemNode","nodeTypes","children","listDepth","isOL","treatAsLeaf","isLeafNode","spacer","k","shouldEscapeNode","type","parentType","escapeHtml","applyFormattingToBlockNode","options","linkUrl","_a","imageUrl","_b"],"mappings":";;AAMA,MAAMA,IAAqB,CAACC,MAAqB,KAAKA,EAAM,aAAaA,EAAM,QAEzEC,IAAsB,CACxBC,GACAC,GACAH,GACAI,MACS;AACT,QAAMC,IAAOL,KAASA,EAAM,eAAeE,EAAU,QAC/CI,IAAeN,EAAoB,SAAS,WAAW,KAAKO,EAAYP,EAAoB,SAAS,EAAE;AAE7G,MAAIQ,IAAS;AACb,WAASC,IAAI,GAAGL,IAAYK,GAAGA;AAC3B,IAAIJ,IAEUG,KAAA,QAEAA,KAAA;AAGlB,SAAO,GAAGA,IAASH,IAAO,OAAO,OAAOF,IAAWG,IAAc;AAAA,IAAO;AAC5E,GAEMI,IAAmB,CAACP,GAAkBD,GAA2BS,GAAeC,OAE9DA,MAAeV,EAAU,aAAaS,MAAST,EAAU,cAEzEC,IAAWU,EAAWV,CAAQ,IAG3BA,IAGEW,IAA6B,CACtCC,GACAZ,GACAH,GACAI,GACAO,GACAC,MACC;;AACD,QAAMV,IAAYa,EAAQ;AAE1B,UAAQJ,GAAM;AAAA,IACV,KAAKT,EAAU,QAAQ;AACnB,aAAO,KAAKC;AAAA;AAAA,IAChB,KAAKD,EAAU,QAAQ;AACnB,aAAO,MAAMC;AAAA;AAAA,IACjB,KAAKD,EAAU,QAAQ;AACnB,aAAO,OAAOC;AAAA;AAAA,IAClB,KAAKD,EAAU,QAAQ;AACnB,aAAO,QAAQC;AAAA;AAAA,IACnB,KAAKD,EAAU,QAAQ;AACnB,aAAO,SAASC;AAAA;AAAA,IACpB,KAAKD,EAAU,QAAQ;AACnB,aAAO,UAAUC;AAAA;AAAA,IAErB,KAAKD,EAAU;AAMX,aAAO,KAAKC;AAAA;AAAA,IAEhB,KAAKD,EAAU;AACJ,aAAA,SAAUF,EAAoB,YAAY;AAAA,EAAOG;AAAA;AAAA;AAAA,IAE5D,KAAKD,EAAU;AACL,YAAAc,KAAWC,IAAAjB,EAAoB,QAApB,OAAAiB,IAA2B;AAC5C,aAAO,IAAId,MAAaa;AAAA,IAE5B,KAAKd,EAAU;AACL,YAAAgB,KAAYC,IAAAnB,EAAoB,SAApB,OAAAmB,IAA4B;AACvC,aAAA,KAAMnB,EAAoB,YAAYkB;AAAA,IAEjD,KAAKhB,EAAU;AAAA,IACf,KAAKA,EAAU;AACJ,aAAA;AAAA,EAAKC;AAAA;AAAA,IAEhB,KAAKD,EAAU;AACX,aAAOD,EAAoBC,GAAWC,GAAUH,GAAOI,CAAS;AAAA,IAEpE,KAAKF,EAAU;AACX,aAAO,GAAGC;AAAA;AAAA,IAEd,KAAKD,EAAU;AACJ,aAAA;AAAA,KAAQC;AAAA;AAAA;AAAA,IAEnB,KAAKD,EAAU;AACX,aAAOH,EAAmBC,CAAkB;AAAA,IAEhD;AACI,aAAOU,EAAiBP,GAAUD,GAAWS,GAAMC,CAAU;AAAA,EACrE;AACJ;"}
1
+ {"version":3,"file":"applyFormattingToBlockNode.es.js","sources":["../../../../../../src/components/RichTextEditor/serializer/markdown/serializer/applyFormattingToBlockNode.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport escapeHtml from 'escape-html';\nimport { BlockType, InputNodeTypes, NodeType, OptionType } from '../types';\nimport { isLeafNode } from './isLeafNode';\n\nconst processMentionNode = (chunk: BlockType) => `@[${chunk.category}:${chunk.key}]`;\n\nconst processListItemNode = (\n nodeTypes: InputNodeTypes,\n children: string,\n chunk: NodeType,\n listDepth: number,\n): string => {\n const isOL = chunk && chunk.parentType === nodeTypes.olList;\n const treatAsLeaf = (chunk as BlockType).children.length === 1 && isLeafNode((chunk as BlockType).children[0]);\n\n let spacer = '';\n for (let k = 0; listDepth > k; k++) {\n if (isOL) {\n // https://github.com/remarkjs/remark-react/issues/65\n spacer += ' ';\n } else {\n spacer += ' ';\n }\n }\n return `${spacer}${isOL ? '1.' : '-'} ${children}${treatAsLeaf ? '\\n' : ''}`;\n};\n\nconst shouldEscapeNode = (children: string, nodeTypes: InputNodeTypes, type?: string, parentType?: string) => {\n // don't escape if: code block, image, img\n const isCodeBlock = parentType === nodeTypes.codeBlock || type === nodeTypes.codeBlock;\n if (!isCodeBlock) {\n children = escapeHtml(children);\n }\n\n return children;\n};\n\nexport const applyFormattingToBlockNode = (\n options: OptionType,\n children: string,\n chunk: NodeType,\n listDepth: number,\n type?: string,\n parentType?: string,\n) => {\n const nodeTypes = options.nodeTypes as InputNodeTypes;\n\n switch (type) {\n case nodeTypes.heading[1]:\n return `# ${children}\\n`;\n case nodeTypes.heading[2]:\n return `## ${children}\\n`;\n case nodeTypes.heading[3]:\n return `### ${children}\\n`;\n case nodeTypes.heading[4]:\n return `#### ${children}\\n`;\n case nodeTypes.heading[5]:\n return `##### ${children}\\n`;\n case nodeTypes.heading[6]:\n return `###### ${children}\\n`;\n\n case nodeTypes.blockQuote:\n /**\n * For some reason, marked is parsing blockquote w/ one new line as\n * continued blockquote, so adding two new lines ensures that doesn't\n * happen\n */\n return `> ${children}\\n`;\n\n case nodeTypes.codeBlock:\n return `\\`\\`\\`${(chunk as BlockType).language || ''}\\n${children}\\n\\`\\`\\`\\n`;\n\n case nodeTypes.link:\n const linkUrl = (chunk as BlockType).url ?? '';\n return `[${children}](${linkUrl})`;\n\n case nodeTypes.image:\n const imageUrl = (chunk as BlockType).link ?? '';\n return `![${(chunk as BlockType).caption}](${imageUrl})`;\n\n case nodeTypes.ulList:\n case nodeTypes.olList:\n return `\\n${children}\\n`;\n\n case nodeTypes.listItem:\n return processListItemNode(nodeTypes, children, chunk, listDepth);\n\n case nodeTypes.paragraph:\n return `${children}\\n`;\n\n case nodeTypes.thematicBreak:\n return `\\n---${children}\\n\\n`;\n\n case nodeTypes.mention:\n return processMentionNode(chunk as BlockType);\n\n default:\n return shouldEscapeNode(children, nodeTypes, type, parentType);\n }\n};\n"],"names":["processMentionNode","chunk","processListItemNode","nodeTypes","children","listDepth","isOL","treatAsLeaf","isLeafNode","spacer","k","shouldEscapeNode","type","parentType","escapeHtml","applyFormattingToBlockNode","options","linkUrl","_a","imageUrl","_b"],"mappings":";;AAMA,MAAMA,IAAqB,CAACC,MAAqB,KAAKA,EAAM,YAAYA,EAAM,QAExEC,IAAsB,CACxBC,GACAC,GACAH,GACAI,MACS;AACT,QAAMC,IAAOL,KAASA,EAAM,eAAeE,EAAU,QAC/CI,IAAeN,EAAoB,SAAS,WAAW,KAAKO,EAAYP,EAAoB,SAAS,EAAE;AAE7G,MAAIQ,IAAS;AACb,WAASC,IAAI,GAAGL,IAAYK,GAAGA;AAC3B,IAAIJ,IAEUG,KAAA,QAEAA,KAAA;AAGlB,SAAO,GAAGA,IAASH,IAAO,OAAO,OAAOF,IAAWG,IAAc;AAAA,IAAO;AAC5E,GAEMI,IAAmB,CAACP,GAAkBD,GAA2BS,GAAeC,OAE9DA,MAAeV,EAAU,aAAaS,MAAST,EAAU,cAEzEC,IAAWU,EAAWV,CAAQ,IAG3BA,IAGEW,IAA6B,CACtCC,GACAZ,GACAH,GACAI,GACAO,GACAC,MACC;;AACD,QAAMV,IAAYa,EAAQ;AAE1B,UAAQJ,GAAM;AAAA,IACV,KAAKT,EAAU,QAAQ;AACnB,aAAO,KAAKC;AAAA;AAAA,IAChB,KAAKD,EAAU,QAAQ;AACnB,aAAO,MAAMC;AAAA;AAAA,IACjB,KAAKD,EAAU,QAAQ;AACnB,aAAO,OAAOC;AAAA;AAAA,IAClB,KAAKD,EAAU,QAAQ;AACnB,aAAO,QAAQC;AAAA;AAAA,IACnB,KAAKD,EAAU,QAAQ;AACnB,aAAO,SAASC;AAAA;AAAA,IACpB,KAAKD,EAAU,QAAQ;AACnB,aAAO,UAAUC;AAAA;AAAA,IAErB,KAAKD,EAAU;AAMX,aAAO,KAAKC;AAAA;AAAA,IAEhB,KAAKD,EAAU;AACJ,aAAA,SAAUF,EAAoB,YAAY;AAAA,EAAOG;AAAA;AAAA;AAAA,IAE5D,KAAKD,EAAU;AACL,YAAAc,KAAWC,IAAAjB,EAAoB,QAApB,OAAAiB,IAA2B;AAC5C,aAAO,IAAId,MAAaa;AAAA,IAE5B,KAAKd,EAAU;AACL,YAAAgB,KAAYC,IAAAnB,EAAoB,SAApB,OAAAmB,IAA4B;AACvC,aAAA,KAAMnB,EAAoB,YAAYkB;AAAA,IAEjD,KAAKhB,EAAU;AAAA,IACf,KAAKA,EAAU;AACJ,aAAA;AAAA,EAAKC;AAAA;AAAA,IAEhB,KAAKD,EAAU;AACX,aAAOD,EAAoBC,GAAWC,GAAUH,GAAOI,CAAS;AAAA,IAEpE,KAAKF,EAAU;AACX,aAAO,GAAGC;AAAA;AAAA,IAEd,KAAKD,EAAU;AACJ,aAAA;AAAA,KAAQC;AAAA;AAAA;AAAA,IAEnB,KAAKD,EAAU;AACX,aAAOH,EAAmBC,CAAkB;AAAA,IAEhD;AACI,aAAOU,EAAiBP,GAAUD,GAAWS,GAAMC,CAAU;AAAA,EACrE;AACJ;"}
@@ -4,8 +4,8 @@ import { applyFormattingToBlockNode as E } from "./applyFormattingToBlockNode.es
4
4
  import { getSelectedOptions as D, BREAK_TAG as f } from "../utils.es.js";
5
5
  const P = ["thematicBreak", "image", "mention"], w = (e, t) => s(e) ? !1 : t.includes(e.type || ""), I = (e, t) => !s(e) && Array.isArray(e.children) ? e.children.some(
6
6
  (i) => !s(i) && (i.type === t.link || i.type === t.image)
7
- ) : !1, S = (e, t) => e === t.mention, B = (e, t, i, r) => !e && (t === "" || t === `
8
- `) && i.parentType === r.paragraph && !S(i.type, r), K = (e, t, i) => e.includes(t.type || "") ? i + 1 : i, g = (e, t) => {
7
+ ) : !1, S = (e, t) => e === t.mention, x = (e, t, i, r) => !e && t === `
8
+ ` && i.parentType === r.paragraph && !S(i.type, r), B = (e, t, i) => e.includes(t.type || "") ? i + 1 : i, g = (e, t) => {
9
9
  var l, d, y;
10
10
  const i = t.nodeTypes, r = (l = e.text) != null ? l : "";
11
11
  let o = (d = e.type) != null ? d : void 0;
@@ -19,18 +19,18 @@ const P = ["thematicBreak", "image", "mention"], w = (e, t) => s(e) ? !1 : t.inc
19
19
  {
20
20
  nodeTypes: i,
21
21
  ignoreParagraphNewline: (t.ignoreParagraphNewline || T || N || c) && !n.break,
22
- listDepth: K(p, n, t.listDepth),
22
+ listDepth: B(p, n, t.listDepth),
23
23
  linkDestinationKey: t.linkDestinationKey
24
24
  }
25
25
  );
26
- }).join("")), B(t.ignoreParagraphNewline, r, e, i) && (o = i.paragraph, a = f), !(a === "" && !P.find((n) => i[n] === o)))
26
+ }).join("")), x(t.ignoreParagraphNewline, r, e, i) && (o = i.paragraph, a = f), !(a === "" && !P.find((n) => i[n] === o)))
27
27
  return a !== f && s(e) ? A(a, e) : E(t, a, e, t.listDepth, o, L);
28
28
  };
29
- function v(e) {
29
+ function j(e) {
30
30
  const t = D(e);
31
31
  return (i) => i.map((r) => g(r, t)).join("");
32
32
  }
33
33
  export {
34
- v as default
34
+ j as default
35
35
  };
36
36
  //# sourceMappingURL=serialize.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.es.js","sources":["../../../../../../src/components/RichTextEditor/serializer/markdown/serializer/serialize.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { BlockType, InputNodeTypes, LeafType, NodeType, OptionType, PartialOptionType } from '../types';\nimport { applyFormattingToLeafNode } from './applyFormattingToLeafNode';\nimport { isLeafNode } from './isLeafNode';\nimport { applyFormattingToBlockNode } from './applyFormattingToBlockNode';\nimport { BREAK_TAG, getSelectedOptions } from '../utils';\n\nconst IGNORE_ELEMENTS: Array<keyof InputNodeTypes> = ['thematicBreak', 'image', 'mention'];\n\nconst isChildAList = (chunk: NodeType, LIST_TYPES: string[]) =>\n !isLeafNode(chunk) ? LIST_TYPES.includes(chunk.type || '') : false;\n\nconst doesChildHasALink = (chunk: NodeType, nodeTypes: InputNodeTypes) =>\n !isLeafNode(chunk) && Array.isArray(chunk.children)\n ? chunk.children.some(\n (child) => !isLeafNode(child) && (child.type === nodeTypes.link || child.type === nodeTypes.image),\n )\n : false;\n\nconst isMentionType = (type: string, nodeTypes: InputNodeTypes) => type === nodeTypes.mention;\n\nconst shouldIgnoreParagraphNewline = (\n ignoreParagraphNewline: boolean,\n text: string,\n chunk: NodeType,\n nodeTypes: InputNodeTypes,\n) =>\n !ignoreParagraphNewline &&\n (text === '' || text === '\\n') &&\n chunk.parentType === nodeTypes.paragraph &&\n !isMentionType((chunk as BlockType).type, nodeTypes);\n\nconst getDepthOfNestedLists = (listTypes: string[], children: NodeType, listDepth: number) =>\n listTypes.includes((children as BlockType).type || '') ? listDepth + 1 : listDepth;\n\nconst process = (chunk: NodeType, options: OptionType) => {\n const nodeTypes = options.nodeTypes as InputNodeTypes;\n const text = (chunk as LeafType).text ?? '';\n let type = (chunk as BlockType).type ?? undefined;\n const parentType = (chunk as BlockType).parentType ?? undefined;\n const LIST_TYPES = [nodeTypes.ulList, nodeTypes.olList];\n let children = text;\n\n if (!isLeafNode(chunk)) {\n children = chunk.children\n .map((c: NodeType) => {\n const isList = isChildAList(c, LIST_TYPES);\n const selfIsList = LIST_TYPES.includes(chunk.type ?? '');\n\n // Links can have the following shape\n // In which case we don't want to surround\n // with break tags\n // {\n // type: 'paragraph',\n // children: [\n // { text: '' },\n // { type: 'link', children: [{ text: foo.com }]}\n // { text: '' }\n // ]\n // }\n const childrenHasLink = doesChildHasALink(chunk, nodeTypes);\n\n return process(\n { ...c, parentType: type },\n {\n nodeTypes,\n // WOAH.\n // what we're doing here is pretty tricky, it relates to the block below where\n // we check for ignoreParagraphNewline and set type to paragraph.\n // We want to strip out empty paragraphs sometimes, but other times we don't.\n // If we're the descendant of a list, we know we don't want a bunch\n // of whitespace. If we're parallel to a link we also don't want\n // to respect neighboring paragraphs\n ignoreParagraphNewline:\n (options.ignoreParagraphNewline || isList || selfIsList || childrenHasLink) &&\n // if we have c.break, never ignore empty paragraph new line\n !(c as BlockType).break,\n\n // track depth of nested lists so we can add proper spacing\n listDepth: getDepthOfNestedLists(LIST_TYPES, c, options.listDepth),\n linkDestinationKey: options.linkDestinationKey,\n },\n );\n })\n .join('');\n }\n\n // This is pretty fragile code, check the long comment where we iterate over children\n if (shouldIgnoreParagraphNewline(options.ignoreParagraphNewline, text, chunk, nodeTypes)) {\n type = nodeTypes.paragraph;\n children = BREAK_TAG;\n }\n\n if (children === '' && !IGNORE_ELEMENTS.find((k) => nodeTypes[k] === type)) {\n return;\n }\n\n if (children !== BREAK_TAG && isLeafNode(chunk)) {\n return applyFormattingToLeafNode(children, chunk);\n }\n\n return applyFormattingToBlockNode(options, children, chunk, options.listDepth, type, parentType);\n};\n\nexport default function serialize(opts?: PartialOptionType) {\n const options = getSelectedOptions(opts);\n\n return (tree: NodeType[]): string => tree.map((node) => process(node, options)).join('');\n}\n"],"names":["IGNORE_ELEMENTS","isChildAList","chunk","LIST_TYPES","isLeafNode","doesChildHasALink","nodeTypes","child","isMentionType","type","shouldIgnoreParagraphNewline","ignoreParagraphNewline","text","getDepthOfNestedLists","listTypes","children","listDepth","process","options","_a","_b","parentType","_c","c","isList","selfIsList","childrenHasLink","BREAK_TAG","k","applyFormattingToLeafNode","applyFormattingToBlockNode","serialize","opts","getSelectedOptions","tree","node"],"mappings":";;;;AAQA,MAAMA,IAA+C,CAAC,iBAAiB,SAAS,SAAS,GAEnFC,IAAe,CAACC,GAAiBC,MAClCC,EAAWF,CAAK,IAA4C,KAAxCC,EAAW,SAASD,EAAM,QAAQ,EAAE,GAEvDG,IAAoB,CAACH,GAAiBI,MACxC,CAACF,EAAWF,CAAK,KAAK,MAAM,QAAQA,EAAM,QAAQ,IAC5CA,EAAM,SAAS;AAAA,EACX,CAACK,MAAU,CAACH,EAAWG,CAAK,MAAMA,EAAM,SAASD,EAAU,QAAQC,EAAM,SAASD,EAAU;AAChG,IACA,IAEJE,IAAgB,CAACC,GAAcH,MAA8BG,MAASH,EAAU,SAEhFI,IAA+B,CACjCC,GACAC,GACAV,GACAI,MAEA,CAACK,MACAC,MAAS,MAAMA,MAAS;AAAA,MACzBV,EAAM,eAAeI,EAAU,aAC/B,CAACE,EAAeN,EAAoB,MAAMI,CAAS,GAEjDO,IAAwB,CAACC,GAAqBC,GAAoBC,MACpEF,EAAU,SAAUC,EAAuB,QAAQ,EAAE,IAAIC,IAAY,IAAIA,GAEvEC,IAAU,CAACf,GAAiBgB,MAAwB;;AACtD,QAAMZ,IAAYY,EAAQ,WACpBN,KAAQO,IAAAjB,EAAmB,SAAnB,OAAAiB,IAA2B;AACrC,MAAAV,KAAQW,IAAAlB,EAAoB,SAApB,OAAAkB,IAA4B;AAClC,QAAAC,KAAcC,IAAApB,EAAoB,eAApB,OAAAoB,IAAkC,QAChDnB,IAAa,CAACG,EAAU,QAAQA,EAAU,MAAM;AACtD,MAAIS,IAAWH;AAoDX,MAlDCR,EAAWF,CAAK,MACjBa,IAAWb,EAAM,SACZ,IAAI,CAACqB,MAAgB;;AACZ,UAAAC,IAASvB,EAAasB,GAAGpB,CAAU,GACnCsB,IAAatB,EAAW,UAASgB,IAAAjB,EAAM,SAAN,OAAAiB,IAAc,EAAE,GAajDO,IAAkBrB,EAAkBH,GAAOI,CAAS;AAEnD,WAAAW;AAAA,MACH,EAAE,GAAGM,GAAG,YAAYd,EAAK;AAAA,MACzB;AAAA,QACI,WAAAH;AAAA,QAQA,yBACKY,EAAQ,0BAA0BM,KAAUC,KAAcC,MAE3D,CAAEH,EAAgB;AAAA,QAGtB,WAAWV,EAAsBV,GAAYoB,GAAGL,EAAQ,SAAS;AAAA,QACjE,oBAAoBA,EAAQ;AAAA,MAChC;AAAA,IAAA;AAAA,EACJ,CACH,EACA,KAAK,EAAE,IAIZR,EAA6BQ,EAAQ,wBAAwBN,GAAMV,GAAOI,CAAS,MACnFG,IAAOH,EAAU,WACNS,IAAAY,IAGX,EAAAZ,MAAa,MAAM,CAACf,EAAgB,KAAK,CAAC4B,MAAMtB,EAAUsB,OAAOnB,CAAI;AAIzE,WAAIM,MAAaY,KAAavB,EAAWF,CAAK,IACnC2B,EAA0Bd,GAAUb,CAAK,IAG7C4B,EAA2BZ,GAASH,GAAUb,GAAOgB,EAAQ,WAAWT,GAAMY,CAAU;AACnG;AAEA,SAAwBU,EAAUC,GAA0B;AAClD,QAAAd,IAAUe,EAAmBD,CAAI;AAEvC,SAAO,CAACE,MAA6BA,EAAK,IAAI,CAACC,MAASlB,EAAQkB,GAAMjB,CAAO,CAAC,EAAE,KAAK,EAAE;AAC3F;"}
1
+ {"version":3,"file":"serialize.es.js","sources":["../../../../../../src/components/RichTextEditor/serializer/markdown/serializer/serialize.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { BlockType, InputNodeTypes, LeafType, NodeType, OptionType, PartialOptionType } from '../types';\nimport { applyFormattingToLeafNode } from './applyFormattingToLeafNode';\nimport { isLeafNode } from './isLeafNode';\nimport { applyFormattingToBlockNode } from './applyFormattingToBlockNode';\nimport { BREAK_TAG, getSelectedOptions } from '../utils';\n\nconst IGNORE_ELEMENTS: Array<keyof InputNodeTypes> = ['thematicBreak', 'image', 'mention'];\n\nconst isChildAList = (chunk: NodeType, LIST_TYPES: string[]) =>\n !isLeafNode(chunk) ? LIST_TYPES.includes(chunk.type || '') : false;\n\nconst doesChildHasALink = (chunk: NodeType, nodeTypes: InputNodeTypes) =>\n !isLeafNode(chunk) && Array.isArray(chunk.children)\n ? chunk.children.some(\n (child) => !isLeafNode(child) && (child.type === nodeTypes.link || child.type === nodeTypes.image),\n )\n : false;\n\nconst isMentionType = (type: string, nodeTypes: InputNodeTypes) => type === nodeTypes.mention;\n\nconst shouldIgnoreParagraphNewline = (\n ignoreParagraphNewline: boolean,\n text: string,\n chunk: NodeType,\n nodeTypes: InputNodeTypes,\n) =>\n !ignoreParagraphNewline &&\n text === '\\n' &&\n chunk.parentType === nodeTypes.paragraph &&\n !isMentionType((chunk as BlockType).type, nodeTypes);\n\nconst getDepthOfNestedLists = (listTypes: string[], children: NodeType, listDepth: number) =>\n listTypes.includes((children as BlockType).type || '') ? listDepth + 1 : listDepth;\n\nconst process = (chunk: NodeType, options: OptionType) => {\n const nodeTypes = options.nodeTypes as InputNodeTypes;\n const text = (chunk as LeafType).text ?? '';\n let type = (chunk as BlockType).type ?? undefined;\n const parentType = (chunk as BlockType).parentType ?? undefined;\n const LIST_TYPES = [nodeTypes.ulList, nodeTypes.olList];\n let children = text;\n\n if (!isLeafNode(chunk)) {\n children = chunk.children\n .map((c: NodeType) => {\n const isList = isChildAList(c, LIST_TYPES);\n const selfIsList = LIST_TYPES.includes(chunk.type ?? '');\n\n // Links can have the following shape\n // In which case we don't want to surround\n // with break tags\n // {\n // type: 'paragraph',\n // children: [\n // { text: '' },\n // { type: 'link', children: [{ text: foo.com }]}\n // { text: '' }\n // ]\n // }\n const childrenHasLink = doesChildHasALink(chunk, nodeTypes);\n\n return process(\n { ...c, parentType: type },\n {\n nodeTypes,\n // WOAH.\n // what we're doing here is pretty tricky, it relates to the block below where\n // we check for ignoreParagraphNewline and set type to paragraph.\n // We want to strip out empty paragraphs sometimes, but other times we don't.\n // If we're the descendant of a list, we know we don't want a bunch\n // of whitespace. If we're parallel to a link we also don't want\n // to respect neighboring paragraphs\n ignoreParagraphNewline:\n (options.ignoreParagraphNewline || isList || selfIsList || childrenHasLink) &&\n // if we have c.break, never ignore empty paragraph new line\n !(c as BlockType).break,\n\n // track depth of nested lists so we can add proper spacing\n listDepth: getDepthOfNestedLists(LIST_TYPES, c, options.listDepth),\n linkDestinationKey: options.linkDestinationKey,\n },\n );\n })\n .join('');\n }\n\n // This is pretty fragile code, check the long comment where we iterate over children\n if (shouldIgnoreParagraphNewline(options.ignoreParagraphNewline, text, chunk, nodeTypes)) {\n type = nodeTypes.paragraph;\n children = BREAK_TAG;\n }\n\n if (children === '' && !IGNORE_ELEMENTS.find((k) => nodeTypes[k] === type)) {\n return;\n }\n\n if (children !== BREAK_TAG && isLeafNode(chunk)) {\n return applyFormattingToLeafNode(children, chunk);\n }\n\n return applyFormattingToBlockNode(options, children, chunk, options.listDepth, type, parentType);\n};\n\nexport default function serialize(opts?: PartialOptionType) {\n const options = getSelectedOptions(opts);\n\n return (tree: NodeType[]): string => tree.map((node) => process(node, options)).join('');\n}\n"],"names":["IGNORE_ELEMENTS","isChildAList","chunk","LIST_TYPES","isLeafNode","doesChildHasALink","nodeTypes","child","isMentionType","type","shouldIgnoreParagraphNewline","ignoreParagraphNewline","text","getDepthOfNestedLists","listTypes","children","listDepth","process","options","_a","_b","parentType","_c","c","isList","selfIsList","childrenHasLink","BREAK_TAG","k","applyFormattingToLeafNode","applyFormattingToBlockNode","serialize","opts","getSelectedOptions","tree","node"],"mappings":";;;;AAQA,MAAMA,IAA+C,CAAC,iBAAiB,SAAS,SAAS,GAEnFC,IAAe,CAACC,GAAiBC,MAClCC,EAAWF,CAAK,IAA4C,KAAxCC,EAAW,SAASD,EAAM,QAAQ,EAAE,GAEvDG,IAAoB,CAACH,GAAiBI,MACxC,CAACF,EAAWF,CAAK,KAAK,MAAM,QAAQA,EAAM,QAAQ,IAC5CA,EAAM,SAAS;AAAA,EACX,CAACK,MAAU,CAACH,EAAWG,CAAK,MAAMA,EAAM,SAASD,EAAU,QAAQC,EAAM,SAASD,EAAU;AAChG,IACA,IAEJE,IAAgB,CAACC,GAAcH,MAA8BG,MAASH,EAAU,SAEhFI,IAA+B,CACjCC,GACAC,GACAV,GACAI,MAEA,CAACK,KACDC,MAAS;AAAA,KACTV,EAAM,eAAeI,EAAU,aAC/B,CAACE,EAAeN,EAAoB,MAAMI,CAAS,GAEjDO,IAAwB,CAACC,GAAqBC,GAAoBC,MACpEF,EAAU,SAAUC,EAAuB,QAAQ,EAAE,IAAIC,IAAY,IAAIA,GAEvEC,IAAU,CAACf,GAAiBgB,MAAwB;;AACtD,QAAMZ,IAAYY,EAAQ,WACpBN,KAAQO,IAAAjB,EAAmB,SAAnB,OAAAiB,IAA2B;AACrC,MAAAV,KAAQW,IAAAlB,EAAoB,SAApB,OAAAkB,IAA4B;AAClC,QAAAC,KAAcC,IAAApB,EAAoB,eAApB,OAAAoB,IAAkC,QAChDnB,IAAa,CAACG,EAAU,QAAQA,EAAU,MAAM;AACtD,MAAIS,IAAWH;AAoDX,MAlDCR,EAAWF,CAAK,MACjBa,IAAWb,EAAM,SACZ,IAAI,CAACqB,MAAgB;;AACZ,UAAAC,IAASvB,EAAasB,GAAGpB,CAAU,GACnCsB,IAAatB,EAAW,UAASgB,IAAAjB,EAAM,SAAN,OAAAiB,IAAc,EAAE,GAajDO,IAAkBrB,EAAkBH,GAAOI,CAAS;AAEnD,WAAAW;AAAA,MACH,EAAE,GAAGM,GAAG,YAAYd,EAAK;AAAA,MACzB;AAAA,QACI,WAAAH;AAAA,QAQA,yBACKY,EAAQ,0BAA0BM,KAAUC,KAAcC,MAE3D,CAAEH,EAAgB;AAAA,QAGtB,WAAWV,EAAsBV,GAAYoB,GAAGL,EAAQ,SAAS;AAAA,QACjE,oBAAoBA,EAAQ;AAAA,MAChC;AAAA,IAAA;AAAA,EACJ,CACH,EACA,KAAK,EAAE,IAIZR,EAA6BQ,EAAQ,wBAAwBN,GAAMV,GAAOI,CAAS,MACnFG,IAAOH,EAAU,WACNS,IAAAY,IAGX,EAAAZ,MAAa,MAAM,CAACf,EAAgB,KAAK,CAAC4B,MAAMtB,EAAUsB,OAAOnB,CAAI;AAIzE,WAAIM,MAAaY,KAAavB,EAAWF,CAAK,IACnC2B,EAA0Bd,GAAUb,CAAK,IAG7C4B,EAA2BZ,GAASH,GAAUb,GAAOgB,EAAQ,WAAWT,GAAMY,CAAU;AACnG;AAEA,SAAwBU,EAAUC,GAA0B;AAClD,QAAAd,IAAUe,EAAmBD,CAAI;AAEvC,SAAO,CAACE,MAA6BA,EAAK,IAAI,CAACC,MAASlB,EAAQkB,GAAMjB,CAAO,CAAC,EAAE,KAAK,EAAE;AAC3F;"}