@frontify/fondue 12.0.0-beta.284 → 12.0.0-beta.286

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.
@@ -1,7 +1,7 @@
1
1
  import { PlateRenderElementProps, TElement } from '@udecode/plate';
2
2
  import { CSSProperties } from 'react';
3
3
  import { MarkupElement } from '../MarkupElement';
4
- export declare const LI_CLASSNAMES = "[&>p]:before:tw-flex [&>p]:before:tw-justify-end [&>p]:before:tw-w-[1.2em] !tw-no-underline";
4
+ export declare const LI_CLASSNAMES = "[&>p]:before:tw-flex [&>p]:before:tw-justify-end [&>p]:before:tw-w-[1.2em] !tw-no-underline !tw-list-item";
5
5
  export declare const ListItemMarkupElementNode: ({ attributes, children, element }: PlateRenderElementProps) => JSX.Element;
6
6
  export declare class ListItemMarkupElement extends MarkupElement {
7
7
  constructor(id?: string, node?: ({ attributes, children, element }: PlateRenderElementProps<import("@udecode/plate").Value, TElement>) => JSX.Element);
@@ -1,32 +1,32 @@
1
1
  import { ELEMENT_LI as l } from "@udecode/plate";
2
2
  import n from "react";
3
- import { MarkupElement as c } from "../MarkupElement.es.js";
4
- import { TextStyles as i } from "../TextStylePlugin/types.es.js";
3
+ import { MarkupElement as i } from "../MarkupElement.es.js";
4
+ import { TextStyles as c } from "../TextStylePlugin/types.es.js";
5
5
  import { useRichTextEditorContext as m } from "../../context/RichTextEditorContext.es.js";
6
- const p = "[&>p]:before:tw-flex [&>p]:before:tw-justify-end [&>p]:before:tw-w-[1.2em] !tw-no-underline", f = ({ attributes: t, children: e, element: r }) => {
6
+ const p = "[&>p]:before:tw-flex [&>p]:before:tw-justify-end [&>p]:before:tw-w-[1.2em] !tw-no-underline !tw-list-item", f = ({ attributes: e, children: t, element: r }) => {
7
7
  const { styles: s } = m();
8
- return /* @__PURE__ */ n.createElement("li", { style: u(r, s), ...t, className: p }, e);
8
+ return /* @__PURE__ */ n.createElement("li", { style: u(r, s), ...e, className: p }, t);
9
9
  };
10
- class d extends c {
11
- constructor(e = l, r = f) {
12
- super(e, r);
10
+ class d extends i {
11
+ constructor(t = l, r = f) {
12
+ super(t, r);
13
13
  }
14
14
  }
15
- const u = (t, e) => ({
16
- ...e[o(t) ?? i.p],
15
+ const u = (e, t) => ({
16
+ ...t[o(e) ?? c.p],
17
17
  counterIncrement: "count"
18
- }), o = (t) => {
19
- let e;
20
- if (t.type === "a")
21
- e = t.children[0].textStyle;
22
- else if (t.children)
23
- for (const r of t.children) {
18
+ }), o = (e) => {
19
+ let t;
20
+ if (e.type === "a")
21
+ t = e.children[0].textStyle;
22
+ else if (e.children)
23
+ for (const r of e.children) {
24
24
  const s = o(r);
25
- s && (!e || s.startsWith(e)) && (e = s);
25
+ s && (!t || s.startsWith(t)) && (t = s);
26
26
  }
27
27
  else
28
- e = t.textStyle;
29
- return e;
28
+ t = e.textStyle;
29
+ return t;
30
30
  };
31
31
  export {
32
32
  p as LI_CLASSNAMES,
@@ -1 +1 @@
1
- {"version":3,"file":"ListItemMarkupElement.es.js","sources":["../../../../../src/components/RichTextEditor/Plugins/ListPlugin/ListItemMarkupElement.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { ELEMENT_LI, PlateRenderElementProps, TElement } from '@udecode/plate';\nimport React, { CSSProperties } from 'react';\nimport { MarkupElement } from '../MarkupElement';\nimport { useRichTextEditorContext } from '@components/RichTextEditor/context';\nimport { TextStyles } from '../TextStylePlugin';\n\nexport const LI_CLASSNAMES =\n '[&>p]:before:tw-flex [&>p]:before:tw-justify-end [&>p]:before:tw-w-[1.2em] !tw-no-underline';\n\nexport const ListItemMarkupElementNode = ({ attributes, children, element }: PlateRenderElementProps) => {\n const { styles } = useRichTextEditorContext();\n return (\n <li style={getLiStyles(element, styles)} {...attributes} className={LI_CLASSNAMES}>\n {children}\n </li>\n );\n};\n\nexport class ListItemMarkupElement extends MarkupElement {\n constructor(id = ELEMENT_LI, node = ListItemMarkupElementNode) {\n super(id, node);\n }\n}\n\nexport const getLiStyles = (element: TElement, styles: Record<string, CSSProperties>): CSSProperties => {\n return {\n ...styles[getDeepestTextStyle(element) ?? TextStyles.p],\n counterIncrement: 'count',\n };\n};\n\nconst getDeepestTextStyle = (node: TElement): string => {\n let textStyle;\n\n if (node.type === 'a') {\n textStyle = node.children[0].textStyle;\n } else if (node.children) {\n for (const childNode of node.children) {\n const deepestTextStyle = getDeepestTextStyle(childNode as TElement);\n if (deepestTextStyle && (!textStyle || deepestTextStyle.startsWith(textStyle))) {\n textStyle = deepestTextStyle;\n }\n }\n } else {\n textStyle = node.textStyle;\n }\n\n return textStyle as string;\n};\n"],"names":["LI_CLASSNAMES","ListItemMarkupElementNode","attributes","children","element","styles","useRichTextEditorContext","React","getLiStyles","ListItemMarkupElement","MarkupElement","id","ELEMENT_LI","node","getDeepestTextStyle","TextStyles","textStyle","childNode","deepestTextStyle"],"mappings":";;;;;AAQO,MAAMA,IACT,+FAESC,IAA4B,CAAC,EAAE,YAAAC,GAAY,UAAAC,GAAU,SAAAC,QAAuC;AAC/F,QAAA,EAAE,QAAAC,MAAWC;AAEf,SAAA,gBAAAC,EAAA,cAAC,MAAG,EAAA,OAAOC,EAAYJ,GAASC,CAAM,GAAI,GAAGH,GAAY,WAAWF,EAAA,GAC/DG,CACL;AAER;AAEO,MAAMM,UAA8BC,EAAc;AAAA,EACrD,YAAYC,IAAKC,GAAYC,IAAOZ,GAA2B;AAC3D,UAAMU,GAAIE,CAAI;AAAA,EAClB;AACJ;AAEa,MAAAL,IAAc,CAACJ,GAAmBC,OACpC;AAAA,EACH,GAAGA,EAAOS,EAAoBV,CAAO,KAAKW,EAAW,CAAC;AAAA,EACtD,kBAAkB;AAAA,IAIpBD,IAAsB,CAACD,MAA2B;AAChD,MAAAG;AAEA,MAAAH,EAAK,SAAS;AACF,IAAAG,IAAAH,EAAK,SAAS,CAAC,EAAE;AAAA,WACtBA,EAAK;AACD,eAAAI,KAAaJ,EAAK,UAAU;AAC7B,YAAAK,IAAmBJ,EAAoBG,CAAqB;AAClE,MAAIC,MAAqB,CAACF,KAAaE,EAAiB,WAAWF,CAAS,OAC5DA,IAAAE;AAAA,IAEpB;AAAA;AAEA,IAAAF,IAAYH,EAAK;AAGd,SAAAG;AACX;"}
1
+ {"version":3,"file":"ListItemMarkupElement.es.js","sources":["../../../../../src/components/RichTextEditor/Plugins/ListPlugin/ListItemMarkupElement.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { ELEMENT_LI, PlateRenderElementProps, TElement } from '@udecode/plate';\nimport React, { CSSProperties } from 'react';\nimport { MarkupElement } from '../MarkupElement';\nimport { useRichTextEditorContext } from '@components/RichTextEditor/context';\nimport { TextStyles } from '../TextStylePlugin';\n\nexport const LI_CLASSNAMES =\n '[&>p]:before:tw-flex [&>p]:before:tw-justify-end [&>p]:before:tw-w-[1.2em] !tw-no-underline !tw-list-item';\n\nexport const ListItemMarkupElementNode = ({ attributes, children, element }: PlateRenderElementProps) => {\n const { styles } = useRichTextEditorContext();\n return (\n <li style={getLiStyles(element, styles)} {...attributes} className={LI_CLASSNAMES}>\n {children}\n </li>\n );\n};\n\nexport class ListItemMarkupElement extends MarkupElement {\n constructor(id = ELEMENT_LI, node = ListItemMarkupElementNode) {\n super(id, node);\n }\n}\n\nexport const getLiStyles = (element: TElement, styles: Record<string, CSSProperties>): CSSProperties => {\n return {\n ...styles[getDeepestTextStyle(element) ?? TextStyles.p],\n counterIncrement: 'count',\n };\n};\n\nconst getDeepestTextStyle = (node: TElement): string => {\n let textStyle;\n\n if (node.type === 'a') {\n textStyle = node.children[0].textStyle;\n } else if (node.children) {\n for (const childNode of node.children) {\n const deepestTextStyle = getDeepestTextStyle(childNode as TElement);\n if (deepestTextStyle && (!textStyle || deepestTextStyle.startsWith(textStyle))) {\n textStyle = deepestTextStyle;\n }\n }\n } else {\n textStyle = node.textStyle;\n }\n\n return textStyle as string;\n};\n"],"names":["LI_CLASSNAMES","ListItemMarkupElementNode","attributes","children","element","styles","useRichTextEditorContext","React","getLiStyles","ListItemMarkupElement","MarkupElement","id","ELEMENT_LI","node","getDeepestTextStyle","TextStyles","textStyle","childNode","deepestTextStyle"],"mappings":";;;;;AAQO,MAAMA,IACT,6GAESC,IAA4B,CAAC,EAAE,YAAAC,GAAY,UAAAC,GAAU,SAAAC,QAAuC;AAC/F,QAAA,EAAE,QAAAC,MAAWC;AAEf,SAAA,gBAAAC,EAAA,cAAC,MAAG,EAAA,OAAOC,EAAYJ,GAASC,CAAM,GAAI,GAAGH,GAAY,WAAWF,EAAA,GAC/DG,CACL;AAER;AAEO,MAAMM,UAA8BC,EAAc;AAAA,EACrD,YAAYC,IAAKC,GAAYC,IAAOZ,GAA2B;AAC3D,UAAMU,GAAIE,CAAI;AAAA,EAClB;AACJ;AAEa,MAAAL,IAAc,CAACJ,GAAmBC,OACpC;AAAA,EACH,GAAGA,EAAOS,EAAoBV,CAAO,KAAKW,EAAW,CAAC;AAAA,EACtD,kBAAkB;AAAA,IAIpBD,IAAsB,CAACD,MAA2B;AAChD,MAAAG;AAEA,MAAAH,EAAK,SAAS;AACF,IAAAG,IAAAH,EAAK,SAAS,CAAC,EAAE;AAAA,WACtBA,EAAK;AACD,eAAAI,KAAaJ,EAAK,UAAU;AAC7B,YAAAK,IAAmBJ,EAAoBG,CAAqB;AAClE,MAAIC,MAAqB,CAACF,KAAaE,EAAiB,WAAWF,CAAS,OAC5DA,IAAAE;AAAA,IAEpB;AAAA;AAEA,IAAAF,IAAYH,EAAK;AAGd,SAAAG;AACX;"}
@@ -1,40 +1,47 @@
1
1
  import { getLicElementClassNames as u } from "../../Plugins/ListPlugin/ListItemContentMarkupElement.es.js";
2
- import { LI_CLASSNAMES as N, getLiStyles as f } from "../../Plugins/ListPlugin/ListItemMarkupElement.es.js";
3
- import { isText as L, ELEMENT_UL as T, ELEMENT_OL as c, ELEMENT_LI as g, ELEMENT_LIC as h, ELEMENT_LINK as $, ELEMENT_MENTION as C } from "@udecode/plate";
2
+ import { LI_CLASSNAMES as f, getLiStyles as N } from "../../Plugins/ListPlugin/ListItemMarkupElement.es.js";
3
+ import { isText as L, ELEMENT_UL as T, ELEMENT_OL as c, ELEMENT_LI as h, ELEMENT_LIC as g, ELEMENT_LINK as $, ELEMENT_MENTION as C } from "@udecode/plate";
4
4
  import { merge as d } from "../../../../utilities/merge.es.js";
5
- import { buttonNode as M } from "../nodes/button.es.js";
6
- import { checkItemNode as _ } from "../nodes/checkItem.es.js";
7
- import { linkNode as y } from "../nodes/link.es.js";
5
+ import { buttonNode as y } from "../nodes/button.es.js";
6
+ import { checkItemNode as M } from "../nodes/checkItem.es.js";
7
+ import { linkNode as _ } from "../nodes/link.es.js";
8
8
  import { mentionHtmlNode as S } from "../nodes/mentionHtmlNode.es.js";
9
- import { reactCssPropsToCss as a } from "./reactCssPropsToCss.es.js";
9
+ import { reactCssPropsToCss as n } from "./reactCssPropsToCss.es.js";
10
10
  import { serializeLeafToHtml as k } from "./serializeLeafToHtml.es.js";
11
11
  import { UL_CLASSES as I } from "../../Plugins/ListPlugin/UnorderedListPlugin/UnorderedListMarkupElement.es.js";
12
- import { getOrderedListClasses as b, OL_STYLES as H } from "../../Plugins/ListPlugin/OrderedListPlugin/OrderedListMarkupElement.es.js";
13
- import { ELEMENT_BUTTON as O, alignmentClassnames as x } from "../../Plugins/helper.es.js";
12
+ import { getOrderedListClasses as b, OL_STYLES as x } from "../../Plugins/ListPlugin/OrderedListPlugin/OrderedListMarkupElement.es.js";
13
+ import { ELEMENT_BUTTON as H, alignmentClassnames as O } from "../../Plugins/helper.es.js";
14
14
  import { TextStyles as o } from "../../Plugins/TextStylePlugin/types.es.js";
15
- import { ELEMENT_CHECK_ITEM as v } from "../../Plugins/CheckboxListPlugin/id.es.js";
16
- const n = (t, e) => t.reduce((s, r) => (r.type === e && s++, r.children ? s + n(r.children, e) : s), 0), w = (t, e, { mappedMentionable: s, nestingCount: r = {} }) => {
15
+ import { ELEMENT_CHECK_ITEM as w } from "../../Plugins/CheckboxListPlugin/id.es.js";
16
+ const p = (t, e) => t.reduce((r, s) => (s.type === e && r++, s.children ? r + p(s.children, e) : r), 0), v = (t, e, { mappedMentionable: r, nestingCount: s = {} }) => {
17
17
  if (L(t))
18
18
  return k(t);
19
- const i = r[t.type] || n([t], t.type);
20
- let l = "";
21
- for (const p of t.children)
22
- l += w(p, e, {
19
+ const i = s[t.type] || p([t], t.type);
20
+ let a = "";
21
+ for (const l of t.children)
22
+ a += v(l, e, {
23
23
  nestingCount: {
24
- ...r,
25
- [p.type]: i
24
+ ...s,
25
+ [l.type]: i
26
26
  },
27
- mappedMentionable: s
27
+ mappedMentionable: r
28
28
  });
29
29
  const E = A[t.type];
30
- return E({
31
- classNames: U(t.breakAfterColumn, t.align),
32
- children: l,
33
- rootNestingCount: i,
34
- node: t,
35
- mappedMentionable: s,
36
- styles: e
37
- }) ?? l;
30
+ try {
31
+ return E({
32
+ classNames: U(
33
+ t.breakAfterColumn,
34
+ t.align
35
+ ),
36
+ children: a,
37
+ rootNestingCount: i,
38
+ node: t,
39
+ mappedMentionable: r,
40
+ styles: e
41
+ }) ?? a;
42
+ } catch {
43
+ return console.warn(`The htmlMapper for node type: '${t.type}' does not exist.`), a;
44
+ }
38
45
  }, A = {
39
46
  [o.heading1]: (t) => m(o.heading1, t, "h1"),
40
47
  [o.heading2]: (t) => m(o.heading2, t, "h2"),
@@ -48,25 +55,25 @@ const n = (t, e) => t.reduce((s, r) => (r.type === e && s++, r.children ? s + n(
48
55
  [o.imageTitle]: (t) => m(o.imageTitle, t, "p"),
49
56
  [o.imageCaption]: (t) => m(o.imageCaption, t, "p"),
50
57
  [T]: (t) => `<ul class="${I} ${t.classNames}">${t.children}</ul>`,
51
- [c]: ({ classNames: t, children: e, node: s, rootNestingCount: r }) => {
52
- const i = Math.max(r - n([s], c), 0);
53
- return `<ol class="${b(i)} ${t}" style="${a(
54
- H
58
+ [c]: ({ classNames: t, children: e, node: r, rootNestingCount: s }) => {
59
+ const i = Math.max(s - p([r], c), 0);
60
+ return `<ol class="${b(i)} ${t}" style="${n(
61
+ x
55
62
  )}">${e}</ol>`;
56
63
  },
57
- [g]: ({ classNames: t, children: e, node: s, styles: r }) => `<li class="${t} ${N}" style="${a(
58
- f(s, r)
64
+ [h]: ({ classNames: t, children: e, node: r, styles: s }) => `<li class="${t} ${f}" style="${n(
65
+ N(r, s)
59
66
  )}">${e}</li>`,
60
- [h]: ({ classNames: t, children: e, node: s }) => `<p class="${t} ${u(s)}"><span>${e}</span></p>`,
61
- [$]: ({ node: t, children: e, classNames: s, styles: r }) => y(t, e, s, r),
62
- [O]: ({ node: t, children: e, classNames: s, styles: r }) => M(t, e, s, r),
63
- [v]: ({ node: t, children: e, classNames: s, styles: r }) => _(t, e, s, r),
67
+ [g]: ({ classNames: t, children: e, node: r }) => `<p class="${t} ${u(r)}"><span>${e}</span></p>`,
68
+ [$]: ({ node: t, children: e, classNames: r, styles: s }) => _(t, e, r, s),
69
+ [H]: ({ node: t, children: e, classNames: r, styles: s }) => y(t, e, r, s),
70
+ [w]: ({ node: t, children: e, classNames: r, styles: s }) => M(t, e, r, s),
64
71
  [C]: ({ node: t, mappedMentionable: e }) => S(t, { mentionable: e })
65
- }, m = (t, { classNames: e, styles: s, children: r }, i) => `<${i} class="${e}" style="${a(s[t])}">${r}</${i}>`, U = (t, e) => {
66
- const s = "tw-break-words", r = t === "active" ? "tw-break-after-column tw-break-inside-avoid-column" : "", i = e ? x[e] : "";
67
- return d([i, s, r]);
72
+ }, m = (t, { classNames: e, styles: r, children: s }, i) => `<${i} class="${e}" style="${n(r[t])}">${s}</${i}>`, U = (t, e) => {
73
+ const r = "tw-break-words", s = t === "active" ? "tw-break-after-column tw-break-inside-avoid-column" : "", i = e ? O[e] : "";
74
+ return d([i, r, s]);
68
75
  };
69
76
  export {
70
- w as serializeNodeToHtmlRecursive
77
+ v as serializeNodeToHtmlRecursive
71
78
  };
72
79
  //# sourceMappingURL=serializeNodeToHtmlRecursive.es.js.map
@@ -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 TextStyles,\n UL_CLASSES,\n alignmentClassnames,\n getOrderedListClasses,\n} from '@components/RichTextEditor/Plugins';\nimport { getLicElementClassNames } from '@components/RichTextEditor/Plugins/ListPlugin/ListItemContentMarkupElement';\nimport { LI_CLASSNAMES, getLiStyles } from '@components/RichTextEditor/Plugins/ListPlugin/ListItemMarkupElement';\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';\nimport { CSSPropertiesHover } from '../types';\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 mappedMentionable?: MappedMentionableItems;\n nestingCount?: NestingCount;\n};\n\nexport const serializeNodeToHtmlRecursive = (\n node: TDescendant,\n styles: Record<string, CSSPropertiesHover>,\n { 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, styles, {\n nestingCount: {\n ...nestingCount,\n [element.type as string]: rootNestingCount,\n },\n mappedMentionable,\n });\n }\n\n const htmlMapper = MapNodeTypesToHtml[node.type];\n return (\n htmlMapper({\n classNames: getClassNames(node.breakAfterColumn as string | undefined, node.align as string | undefined),\n children,\n rootNestingCount,\n node,\n mappedMentionable,\n styles,\n }) ?? children\n );\n};\n\ntype Arguments = {\n classNames: string;\n children: string;\n rootNestingCount: number;\n node: TElement;\n mappedMentionable?: MappedMentionableItems;\n styles: Record<string, CSSPropertiesHover>;\n};\n\nconst MapNodeTypesToHtml: { [key: string]: ({ ...args }: Arguments) => string } = {\n [TextStyles.heading1]: (args) => getTextStyleHtml(TextStyles.heading1, args, 'h1'),\n [TextStyles.heading2]: (args) => getTextStyleHtml(TextStyles.heading2, args, 'h2'),\n [TextStyles.heading3]: (args) => getTextStyleHtml(TextStyles.heading3, args, 'h3'),\n [TextStyles.heading4]: (args) => getTextStyleHtml(TextStyles.heading4, args, 'h4'),\n [TextStyles.p]: (args) => getTextStyleHtml(TextStyles.p, args, 'p'),\n [TextStyles.custom1]: (args) => getTextStyleHtml(TextStyles.custom1, args, 'p'),\n [TextStyles.custom2]: (args) => getTextStyleHtml(TextStyles.custom2, args, 'p'),\n [TextStyles.custom3]: (args) => getTextStyleHtml(TextStyles.custom3, args, 'p'),\n [TextStyles.quote]: (args) => getTextStyleHtml(TextStyles.quote, args, 'p'),\n [TextStyles.imageTitle]: (args) => getTextStyleHtml(TextStyles.imageTitle, args, 'p'),\n [TextStyles.imageCaption]: (args) => getTextStyleHtml(TextStyles.imageCaption, 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, children, node, styles }) =>\n `<li class=\"${classNames} ${LI_CLASSNAMES}\" style=\"${reactCssPropsToCss(\n getLiStyles(node, styles),\n )}\">${children}</li>`,\n [ELEMENT_LIC]: ({ classNames, children, node }) =>\n `<p class=\"${classNames} ${getLicElementClassNames(node)}\"><span>${children}</span></p>`,\n [ELEMENT_LINK]: ({ node, children, classNames, styles }) => linkNode(node, children, classNames, styles),\n [ELEMENT_BUTTON]: ({ node, children, classNames, styles }) => buttonNode(node, children, classNames, styles),\n [ELEMENT_CHECK_ITEM]: ({ node, children, classNames, styles }) => checkItemNode(node, children, classNames, styles),\n [ELEMENT_MENTION]: ({ node, mappedMentionable }) => mentionHtmlNode(node, { mentionable: mappedMentionable }),\n};\n\nconst getTextStyleHtml = (\n tag: TextStyles,\n { classNames, styles, children }: Arguments,\n htmlTag: 'p' | 'h1' | 'h2' | 'h3' | 'h4',\n) => `<${htmlTag} class=\"${classNames}\" style=\"${reactCssPropsToCss(styles[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] : '';\n return merge([alignClass, breakWordsClass, columnBreakClasses]);\n};\n"],"names":["countNodesOfType","nodes","type","acc","node","serializeNodeToHtmlRecursive","styles","mappedMentionable","nestingCount","isText","serializeLeafToHtml","rootNestingCount","children","element","htmlMapper","MapNodeTypesToHtml","getClassNames","TextStyles","args","getTextStyleHtml","ELEMENT_UL","UL_CLASSES","ELEMENT_OL","classNames","nestingLevel","getOrderedListClasses","reactCssPropsToCss","OL_STYLES","ELEMENT_LI","LI_CLASSNAMES","getLiStyles","ELEMENT_LIC","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 TextStyles,\n UL_CLASSES,\n alignmentClassnames,\n getOrderedListClasses,\n} from '@components/RichTextEditor/Plugins';\nimport { getLicElementClassNames } from '@components/RichTextEditor/Plugins/ListPlugin/ListItemContentMarkupElement';\nimport { LI_CLASSNAMES, getLiStyles } from '@components/RichTextEditor/Plugins/ListPlugin/ListItemMarkupElement';\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';\nimport { CSSPropertiesHover } from '../types';\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 mappedMentionable?: MappedMentionableItems;\n nestingCount?: NestingCount;\n};\n\nexport const serializeNodeToHtmlRecursive = (\n node: TDescendant,\n styles: Record<string, CSSPropertiesHover>,\n { 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, styles, {\n nestingCount: {\n ...nestingCount,\n [element.type as string]: rootNestingCount,\n },\n mappedMentionable,\n });\n }\n\n const htmlMapper = MapNodeTypesToHtml[node.type];\n try {\n return (\n htmlMapper({\n classNames: getClassNames(\n node.breakAfterColumn as string | undefined,\n node.align as string | undefined,\n ),\n children,\n rootNestingCount,\n node,\n mappedMentionable,\n styles,\n }) ?? children\n );\n } catch (error) {\n console.warn(`The htmlMapper for node type: '${node.type}' does not exist.`);\n return children;\n }\n};\n\ntype Arguments = {\n classNames: string;\n children: string;\n rootNestingCount: number;\n node: TElement;\n mappedMentionable?: MappedMentionableItems;\n styles: Record<string, CSSPropertiesHover>;\n};\n\nconst MapNodeTypesToHtml: { [key: string]: ({ ...args }: Arguments) => string } = {\n [TextStyles.heading1]: (args) => getTextStyleHtml(TextStyles.heading1, args, 'h1'),\n [TextStyles.heading2]: (args) => getTextStyleHtml(TextStyles.heading2, args, 'h2'),\n [TextStyles.heading3]: (args) => getTextStyleHtml(TextStyles.heading3, args, 'h3'),\n [TextStyles.heading4]: (args) => getTextStyleHtml(TextStyles.heading4, args, 'h4'),\n [TextStyles.p]: (args) => getTextStyleHtml(TextStyles.p, args, 'p'),\n [TextStyles.custom1]: (args) => getTextStyleHtml(TextStyles.custom1, args, 'p'),\n [TextStyles.custom2]: (args) => getTextStyleHtml(TextStyles.custom2, args, 'p'),\n [TextStyles.custom3]: (args) => getTextStyleHtml(TextStyles.custom3, args, 'p'),\n [TextStyles.quote]: (args) => getTextStyleHtml(TextStyles.quote, args, 'p'),\n [TextStyles.imageTitle]: (args) => getTextStyleHtml(TextStyles.imageTitle, args, 'p'),\n [TextStyles.imageCaption]: (args) => getTextStyleHtml(TextStyles.imageCaption, 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, children, node, styles }) =>\n `<li class=\"${classNames} ${LI_CLASSNAMES}\" style=\"${reactCssPropsToCss(\n getLiStyles(node, styles),\n )}\">${children}</li>`,\n [ELEMENT_LIC]: ({ classNames, children, node }) =>\n `<p class=\"${classNames} ${getLicElementClassNames(node)}\"><span>${children}</span></p>`,\n [ELEMENT_LINK]: ({ node, children, classNames, styles }) => linkNode(node, children, classNames, styles),\n [ELEMENT_BUTTON]: ({ node, children, classNames, styles }) => buttonNode(node, children, classNames, styles),\n [ELEMENT_CHECK_ITEM]: ({ node, children, classNames, styles }) => checkItemNode(node, children, classNames, styles),\n [ELEMENT_MENTION]: ({ node, mappedMentionable }) => mentionHtmlNode(node, { mentionable: mappedMentionable }),\n};\n\nconst getTextStyleHtml = (\n tag: TextStyles,\n { classNames, styles, children }: Arguments,\n htmlTag: 'p' | 'h1' | 'h2' | 'h3' | 'h4',\n) => `<${htmlTag} class=\"${classNames}\" style=\"${reactCssPropsToCss(styles[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] : '';\n return merge([alignClass, breakWordsClass, columnBreakClasses]);\n};\n"],"names":["countNodesOfType","nodes","type","acc","node","serializeNodeToHtmlRecursive","styles","mappedMentionable","nestingCount","isText","serializeLeafToHtml","rootNestingCount","children","element","htmlMapper","MapNodeTypesToHtml","getClassNames","TextStyles","args","getTextStyleHtml","ELEMENT_UL","UL_CLASSES","ELEMENT_OL","classNames","nestingLevel","getOrderedListClasses","reactCssPropsToCss","OL_STYLES","ELEMENT_LI","LI_CLASSNAMES","getLiStyles","ELEMENT_LIC","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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"}