@frontify/guideline-blocks-settings 0.28.5 → 0.29.0

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.
Files changed (86) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/components/Link/LinkInput.es.js.map +1 -1
  3. package/dist/components/Link/LinkSelector/DocumentLink.es.js.map +1 -1
  4. package/dist/components/Link/LinkSelector/DocumentLinks.es.js.map +1 -1
  5. package/dist/components/Link/LinkSelector/LinkSelector.es.js.map +1 -1
  6. package/dist/components/Link/LinkSelector/PageLink.es.js.map +1 -1
  7. package/dist/components/Link/LinkSelector/PageLinks.es.js.map +1 -1
  8. package/dist/components/RichTextEditor/SerializedText.es.js +2 -2
  9. package/dist/components/RichTextEditor/SerializedText.es.js.map +1 -1
  10. package/dist/components/RichTextEditor/plugins/ButtonPlugin/components/FloatingButton/useFloatingButtonEdit.es.js +5 -5
  11. package/dist/components/RichTextEditor/plugins/ButtonPlugin/utils/triggerFloatingButton.es.js +6 -6
  12. package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom1Plugin.es.js +15 -14
  13. package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom1Plugin.es.js.map +1 -1
  14. package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom2Plugin.es.js +15 -14
  15. package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom2Plugin.es.js.map +1 -1
  16. package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom3Plugin.es.js +15 -14
  17. package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom3Plugin.es.js.map +1 -1
  18. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading1Plugin.es.js +10 -9
  19. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading1Plugin.es.js.map +1 -1
  20. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading2Plugin.es.js +15 -7
  21. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading2Plugin.es.js.map +1 -1
  22. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading3Plugin.es.js +15 -7
  23. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading3Plugin.es.js.map +1 -1
  24. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading4Plugin.es.js +15 -7
  25. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading4Plugin.es.js.map +1 -1
  26. package/dist/components/RichTextEditor/plugins/TextStylePlugins/imageCaptionPlugin.es.js +15 -14
  27. package/dist/components/RichTextEditor/plugins/TextStylePlugins/imageCaptionPlugin.es.js.map +1 -1
  28. package/dist/components/RichTextEditor/plugins/TextStylePlugins/imageTitlePlugin.es.js +18 -17
  29. package/dist/components/RichTextEditor/plugins/TextStylePlugins/imageTitlePlugin.es.js.map +1 -1
  30. package/dist/components/RichTextEditor/plugins/TextStylePlugins/quotePlugin.es.js +13 -12
  31. package/dist/components/RichTextEditor/plugins/TextStylePlugins/quotePlugin.es.js.map +1 -1
  32. package/dist/components/RichTextEditor/plugins/styles.es.js +0 -1
  33. package/dist/components/RichTextEditor/plugins/styles.es.js.map +1 -1
  34. package/dist/index.cjs.js +3 -20
  35. package/dist/index.cjs.js.map +1 -1
  36. package/dist/index.d.ts +3 -4
  37. package/dist/index.umd.js +3 -20
  38. package/dist/index.umd.js.map +1 -1
  39. package/dist/styles.css +1 -1
  40. package/package.json +17 -19
  41. package/src/components/Link/LinkInput.tsx +2 -2
  42. package/src/components/Link/LinkSelector/DocumentLink.tsx +2 -2
  43. package/src/components/Link/LinkSelector/DocumentLinks.tsx +2 -2
  44. package/src/components/Link/LinkSelector/LinkSelector.tsx +2 -2
  45. package/src/components/Link/LinkSelector/PageLink.tsx +2 -2
  46. package/src/components/Link/LinkSelector/PageLinks.tsx +2 -2
  47. package/src/components/RichTextEditor/SerializedText.tsx +2 -2
  48. package/src/components/RichTextEditor/plugins/TextStylePlugins/custom1Plugin.tsx +3 -2
  49. package/src/components/RichTextEditor/plugins/TextStylePlugins/custom2Plugin.tsx +3 -2
  50. package/src/components/RichTextEditor/plugins/TextStylePlugins/custom3Plugin.tsx +3 -2
  51. package/src/components/RichTextEditor/plugins/TextStylePlugins/heading1Plugin.tsx +3 -2
  52. package/src/components/RichTextEditor/plugins/TextStylePlugins/heading2Plugin.tsx +6 -2
  53. package/src/components/RichTextEditor/plugins/TextStylePlugins/heading3Plugin.tsx +6 -2
  54. package/src/components/RichTextEditor/plugins/TextStylePlugins/heading4Plugin.tsx +6 -2
  55. package/src/components/RichTextEditor/plugins/TextStylePlugins/imageCaptionPlugin.tsx +3 -2
  56. package/src/components/RichTextEditor/plugins/TextStylePlugins/imageTitlePlugin.tsx +3 -2
  57. package/src/components/RichTextEditor/plugins/TextStylePlugins/quotePlugin.tsx +3 -2
  58. package/src/components/RichTextEditor/plugins/styles.ts +0 -1
  59. package/dist/components/RichTextEditor/serializer/nodes/button.es.js +0 -17
  60. package/dist/components/RichTextEditor/serializer/nodes/button.es.js.map +0 -1
  61. package/dist/components/RichTextEditor/serializer/nodes/checkItemNode.es.js +0 -19
  62. package/dist/components/RichTextEditor/serializer/nodes/checkItemNode.es.js.map +0 -1
  63. package/dist/components/RichTextEditor/serializer/nodes/default.es.js +0 -32
  64. package/dist/components/RichTextEditor/serializer/nodes/default.es.js.map +0 -1
  65. package/dist/components/RichTextEditor/serializer/nodes/link.es.js +0 -15
  66. package/dist/components/RichTextEditor/serializer/nodes/link.es.js.map +0 -1
  67. package/dist/components/RichTextEditor/serializer/nodes/mentionHtmlNode.es.js +0 -12
  68. package/dist/components/RichTextEditor/serializer/nodes/mentionHtmlNode.es.js.map +0 -1
  69. package/dist/components/RichTextEditor/serializer/serializeNodesToHtmlRecursive.es.js +0 -61
  70. package/dist/components/RichTextEditor/serializer/serializeNodesToHtmlRecursive.es.js.map +0 -1
  71. package/dist/components/RichTextEditor/serializer/serializeToHtml.es.js +0 -25
  72. package/dist/components/RichTextEditor/serializer/serializeToHtml.es.js.map +0 -1
  73. package/dist/components/RichTextEditor/serializer/utlis/reactCssPropsToCss.es.js +0 -8
  74. package/dist/components/RichTextEditor/serializer/utlis/reactCssPropsToCss.es.js.map +0 -1
  75. package/dist/components/RichTextEditor/serializer/utlis/serializeLeafToHtml.es.js +0 -13
  76. package/dist/components/RichTextEditor/serializer/utlis/serializeLeafToHtml.es.js.map +0 -1
  77. package/src/components/RichTextEditor/serializer/index.ts +0 -3
  78. package/src/components/RichTextEditor/serializer/nodes/button.ts +0 -27
  79. package/src/components/RichTextEditor/serializer/nodes/checkItemNode.ts +0 -30
  80. package/src/components/RichTextEditor/serializer/nodes/default.ts +0 -68
  81. package/src/components/RichTextEditor/serializer/nodes/link.ts +0 -26
  82. package/src/components/RichTextEditor/serializer/nodes/mentionHtmlNode.ts +0 -17
  83. package/src/components/RichTextEditor/serializer/serializeNodesToHtmlRecursive.ts +0 -134
  84. package/src/components/RichTextEditor/serializer/serializeToHtml.ts +0 -49
  85. package/src/components/RichTextEditor/serializer/utlis/reactCssPropsToCss.ts +0 -21
  86. package/src/components/RichTextEditor/serializer/utlis/serializeLeafToHtml.ts +0 -32
