@pega/cosmos-react-rte 5.0.0-dev.4.7 → 5.0.0-dev.4.8

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 (193) hide show
  1. package/package.json +2 -2
  2. package/lib/components/DynamicContentEditor/DynamicContentEditor.d.ts +0 -12
  3. package/lib/components/DynamicContentEditor/DynamicContentEditor.d.ts.map +0 -1
  4. package/lib/components/DynamicContentEditor/DynamicContentEditor.js +0 -252
  5. package/lib/components/DynamicContentEditor/DynamicContentEditor.js.map +0 -1
  6. package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.d.ts +0 -2
  7. package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.d.ts.map +0 -1
  8. package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.js +0 -8
  9. package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.js.map +0 -1
  10. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.d.ts +0 -35
  11. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.d.ts.map +0 -1
  12. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.js +0 -3
  13. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.js.map +0 -1
  14. package/lib/components/DynamicContentEditor/PegaCustomElement.d.ts +0 -329
  15. package/lib/components/DynamicContentEditor/PegaCustomElement.d.ts.map +0 -1
  16. package/lib/components/DynamicContentEditor/PegaCustomElement.js +0 -27
  17. package/lib/components/DynamicContentEditor/PegaCustomElement.js.map +0 -1
  18. package/lib/components/DynamicContentEditor/index.d.ts +0 -3
  19. package/lib/components/DynamicContentEditor/index.d.ts.map +0 -1
  20. package/lib/components/DynamicContentEditor/index.js +0 -2
  21. package/lib/components/DynamicContentEditor/index.js.map +0 -1
  22. package/lib/components/Editor/Editor.context.d.ts +0 -10
  23. package/lib/components/Editor/Editor.context.d.ts.map +0 -1
  24. package/lib/components/Editor/Editor.context.js +0 -10
  25. package/lib/components/Editor/Editor.context.js.map +0 -1
  26. package/lib/components/Editor/Editor.d.ts +0 -19
  27. package/lib/components/Editor/Editor.d.ts.map +0 -1
  28. package/lib/components/Editor/Editor.js +0 -369
  29. package/lib/components/Editor/Editor.js.map +0 -1
  30. package/lib/components/Editor/Editor.styles.d.ts +0 -5
  31. package/lib/components/Editor/Editor.styles.d.ts.map +0 -1
  32. package/lib/components/Editor/Editor.styles.js +0 -50
  33. package/lib/components/Editor/Editor.styles.js.map +0 -1
  34. package/lib/components/Editor/Editor.test-ids.d.ts +0 -2
  35. package/lib/components/Editor/Editor.test-ids.d.ts.map +0 -1
  36. package/lib/components/Editor/Editor.test-ids.js +0 -8
  37. package/lib/components/Editor/Editor.test-ids.js.map +0 -1
  38. package/lib/components/Editor/Editor.types.d.ts +0 -69
  39. package/lib/components/Editor/Editor.types.d.ts.map +0 -1
  40. package/lib/components/Editor/Editor.types.js +0 -2
  41. package/lib/components/Editor/Editor.types.js.map +0 -1
  42. package/lib/components/Editor/ImageEditor.d.ts +0 -10
  43. package/lib/components/Editor/ImageEditor.d.ts.map +0 -1
  44. package/lib/components/Editor/ImageEditor.js +0 -276
  45. package/lib/components/Editor/ImageEditor.js.map +0 -1
  46. package/lib/components/Editor/Toolbar/AnchorButton.d.ts +0 -10
  47. package/lib/components/Editor/Toolbar/AnchorButton.d.ts.map +0 -1
  48. package/lib/components/Editor/Toolbar/AnchorButton.js +0 -161
  49. package/lib/components/Editor/Toolbar/AnchorButton.js.map +0 -1
  50. package/lib/components/Editor/Toolbar/ImageButton.d.ts +0 -8
  51. package/lib/components/Editor/Toolbar/ImageButton.d.ts.map +0 -1
  52. package/lib/components/Editor/Toolbar/ImageButton.js +0 -30
  53. package/lib/components/Editor/Toolbar/ImageButton.js.map +0 -1
  54. package/lib/components/Editor/Toolbar/TextSelect.d.ts +0 -14
  55. package/lib/components/Editor/Toolbar/TextSelect.d.ts.map +0 -1
  56. package/lib/components/Editor/Toolbar/TextSelect.js +0 -131
  57. package/lib/components/Editor/Toolbar/TextSelect.js.map +0 -1
  58. package/lib/components/Editor/Toolbar/Toolbar.d.ts +0 -17
  59. package/lib/components/Editor/Toolbar/Toolbar.d.ts.map +0 -1
  60. package/lib/components/Editor/Toolbar/Toolbar.js +0 -164
  61. package/lib/components/Editor/Toolbar/Toolbar.js.map +0 -1
  62. package/lib/components/Editor/Toolbar/Toolbar.test-ids.d.ts +0 -3
  63. package/lib/components/Editor/Toolbar/Toolbar.test-ids.d.ts.map +0 -1
  64. package/lib/components/Editor/Toolbar/Toolbar.test-ids.js +0 -16
  65. package/lib/components/Editor/Toolbar/Toolbar.test-ids.js.map +0 -1
  66. package/lib/components/Editor/index.d.ts +0 -4
  67. package/lib/components/Editor/index.d.ts.map +0 -1
  68. package/lib/components/Editor/index.js +0 -3
  69. package/lib/components/Editor/index.js.map +0 -1
  70. package/lib/components/RichTextEditor/DecoratorComponents/CodeBlock.d.ts +0 -4
  71. package/lib/components/RichTextEditor/DecoratorComponents/CodeBlock.d.ts.map +0 -1
  72. package/lib/components/RichTextEditor/DecoratorComponents/CodeBlock.js +0 -15
  73. package/lib/components/RichTextEditor/DecoratorComponents/CodeBlock.js.map +0 -1
  74. package/lib/components/RichTextEditor/DecoratorComponents/Image.d.ts +0 -4
  75. package/lib/components/RichTextEditor/DecoratorComponents/Image.d.ts.map +0 -1
  76. package/lib/components/RichTextEditor/DecoratorComponents/Image.js +0 -7
  77. package/lib/components/RichTextEditor/DecoratorComponents/Image.js.map +0 -1
  78. package/lib/components/RichTextEditor/DecoratorComponents/Link.d.ts +0 -4
  79. package/lib/components/RichTextEditor/DecoratorComponents/Link.d.ts.map +0 -1
  80. package/lib/components/RichTextEditor/DecoratorComponents/Link.js +0 -8
  81. package/lib/components/RichTextEditor/DecoratorComponents/Link.js.map +0 -1
  82. package/lib/components/RichTextEditor/DecoratorComponents/Table.d.ts +0 -6
  83. package/lib/components/RichTextEditor/DecoratorComponents/Table.d.ts.map +0 -1
  84. package/lib/components/RichTextEditor/DecoratorComponents/Table.js +0 -24
  85. package/lib/components/RichTextEditor/DecoratorComponents/Table.js.map +0 -1
  86. package/lib/components/RichTextEditor/RichTextEditor.context.d.ts +0 -15
  87. package/lib/components/RichTextEditor/RichTextEditor.context.d.ts.map +0 -1
  88. package/lib/components/RichTextEditor/RichTextEditor.context.js +0 -11
  89. package/lib/components/RichTextEditor/RichTextEditor.context.js.map +0 -1
  90. package/lib/components/RichTextEditor/RichTextEditor.d.ts +0 -6
  91. package/lib/components/RichTextEditor/RichTextEditor.d.ts.map +0 -1
  92. package/lib/components/RichTextEditor/RichTextEditor.js +0 -346
  93. package/lib/components/RichTextEditor/RichTextEditor.js.map +0 -1
  94. package/lib/components/RichTextEditor/RichTextEditor.styles.d.ts +0 -10
  95. package/lib/components/RichTextEditor/RichTextEditor.styles.d.ts.map +0 -1
  96. package/lib/components/RichTextEditor/RichTextEditor.styles.js +0 -73
  97. package/lib/components/RichTextEditor/RichTextEditor.styles.js.map +0 -1
  98. package/lib/components/RichTextEditor/RichTextEditor.types.d.ts +0 -72
  99. package/lib/components/RichTextEditor/RichTextEditor.types.d.ts.map +0 -1
  100. package/lib/components/RichTextEditor/RichTextEditor.types.js +0 -2
  101. package/lib/components/RichTextEditor/RichTextEditor.types.js.map +0 -1
  102. package/lib/components/RichTextEditor/RichTextTreeRenderer.d.ts +0 -9
  103. package/lib/components/RichTextEditor/RichTextTreeRenderer.d.ts.map +0 -1
  104. package/lib/components/RichTextEditor/RichTextTreeRenderer.js +0 -15
  105. package/lib/components/RichTextEditor/RichTextTreeRenderer.js.map +0 -1
  106. package/lib/components/RichTextEditor/RichTextViewer.d.ts +0 -7
  107. package/lib/components/RichTextEditor/RichTextViewer.d.ts.map +0 -1
  108. package/lib/components/RichTextEditor/RichTextViewer.js +0 -38
  109. package/lib/components/RichTextEditor/RichTextViewer.js.map +0 -1
  110. package/lib/components/RichTextEditor/RichTextViewer.types.d.ts +0 -33
  111. package/lib/components/RichTextEditor/RichTextViewer.types.d.ts.map +0 -1
  112. package/lib/components/RichTextEditor/RichTextViewer.types.js +0 -2
  113. package/lib/components/RichTextEditor/RichTextViewer.types.js.map +0 -1
  114. package/lib/components/RichTextEditor/Toolbar/AnchorButton.d.ts +0 -8
  115. package/lib/components/RichTextEditor/Toolbar/AnchorButton.d.ts.map +0 -1
  116. package/lib/components/RichTextEditor/Toolbar/AnchorButton.js +0 -156
  117. package/lib/components/RichTextEditor/Toolbar/AnchorButton.js.map +0 -1
  118. package/lib/components/RichTextEditor/Toolbar/ImageButton.d.ts +0 -5
  119. package/lib/components/RichTextEditor/Toolbar/ImageButton.d.ts.map +0 -1
  120. package/lib/components/RichTextEditor/Toolbar/ImageButton.js +0 -30
  121. package/lib/components/RichTextEditor/Toolbar/ImageButton.js.map +0 -1
  122. package/lib/components/RichTextEditor/Toolbar/IndentButton.d.ts +0 -8
  123. package/lib/components/RichTextEditor/Toolbar/IndentButton.d.ts.map +0 -1
  124. package/lib/components/RichTextEditor/Toolbar/IndentButton.js +0 -31
  125. package/lib/components/RichTextEditor/Toolbar/IndentButton.js.map +0 -1
  126. package/lib/components/RichTextEditor/Toolbar/TableButton.d.ts +0 -5
  127. package/lib/components/RichTextEditor/Toolbar/TableButton.d.ts.map +0 -1
  128. package/lib/components/RichTextEditor/Toolbar/TableButton.js +0 -20
  129. package/lib/components/RichTextEditor/Toolbar/TableButton.js.map +0 -1
  130. package/lib/components/RichTextEditor/Toolbar/TextSelect.d.ts +0 -6
  131. package/lib/components/RichTextEditor/Toolbar/TextSelect.d.ts.map +0 -1
  132. package/lib/components/RichTextEditor/Toolbar/TextSelect.js +0 -119
  133. package/lib/components/RichTextEditor/Toolbar/TextSelect.js.map +0 -1
  134. package/lib/components/RichTextEditor/Toolbar/Toolbar.d.ts +0 -10
  135. package/lib/components/RichTextEditor/Toolbar/Toolbar.d.ts.map +0 -1
  136. package/lib/components/RichTextEditor/Toolbar/Toolbar.js +0 -155
  137. package/lib/components/RichTextEditor/Toolbar/Toolbar.js.map +0 -1
  138. package/lib/components/RichTextEditor/Toolbar/Toolbar.types.d.ts +0 -9
  139. package/lib/components/RichTextEditor/Toolbar/Toolbar.types.d.ts.map +0 -1
  140. package/lib/components/RichTextEditor/Toolbar/Toolbar.types.js +0 -2
  141. package/lib/components/RichTextEditor/Toolbar/Toolbar.types.js.map +0 -1
  142. package/lib/components/RichTextEditor/Toolbar/ToolbarButton.d.ts +0 -14
  143. package/lib/components/RichTextEditor/Toolbar/ToolbarButton.d.ts.map +0 -1
  144. package/lib/components/RichTextEditor/Toolbar/ToolbarButton.js +0 -67
  145. package/lib/components/RichTextEditor/Toolbar/ToolbarButton.js.map +0 -1
  146. package/lib/components/RichTextEditor/Toolbar/utils.d.ts +0 -7
  147. package/lib/components/RichTextEditor/Toolbar/utils.d.ts.map +0 -1
  148. package/lib/components/RichTextEditor/Toolbar/utils.js +0 -13
  149. package/lib/components/RichTextEditor/Toolbar/utils.js.map +0 -1
  150. package/lib/components/RichTextEditor/index.d.ts +0 -9
  151. package/lib/components/RichTextEditor/index.d.ts.map +0 -1
  152. package/lib/components/RichTextEditor/index.js +0 -6
  153. package/lib/components/RichTextEditor/index.js.map +0 -1
  154. package/lib/components/RichTextEditor/utils/EditorCommands.d.ts +0 -34
  155. package/lib/components/RichTextEditor/utils/EditorCommands.d.ts.map +0 -1
  156. package/lib/components/RichTextEditor/utils/EditorCommands.js +0 -447
  157. package/lib/components/RichTextEditor/utils/EditorCommands.js.map +0 -1
  158. package/lib/components/RichTextEditor/utils/ListCommands.d.ts +0 -10
  159. package/lib/components/RichTextEditor/utils/ListCommands.d.ts.map +0 -1
  160. package/lib/components/RichTextEditor/utils/ListCommands.js +0 -346
  161. package/lib/components/RichTextEditor/utils/ListCommands.js.map +0 -1
  162. package/lib/components/RichTextEditor/utils/htmlConverter.d.ts +0 -29
  163. package/lib/components/RichTextEditor/utils/htmlConverter.d.ts.map +0 -1
  164. package/lib/components/RichTextEditor/utils/htmlConverter.js +0 -156
  165. package/lib/components/RichTextEditor/utils/htmlConverter.js.map +0 -1
  166. package/lib/components/RichTextEditor/utils/interactionRenderer.d.ts +0 -6
  167. package/lib/components/RichTextEditor/utils/interactionRenderer.d.ts.map +0 -1
  168. package/lib/components/RichTextEditor/utils/interactionRenderer.js +0 -132
  169. package/lib/components/RichTextEditor/utils/interactionRenderer.js.map +0 -1
  170. package/lib/components/RichTextEditor/utils/markdownConverter.d.ts +0 -6
  171. package/lib/components/RichTextEditor/utils/markdownConverter.d.ts.map +0 -1
  172. package/lib/components/RichTextEditor/utils/markdownConverter.js +0 -130
  173. package/lib/components/RichTextEditor/utils/markdownConverter.js.map +0 -1
  174. package/lib/components/RichTextEditor/utils/renderers.d.ts +0 -22
  175. package/lib/components/RichTextEditor/utils/renderers.d.ts.map +0 -1
  176. package/lib/components/RichTextEditor/utils/renderers.js +0 -163
  177. package/lib/components/RichTextEditor/utils/renderers.js.map +0 -1
  178. package/lib/components/RichTextEditor/utils/search.d.ts +0 -11
  179. package/lib/components/RichTextEditor/utils/search.d.ts.map +0 -1
  180. package/lib/components/RichTextEditor/utils/search.js +0 -37
  181. package/lib/components/RichTextEditor/utils/search.js.map +0 -1
  182. package/lib/components/RichTextEditor/utils/slateConverter.d.ts +0 -25
  183. package/lib/components/RichTextEditor/utils/slateConverter.d.ts.map +0 -1
  184. package/lib/components/RichTextEditor/utils/slateConverter.js +0 -88
  185. package/lib/components/RichTextEditor/utils/slateConverter.js.map +0 -1
  186. package/lib/components/RichTextEditor/utils/utils.types.d.ts +0 -3
  187. package/lib/components/RichTextEditor/utils/utils.types.d.ts.map +0 -1
  188. package/lib/components/RichTextEditor/utils/utils.types.js +0 -3
  189. package/lib/components/RichTextEditor/utils/utils.types.js.map +0 -1
  190. package/lib/index.d.ts +0 -5
  191. package/lib/index.d.ts.map +0 -1
  192. package/lib/index.js +0 -6
  193. package/lib/index.js.map +0 -1
