@frontify/guideline-blocks-settings 0.28.6 → 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 (74) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/components/RichTextEditor/SerializedText.es.js +2 -2
  3. package/dist/components/RichTextEditor/SerializedText.es.js.map +1 -1
  4. package/dist/components/RichTextEditor/plugins/ButtonPlugin/components/FloatingButton/useFloatingButtonEdit.es.js +5 -5
  5. package/dist/components/RichTextEditor/plugins/ButtonPlugin/utils/triggerFloatingButton.es.js +6 -6
  6. package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom1Plugin.es.js +15 -14
  7. package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom1Plugin.es.js.map +1 -1
  8. package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom2Plugin.es.js +15 -14
  9. package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom2Plugin.es.js.map +1 -1
  10. package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom3Plugin.es.js +15 -14
  11. package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom3Plugin.es.js.map +1 -1
  12. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading1Plugin.es.js +10 -9
  13. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading1Plugin.es.js.map +1 -1
  14. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading2Plugin.es.js +15 -7
  15. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading2Plugin.es.js.map +1 -1
  16. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading3Plugin.es.js +15 -7
  17. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading3Plugin.es.js.map +1 -1
  18. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading4Plugin.es.js +15 -7
  19. package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading4Plugin.es.js.map +1 -1
  20. package/dist/components/RichTextEditor/plugins/TextStylePlugins/imageCaptionPlugin.es.js +15 -14
  21. package/dist/components/RichTextEditor/plugins/TextStylePlugins/imageCaptionPlugin.es.js.map +1 -1
  22. package/dist/components/RichTextEditor/plugins/TextStylePlugins/imageTitlePlugin.es.js +18 -17
  23. package/dist/components/RichTextEditor/plugins/TextStylePlugins/imageTitlePlugin.es.js.map +1 -1
  24. package/dist/components/RichTextEditor/plugins/TextStylePlugins/quotePlugin.es.js +13 -12
  25. package/dist/components/RichTextEditor/plugins/TextStylePlugins/quotePlugin.es.js.map +1 -1
  26. package/dist/components/RichTextEditor/plugins/styles.es.js +0 -1
  27. package/dist/components/RichTextEditor/plugins/styles.es.js.map +1 -1
  28. package/dist/index.cjs.js +3 -20
  29. package/dist/index.cjs.js.map +1 -1
  30. package/dist/index.d.ts +0 -2
  31. package/dist/index.umd.js +3 -20
  32. package/dist/index.umd.js.map +1 -1
  33. package/dist/styles.css +1 -1
  34. package/package.json +17 -19
  35. package/src/components/RichTextEditor/SerializedText.tsx +2 -2
  36. package/src/components/RichTextEditor/plugins/TextStylePlugins/custom1Plugin.tsx +3 -2
  37. package/src/components/RichTextEditor/plugins/TextStylePlugins/custom2Plugin.tsx +3 -2
  38. package/src/components/RichTextEditor/plugins/TextStylePlugins/custom3Plugin.tsx +3 -2
  39. package/src/components/RichTextEditor/plugins/TextStylePlugins/heading1Plugin.tsx +3 -2
  40. package/src/components/RichTextEditor/plugins/TextStylePlugins/heading2Plugin.tsx +6 -2
  41. package/src/components/RichTextEditor/plugins/TextStylePlugins/heading3Plugin.tsx +6 -2
  42. package/src/components/RichTextEditor/plugins/TextStylePlugins/heading4Plugin.tsx +6 -2
  43. package/src/components/RichTextEditor/plugins/TextStylePlugins/imageCaptionPlugin.tsx +3 -2
  44. package/src/components/RichTextEditor/plugins/TextStylePlugins/imageTitlePlugin.tsx +3 -2
  45. package/src/components/RichTextEditor/plugins/TextStylePlugins/quotePlugin.tsx +3 -2
  46. package/src/components/RichTextEditor/plugins/styles.ts +0 -1
  47. package/dist/components/RichTextEditor/serializer/nodes/button.es.js +0 -17
  48. package/dist/components/RichTextEditor/serializer/nodes/button.es.js.map +0 -1
  49. package/dist/components/RichTextEditor/serializer/nodes/checkItemNode.es.js +0 -19
  50. package/dist/components/RichTextEditor/serializer/nodes/checkItemNode.es.js.map +0 -1
  51. package/dist/components/RichTextEditor/serializer/nodes/default.es.js +0 -32
  52. package/dist/components/RichTextEditor/serializer/nodes/default.es.js.map +0 -1
  53. package/dist/components/RichTextEditor/serializer/nodes/link.es.js +0 -15
  54. package/dist/components/RichTextEditor/serializer/nodes/link.es.js.map +0 -1
  55. package/dist/components/RichTextEditor/serializer/nodes/mentionHtmlNode.es.js +0 -12
  56. package/dist/components/RichTextEditor/serializer/nodes/mentionHtmlNode.es.js.map +0 -1
  57. package/dist/components/RichTextEditor/serializer/serializeNodesToHtmlRecursive.es.js +0 -61
  58. package/dist/components/RichTextEditor/serializer/serializeNodesToHtmlRecursive.es.js.map +0 -1
  59. package/dist/components/RichTextEditor/serializer/serializeToHtml.es.js +0 -25
  60. package/dist/components/RichTextEditor/serializer/serializeToHtml.es.js.map +0 -1
  61. package/dist/components/RichTextEditor/serializer/utlis/reactCssPropsToCss.es.js +0 -8
  62. package/dist/components/RichTextEditor/serializer/utlis/reactCssPropsToCss.es.js.map +0 -1
  63. package/dist/components/RichTextEditor/serializer/utlis/serializeLeafToHtml.es.js +0 -13
  64. package/dist/components/RichTextEditor/serializer/utlis/serializeLeafToHtml.es.js.map +0 -1
  65. package/src/components/RichTextEditor/serializer/index.ts +0 -3
  66. package/src/components/RichTextEditor/serializer/nodes/button.ts +0 -27
  67. package/src/components/RichTextEditor/serializer/nodes/checkItemNode.ts +0 -30
  68. package/src/components/RichTextEditor/serializer/nodes/default.ts +0 -68
  69. package/src/components/RichTextEditor/serializer/nodes/link.ts +0 -26
  70. package/src/components/RichTextEditor/serializer/nodes/mentionHtmlNode.ts +0 -17
  71. package/src/components/RichTextEditor/serializer/serializeNodesToHtmlRecursive.ts +0 -134
  72. package/src/components/RichTextEditor/serializer/serializeToHtml.ts +0 -49
  73. package/src/components/RichTextEditor/serializer/utlis/reactCssPropsToCss.ts +0 -21
  74. package/src/components/RichTextEditor/serializer/utlis/serializeLeafToHtml.ts +0 -32
@@ -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
- };