@@ -1,61 +0,0 @@
1
- import { UL_CLASSES as u, getOrderedListClasses as N, LI_CLASSNAMES as p, getLiStyles as f, getLicElementClassNames as L, ELEMENT_CHECK_ITEM as T, alignmentClassnames as C, merge as $, OL_STYLES as M } from "@frontify/fondue";
2
- import { isText as _, ELEMENT_UL as d, ELEMENT_OL as n, ELEMENT_LI as g, ELEMENT_LIC as k, ELEMENT_LINK as y, ELEMENT_MENTION as S } from "@udecode/plate";
3
- import { serializeLeafToHtml as h } from "./utlis/serializeLeafToHtml.es.js";
4
- import { reactCssPropsToCss as E } from "./utlis/reactCssPropsToCss.es.js";
5
- import { buttonNode as b } from "./nodes/button.es.js";
6
- import { linkNode as I } from "./nodes/link.es.js";
7
- import { defaultNode as O } from "./nodes/default.es.js";
8
- import { checkItemNode as A } from "./nodes/checkItemNode.es.js";
9
- import { mentionHtmlNode as H } from "./nodes/mentionHtmlNode.es.js";
10
- import { ELEMENT_BUTTON as v } from "../plugins/ButtonPlugin/createButtonPlugin.es.js";
11
- const i = (t, e) => t.reduce((r, s) => (s.type === e && r++, s.children ? r + i(s.children, e) : r), 0), w = (t, e, { mappedMentionable: r, nestingCount: s = {} }) => {
12
- if (_(t))
13
- return h(t);
14
- const o = s[t.type] || i([t], t.type);
15
- let l = "";
16
- for (const m of t.children)
17
- l += w(m, e, {
18
- nestingCount: {
19
- ...s,
20
- [m.type]: o
21
- },
22
- mappedMentionable: r
23
- });
24
- const a = x[t.type];
25
- return typeof a < "u" ? a({
26
- classNames: c(t.breakAfterColumn, t.align),
27
- children: l,
28
- rootNestingCount: o,
29
- node: t,
30
- mappedMentionable: r,
31
- styles: e
32
- }) : O(
33
- t,
34
- l,
35
- e[t.type],
36
- c(t.breakAfterColumn, t.align)
37
- );
38
- }, x = {
39
- [d]: (t) => `<ul dir="auto" class="${u} ${t.classNames}">${t.children}</ul>`,
40
- [n]: ({ classNames: t, children: e, node: r, rootNestingCount: s }) => {
41
- const o = Math.max(s - i([r], n), 0);
42
- return `<ol dir="auto" class="${N(o)} ${t}" style="${E(
43
- M
44
- )}">${e}</ol>`;
45
- },
46
- [g]: ({ classNames: t, children: e, node: r, styles: s }) => `<li dir="auto" class="${t} ${p}" style="${E(
47
- f(r, s)
48
- )}">${e}</li>`,
49
- [k]: ({ classNames: t, children: e, node: r }) => `<p dir="auto" class="${t} ${L(r)}"><span>${e}</span></p>`,
50
- [y]: ({ node: t, children: e, classNames: r, styles: s }) => I(t, e, r, s),
51
- [v]: ({ node: t, children: e, classNames: r, styles: s }) => b(t, e, r, s),
52
- [T]: ({ node: t, children: e, classNames: r, styles: s }) => A(t, e, r, s),
53
- [S]: ({ node: t, mappedMentionable: e }) => H(t, { mentionable: e })
54
- }, c = (t, e) => {
55
- const r = "tw-break-words", s = t === "active" ? "tw-break-after-column tw-break-inside-avoid-column" : "", o = e ? C[e] : "";
56
- return $([o, r, s]);
57
- };
58
- export {
59
- w as serializeNodeToHtmlRecursive
60
- };
61
- //# sourceMappingURL=serializeNodesToHtmlRecursive.es.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serializeNodesToHtmlRecursive.es.js","sources":["../../../../src/components/RichTextEditor/serializer/serializeNodesToHtmlRecursive.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n ELEMENT_CHECK_ITEM,\n LI_CLASSNAMES,\n MappedMentionableItems,\n OL_STYLES,\n UL_CLASSES,\n alignmentClassnames,\n getLiStyles,\n getLicElementClassNames,\n getOrderedListClasses,\n merge,\n} from '@frontify/fondue';\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 { serializeLeafToHtml } from './utlis/serializeLeafToHtml';\nimport { reactCssPropsToCss } from './utlis/reactCssPropsToCss';\nimport type { CSSProperties } from 'react';\nimport { ButtonStylesType, buttonNode } from './nodes/button';\nimport { linkNode } from './nodes/link';\nimport { defaultNode } from './nodes/default';\nimport { checkItemNode } from './nodes/checkItemNode';\nimport { mentionHtmlNode } from './nodes/mentionHtmlNode';\nimport { ELEMENT_BUTTON } from '../plugins';\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, CSSProperties & { hover?: CSSProperties }> | ButtonStylesType,\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 if (typeof htmlMapper !== 'undefined') {\n return 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 });\n } else {\n return defaultNode(\n node,\n children,\n styles[node.type],\n getClassNames(node.breakAfterColumn as string | undefined, node.align as string | undefined),\n );\n }\n};\n\ntype Arguments = {\n classNames: string;\n children: string;\n rootNestingCount: number;\n node: TElement;\n mappedMentionable?: MappedMentionableItems;\n styles: Record<string, CSSProperties & { hover?: CSSProperties }> | ButtonStylesType;\n};\n\nconst MapNodeTypesToHtml: { [key: string]: ({ ...args }: Arguments) => string } = {\n [ELEMENT_UL]: (args) => `<ul dir=\"auto\" 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 dir=\"auto\" class=\"${getOrderedListClasses(nestingLevel)} ${classNames}\" style=\"${reactCssPropsToCss(\n OL_STYLES,\n )}\">${children}</ol>`;\n },\n [ELEMENT_LI]: ({ classNames, children, node, styles }) =>\n `<li dir=\"auto\" class=\"${classNames} ${LI_CLASSNAMES}\" style=\"${reactCssPropsToCss(\n getLiStyles(node, styles),\n )}\">${children}</li>`,\n [ELEMENT_LIC]: ({ classNames, children, node }) =>\n `<p dir=\"auto\" 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 }) =>\n buttonNode(node, children, classNames, styles as ButtonStylesType),\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 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","defaultNode","ELEMENT_UL","args","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","breakAfterColumn","align","breakWordsClass","columnBreakClasses","alignClass","alignmentClassnames","merge"],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import { parseRawValue as c, PluginComposer as p, mapMentionable as y } from "@frontify/fondue";
2
- import { serializeNodeToHtmlRecursive as f } from "./serializeNodesToHtmlRecursive.es.js";
3
- import { BlockStyles as u } from "../plugins/styles.es.js";
4
- const A = async (e, r = 1, t = "normal", l = new p()) => {
5
- const i = c({ raw: e, plugins: l }), o = l.getStyles;
6
- return Promise.resolve(v(i, { columns: r, columnGap: t, styles: o }));
7
- }, v = (e, { mentionable: r, columns: t = 1, columnGap: l = "normal", styles: i = u } = {}) => {
8
- const o = r ? y(r) : /* @__PURE__ */ new Map();
9
- let s = "";
10
- for (let a = 0, n = e.length; a < n; a++) {
11
- const m = e[a];
12
- h(m) ? s += "<br />" : s += f(m, i, {
13
- mappedMentionable: o
14
- });
15
- }
16
- return t > 1 ? `<div style="columns:${t}; column-gap:${l};">${s}</div>` : s;
17
- }, h = (e) => {
18
- var r;
19
- return Array.isArray(e == null ? void 0 : e.children) ? (r = e == null ? void 0 : e.children) == null ? void 0 : r.every((t) => t.text === "") : !1;
20
- };
21
- export {
22
- v as serializeNodesToHtml,
23
- A as serializeRawToHtmlAsync
24
- };
25
- //# sourceMappingURL=serializeToHtml.es.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serializeToHtml.es.js","sources":["../../../../src/components/RichTextEditor/serializer/serializeToHtml.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { TDescendant } from '@udecode/plate';\nimport { PluginComposer, SerializeNodesToHtmlOptions, mapMentionable, parseRawValue } from '@frontify/fondue';\nimport { BlockStyles } from '../plugins';\nimport { serializeNodeToHtmlRecursive } from './serializeNodesToHtmlRecursive';\n\nexport const serializeRawToHtmlAsync = async (\n raw: string,\n columns: SerializeNodesToHtmlOptions['columns'] = 1,\n columnGap: SerializeNodesToHtmlOptions['columnGap'] = 'normal',\n plugins: PluginComposer = new PluginComposer(),\n): Promise<string> => {\n const nodes = parseRawValue({ raw, plugins });\n const styles = plugins.getStyles;\n return Promise.resolve(serializeNodesToHtml(nodes, { columns, columnGap, styles }));\n};\n\nexport const serializeNodesToHtml = (\n nodes: TDescendant[],\n { mentionable, columns = 1, columnGap = 'normal', styles = BlockStyles }: SerializeNodesToHtmlOptions = {},\n): string => {\n const mappedMentionable = mentionable ? mapMentionable(mentionable) : new Map();\n\n let html = '';\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n if (isEmptyNode(node)) {\n html += '<br />';\n } else {\n html += serializeNodeToHtmlRecursive(node, styles, {\n mappedMentionable,\n });\n }\n }\n\n if (columns > 1) {\n return `<div style=\"columns:${columns}; column-gap:${columnGap};\">${html}</div>`;\n }\n\n return html;\n};\n\nconst isEmptyNode = (node: TDescendant): boolean => {\n if (!Array.isArray(node?.children)) {\n return false;\n }\n return node?.children?.every((child) => child.text === '');\n};\n"],"names":["serializeRawToHtmlAsync","raw","columns","columnGap","plugins","PluginComposer","nodes","parseRawValue","styles","serializeNodesToHtml","mentionable","BlockStyles","mappedMentionable","mapMentionable","html","i","len","node","isEmptyNode","serializeNodeToHtmlRecursive","_a","child"],"mappings":";;;AAOa,MAAAA,IAA0B,OACnCC,GACAC,IAAkD,GAClDC,IAAsD,UACtDC,IAA0B,IAAIC,QACZ;AAClB,QAAMC,IAAQC,EAAc,EAAE,KAAAN,GAAK,SAAAG,EAAS,CAAA,GACtCI,IAASJ,EAAQ;AAChB,SAAA,QAAQ,QAAQK,EAAqBH,GAAO,EAAE,SAAAJ,GAAS,WAAAC,GAAW,QAAAK,EAAQ,CAAA,CAAC;AACtF,GAEaC,IAAuB,CAChCH,GACA,EAAE,aAAAI,GAAa,SAAAR,IAAU,GAAG,WAAAC,IAAY,UAAU,QAAAK,IAASG,EAAY,IAAiC,CAAA,MAC/F;AACT,QAAMC,IAAoBF,IAAcG,EAAeH,CAAW,wBAAQ;AAE1E,MAAII,IAAO;AACX,WAASC,IAAI,GAAGC,IAAMV,EAAM,QAAQS,IAAIC,GAAKD,KAAK;AACxC,UAAAE,IAAOX,EAAMS,CAAC;AAChB,IAAAG,EAAYD,CAAI,IACRH,KAAA,WAEAA,KAAAK,EAA6BF,GAAMT,GAAQ;AAAA,MAC/C,mBAAAI;AAAA,IAAA,CACH;AAAA,EAET;AAEA,SAAIV,IAAU,IACH,uBAAuBA,CAAO,gBAAgBC,CAAS,MAAMW,CAAI,WAGrEA;AACX,GAEMI,IAAc,CAACD,MAA+B;;AAChD,SAAK,MAAM,QAAQA,KAAA,gBAAAA,EAAM,QAAQ,KAG1BG,IAAAH,KAAA,gBAAAA,EAAM,aAAN,gBAAAG,EAAgB,MAAM,CAACC,MAAUA,EAAM,SAAS,MAF5C;AAGf;"}
@@ -1,8 +0,0 @@
1
- const l = (e) => e ? Object.keys(e).reduce((r, t) => {
2
- const s = e[t];
3
- return s ? `${r}${a(t)}: ${s}; ` : r;
4
- }, "").trim().replaceAll('"', "'") : "", a = (e) => e.replaceAll(/([A-Z])/g, "-$1").toLowerCase();
5
- export {
6
- l as reactCssPropsToCss
7
- };
8
- //# sourceMappingURL=reactCssPropsToCss.es.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reactCssPropsToCss.es.js","sources":["../../../../../src/components/RichTextEditor/serializer/utlis/reactCssPropsToCss.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport type { CSSProperties } from 'react';\n\nexport const reactCssPropsToCss = (props?: CSSProperties): string => {\n if (!props) {\n return '';\n }\n\n return Object.keys(props)\n .reduce<string>((acc, key) => {\n const value = props[key as keyof CSSProperties];\n return value ? `${acc}${convertCamelCaseToKebabCase(key)}: ${value}; ` : acc;\n }, '')\n .trim()\n .replaceAll('\"', \"'\");\n};\n\nconst convertCamelCaseToKebabCase = (str: string): string => {\n return str.replaceAll(/([A-Z])/g, '-$1').toLowerCase();\n};\n"],"names":["reactCssPropsToCss","props","acc","key","value","convertCamelCaseToKebabCase","str"],"mappings":"AAIa,MAAAA,IAAqB,CAACC,MAC1BA,IAIE,OAAO,KAAKA,CAAK,EACnB,OAAe,CAACC,GAAKC,MAAQ;AACpB,QAAAC,IAAQH,EAAME,CAA0B;AACvC,SAAAC,IAAQ,GAAGF,CAAG,GAAGG,EAA4BF,CAAG,CAAC,KAAKC,CAAK,OAAOF;AAAA,GAC1E,EAAE,EACJ,OACA,WAAW,KAAK,GAAG,IATb,IAYTG,IAA8B,CAACC,MAC1BA,EAAI,WAAW,YAAY,KAAK,EAAE,YAAY;"}
@@ -1,13 +0,0 @@
1
- import { BOLD_CLASSES as S, ITALIC_CLASSES as c, UNDERLINE_CLASSES as $, STRIKETHROUGH_CLASSES as f, CODE_CLASSES as o } from "@frontify/fondue";
2
- import u from "escape-html";
3
- const A = (a) => {
4
- let s = u(a.text);
5
- s = s.replaceAll(`
6
- `, "<br />");
7
- const { bold: p, italic: i, underline: e, strikethrough: r, code: t, subscript: l, superscript: n } = a;
8
- return p && (s = `<span class="${S}">${s}</span>`), i && (s = `<span class="${c}">${s}</span>`), e && (s = `<span class="${$}">${s}</span>`), r && (s = `<span class="${f}">${s}</span>`), t && (s = `<span class="${o}">${s}</span>`), l ? s = `<sub>${s}</sub>` : n && (s = `<sup>${s}</sup>`), s;
9
- };
10
- export {
11
- A as serializeLeafToHtml
12
- };
13
- //# sourceMappingURL=serializeLeafToHtml.es.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serializeLeafToHtml.es.js","sources":["../../../../../src/components/RichTextEditor/serializer/utlis/serializeLeafToHtml.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { BOLD_CLASSES, CODE_CLASSES, ITALIC_CLASSES, STRIKETHROUGH_CLASSES, UNDERLINE_CLASSES } from '@frontify/fondue';\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, subscript, superscript } = 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 if (subscript) {\n string = `<sub>${string}</sub>`;\n } else if (superscript) {\n string = `<sup>${string}</sup>`;\n }\n return string;\n};\n"],"names":["serializeLeafToHtml","node","string","escapeHtml","bold","italic","underline","strikethrough","code","subscript","superscript","BOLD_CLASSES","ITALIC_CLASSES","UNDERLINE_CLASSES","STRIKETHROUGH_CLASSES","CODE_CLASSES"],"mappings":";;AAMa,MAAAA,IAAsB,CAACC,MAAwB;AACpD,MAAAC,IAASC,EAAWF,EAAK,IAAI;AACxB,EAAAC,IAAAA,EAAO,WAAW;AAAA,GAAM,QAAQ;AACnC,QAAA,EAAE,MAAAE,GAAM,QAAAC,GAAQ,WAAAC,GAAW,eAAAC,GAAe,MAAAC,GAAM,WAAAC,GAAW,aAAAC,EAAgB,IAAAT;AACjF,SAAIG,MACSF,IAAA,gBAAgBS,CAAY,KAAKT,CAAM,YAEhDG,MACSH,IAAA,gBAAgBU,CAAc,KAAKV,CAAM,YAElDI,MACSJ,IAAA,gBAAgBW,CAAiB,KAAKX,CAAM,YAErDK,MACSL,IAAA,gBAAgBY,CAAqB,KAAKZ,CAAM,YAEzDM,MACSN,IAAA,gBAAgBa,CAAY,KAAKb,CAAM,YAEhDO,IACAP,IAAS,QAAQA,CAAM,WAChBQ,MACPR,IAAS,QAAQA,CAAM,WAEpBA;AACX;"}
@@ -1,3 +0,0 @@
1
- /* (c) Copyright Frontify Ltd., all rights reserved. */
2
-
3
- export * from './serializeToHtml';
@@ -1,27 +0,0 @@
1
- /* (c) Copyright Frontify Ltd., all rights reserved. */
2
-
3
- import type { CSSProperties } from 'react';
4
- import { TElement } from '@udecode/plate';
5
-
6
- import { reactCssPropsToCss } from '../utlis/reactCssPropsToCss';
7
- import { BUTTON_PLUGIN } from '../../plugins';
8
-
9
- export type ButtonStylesType = Record<string, Record<string, CSSProperties & { hover?: CSSProperties }>>;
10
-
11
- export const buttonNode = (node: TElement, children: string, defaultClassNames: string, styles: ButtonStylesType) => {
12
- const buttonStyles = styles[BUTTON_PLUGIN];
13
- const buttonTypeString = (node.buttonStyle as string) ?? 'primary';
14
- const buttonType = `button${buttonTypeString.charAt(0).toUpperCase()}${buttonTypeString.slice(1)}`;
15
- const buttonStyle = buttonStyles[buttonType];
16
-
17
- const defaultStyles = reactCssPropsToCss(buttonStyle);
18
-
19
- return `<a href="${node.url}"
20
- target="${node.target ?? '_blank'}"
21
- dir="auto"
22
- style="${defaultStyles}"
23
- class="${defaultClassNames}"
24
- onmouseenter="this.setAttribute('style', '${defaultStyles} ${reactCssPropsToCss(buttonStyle?.hover)}');"
25
- onmouseleave="this.setAttribute('style', '${reactCssPropsToCss(buttonStyle)}');"
26
- >${children}</a>`;
27
- };
@@ -1,30 +0,0 @@
1
- /* (c) Copyright Frontify Ltd., all rights reserved. */
2
-
3
- import type { CSSProperties } from 'react';
4
- import { merge } from '@frontify/fondue';
5
- import { TElement } from '@udecode/plate';
6
-
7
- import { reactCssPropsToCss } from '../utlis/reactCssPropsToCss';
8
-
9
- export const checkItemNode = (
10
- node: TElement,
11
- children: string,
12
- defaultClassNames: string,
13
- styles: Record<string, CSSProperties & { hover?: CSSProperties }>,
14
- ) => {
15
- return `<div dir="auto" disabled class="tw-flex tw-flex-row tw-pb-2 first-of-type:tw-ml-0 ${defaultClassNames}" style="margin-left:${
16
- ((node.indent as number) ?? 0) * 24
17
- }px;">
18
- <div dir="auto" class="tw-flex tw-items-center tw-justify-center tw-select-none tw-mr-1.5">
19
- <input
20
- class="tw-w-4 tw-h-4 tw-m-0"
21
- type="checkbox"
22
- ${node.checked ? 'checked' : ''}
23
- onclick="return false;" />
24
- </div>
25
- <span dir="auto" class="${merge([
26
- 'tw-flex-1 tw-focus:outline-none',
27
- node.checked ? '!tw-line-through' : '',
28
- ])}" style="${reactCssPropsToCss(styles[node.children[0].textStyle as string])}">${children}</span>
29
- </div>`;
30
- };
@@ -1,68 +0,0 @@
1
- /* (c) Copyright Frontify Ltd., all rights reserved. */
2
-
3
- import type { CSSProperties } from 'react';
4
- import { merge } from '@frontify/fondue';
5
- import { TElement } from '@udecode/plate';
6
-
7
- import { TextStyles } from '../../plugins';
8
- import { reactCssPropsToCss } from '../utlis/reactCssPropsToCss';
9
-
10
- export const defaultNode = (node: TElement, children: string, styles: CSSProperties, defaultClassNames: string) => {
11
- const defaultStyles = reactCssPropsToCss(styles);
12
-
13
- if (node.type === TextStyles.heading1) {
14
- return `<h1 dir="auto" class="${merge([defaultClassNames, 'a-h1'])}">${getStyledChild(
15
- children,
16
- defaultStyles,
17
- )}</h1>`;
18
- }
19
- if (node.type === TextStyles.heading2) {
20
- return `<h2 dir="auto" class="${defaultClassNames}">${getStyledChild(children, defaultStyles)}</h2>`;
21
- }
22
- if (node.type === TextStyles.heading3) {
23
- return `<h3 dir="auto" class="${defaultClassNames}">${getStyledChild(children, defaultStyles)}</h3>`;
24
- }
25
- if (node.type === TextStyles.heading4) {
26
- return `<h4 dir="auto" class="${defaultClassNames}">${getStyledChild(children, defaultStyles)}</h4>`;
27
- }
28
- if (node.type === TextStyles.custom1) {
29
- return `<p dir="auto" class="${merge([defaultClassNames, 'a-custom1'])}">${getStyledChild(
30
- children,
31
- defaultStyles,
32
- )}</p>`;
33
- }
34
- if (node.type === TextStyles.custom2) {
35
- return `<p dir="auto" class="${merge([defaultClassNames, 'a-custom2'])}">${getStyledChild(
36
- children,
37
- defaultStyles,
38
- )}</p>`;
39
- }
40
- if (node.type === TextStyles.custom3) {
41
- return `<p dir="auto" class="${merge([defaultClassNames, 'a-custom3'])}">${getStyledChild(
42
- children,
43
- defaultStyles,
44
- )}</p>`;
45
- }
46
- if (node.type === TextStyles.quote) {
47
- return `<p dir="auto" class="${merge([defaultClassNames, 'a-quote'])}">${getStyledChild(
48
- children,
49
- defaultStyles,
50
- )}</p>`;
51
- }
52
- if (node.type === TextStyles.imageTitle) {
53
- return `<p dir="auto" class="${merge([defaultClassNames, 'a-image-title'])}">${getStyledChild(
54
- children,
55
- defaultStyles,
56
- )}</p>`;
57
- }
58
- if (node.type === TextStyles.imageCaption) {
59
- return `<p dir="auto" class="${merge([defaultClassNames, 'a-image-caption'])}">${getStyledChild(
60
- children,
61
- defaultStyles,
62
- )}</p>`;
63
- }
64
-
65
- return `<p dir="auto" class="${defaultClassNames}">${getStyledChild(children, defaultStyles)}</p>`;
66
- };
67
-
68
- const getStyledChild = (children: string, styles: string) => `<span dir="auto" style="${styles}">${children}</span>`;
@@ -1,26 +0,0 @@
1
- /* (c) Copyright Frontify Ltd., all rights reserved. */
2
-
3
- import type { CSSProperties } from 'react';
4
- import escapeHtml from 'escape-html';
5
- import { TElement } from '@udecode/plate';
6
-
7
- import { LINK_PLUGIN } from '../../plugins/LinkPlugin/id';
8
- import { TLinkElement } from '../../plugins/LinkPlugin/types';
9
- import { reactCssPropsToCss } from '../utlis/reactCssPropsToCss';
10
-
11
- export const linkNode = (
12
- node: TElement,
13
- children: string,
14
- defaultClassNames: string,
15
- styles: Record<string, CSSProperties & { hover?: CSSProperties }>,
16
- ) => {
17
- if (node.chosenLink) {
18
- const { chosenLink } = node as TLinkElement;
19
- return `<a dir="auto" class="${defaultClassNames}" style="${reactCssPropsToCss(styles[LINK_PLUGIN])}" target=${
20
- chosenLink?.openInNewTab ? '_blank' : '_self'
21
- } href="${escapeHtml(chosenLink?.searchResult?.link)}">${children}</a>`;
22
- }
23
- return `<a dir="auto" class="${defaultClassNames}" style="${reactCssPropsToCss(styles[LINK_PLUGIN])}" target="${
24
- node?.target ?? '_blank'
25
- }" href="${escapeHtml(node.url as string)}">${children}</a>`;
26
- };
@@ -1,17 +0,0 @@
1
- /* (c) Copyright Frontify Ltd., all rights reserved. */
2
-
3
- import ReactDOM from 'react-dom';
4
- import { TElement, TMentionElement } from '@udecode/plate';
5
- import { MappedMentionableItems, MentionMarkupElementNode } from '@frontify/fondue';
6
-
7
- type MentionHtmlNodeProps = { mentionable?: MappedMentionableItems };
8
-
9
- export const mentionHtmlNode = (node: TElement, { mentionable }: MentionHtmlNodeProps = {}) => {
10
- if (!mentionable) {
11
- return '';
12
- }
13
-
14
- const div = document.createElement('div');
15
- ReactDOM.render(MentionMarkupElementNode(mentionable)({ element: node as TMentionElement }), div);
16
- return div.innerHTML;
17
- };
@@ -1,134 +0,0 @@
1
- /* (c) Copyright Frontify Ltd., all rights reserved. */
2
-
3
- import {
4
- ELEMENT_CHECK_ITEM,
5
- LI_CLASSNAMES,
6
- MappedMentionableItems,
7
- OL_STYLES,
8
- UL_CLASSES,
9
- alignmentClassnames,
10
- getLiStyles,
11
- getLicElementClassNames,
12
- getOrderedListClasses,
13
- merge,
14
- } from '@frontify/fondue';
15
- import {
16
- ELEMENT_LI,
17
- ELEMENT_LIC,
18
- ELEMENT_LINK,
19
- ELEMENT_MENTION,
20
- ELEMENT_OL,
21
- ELEMENT_UL,
22
- TDescendant,
23
- TElement,
24
- isText,
25
- } from '@udecode/plate';
26
- import { serializeLeafToHtml } from './utlis/serializeLeafToHtml';
27
- import { reactCssPropsToCss } from './utlis/reactCssPropsToCss';
28
- import type { CSSProperties } from 'react';
29
- import { ButtonStylesType, buttonNode } from './nodes/button';
30
- import { linkNode } from './nodes/link';
31
- import { defaultNode } from './nodes/default';
32
- import { checkItemNode } from './nodes/checkItemNode';
33
- import { mentionHtmlNode } from './nodes/mentionHtmlNode';
34
- import { ELEMENT_BUTTON } from '../plugins';
35
-
36
- const countNodesOfType = (nodes: TDescendant[], type: string): number => {
37
- return nodes.reduce((acc, node) => {
38
- if (node.type === type) {
39
- acc++;
40
- }
41
- if (node.children) {
42
- return acc + countNodesOfType(node.children as TDescendant[], type);
43
- }
44
- return acc;
45
- }, 0);
46
- };
47
-
48
- type NestingCount = {
49
- [type: string]: number;
50
- };
51
-
52
- type SerializeNodeToHtmlRecursiveOptions = {
53
- mappedMentionable?: MappedMentionableItems;
54
- nestingCount?: NestingCount;
55
- };
56
-
57
- export const serializeNodeToHtmlRecursive = (
58
- node: TDescendant,
59
- styles: Record<string, CSSProperties & { hover?: CSSProperties }> | ButtonStylesType,
60
- { mappedMentionable, nestingCount = {} }: SerializeNodeToHtmlRecursiveOptions,
61
- ): string => {
62
- if (isText(node)) {
63
- return serializeLeafToHtml(node);
64
- }
65
-
66
- const rootNestingCount = nestingCount[node.type] || countNodesOfType([node], node.type);
67
- let children = '';
68
- for (const element of node.children) {
69
- children += serializeNodeToHtmlRecursive(element, styles, {
70
- nestingCount: {
71
- ...nestingCount,
72
- [element.type as string]: rootNestingCount,
73
- },
74
- mappedMentionable,
75
- });
76
- }
77
-
78
- const htmlMapper = MapNodeTypesToHtml[node.type];
79
- if (typeof htmlMapper !== 'undefined') {
80
- return htmlMapper({
81
- classNames: getClassNames(node.breakAfterColumn as string | undefined, node.align as string | undefined),
82
- children,
83
- rootNestingCount,
84
- node,
85
- mappedMentionable,
86
- styles,
87
- });
88
- } else {
89
- return defaultNode(
90
- node,
91
- children,
92
- styles[node.type],
93
- getClassNames(node.breakAfterColumn as string | undefined, node.align as string | undefined),
94
- );
95
- }
96
- };
97
-
98
- type Arguments = {
99
- classNames: string;
100
- children: string;
101
- rootNestingCount: number;
102
- node: TElement;
103
- mappedMentionable?: MappedMentionableItems;
104
- styles: Record<string, CSSProperties & { hover?: CSSProperties }> | ButtonStylesType;
105
- };
106
-
107
- const MapNodeTypesToHtml: { [key: string]: ({ ...args }: Arguments) => string } = {
108
- [ELEMENT_UL]: (args) => `<ul dir="auto" class="${UL_CLASSES} ${args.classNames}">${args.children}</ul>`,
109
- [ELEMENT_OL]: ({ classNames, children, node, rootNestingCount }) => {
110
- const nestingLevel = Math.max(rootNestingCount - countNodesOfType([node], ELEMENT_OL), 0);
111
- return `<ol dir="auto" class="${getOrderedListClasses(nestingLevel)} ${classNames}" style="${reactCssPropsToCss(
112
- OL_STYLES,
113
- )}">${children}</ol>`;
114
- },
115
- [ELEMENT_LI]: ({ classNames, children, node, styles }) =>
116
- `<li dir="auto" class="${classNames} ${LI_CLASSNAMES}" style="${reactCssPropsToCss(
117
- getLiStyles(node, styles),
118
- )}">${children}</li>`,
119
- [ELEMENT_LIC]: ({ classNames, children, node }) =>
120
- `<p dir="auto" class="${classNames} ${getLicElementClassNames(node)}"><span>${children}</span></p>`,
121
- [ELEMENT_LINK]: ({ node, children, classNames, styles }) => linkNode(node, children, classNames, styles),
122
- [ELEMENT_BUTTON]: ({ node, children, classNames, styles }) =>
123
- buttonNode(node, children, classNames, styles as ButtonStylesType),
124
- [ELEMENT_CHECK_ITEM]: ({ node, children, classNames, styles }) => checkItemNode(node, children, classNames, styles),
125
- [ELEMENT_MENTION]: ({ node, mappedMentionable }) => mentionHtmlNode(node, { mentionable: mappedMentionable }),
126
- };
127
-
128
- const getClassNames = (breakAfterColumn?: string, align?: string) => {
129
- const breakWordsClass = 'tw-break-words';
130
- const columnBreakClasses =
131
- breakAfterColumn === 'active' ? 'tw-break-after-column tw-break-inside-avoid-column' : '';
132
- const alignClass = align ? alignmentClassnames[align] : '';
133
- return merge([alignClass, breakWordsClass, columnBreakClasses]);
134
- };
@@ -1,49 +0,0 @@
1
- /* (c) Copyright Frontify Ltd., all rights reserved. */
2
-
3
- import { TDescendant } from '@udecode/plate';
4
- import { PluginComposer, SerializeNodesToHtmlOptions, mapMentionable, parseRawValue } from '@frontify/fondue';
5
- import { BlockStyles } from '../plugins';
6
- import { serializeNodeToHtmlRecursive } from './serializeNodesToHtmlRecursive';
7
-
8
- export const serializeRawToHtmlAsync = async (
9
- raw: string,
10
- columns: SerializeNodesToHtmlOptions['columns'] = 1,
11
- columnGap: SerializeNodesToHtmlOptions['columnGap'] = 'normal',
12
- plugins: PluginComposer = new PluginComposer(),
13
- ): Promise<string> => {
14
- const nodes = parseRawValue({ raw, plugins });
15
- const styles = plugins.getStyles;
16
- return Promise.resolve(serializeNodesToHtml(nodes, { columns, columnGap, styles }));
17
- };
18
-
19
- export const serializeNodesToHtml = (
20
- nodes: TDescendant[],
21
- { mentionable, columns = 1, columnGap = 'normal', styles = BlockStyles }: SerializeNodesToHtmlOptions = {},
22
- ): string => {
23
- const mappedMentionable = mentionable ? mapMentionable(mentionable) : new Map();
24
-
25
- let html = '';
26
- for (let i = 0, len = nodes.length; i < len; i++) {
27
- const node = nodes[i];
28
- if (isEmptyNode(node)) {
29
- html += '<br />';
30
- } else {
31
- html += serializeNodeToHtmlRecursive(node, styles, {
32
- mappedMentionable,
33
- });
34
- }
35
- }
36
-
37
- if (columns > 1) {
38
- return `<div style="columns:${columns}; column-gap:${columnGap};">${html}</div>`;
39
- }
40
-
41
- return html;
42
- };
43
-
44
- const isEmptyNode = (node: TDescendant): boolean => {
45
- if (!Array.isArray(node?.children)) {
46
- return false;
47
- }
48
- return node?.children?.every((child) => child.text === '');
49
- };
@@ -1,21 +0,0 @@
1
- /* (c) Copyright Frontify Ltd., all rights reserved. */
2
-
3
- import type { CSSProperties } from 'react';
4
-
5
- export const reactCssPropsToCss = (props?: CSSProperties): string => {
6
- if (!props) {
7
- return '';
8
- }
9
-
10
- return Object.keys(props)
11
- .reduce<string>((acc, key) => {
12
- const value = props[key as keyof CSSProperties];
13
- return value ? `${acc}${convertCamelCaseToKebabCase(key)}: ${value}; ` : acc;
14
- }, '')
15
- .trim()
16
- .replaceAll('"', "'");
17
- };
18
-
19
- const convertCamelCaseToKebabCase = (str: string): string => {
20
- return str.replaceAll(/([A-Z])/g, '-$1').toLowerCase();
21
- };
@@ -1,32 +0,0 @@
1
- /* (c) Copyright Frontify Ltd., all rights reserved. */
2
-
3
- import { BOLD_CLASSES, CODE_CLASSES, ITALIC_CLASSES, STRIKETHROUGH_CLASSES, UNDERLINE_CLASSES } from '@frontify/fondue';
4
- import { TText } from '@udecode/plate';
5
- import escapeHtml from 'escape-html';
6
-
7
- export const serializeLeafToHtml = (node: TText): string => {
8
- let string = escapeHtml(node.text);
9
- string = string.replaceAll('\n', '<br />');
10
- const { bold, italic, underline, strikethrough, code, subscript, superscript } = node;
11
- if (bold) {
12
- string = `<span class="${BOLD_CLASSES}">${string}</span>`;
13
- }
14
- if (italic) {
15
- string = `<span class="${ITALIC_CLASSES}">${string}</span>`;
16
- }
17
- if (underline) {
18
- string = `<span class="${UNDERLINE_CLASSES}">${string}</span>`;
19
- }
20
- if (strikethrough) {
21
- string = `<span class="${STRIKETHROUGH_CLASSES}">${string}</span>`;
22
- }
23
- if (code) {
24
- string = `<span class="${CODE_CLASSES}">${string}</span>`;
25
- }
26
- if (subscript) {
27
- string = `<sub>${string}</sub>`;
28
- } else if (superscript) {
29
- string = `<sup>${string}</sup>`;
30
- }
31
- return string;
32
- };