@@ -1,369 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import tinymce from 'tinymce/tinymce';
3
- import 'tinymce/icons/default';
4
- import 'tinymce/themes/silver';
5
- import 'tinymce/plugins/advlist';
6
- import 'tinymce/plugins/lists';
7
- import 'tinymce/plugins/autolink';
8
- import 'tinymce/models/dom';
9
- import { forwardRef, useEffect, useRef, useState, useLayoutEffect, useImperativeHandle, useCallback, useMemo } from 'react';
10
- import styled, { css } from 'styled-components';
11
- import { compile, serialize, stringify } from 'stylis';
12
- import { stripUnit } from 'polished';
13
- import { createUID, FormControl, FormField, useAfterInitialEffect, useTheme, useUID, useI18n, useConsolidatedRef, defaultThemeProp, useAutoResize, useConfiguration, useTestIds, withTestIds, documentIsAvailable, getActiveElement } from '@pega/cosmos-react-core';
14
- import { getHtmlStyles } from '@pega/cosmos-react-core/lib/components/HTML/HTML';
15
- import { createGlobalBodyStyles, createGlobalRootStyles, globalSpacingStyles } from '@pega/cosmos-react-core/lib/styles/GlobalStyle';
16
- import StyledRichTextEditor from '../RichTextEditor/RichTextEditor.styles';
17
- import Toolbar from './Toolbar/Toolbar';
18
- import EditorContext from './Editor.context';
19
- import { getTextFormats } from './Toolbar/TextSelect';
20
- import ImageEditor, { imgHoverClass } from './ImageEditor';
21
- import { offscreenSelectionStyles, placeholderStyles, mceContentBodyStyles, StyledEditorContainer } from './Editor.styles';
22
- import { getEditorTestIds } from './Editor.test-ids';
23
- const getFileFromUrl = async (url, name) => {
24
- const response = await fetch(url);
25
- const data = await response.blob();
26
- return new File([data], name, {
27
- type: data.type
28
- });
29
- };
30
- export const getImageStyles = (theme) => {
31
- return `
32
- img:hover,
33
- img.${imgHoverClass} {
34
- box-shadow: 0 0 0 0.06125rem ${theme.base.palette['primary-background']},
35
- 0 0 0 0.125rem ${theme.base.palette.interactive}, 0 0 0 0.25rem rgba(0, 118, 209, 0.3);
36
- }
37
- `;
38
- };
39
- export const StyledInnerEditor = styled.div(({ theme, showPlaceholder }) => {
40
- return css `
41
- ${showPlaceholder &&
42
- css `
43
- ::before {
44
- color: ${theme.base.colors.slate.medium};
45
- position: absolute;
46
- content: attr(data-mce-placeholder);
47
- }
48
- `}
49
- `;
50
- });
51
- StyledInnerEditor.defaultProps = defaultThemeProp;
52
- const Editor = forwardRef(function Editor(props, ref) {
53
- const { components: { 'text-area': { 'min-height': textAreaMinHeight } } } = useTheme();
54
- const theme = useTheme();
55
- const { styleSheetTarget } = useConfiguration();
56
- const [editor, setEditor] = useState();
57
- const [focused, setFocused] = useState(false);
58
- const t = useI18n();
59
- const uid = useUID();
60
- const labelId = useUID();
61
- const editorRef = useConsolidatedRef(ref);
62
- const tinyMceRef = useRef(null);
63
- const tinyMceContainerRef = useRef(null);
64
- const initialized = useRef(false);
65
- const { testId, id = uid, toolbar = [], label, labelHidden, info, status, required, disabled, readOnly, onChange, onKeyDown, onFocus, onBlur, onImageAdded, onInit, defaultValue, customComponents = [], height, customActions, placeholder, children, spellcheck = true, additionalInfo, ...restProps } = props;
66
- const testIds = useTestIds(testId, getEditorTestIds);
67
- const baseHeight = {
68
- min: height?.min ?? stripUnit(textAreaMinHeight) * 16,
69
- max: height?.max ?? undefined
70
- };
71
- const getHeight = (type) => {
72
- if (typeof baseHeight === 'number') {
73
- return stripUnit(baseHeight);
74
- }
75
- if (baseHeight[type]) {
76
- return stripUnit(baseHeight[type]);
77
- }
78
- return undefined;
79
- };
80
- const imagesEnabled = toolbar.includes('images');
81
- const maxHeight = getHeight('max');
82
- const minHeight = getHeight('min');
83
- const [autoResizeRef, resizeEditor] = useAutoResize(maxHeight, minHeight);
84
- const formFieldRef = useRef(null);
85
- const value = useRef(defaultValue);
86
- const renderToolbar = editor && toolbar.length > 0 && !readOnly && !disabled;
87
- const processPastedImgUrls = async (infoArr) => {
88
- const files = await Promise.all(infoArr.map(({ id: imgId, url }) => getFileFromUrl(url, imgId)));
89
- files.forEach((file, i) => {
90
- onImageAdded?.(file, infoArr[i].id);
91
- });
92
- };
93
- const pastePreprocess = (plugin, args) => {
94
- const isImg = args.content.includes('<img');
95
- if (!imagesEnabled && isImg) {
96
- args.content = args.content.replace(/<img(.*)\/>/g, '');
97
- }
98
- if (imagesEnabled && isImg) {
99
- const pastedHtml = new DOMParser().parseFromString(args.content, 'text/html').body;
100
- const imgInfo = [];
101
- pastedHtml.querySelectorAll('img').forEach(imgEl => {
102
- const imgId = createUID();
103
- const url = imgEl.src;
104
- imgInfo.push({ id: imgId, url });
105
- imgEl.setAttribute('id', imgId);
106
- imgEl.setAttribute('src', '');
107
- });
108
- args.content = pastedHtml.innerHTML;
109
- processPastedImgUrls(imgInfo);
110
- }
111
- };
112
- useImperativeHandle(editorRef, () => ({
113
- focus: () => {
114
- editor?.focus();
115
- },
116
- getPlainText: () => {
117
- return editor ? editor.getContent({ format: 'text' }) : '';
118
- },
119
- getRichText: () => {
120
- return editor ? JSON.stringify(editor.getContent({ format: 'raw' })) : '';
121
- },
122
- getHtml: () => {
123
- return editor ? editor.getContent({ format: 'html' }) : '';
124
- },
125
- clear: () => {
126
- editor?.setContent('');
127
- },
128
- appendImage: ({ src, alt }, imageId) => {
129
- if (editor) {
130
- const editorEl = editor.getDoc();
131
- const imageEl = editorEl.querySelector(`#${imageId}`);
132
- if (imageEl) {
133
- imageEl.setAttribute('src', src);
134
- imageEl.setAttribute('alt', alt);
135
- resizeEditor();
136
- }
137
- }
138
- },
139
- insertText: (text) => {
140
- let activeElement = null;
141
- if (documentIsAvailable) {
142
- activeElement = getActiveElement();
143
- }
144
- editor?.insertContent(text);
145
- if (activeElement)
146
- activeElement.focus();
147
- },
148
- setCursorLocationToStart: () => {
149
- editor?.selection.setCursorLocation();
150
- editor?.selection.getNode().scrollIntoView();
151
- },
152
- insertHtml: (html, overwrite = false) => {
153
- let activeElement = null;
154
- if (documentIsAvailable) {
155
- activeElement = getActiveElement();
156
- }
157
- if (overwrite) {
158
- editor?.setContent('');
159
- }
160
- editor?.insertContent(html);
161
- if (activeElement)
162
- activeElement.focus();
163
- },
164
- getEditor: () => {
165
- return editor;
166
- },
167
- element: formFieldRef.current || undefined
168
- }), [editor]);
169
- useLayoutEffect(() => {
170
- if (!tinyMceRef.current || !tinyMceContainerRef.current)
171
- return;
172
- const styles = serialize(compile(getHtmlStyles(theme)), stringify);
173
- const imageStyles = serialize(compile(getImageStyles(theme)), stringify);
174
- tinymce
175
- .init({
176
- readonly: readOnly || disabled,
177
- skin: false,
178
- target: tinyMceRef.current,
179
- toolbar: false,
180
- min_height: 60,
181
- height: 60,
182
- menubar: false,
183
- plugins: 'lists advlist autolink',
184
- paste_block_drop: true,
185
- paste_data_images: true,
186
- lists_indent_on_tab: true,
187
- icons: '',
188
- branding: false,
189
- elementpath: false,
190
- placeholder,
191
- content_css: false,
192
- browser_spellcheck: spellcheck,
193
- paste_preprocess: pastePreprocess,
194
- content_style: `${createGlobalRootStyles(theme)} ${globalSpacingStyles} ${createGlobalBodyStyles(theme)} body { min-height: 3rem; padding: ${theme.base.spacing}; } html { overflow: hidden; } ${offscreenSelectionStyles} ${mceContentBodyStyles} ${placeholderStyles} ${imageStyles} ${styles}`,
195
- init_instance_callback: initializedEditor => {
196
- const iframeWindow = (tinyMceContainerRef.current?.querySelector('iframe')).contentWindow;
197
- const editorCustomElements = iframeWindow?.customElements;
198
- if (editorCustomElements) {
199
- customComponents.forEach(({ name, createCustomElement: customElementCreator, style }) => {
200
- if (!editorCustomElements.get(name)) {
201
- editorCustomElements.define(name, customElementCreator(iframeWindow));
202
- }
203
- if (style) {
204
- const styleEl = document.createElement('style');
205
- styleEl.innerText = style;
206
- initializedEditor.getDoc().head.appendChild(styleEl);
207
- }
208
- });
209
- }
210
- },
211
- extended_valid_elements: `${customComponents
212
- .map(comp => `${comp.name}${comp.extensionAttributes ? `[${comp.extensionAttributes.join('|')}]` : ''}`)
213
- .join(',')}`,
214
- custom_elements: customComponents.map(comp => `~${comp.name}`).join('~,'),
215
- setup: editorSettings => {
216
- editorSettings.on('keydown', e => {
217
- onKeyDown?.(e);
218
- });
219
- getTextFormats().forEach((format, i) => {
220
- editorSettings.addShortcut(`meta+alt+${i}`, `${t('rte_change_text_format')} ${format.text}`, () => {
221
- editorSettings.execCommand('FormatBlock', false, format.type);
222
- });
223
- });
224
- editorSettings.addShortcut('meta+shift+b', t('rte_bold'), () => {
225
- editorSettings.execCommand('Bold');
226
- });
227
- editorSettings.addShortcut('meta+shift+i', t('rte_italic'), () => {
228
- editorSettings.execCommand('Italic');
229
- });
230
- editorSettings.addShortcut('meta+shift+x', t('rte_strike_through'), () => {
231
- editorSettings.execCommand('Strikethrough');
232
- });
233
- editorSettings.addShortcut('meta+shift+l', t('rte_toggle_unordered_list'), () => {
234
- editorSettings.execCommand('InsertUnorderedList');
235
- });
236
- editorSettings.addShortcut('alt+m', t('rte_indent_selection'), () => {
237
- editorSettings.execCommand('Indent');
238
- });
239
- editorSettings.addShortcut('alt+shift+m', t('rte_unindent_selection'), () => {
240
- editorSettings.execCommand('Outdent');
241
- });
242
- customActions?.forEach(action => {
243
- if (action.shortcut) {
244
- editorSettings.addShortcut(action.shortcut.pattern, action.shortcut.description, () => {
245
- action.shortcut?.command(editorSettings);
246
- });
247
- }
248
- });
249
- }
250
- })
251
- .then(tinymceEditors => {
252
- setEditor(tinymceEditors[0]);
253
- tinymceEditors[0].editorContainer?.setAttribute('style', '');
254
- const iframe = tinyMceContainerRef.current?.querySelector('iframe');
255
- if (iframe) {
256
- const globalStyles = styleSheetTarget?.querySelectorAll('[data-cosmos-global-style]') ??
257
- [];
258
- const extraStyles = document.querySelectorAll('[data-cosmos-global-style]') ?? [];
259
- const iframeContentHead = iframe?.contentDocument?.querySelector('head');
260
- [...globalStyles, ...extraStyles].forEach(sheet => {
261
- iframeContentHead?.appendChild(sheet.cloneNode(true));
262
- });
263
- autoResizeRef.current = iframe;
264
- resizeEditor();
265
- }
266
- });
267
- }, []);
268
- useEffect(() => {
269
- if (editor) {
270
- editor.options.set('paste_preprocess', pastePreprocess);
271
- }
272
- }, [imagesEnabled]);
273
- useEffect(() => {
274
- if (!editor || initialized.current)
275
- return;
276
- initialized.current = true;
277
- onInit?.(editor);
278
- }, [editor, onInit]);
279
- useEffect(() => {
280
- if (!editor)
281
- return;
282
- const onChangeEvents = ['input', 'paste', 'FormatApply', 'FormatRemove', 'ExecCommand'];
283
- const onEditorKeyDown = (event) => {
284
- resizeEditor();
285
- if (event.key === 'Enter') {
286
- editor.selection.getNode().scrollIntoView(false);
287
- }
288
- };
289
- const onEditorChange = (event) => {
290
- if (event.type !== 'execcommand' || event.command !== 'mceFocus') {
291
- onChange?.(editor);
292
- }
293
- };
294
- const onEditorFocus = () => {
295
- setFocused(true);
296
- onFocus?.();
297
- };
298
- const onEditorBlur = () => {
299
- setFocused(false);
300
- onBlur?.();
301
- };
302
- onChangeEvents.forEach(event => {
303
- editor.on(event, onEditorChange);
304
- });
305
- editor.on('keydown', onEditorKeyDown);
306
- editor.on('paste', resizeEditor);
307
- editor.on('focus', onEditorFocus);
308
- editor.on('blur', onEditorBlur);
309
- return () => {
310
- onChangeEvents.forEach(event => {
311
- editor.off(event, onEditorChange);
312
- });
313
- editor.off('keydown', onEditorKeyDown);
314
- editor.off('paste', resizeEditor);
315
- editor.off('focus', onEditorFocus);
316
- editor.off('blur', onEditorBlur);
317
- };
318
- }, [editor, onFocus, onBlur]);
319
- useAfterInitialEffect(() => {
320
- editor?.mode.set(readOnly || disabled ? 'readonly' : 'design');
321
- }, [readOnly, disabled]);
322
- const addImage = useCallback((image) => {
323
- if (editor) {
324
- const imageId = createUID();
325
- editor.insertContent(`<br/><img src='' id='${imageId}' style="max-width: 100%;"/><br/>`);
326
- onImageAdded?.(image, imageId);
327
- }
328
- }, [editor]);
329
- const ctx = useMemo(() => ({ addImage, editor: editor || {} }), [editor, addImage]);
330
- useEffect(() => {
331
- const onEditorDrop = (e) => {
332
- e.preventDefault();
333
- if (e.dataTransfer) {
334
- Array.from(e.dataTransfer.files).forEach(file => {
335
- if (file.type.includes('image') && imagesEnabled) {
336
- addImage(file);
337
- }
338
- });
339
- }
340
- };
341
- editor?.on('drop', onEditorDrop);
342
- const body = editor?.getDoc().body;
343
- const resizeObserver = new ResizeObserver(() => {
344
- resizeEditor();
345
- });
346
- if (body) {
347
- resizeObserver.observe(body);
348
- }
349
- return () => {
350
- editor?.off('drop', onEditorDrop);
351
- resizeObserver.disconnect();
352
- };
353
- }, [editor, resizeEditor]);
354
- return (_jsxs(EditorContext.Provider, { value: ctx, children: [_jsx(FormField, { testId: testIds, toolbar: renderToolbar, label:
355
- // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events
356
- _jsx("span", { onClick: () => {
357
- editor?.focus();
358
- }, children: label }), labelFor: '', labelId: labelId, labelHidden: labelHidden, id: id, info: info, status: status, required: required, disabled: disabled, readOnly: readOnly, onFocus: (e) => {
359
- if (e.target === formFieldRef.current && !disabled) {
360
- editor?.focus();
361
- }
362
- }, ref: formFieldRef, tabIndex: disabled ? -1 : undefined, additionalInfo: additionalInfo, children: _jsxs(FormControl, { ...restProps, ref: editorRef, required: required, disabled: disabled, readOnly: readOnly, status: status, as: StyledRichTextEditor, focused: focused, tabIndex: readOnly ? 0 : undefined, children: [_jsxs(StyledEditorContainer, { onClick: () => {
363
- if (!disabled) {
364
- editor?.focus();
365
- }
366
- }, ref: tinyMceContainerRef, children: [_jsx("textarea", { id: id, value: value.current || '', onChange: () => { }, "aria-label": `${label}${renderToolbar ? `. ${t('rte_toolbar_instructions')}.` : ''}`, "aria-labelledby": labelId, ref: tinyMceRef }), tinyMceContainerRef.current && editor && !readOnly && (_jsx(ImageEditor, { editor: editor, editorEl: tinyMceContainerRef.current, onChange: () => onChange?.(editor) }))] }), renderToolbar && (_jsx(Toolbar, { testId: testIds, features: toolbar, editor: editor, customActions: customActions }))] }) }), children] }));
367
- });
368
- export default withTestIds(Editor, getEditorTestIds);
369
- //# sourceMappingURL=Editor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Editor.js","sourceRoot":"","sources":["../../../src/components/Editor/Editor.tsx"],"names":[],"mappings":"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","sourcesContent":["import tinymce, { Editor as TinymceEditor, EditorEvent } from 'tinymce/tinymce';\nimport 'tinymce/icons/default';\nimport 'tinymce/themes/silver';\nimport 'tinymce/plugins/advlist';\nimport 'tinymce/plugins/lists';\nimport 'tinymce/plugins/autolink';\nimport 'tinymce/models/dom';\nimport {\n FC,\n forwardRef,\n PropsWithoutRef,\n useEffect,\n useRef,\n useState,\n useLayoutEffect,\n useImperativeHandle,\n FocusEvent,\n useCallback,\n useMemo\n} from 'react';\nimport styled, { css, DefaultTheme } from 'styled-components';\nimport { compile, serialize, stringify } from 'stylis';\nimport { stripUnit } from 'polished';\n\nimport {\n createUID,\n FormControl,\n FormField,\n ForwardProps,\n useAfterInitialEffect,\n useTheme,\n useUID,\n useI18n,\n useConsolidatedRef,\n defaultThemeProp,\n useAutoResize,\n useConfiguration,\n useTestIds,\n withTestIds,\n documentIsAvailable,\n getActiveElement\n} from '@pega/cosmos-react-core';\nimport { getHtmlStyles } from '@pega/cosmos-react-core/lib/components/HTML/HTML';\nimport {\n createGlobalBodyStyles,\n createGlobalRootStyles,\n globalSpacingStyles\n} from '@pega/cosmos-react-core/lib/styles/GlobalStyle';\n\nimport StyledRichTextEditor from '../RichTextEditor/RichTextEditor.styles';\n\nimport Toolbar from './Toolbar/Toolbar';\nimport EditorContext from './Editor.context';\nimport { getTextFormats } from './Toolbar/TextSelect';\nimport { EditorProps, EditorState } from './Editor.types';\nimport ImageEditor, { imgHoverClass } from './ImageEditor';\nimport {\n offscreenSelectionStyles,\n placeholderStyles,\n mceContentBodyStyles,\n StyledEditorContainer\n} from './Editor.styles';\nimport { getEditorTestIds } from './Editor.test-ids';\n\ntype ImageInfoArray = { id: string; url: string }[];\n\nconst getFileFromUrl = async (url: string, name: string) => {\n const response = await fetch(url);\n const data = await response.blob();\n return new File([data], name, {\n type: data.type\n });\n};\n\nexport const getImageStyles = (theme: DefaultTheme) => {\n return `\n img:hover,\n img.${imgHoverClass} {\n box-shadow: 0 0 0 0.06125rem ${theme.base.palette['primary-background']},\n 0 0 0 0.125rem ${theme.base.palette.interactive}, 0 0 0 0.25rem rgba(0, 118, 209, 0.3);\n }\n `;\n};\n\nexport const StyledInnerEditor = styled.div<{ showPlaceholder: boolean }>(\n ({ theme, showPlaceholder }) => {\n return css`\n ${showPlaceholder &&\n css`\n ::before {\n color: ${theme.base.colors.slate.medium};\n position: absolute;\n content: attr(data-mce-placeholder);\n }\n `}\n `;\n }\n);\n\nStyledInnerEditor.defaultProps = defaultThemeProp;\n\nconst Editor: FC<EditorProps & ForwardProps> = forwardRef(function Editor(\n props: PropsWithoutRef<EditorProps> & ForwardProps,\n ref: EditorProps['ref']\n) {\n const {\n components: {\n 'text-area': { 'min-height': textAreaMinHeight }\n }\n } = useTheme();\n const theme = useTheme();\n const { styleSheetTarget } = useConfiguration();\n const [editor, setEditor] = useState<TinymceEditor>();\n const [focused, setFocused] = useState(false);\n const t = useI18n();\n const uid = useUID();\n const labelId = useUID();\n const editorRef = useConsolidatedRef(ref);\n const tinyMceRef = useRef<HTMLTextAreaElement>(null);\n const tinyMceContainerRef = useRef<HTMLDivElement>(null);\n const initialized = useRef(false);\n\n const {\n testId,\n id = uid,\n toolbar = [],\n label,\n labelHidden,\n info,\n status,\n required,\n disabled,\n readOnly,\n onChange,\n onKeyDown,\n onFocus,\n onBlur,\n onImageAdded,\n onInit,\n defaultValue,\n customComponents = [],\n height,\n customActions,\n placeholder,\n children,\n spellcheck = true,\n additionalInfo,\n ...restProps\n } = props;\n\n const testIds = useTestIds(testId, getEditorTestIds);\n\n const baseHeight: EditorProps['height'] = {\n min: height?.min ?? (stripUnit(textAreaMinHeight) as number) * 16,\n max: height?.max ?? undefined\n };\n const getHeight = (type: 'max' | 'min') => {\n if (typeof baseHeight === 'number') {\n return stripUnit(baseHeight) as number;\n }\n if (baseHeight[type]) {\n return stripUnit(baseHeight[type] as number) as number;\n }\n return undefined;\n };\n\n const imagesEnabled = toolbar.includes('images');\n const maxHeight = getHeight('max');\n const minHeight = getHeight('min');\n const [autoResizeRef, resizeEditor] = useAutoResize<HTMLIFrameElement>(maxHeight, minHeight);\n const formFieldRef = useRef<HTMLElement>(null);\n const value = useRef(defaultValue);\n const renderToolbar = editor && toolbar.length > 0 && !readOnly && !disabled;\n\n const processPastedImgUrls = async (infoArr: ImageInfoArray) => {\n const files = await Promise.all(\n infoArr.map(({ id: imgId, url }) => getFileFromUrl(url, imgId))\n );\n files.forEach((file, i) => {\n onImageAdded?.(file, infoArr[i].id);\n });\n };\n\n const pastePreprocess = (plugin: unknown, args: { content: string }) => {\n const isImg = args.content.includes('<img');\n if (!imagesEnabled && isImg) {\n args.content = args.content.replace(/<img(.*)\\/>/g, '');\n }\n if (imagesEnabled && isImg) {\n const pastedHtml: HTMLElement = new DOMParser().parseFromString(\n args.content,\n 'text/html'\n ).body;\n const imgInfo: ImageInfoArray = [];\n pastedHtml.querySelectorAll('img').forEach(imgEl => {\n const imgId = createUID();\n const url = imgEl.src;\n imgInfo.push({ id: imgId, url });\n imgEl.setAttribute('id', imgId);\n imgEl.setAttribute('src', '');\n });\n args.content = pastedHtml.innerHTML;\n processPastedImgUrls(imgInfo);\n }\n };\n\n useImperativeHandle<any, EditorState>(\n editorRef,\n () => ({\n focus: () => {\n editor?.focus();\n },\n getPlainText: () => {\n return editor ? editor.getContent({ format: 'text' }) : '';\n },\n getRichText: () => {\n return editor ? JSON.stringify(editor.getContent({ format: 'raw' })) : '';\n },\n getHtml: () => {\n return editor ? editor.getContent({ format: 'html' }) : '';\n },\n clear: () => {\n editor?.setContent('');\n },\n appendImage: ({ src, alt }, imageId) => {\n if (editor) {\n const editorEl = editor.getDoc();\n const imageEl = editorEl.querySelector(`#${imageId}`);\n if (imageEl) {\n imageEl.setAttribute('src', src);\n imageEl.setAttribute('alt', alt);\n resizeEditor();\n }\n }\n },\n insertText: (text: string) => {\n let activeElement: Element | null = null;\n if (documentIsAvailable) {\n activeElement = getActiveElement();\n }\n editor?.insertContent(text);\n\n if (activeElement) (activeElement as HTMLElement).focus();\n },\n setCursorLocationToStart: () => {\n editor?.selection.setCursorLocation();\n editor?.selection.getNode().scrollIntoView();\n },\n insertHtml: (html: string, overwrite: boolean = false) => {\n let activeElement: Element | null = null;\n if (documentIsAvailable) {\n activeElement = getActiveElement();\n }\n if (overwrite) {\n editor?.setContent('');\n }\n editor?.insertContent(html);\n\n if (activeElement) (activeElement as HTMLElement).focus();\n },\n getEditor: () => {\n return editor;\n },\n element: formFieldRef.current || undefined\n }),\n [editor]\n );\n\n useLayoutEffect(() => {\n if (!tinyMceRef.current || !tinyMceContainerRef.current) return;\n const styles = serialize(compile(getHtmlStyles(theme)), stringify);\n const imageStyles = serialize(compile(getImageStyles(theme)), stringify);\n tinymce\n .init({\n readonly: readOnly || disabled,\n skin: false,\n target: tinyMceRef.current,\n toolbar: false,\n min_height: 60,\n height: 60,\n menubar: false,\n plugins: 'lists advlist autolink',\n paste_block_drop: true,\n paste_data_images: true,\n lists_indent_on_tab: true,\n icons: '',\n branding: false,\n elementpath: false,\n placeholder,\n content_css: false,\n browser_spellcheck: spellcheck,\n paste_preprocess: pastePreprocess,\n content_style: `${createGlobalRootStyles(\n theme\n )} ${globalSpacingStyles} ${createGlobalBodyStyles(\n theme\n )} body { min-height: 3rem; padding: ${\n theme.base.spacing\n }; } html { overflow: hidden; } ${offscreenSelectionStyles} ${mceContentBodyStyles} ${placeholderStyles} ${imageStyles} ${styles}`,\n init_instance_callback: initializedEditor => {\n const iframeWindow = (\n tinyMceContainerRef.current?.querySelector('iframe') as HTMLIFrameElement\n ).contentWindow;\n const editorCustomElements = iframeWindow?.customElements;\n if (editorCustomElements) {\n customComponents.forEach(\n ({ name, createCustomElement: customElementCreator, style }) => {\n if (!editorCustomElements.get(name)) {\n editorCustomElements.define(\n name,\n customElementCreator(iframeWindow as unknown as typeof globalThis)\n );\n }\n if (style) {\n const styleEl = document.createElement('style');\n styleEl.innerText = style;\n initializedEditor.getDoc().head.appendChild(styleEl);\n }\n }\n );\n }\n },\n extended_valid_elements: `${customComponents\n .map(\n comp =>\n `${comp.name}${\n comp.extensionAttributes ? `[${comp.extensionAttributes.join('|')}]` : ''\n }`\n )\n .join(',')}`,\n custom_elements: customComponents.map(comp => `~${comp.name}`).join('~,'),\n setup: editorSettings => {\n editorSettings.on('keydown', e => {\n onKeyDown?.(e);\n });\n getTextFormats().forEach((format, i) => {\n editorSettings.addShortcut(\n `meta+alt+${i}`,\n `${t('rte_change_text_format')} ${format.text}`,\n () => {\n editorSettings.execCommand('FormatBlock', false, format.type);\n }\n );\n });\n editorSettings.addShortcut('meta+shift+b', t('rte_bold'), () => {\n editorSettings.execCommand('Bold');\n });\n editorSettings.addShortcut('meta+shift+i', t('rte_italic'), () => {\n editorSettings.execCommand('Italic');\n });\n editorSettings.addShortcut('meta+shift+x', t('rte_strike_through'), () => {\n editorSettings.execCommand('Strikethrough');\n });\n editorSettings.addShortcut('meta+shift+l', t('rte_toggle_unordered_list'), () => {\n editorSettings.execCommand('InsertUnorderedList');\n });\n editorSettings.addShortcut('alt+m', t('rte_indent_selection'), () => {\n editorSettings.execCommand('Indent');\n });\n editorSettings.addShortcut('alt+shift+m', t('rte_unindent_selection'), () => {\n editorSettings.execCommand('Outdent');\n });\n customActions?.forEach(action => {\n if (action.shortcut) {\n editorSettings.addShortcut(\n action.shortcut.pattern,\n action.shortcut.description,\n () => {\n action.shortcut?.command(editorSettings);\n }\n );\n }\n });\n }\n })\n .then(tinymceEditors => {\n setEditor(tinymceEditors[0]);\n tinymceEditors[0].editorContainer?.setAttribute('style', '');\n const iframe = tinyMceContainerRef.current?.querySelector('iframe');\n if (iframe) {\n const globalStyles =\n styleSheetTarget?.querySelectorAll('[data-cosmos-global-style]') ??\n ([] as HTMLElement[]);\n const extraStyles =\n document.querySelectorAll('[data-cosmos-global-style]') ?? ([] as HTMLElement[]);\n const iframeContentHead = iframe?.contentDocument?.querySelector('head');\n [...globalStyles, ...extraStyles].forEach(sheet => {\n iframeContentHead?.appendChild(sheet.cloneNode(true));\n });\n autoResizeRef.current = iframe;\n resizeEditor();\n }\n });\n }, []);\n\n useEffect(() => {\n if (editor) {\n editor.options.set('paste_preprocess', pastePreprocess);\n }\n }, [imagesEnabled]);\n\n useEffect(() => {\n if (!editor || initialized.current) return;\n initialized.current = true;\n onInit?.(editor);\n }, [editor, onInit]);\n\n useEffect(() => {\n if (!editor) return;\n const onChangeEvents = ['input', 'paste', 'FormatApply', 'FormatRemove', 'ExecCommand'];\n const onEditorKeyDown = (event: EditorEvent<KeyboardEvent>) => {\n resizeEditor();\n if (event.key === 'Enter') {\n editor.selection.getNode().scrollIntoView(false);\n }\n };\n const onEditorChange = (event: EditorEvent<Event & { command?: string }>) => {\n if (event.type !== 'execcommand' || event.command !== 'mceFocus') {\n onChange?.(editor);\n }\n };\n const onEditorFocus = () => {\n setFocused(true);\n onFocus?.();\n };\n const onEditorBlur = () => {\n setFocused(false);\n onBlur?.();\n };\n onChangeEvents.forEach(event => {\n editor.on(event, onEditorChange);\n });\n editor.on('keydown', onEditorKeyDown);\n editor.on('paste', resizeEditor);\n editor.on('focus', onEditorFocus);\n editor.on('blur', onEditorBlur);\n return () => {\n onChangeEvents.forEach(event => {\n editor.off(event, onEditorChange);\n });\n editor.off('keydown', onEditorKeyDown);\n editor.off('paste', resizeEditor);\n editor.off('focus', onEditorFocus);\n editor.off('blur', onEditorBlur);\n };\n }, [editor, onFocus, onBlur]);\n\n useAfterInitialEffect(() => {\n editor?.mode.set(readOnly || disabled ? 'readonly' : 'design');\n }, [readOnly, disabled]);\n\n const addImage = useCallback(\n (image: File) => {\n if (editor) {\n const imageId = createUID();\n editor.insertContent(`<br/><img src='' id='${imageId}' style=\"max-width: 100%;\"/><br/>`);\n onImageAdded?.(image, imageId);\n }\n },\n [editor]\n );\n\n const ctx = useMemo(\n () => ({ addImage, editor: editor || ({} as TinymceEditor) }),\n [editor, addImage]\n );\n\n useEffect(() => {\n const onEditorDrop = (e: DragEvent) => {\n e.preventDefault();\n if (e.dataTransfer) {\n Array.from(e.dataTransfer.files).forEach(file => {\n if (file.type.includes('image') && imagesEnabled) {\n addImage(file);\n }\n });\n }\n };\n editor?.on('drop', onEditorDrop);\n const body = editor?.getDoc().body;\n const resizeObserver = new ResizeObserver(() => {\n resizeEditor();\n });\n if (body) {\n resizeObserver.observe(body);\n }\n return () => {\n editor?.off('drop', onEditorDrop);\n resizeObserver.disconnect();\n };\n }, [editor, resizeEditor]);\n\n return (\n <EditorContext.Provider value={ctx}>\n <FormField\n testId={testIds}\n toolbar={renderToolbar}\n label={\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events\n <span\n onClick={() => {\n editor?.focus();\n }}\n >\n {label}\n </span>\n }\n labelFor=''\n labelId={labelId}\n labelHidden={labelHidden}\n id={id}\n info={info}\n status={status}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n onFocus={(e: FocusEvent) => {\n if (e.target === formFieldRef.current && !disabled) {\n editor?.focus();\n }\n }}\n ref={formFieldRef}\n tabIndex={disabled ? -1 : undefined}\n additionalInfo={additionalInfo}\n >\n <FormControl\n {...restProps}\n ref={editorRef}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n status={status}\n as={StyledRichTextEditor}\n focused={focused}\n tabIndex={readOnly ? 0 : undefined}\n >\n <StyledEditorContainer\n onClick={() => {\n if (!disabled) {\n editor?.focus();\n }\n }}\n ref={tinyMceContainerRef}\n >\n <textarea\n id={id}\n value={value.current || ''}\n onChange={() => {}}\n aria-label={`${label}${renderToolbar ? `. ${t('rte_toolbar_instructions')}.` : ''}`}\n aria-labelledby={labelId}\n ref={tinyMceRef}\n />\n {tinyMceContainerRef.current && editor && !readOnly && (\n <ImageEditor\n editor={editor}\n editorEl={tinyMceContainerRef.current}\n onChange={() => onChange?.(editor)}\n />\n )}\n </StyledEditorContainer>\n {renderToolbar && (\n <Toolbar\n testId={testIds}\n features={toolbar}\n editor={editor}\n customActions={customActions}\n />\n )}\n </FormControl>\n </FormField>\n {children}\n </EditorContext.Provider>\n );\n});\n\nexport default withTestIds(Editor, getEditorTestIds);\n"]}
@@ -1,5 +0,0 @@
1
- export declare const offscreenSelectionStyles = "\n .mce-offscreen-selection {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n whiteSpace: nowrap;\n width: 1px;\n }\n";
2
- export declare const mceContentBodyStyles = "\n .mce-content-body {\n overflow-wrap: break-word;\n }\n";
3
- export declare const placeholderStyles = "\n .mce-content-body[data-mce-placeholder] {\n position: relative;\n }\n .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {\n cursor: text;\n color: rgb(117, 117, 117);\n content: attr(data-mce-placeholder);\n position: absolute;\n }\n";
4
- export declare const StyledEditorContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
5
- //# sourceMappingURL=Editor.styles.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Editor.styles.d.ts","sourceRoot":"","sources":["../../../src/components/Editor/Editor.styles.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,wBAAwB,oOAYpC,CAAC;AAEF,eAAO,MAAM,oBAAoB,mEAIhC,CAAC;AAEF,eAAO,MAAM,iBAAiB,yRAU7B,CAAC;AAEF,eAAO,MAAM,qBAAqB,yGAgBhC,CAAC"}
@@ -1,50 +0,0 @@
1
- import styled, { css } from 'styled-components';
2
- import { defaultThemeProp } from '@pega/cosmos-react-core';
3
- export const offscreenSelectionStyles = `
4
- .mce-offscreen-selection {
5
- border: 0;
6
- clip: rect(0 0 0 0);
7
- height: 1px;
8
- margin: -1px;
9
- overflow: hidden;
10
- padding: 0;
11
- position: absolute;
12
- whiteSpace: nowrap;
13
- width: 1px;
14
- }
15
- `;
16
- export const mceContentBodyStyles = `
17
- .mce-content-body {
18
- overflow-wrap: break-word;
19
- }
20
- `;
21
- export const placeholderStyles = `
22
- .mce-content-body[data-mce-placeholder] {
23
- position: relative;
24
- }
25
- .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {
26
- cursor: text;
27
- color: rgb(117, 117, 117);
28
- content: attr(data-mce-placeholder);
29
- position: absolute;
30
- }
31
- `;
32
- export const StyledEditorContainer = styled.div(({ theme }) => {
33
- return css `
34
- &:hover {
35
- cursor: text;
36
- }
37
-
38
- iframe {
39
- display: block;
40
- width: 100%;
41
- height: ${theme.components['text-area']['min-height']};
42
- }
43
-
44
- .tox-statusbar {
45
- display: none !important;
46
- }
47
- `;
48
- });
49
- StyledEditorContainer.defaultProps = defaultThemeProp;
50
- //# sourceMappingURL=Editor.styles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Editor.styles.js","sourceRoot":"","sources":["../../../src/components/Editor/Editor.styles.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;CAYvC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;CAInC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;CAUhC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5D,OAAO,GAAG,CAAA;;;;;;;;gBAQI,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC;;;;;;GAMxD,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,qBAAqB,CAAC,YAAY,GAAG,gBAAgB,CAAC","sourcesContent":["import styled, { css } from 'styled-components';\n\nimport { defaultThemeProp } from '@pega/cosmos-react-core';\n\nexport const offscreenSelectionStyles = `\n .mce-offscreen-selection {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n whiteSpace: nowrap;\n width: 1px;\n }\n`;\n\nexport const mceContentBodyStyles = `\n .mce-content-body {\n overflow-wrap: break-word;\n }\n`;\n\nexport const placeholderStyles = `\n .mce-content-body[data-mce-placeholder] {\n position: relative;\n }\n .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {\n cursor: text;\n color: rgb(117, 117, 117);\n content: attr(data-mce-placeholder);\n position: absolute;\n }\n`;\n\nexport const StyledEditorContainer = styled.div(({ theme }) => {\n return css`\n &:hover {\n cursor: text;\n }\n\n iframe {\n display: block;\n width: 100%;\n height: ${theme.components['text-area']['min-height']};\n }\n\n .tox-statusbar {\n display: none !important;\n }\n `;\n});\n\nStyledEditorContainer.defaultProps = defaultThemeProp;\n"]}
@@ -1,2 +0,0 @@
1
- export declare const getEditorTestIds: (testIdProp?: string | undefined) => import("@pega/cosmos-react-core").TestIdsRecord<readonly ["toolbar", "text-styles", "bold", "italic", "strike-through", "bulleted-list", "numbered-list", "indent", "unindent", "link", "image", "label", "info", "additional-info", "suggestion-accept", "suggestion-reject"]>;
2
- //# sourceMappingURL=Editor.test-ids.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Editor.test-ids.d.ts","sourceRoot":"","sources":["../../../src/components/Editor/Editor.test-ids.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gBAAgB,sTAGlB,CAAC"}
@@ -1,8 +0,0 @@
1
- import { createTestIds } from '@pega/cosmos-react-core';
2
- import { elements as formFieldTestIdElements } from '@pega/cosmos-react-core/lib/components/FormField/FormField.test-ids';
3
- import { elements as toolbarTestIdElements } from './Toolbar/Toolbar.test-ids';
4
- export const getEditorTestIds = createTestIds('editor', [
5
- ...toolbarTestIdElements,
6
- ...formFieldTestIdElements
7
- ]);
8
- //# sourceMappingURL=Editor.test-ids.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Editor.test-ids.js","sourceRoot":"","sources":["../../../src/components/Editor/Editor.test-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,qEAAqE,CAAC;AAE1H,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAE/E,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC,QAAQ,EAAE;IACtD,GAAG,qBAAqB;IACxB,GAAG,uBAAuB;CAClB,CAAC,CAAC","sourcesContent":["import { createTestIds } from '@pega/cosmos-react-core';\nimport { elements as formFieldTestIdElements } from '@pega/cosmos-react-core/lib/components/FormField/FormField.test-ids';\n\nimport { elements as toolbarTestIdElements } from './Toolbar/Toolbar.test-ids';\n\nexport const getEditorTestIds = createTestIds('editor', [\n ...toolbarTestIdElements,\n ...formFieldTestIdElements\n] as const);\n"]}
@@ -1,69 +0,0 @@
1
- import { ReactNode, Ref, MouseEvent as ReactMouseEvent, KeyboardEvent as ReactKeyboardEvent } from 'react';
2
- import { Editor as TinymceEditor } from 'tinymce/tinymce';
3
- import { Action, BaseProps, FormControlProps, TestIdProp } from '@pega/cosmos-react-core';
4
- import { Features } from '../RichTextEditor/Toolbar/Toolbar.types';
5
- import { RichTextEditorState } from '../RichTextEditor';
6
- export type EditorState = RichTextEditorState & {
7
- getEditor: () => TinymceEditor | undefined;
8
- element?: HTMLElement;
9
- setCursorLocationToStart?: () => void;
10
- };
11
- export type CustomAction = {
12
- text: Action['text'];
13
- icon: NonNullable<Action['icon']>;
14
- onMouseDown: (e: ReactMouseEvent | ReactKeyboardEvent) => void;
15
- active?: (editor: TinymceEditor) => void;
16
- shortcut?: {
17
- pattern: string;
18
- description: string;
19
- command: (editor: TinymceEditor) => void;
20
- };
21
- 'data-testid'?: string;
22
- };
23
- export type CustomComponent = {
24
- createCustomElement: (window: typeof globalThis) => CustomElementConstructor;
25
- name: string;
26
- extensionAttributes?: string[];
27
- style?: string;
28
- };
29
- export interface EditorProps extends FormControlProps, BaseProps, TestIdProp {
30
- /** An array of strings that activate features on the toolbar */
31
- toolbar?: Features[];
32
- /** Children content */
33
- children?: ReactNode;
34
- /** A callback that supplies an object with functions that can manipulate the editor and retrieve it's content/state */
35
- onChange?: (editor?: TinymceEditor) => void;
36
- /** KeyDown event custom handlers for the editor */
37
- onKeyDown?: (event?: KeyboardEvent) => void;
38
- /** A callback that runs if the editor is focused */
39
- onFocus?: () => void;
40
- /** A callback that runs if the editor loses focus */
41
- onBlur?: () => void;
42
- /** A callback when an image is added through the toolbar image feature */
43
- onImageAdded?: (image: File, id: string) => void;
44
- /** A callback for when tinymce is finished initializing */
45
- onInit?: (editor: TinymceEditor) => void;
46
- /** Standard placeholder for an input */
47
- placeholder?: string;
48
- /** Default value for the RTE - HTML String */
49
- defaultValue?: string;
50
- /** Will automatically focus the RTE on render if true */
51
- autoFocus?: boolean;
52
- /** Sets the height for the RTE. If no max height is set the RTE will continue to expand, otherwise an overflow will be applied */
53
- height?: {
54
- min?: number;
55
- max?: number;
56
- };
57
- /** An array of custom components, custom components must use web component API */
58
- customComponents?: CustomComponent[];
59
- /** An array of custom buttons to be inserted into the toolbar */
60
- customActions?: CustomAction[];
61
- /**
62
- * Enables browser spellcheck.
63
- * @default true
64
- */
65
- spellcheck?: boolean;
66
- /** Handle to the state. */
67
- ref?: Ref<EditorState>;
68
- }
69
- //# sourceMappingURL=Editor.types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Editor.types.d.ts","sourceRoot":"","sources":["../../../src/components/Editor/Editor.types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=Editor.types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Editor.types.js","sourceRoot":"","sources":["../../../src/components/Editor/Editor.types.ts"],"names":[],"mappings":"","sourcesContent":["import {\n ReactNode,\n Ref,\n MouseEvent as ReactMouseEvent,\n KeyboardEvent as ReactKeyboardEvent\n} from 'react';\nimport { Editor as TinymceEditor } from 'tinymce/tinymce';\n\nimport { Action, BaseProps, FormControlProps, TestIdProp } from '@pega/cosmos-react-core';\n\nimport { Features } from '../RichTextEditor/Toolbar/Toolbar.types';\nimport { RichTextEditorState } from '../RichTextEditor';\n\nexport type EditorState = RichTextEditorState & {\n getEditor: () => TinymceEditor | undefined;\n element?: HTMLElement;\n setCursorLocationToStart?: () => void;\n};\n\nexport type CustomAction = {\n text: Action['text'];\n icon: NonNullable<Action['icon']>;\n onMouseDown: (e: ReactMouseEvent | ReactKeyboardEvent) => void;\n active?: (editor: TinymceEditor) => void;\n shortcut?: { pattern: string; description: string; command: (editor: TinymceEditor) => void };\n 'data-testid'?: string;\n};\n\nexport type CustomComponent = {\n createCustomElement: (window: typeof globalThis) => CustomElementConstructor;\n name: string;\n extensionAttributes?: string[];\n style?: string;\n};\n\nexport interface EditorProps extends FormControlProps, BaseProps, TestIdProp {\n /** An array of strings that activate features on the toolbar */\n toolbar?: Features[];\n /** Children content */\n children?: ReactNode;\n /** A callback that supplies an object with functions that can manipulate the editor and retrieve it's content/state */\n onChange?: (editor?: TinymceEditor) => void;\n /** KeyDown event custom handlers for the editor */\n onKeyDown?: (event?: KeyboardEvent) => void;\n /** A callback that runs if the editor is focused */\n onFocus?: () => void;\n /** A callback that runs if the editor loses focus */\n onBlur?: () => void;\n /** A callback when an image is added through the toolbar image feature */\n onImageAdded?: (image: File, id: string) => void;\n /** A callback for when tinymce is finished initializing */\n onInit?: (editor: TinymceEditor) => void;\n /** Standard placeholder for an input */\n placeholder?: string;\n /** Default value for the RTE - HTML String */\n defaultValue?: string;\n /** Will automatically focus the RTE on render if true */\n autoFocus?: boolean;\n /** Sets the height for the RTE. If no max height is set the RTE will continue to expand, otherwise an overflow will be applied */\n height?: {\n min?: number;\n max?: number;\n };\n /** An array of custom components, custom components must use web component API */\n customComponents?: CustomComponent[];\n /** An array of custom buttons to be inserted into the toolbar */\n customActions?: CustomAction[];\n /**\n * Enables browser spellcheck.\n * @default true\n */\n spellcheck?: boolean;\n /** Handle to the state. */\n ref?: Ref<EditorState>;\n}\n"]}
@@ -1,10 +0,0 @@
1
- import { FC } from 'react';
2
- import { Editor } from 'tinymce';
3
- export declare const imgHoverClass: string;
4
- declare const ImageEditor: FC<{
5
- editorEl: HTMLElement;
6
- editor: Editor;
7
- onChange: () => void;
8
- }>;
9
- export default ImageEditor;
10
- //# sourceMappingURL=ImageEditor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ImageEditor.d.ts","sourceRoot":"","sources":["../../../src/components/Editor/ImageEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,EAAE,EAQH,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AA6BjC,eAAO,MAAM,aAAa,QAAc,CAAC;AAEzC,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;CAAE,CA2YpF,CAAC;AAEF,eAAe,WAAW,CAAC"}