@alpaca-editor/core 1.0.3992 → 1.0.3995

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 (190) hide show
  1. package/dist/components/ui/copy-button.d.ts +10 -0
  2. package/dist/components/ui/copy-button.js +33 -0
  3. package/dist/components/ui/copy-button.js.map +1 -0
  4. package/dist/components/ui/sonner.d.ts +3 -0
  5. package/dist/components/ui/sonner.js +14 -0
  6. package/dist/components/ui/sonner.js.map +1 -0
  7. package/dist/config/config.js +4 -16
  8. package/dist/config/config.js.map +1 -1
  9. package/dist/config/types.d.ts +6 -3
  10. package/dist/editor/ComponentInfo.js +2 -2
  11. package/dist/editor/ComponentInfo.js.map +1 -1
  12. package/dist/editor/ContentTree.d.ts +2 -1
  13. package/dist/editor/ContentTree.js +4 -8
  14. package/dist/editor/ContentTree.js.map +1 -1
  15. package/dist/editor/FieldListField.js +3 -10
  16. package/dist/editor/FieldListField.js.map +1 -1
  17. package/dist/editor/ItemInfo.js +3 -3
  18. package/dist/editor/ItemInfo.js.map +1 -1
  19. package/dist/editor/ai/Agents.d.ts +6 -0
  20. package/dist/editor/ai/Agents.js +48 -0
  21. package/dist/editor/ai/Agents.js.map +1 -0
  22. package/dist/editor/ai/AiTerminal.js +4 -2
  23. package/dist/editor/ai/AiTerminal.js.map +1 -1
  24. package/dist/editor/client/EditorClient.js +48 -91
  25. package/dist/editor/client/EditorClient.js.map +1 -1
  26. package/dist/editor/client/editContext.d.ts +3 -2
  27. package/dist/editor/client/editContext.js.map +1 -1
  28. package/dist/editor/commands/itemCommands.js +5 -24
  29. package/dist/editor/commands/itemCommands.js.map +1 -1
  30. package/dist/editor/component-designer/ComponentEditor.js +3 -5
  31. package/dist/editor/component-designer/ComponentEditor.js.map +1 -1
  32. package/dist/editor/field-types/InternalLinkFieldEditor.js +20 -25
  33. package/dist/editor/field-types/InternalLinkFieldEditor.js.map +1 -1
  34. package/dist/editor/field-types/RichTextEditor.d.ts +4 -3
  35. package/dist/editor/field-types/RichTextEditor.js +16 -3
  36. package/dist/editor/field-types/RichTextEditor.js.map +1 -1
  37. package/dist/editor/field-types/RichTextEditorComponent.d.ts +6 -5
  38. package/dist/editor/field-types/RichTextEditorComponent.js +59 -60
  39. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  40. package/dist/editor/field-types/TreeListEditor.js +7 -5
  41. package/dist/editor/field-types/TreeListEditor.js.map +1 -1
  42. package/dist/editor/field-types/richtext/components/EditorDropdown.d.ts +11 -0
  43. package/dist/editor/field-types/richtext/components/EditorDropdown.js +83 -0
  44. package/dist/editor/field-types/richtext/components/EditorDropdown.js.map +1 -0
  45. package/dist/editor/field-types/richtext/components/ReactSlate.d.ts +5 -0
  46. package/dist/editor/field-types/richtext/components/ReactSlate.js +562 -0
  47. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -0
  48. package/dist/editor/field-types/richtext/components/ToolbarButton.d.ts +3 -0
  49. package/dist/editor/field-types/richtext/components/ToolbarButton.js +13 -0
  50. package/dist/editor/field-types/richtext/components/ToolbarButton.js.map +1 -0
  51. package/dist/editor/field-types/richtext/config/pluginFactory.d.ts +17 -0
  52. package/dist/editor/field-types/richtext/config/pluginFactory.js +14 -0
  53. package/dist/editor/field-types/richtext/config/pluginFactory.js.map +1 -0
  54. package/dist/editor/field-types/richtext/hooks/useProfileCache.d.ts +68 -0
  55. package/dist/editor/field-types/richtext/hooks/useProfileCache.js +208 -0
  56. package/dist/editor/field-types/richtext/hooks/useProfileCache.js.map +1 -0
  57. package/dist/editor/field-types/richtext/hooks/useRichTextProfile.d.ts +25 -0
  58. package/dist/editor/field-types/richtext/hooks/useRichTextProfile.js +64 -0
  59. package/dist/editor/field-types/richtext/hooks/useRichTextProfile.js.map +1 -0
  60. package/dist/editor/field-types/richtext/index.d.ts +5 -0
  61. package/dist/editor/field-types/richtext/index.js +6 -0
  62. package/dist/editor/field-types/richtext/index.js.map +1 -0
  63. package/dist/editor/field-types/richtext/types.d.ts +139 -0
  64. package/dist/editor/field-types/richtext/types.js +107 -0
  65. package/dist/editor/field-types/richtext/types.js.map +1 -0
  66. package/dist/editor/field-types/richtext/utils/conversion.d.ts +5 -0
  67. package/dist/editor/field-types/richtext/utils/conversion.js +539 -0
  68. package/dist/editor/field-types/richtext/utils/conversion.js.map +1 -0
  69. package/dist/editor/field-types/richtext/utils/plugins.d.ts +97 -0
  70. package/dist/editor/field-types/richtext/utils/plugins.js +272 -0
  71. package/dist/editor/field-types/richtext/utils/plugins.js.map +1 -0
  72. package/dist/editor/field-types/richtext/utils/profileMapper.d.ts +38 -0
  73. package/dist/editor/field-types/richtext/utils/profileMapper.js +366 -0
  74. package/dist/editor/field-types/richtext/utils/profileMapper.js.map +1 -0
  75. package/dist/editor/field-types/richtext/utils/profileServiceCache.d.ts +37 -0
  76. package/dist/editor/field-types/richtext/utils/profileServiceCache.js +117 -0
  77. package/dist/editor/field-types/richtext/utils/profileServiceCache.js.map +1 -0
  78. package/dist/editor/media-selector/AiImageSearch.js +2 -5
  79. package/dist/editor/media-selector/AiImageSearch.js.map +1 -1
  80. package/dist/editor/media-selector/MediaFolderBrowser.js +2 -5
  81. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
  82. package/dist/editor/media-selector/TreeSelector.js +2 -5
  83. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  84. package/dist/editor/menubar/FavoritesControls.d.ts +8 -0
  85. package/dist/editor/menubar/FavoritesControls.js +124 -0
  86. package/dist/editor/menubar/FavoritesControls.js.map +1 -0
  87. package/dist/editor/menubar/ItemLanguageVersion.js +2 -1
  88. package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
  89. package/dist/editor/menubar/PageSelector.js +3 -6
  90. package/dist/editor/menubar/PageSelector.js.map +1 -1
  91. package/dist/editor/reviews/reviewCommands.js +3 -8
  92. package/dist/editor/reviews/reviewCommands.js.map +1 -1
  93. package/dist/editor/services/contentService.d.ts +8 -0
  94. package/dist/editor/services/contentService.js +3 -0
  95. package/dist/editor/services/contentService.js.map +1 -1
  96. package/dist/editor/services/favouritesService.d.ts +33 -0
  97. package/dist/editor/services/favouritesService.js +22 -0
  98. package/dist/editor/services/favouritesService.js.map +1 -0
  99. package/dist/editor/sidebar/ComponentTree.js +7 -1
  100. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  101. package/dist/editor/sidebar/Debug.js +2 -2
  102. package/dist/editor/sidebar/Debug.js.map +1 -1
  103. package/dist/editor/sidebar/SEOInfo.js +4 -15
  104. package/dist/editor/sidebar/SEOInfo.js.map +1 -1
  105. package/dist/editor/ui/ItemSearch.js +2 -5
  106. package/dist/editor/ui/ItemSearch.js.map +1 -1
  107. package/dist/editor/ui/PerfectTree.d.ts +4 -2
  108. package/dist/editor/ui/PerfectTree.js +16 -7
  109. package/dist/editor/ui/PerfectTree.js.map +1 -1
  110. package/dist/editor/ui/Section.js +1 -1
  111. package/dist/editor/utils/itemutils.js +3 -1
  112. package/dist/editor/utils/itemutils.js.map +1 -1
  113. package/dist/editor/utils/keyboardNavigation.d.ts +32 -0
  114. package/dist/editor/utils/keyboardNavigation.js +156 -0
  115. package/dist/editor/utils/keyboardNavigation.js.map +1 -0
  116. package/dist/editor/views/ItemEditor.js +10 -3
  117. package/dist/editor/views/ItemEditor.js.map +1 -1
  118. package/dist/page-wizard/PageWizard.d.ts +2 -2
  119. package/dist/page-wizard/steps/ContentStep.js +7 -7
  120. package/dist/page-wizard/steps/ContentStep.js.map +1 -1
  121. package/dist/page-wizard/steps/schema.js +4 -2
  122. package/dist/page-wizard/steps/schema.js.map +1 -1
  123. package/dist/page-wizard/steps/usePageCreator.js +1 -1
  124. package/dist/page-wizard/steps/usePageCreator.js.map +1 -1
  125. package/dist/revision.d.ts +2 -2
  126. package/dist/revision.js +2 -2
  127. package/dist/splash-screen/NewPage.js +7 -10
  128. package/dist/splash-screen/NewPage.js.map +1 -1
  129. package/dist/styles.css +34 -5
  130. package/package.json +6 -1
  131. package/src/components/ui/copy-button.tsx +75 -0
  132. package/src/components/ui/sonner.tsx +25 -0
  133. package/src/config/config.tsx +5 -19
  134. package/src/config/types.ts +6 -3
  135. package/src/editor/ComponentInfo.tsx +5 -4
  136. package/src/editor/ContentTree.tsx +5 -6
  137. package/src/editor/FieldListField.tsx +4 -25
  138. package/src/editor/ItemInfo.tsx +5 -5
  139. package/src/editor/ai/Agents.tsx +125 -0
  140. package/src/editor/ai/AiTerminal.tsx +4 -0
  141. package/src/editor/client/EditorClient.tsx +58 -119
  142. package/src/editor/client/editContext.ts +3 -2
  143. package/src/editor/commands/itemCommands.tsx +10 -25
  144. package/src/editor/component-designer/ComponentEditor.tsx +8 -10
  145. package/src/editor/field-types/InternalLinkFieldEditor.tsx +73 -69
  146. package/src/editor/field-types/RichTextEditor.tsx +40 -3
  147. package/src/editor/field-types/RichTextEditorComponent.tsx +74 -77
  148. package/src/editor/field-types/TreeListEditor.tsx +7 -7
  149. package/src/editor/field-types/richtext/components/EditorDropdown.css +81 -0
  150. package/src/editor/field-types/richtext/components/EditorDropdown.tsx +165 -0
  151. package/src/editor/field-types/richtext/components/ReactSlate.css +161 -0
  152. package/src/editor/field-types/richtext/components/ReactSlate.tsx +801 -0
  153. package/src/editor/field-types/richtext/components/ToolbarButton.tsx +23 -0
  154. package/src/editor/field-types/richtext/config/pluginFactory.tsx +22 -0
  155. package/src/editor/field-types/richtext/hooks/useProfileCache.ts +270 -0
  156. package/src/editor/field-types/richtext/hooks/useRichTextProfile.ts +94 -0
  157. package/src/editor/field-types/richtext/index.ts +5 -0
  158. package/src/editor/field-types/richtext/types.ts +269 -0
  159. package/src/editor/field-types/richtext/utils/conversion.ts +589 -0
  160. package/src/editor/field-types/richtext/utils/plugins.ts +346 -0
  161. package/src/editor/field-types/richtext/utils/profileMapper.ts +424 -0
  162. package/src/editor/field-types/richtext/utils/profileServiceCache.ts +154 -0
  163. package/src/editor/media-selector/AiImageSearch.tsx +2 -5
  164. package/src/editor/media-selector/MediaFolderBrowser.tsx +2 -5
  165. package/src/editor/media-selector/TreeSelector.tsx +2 -5
  166. package/src/editor/menubar/FavoritesControls.tsx +250 -0
  167. package/src/editor/menubar/ItemLanguageVersion.tsx +3 -1
  168. package/src/editor/menubar/PageSelector.tsx +76 -75
  169. package/src/editor/reviews/reviewCommands.tsx +3 -8
  170. package/src/editor/services/contentService.ts +12 -0
  171. package/src/editor/services/favouritesService.ts +60 -0
  172. package/src/editor/sidebar/ComponentTree.tsx +12 -1
  173. package/src/editor/sidebar/Debug.tsx +4 -3
  174. package/src/editor/sidebar/SEOInfo.tsx +6 -16
  175. package/src/editor/ui/ItemSearch.tsx +2 -5
  176. package/src/editor/ui/PerfectTree.tsx +19 -6
  177. package/src/editor/ui/Section.tsx +1 -1
  178. package/src/editor/utils/{itemutils.ts → itemutils.tsx} +12 -12
  179. package/src/editor/utils/keyboardNavigation.ts +234 -0
  180. package/src/editor/views/ItemEditor.tsx +22 -1
  181. package/src/page-wizard/PageWizard.tsx +2 -2
  182. package/src/page-wizard/steps/ContentStep.tsx +7 -9
  183. package/src/page-wizard/steps/schema.ts +10 -7
  184. package/src/page-wizard/steps/usePageCreator.ts +1 -0
  185. package/src/revision.ts +2 -2
  186. package/src/splash-screen/NewPage.tsx +28 -24
  187. package/dist/editor/ui/CopyToClipboardButton.d.ts +0 -3
  188. package/dist/editor/ui/CopyToClipboardButton.js +0 -16
  189. package/dist/editor/ui/CopyToClipboardButton.js.map +0 -1
  190. package/src/editor/ui/CopyToClipboardButton.tsx +0 -24
@@ -0,0 +1,562 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import React, { useCallback, useMemo, useState, forwardRef, useRef, useEffect } from 'react';
3
+ import { createEditor, Editor, Element, Transforms } from 'slate';
4
+ import { Slate, Editable, withReact, ReactEditor } from 'slate-react';
5
+ import { withHistory } from 'slate-history';
6
+ import isEqual from 'lodash/isEqual';
7
+ import './ReactSlate.css';
8
+ import { SLATE_MARKS, SLATE_BLOCKS, SLATE_ALIGNMENTS } from '../types';
9
+ import EditorDropdown from './EditorDropdown';
10
+ import { ToolbarButton } from './ToolbarButton';
11
+ import { LinkEditorDialog } from '../../../LinkEditorDialog';
12
+ import { htmlToSlate, slateToHtml } from '../utils/conversion';
13
+ import { createPluginsFromConfig } from '../config/pluginFactory';
14
+ import { useCachedSimplifiedProfile } from '../hooks/useProfileCache';
15
+ import { classNames } from 'primereact/utils';
16
+ // Helper function to normalize HTML for comparison
17
+ const normalizeHtmlForComparison = (html) => {
18
+ if (!html)
19
+ return '';
20
+ // Create a temporary DOM element to normalize the HTML
21
+ const temp = document.createElement('div');
22
+ temp.innerHTML = html;
23
+ // Remove extra whitespace and normalize structure
24
+ const normalizedHtml = temp.innerHTML
25
+ .replace(/\s+/g, ' ') // Replace multiple spaces with single space
26
+ .replace(/>\s+</g, '><') // Remove spaces between tags
27
+ .trim();
28
+ // Handle common empty content patterns
29
+ if (normalizedHtml === '<p><br></p>' || normalizedHtml === '<br>' || normalizedHtml === '<p></p>') {
30
+ return '';
31
+ }
32
+ return normalizedHtml;
33
+ };
34
+ // Helper function to check if HTML conversion is stable
35
+ const isHtmlConversionStable = (originalHtml, slateValue, profile) => {
36
+ try {
37
+ // Convert Slate back to HTML
38
+ const convertedHtml = slateToHtml(slateValue, profile);
39
+ // Normalize both HTML strings for comparison
40
+ const normalizedOriginal = normalizeHtmlForComparison(originalHtml);
41
+ const normalizedConverted = normalizeHtmlForComparison(convertedHtml);
42
+ // Debug logging (can be enabled for troubleshooting)
43
+ // console.log('HTML Stability Check:', {
44
+ // original: normalizedOriginal,
45
+ // converted: normalizedConverted,
46
+ // stable: normalizedOriginal === normalizedConverted
47
+ // });
48
+ // Check if they're equivalent
49
+ return normalizedOriginal === normalizedConverted;
50
+ }
51
+ catch (error) {
52
+ console.warn('HTML conversion stability check failed:', error);
53
+ // If we can't check stability, assume it's not stable to be safe
54
+ return false;
55
+ }
56
+ };
57
+ export const ReactSlate = forwardRef((props, ref) => {
58
+ const { value = '', onChange, onFocus, onBlur, readOnly = false, placeholder = 'Enter some text...', profile } = props;
59
+ // Create the Slate editor with plugins
60
+ const editor = useMemo(() => {
61
+ // Start with base editor
62
+ let slateEditor = createEditor();
63
+ // Apply core plugins
64
+ slateEditor = withReact(slateEditor);
65
+ slateEditor = withHistory(slateEditor);
66
+ slateEditor = createPluginsFromConfig(slateEditor);
67
+ return slateEditor;
68
+ }, []);
69
+ const editorProfile = profile || {
70
+ toolbar: {
71
+ groups: []
72
+ }
73
+ };
74
+ // Convert to simplified profile for the conversion functions (with caching)
75
+ const simplifiedProfile = useCachedSimplifiedProfile(editorProfile);
76
+ // Store the original HTML value for comparison
77
+ const originalValueRef = useRef(value);
78
+ const isInitialLoadRef = useRef(true);
79
+ // Update original value when prop value changes
80
+ useMemo(() => {
81
+ if (value !== originalValueRef.current) {
82
+ originalValueRef.current = value;
83
+ isInitialLoadRef.current = true;
84
+ }
85
+ }, [value]);
86
+ // Convert the HTML value to Slate format
87
+ const [internalValue, setInternalValue] = useState(htmlToSlate(value, simplifiedProfile));
88
+ // Counter to force remount when value changes externally
89
+ const [remountKey, setRemountKey] = useState(0);
90
+ // Update internal value when prop value changes
91
+ useEffect(() => {
92
+ const newValue = htmlToSlate(value, simplifiedProfile);
93
+ if (!isEqual(newValue, internalValue)) {
94
+ setInternalValue(newValue);
95
+ // Force remount by incrementing the key
96
+ setRemountKey(prev => prev + 1);
97
+ }
98
+ }, [value, simplifiedProfile]);
99
+ // Handle value changes with round-trip validation
100
+ const handleChange = useCallback((newValue) => {
101
+ setInternalValue(newValue);
102
+ if (onChange) {
103
+ const html = slateToHtml(newValue, simplifiedProfile);
104
+ // Check if this is the initial load or if the conversion is stable
105
+ if (isInitialLoadRef.current) {
106
+ // On initial load, check if the HTML conversion is stable
107
+ const isStable = isHtmlConversionStable(originalValueRef.current, newValue, simplifiedProfile);
108
+ if (isStable) {
109
+ // If stable, don't trigger onChange on initial load
110
+ isInitialLoadRef.current = false;
111
+ return;
112
+ }
113
+ // If not stable, we still need to proceed, but mark as no longer initial load
114
+ isInitialLoadRef.current = false;
115
+ }
116
+ // For subsequent changes, only trigger onChange if there's a meaningful difference
117
+ const normalizedNewHtml = normalizeHtmlForComparison(html);
118
+ const normalizedOriginalHtml = normalizeHtmlForComparison(originalValueRef.current);
119
+ if (normalizedNewHtml !== normalizedOriginalHtml) {
120
+ // Update the original value reference to the new HTML
121
+ originalValueRef.current = html;
122
+ onChange(html);
123
+ }
124
+ }
125
+ }, [onChange, simplifiedProfile]);
126
+ const getOption = (type, id) => {
127
+ switch (type) {
128
+ case 'mark':
129
+ const markConfig = SLATE_MARKS[id];
130
+ return markConfig ? {
131
+ id,
132
+ label: markConfig.label,
133
+ icon: markConfig.icon,
134
+ isActive: (editor) => editor.isMarkActive(id),
135
+ toggle: (editor, event) => {
136
+ event.preventDefault();
137
+ editor.toggleMark(id);
138
+ }
139
+ } : undefined;
140
+ case 'block':
141
+ const blockConfig = SLATE_BLOCKS[id];
142
+ return blockConfig ? {
143
+ id,
144
+ label: blockConfig.label,
145
+ icon: blockConfig.icon,
146
+ isActive: (editor) => editor.isBlockActive(id),
147
+ toggle: (editor, event) => {
148
+ event.preventDefault();
149
+ editor.toggleBlock(id);
150
+ }
151
+ } : undefined;
152
+ case 'alignment':
153
+ const alignConfig = SLATE_ALIGNMENTS[id];
154
+ return alignConfig ? {
155
+ id,
156
+ label: alignConfig.label,
157
+ icon: alignConfig.icon,
158
+ isActive: (editor) => editor.isAlignActive(alignConfig.value),
159
+ toggle: (editor, event) => {
160
+ event.preventDefault();
161
+ editor.toggleAlign(alignConfig.value);
162
+ }
163
+ } : undefined;
164
+ case 'link':
165
+ return {
166
+ id: 'link',
167
+ label: 'Link',
168
+ icon: '🔗',
169
+ isActive: (editor) => editor.isLinkActive(),
170
+ toggle: (editor, event) => {
171
+ event.preventDefault();
172
+ handleLinkButtonClick();
173
+ }
174
+ };
175
+ case 'list':
176
+ return {
177
+ id,
178
+ label: id === 'unordered-list' ? 'Bulleted List' : 'Numbered List',
179
+ icon: id === 'unordered-list' ? '•' : '1.',
180
+ isActive: (editor) => editor.isListActive(id === 'unordered-list' ? 'unordered' : 'ordered'),
181
+ toggle: (editor, event) => {
182
+ event.preventDefault();
183
+ editor.toggleList(id === 'unordered-list' ? 'unordered' : 'ordered');
184
+ }
185
+ };
186
+ case 'divider':
187
+ return { id: 'divider', label: 'Divider' };
188
+ default:
189
+ return undefined;
190
+ }
191
+ };
192
+ const optionHandlers = {
193
+ mark: {
194
+ isActive: (id) => editor.isMarkActive(id),
195
+ toggle: (id) => editor.toggleMark(id)
196
+ },
197
+ block: {
198
+ isActive: (id) => editor.isBlockActive(id),
199
+ toggle: (id) => editor.toggleBlock(id)
200
+ },
201
+ alignment: {
202
+ isActive: (id) => {
203
+ const alignConfig = SLATE_ALIGNMENTS[id];
204
+ return alignConfig ? editor.isAlignActive(alignConfig.value) : false;
205
+ },
206
+ toggle: (id) => {
207
+ const alignConfig = SLATE_ALIGNMENTS[id];
208
+ if (alignConfig) {
209
+ editor.toggleAlign(alignConfig.value);
210
+ }
211
+ }
212
+ },
213
+ link: {
214
+ isActive: () => editor.isLinkActive(),
215
+ toggle: () => handleLinkButtonClick()
216
+ },
217
+ list: {
218
+ isActive: (id) => {
219
+ const listType = id === 'unordered-list' ? 'unordered' : 'ordered';
220
+ return editor.isListActive(listType);
221
+ },
222
+ toggle: (id, event) => {
223
+ const listType = id === 'unordered-list' ? 'unordered' : 'ordered';
224
+ editor.toggleList(listType);
225
+ }
226
+ }
227
+ };
228
+ const isOptionActive = (type, id) => {
229
+ const handler = optionHandlers[type];
230
+ return handler ? handler.isActive(id) : false;
231
+ };
232
+ const handleOptionSelect = (type, id) => (event) => {
233
+ event.preventDefault();
234
+ const handler = optionHandlers[type];
235
+ if (handler) {
236
+ return handler.toggle(id, event);
237
+ }
238
+ console.warn(`Unhandled option type: ${type}`);
239
+ };
240
+ const createDropdownOptions = (options) => {
241
+ return options
242
+ .map(option => {
243
+ const optionObj = getOption(option.type, option.id);
244
+ if (!optionObj)
245
+ return null;
246
+ return {
247
+ value: optionObj,
248
+ label: optionObj.label || option.id,
249
+ icon: optionObj.icon,
250
+ style: optionObj.style,
251
+ isActive: (editor) => isOptionActive(option.type, option.id),
252
+ onSelect: (editor, event) => handleOptionSelect(option.type, option.id)(event)
253
+ };
254
+ })
255
+ .filter(Boolean);
256
+ };
257
+ // Helper function to split options by dividers into sub-groups
258
+ const splitOptionsByDividers = (options) => {
259
+ const subGroups = [];
260
+ let currentGroup = [];
261
+ options.forEach(option => {
262
+ if (option.type === 'divider') {
263
+ if (currentGroup.length > 0) {
264
+ subGroups.push(currentGroup);
265
+ currentGroup = [];
266
+ }
267
+ }
268
+ else {
269
+ currentGroup.push(option);
270
+ }
271
+ });
272
+ // Add the last group if it has options
273
+ if (currentGroup.length > 0) {
274
+ subGroups.push(currentGroup);
275
+ }
276
+ return subGroups;
277
+ };
278
+ const renderToolbarGroup = (group, index) => {
279
+ const validOptions = group.options.filter(option => getOption(option.type, option.id) || option.type === 'divider');
280
+ if (validOptions.length === 0)
281
+ return null;
282
+ const groupStyle = {
283
+ display: 'flex',
284
+ alignItems: 'center',
285
+ gap: '8px',
286
+ flexWrap: 'wrap'
287
+ };
288
+ return (_jsx("div", { style: groupStyle, children: group.display === 'buttons' ? ((() => {
289
+ const subGroups = splitOptionsByDividers(validOptions);
290
+ return subGroups.map((subGroup, subGroupIndex) => (_jsx("div", { className: "toolbar-button-group", children: subGroup.map((option, optionIndex) => {
291
+ const optionObj = getOption(option.type, option.id);
292
+ if (!optionObj)
293
+ return null;
294
+ return (_jsx(ToolbarButton, { icon: optionObj.icon, active: isOptionActive(option.type, option.id), onMouseDown: handleOptionSelect(option.type, option.id) }, `${option.type}-${option.id}`));
295
+ }) }, `subgroup-${subGroupIndex}`)));
296
+ })()) : ((() => {
297
+ const dropdownOptions = createDropdownOptions(validOptions);
298
+ const blockOptions = validOptions.filter(option => option.type === 'block');
299
+ // If there's only one block option, render it as a disabled-style button
300
+ if (blockOptions.length === 1) {
301
+ const singleOption = dropdownOptions.find(opt => blockOptions.some(blockOpt => blockOpt.type === 'block' &&
302
+ getOption(blockOpt.type, blockOpt.id) === opt.value));
303
+ return (_jsx("div", { className: "toolbar-dropdown-container", children: _jsx("button", { className: "toolbar-dropdown-button", disabled: true, children: group.label ? (_jsxs(_Fragment, { children: [_jsxs("span", { className: "toolbar-dropdown-content", children: [group.label, ": ", singleOption?.label] }), _jsx("span", { className: "toolbar-dropdown-arrow", children: "\u25BC" })] })) : group.showIconsOnly ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "toolbar-dropdown-icon", children: singleOption?.icon }), _jsx("span", { className: "toolbar-dropdown-arrow", children: "\u25BC" })] })) : (_jsxs(_Fragment, { children: [_jsxs("span", { className: "toolbar-dropdown-icon", children: [singleOption?.icon && (_jsx("span", { className: "toolbar-dropdown-icon", children: singleOption.icon })), _jsx("span", { className: "toolbar-dropdown-content", children: singleOption?.label })] }), _jsx("span", { className: "toolbar-dropdown-arrow", children: "\u25BC" })] })) }) }));
304
+ }
305
+ // Multiple options - render normally wrapped in grey container
306
+ const isActive = dropdownOptions.some(option => option.isActive(editor));
307
+ return (_jsx("div", { className: "toolbar-dropdown-container", children: _jsx(EditorDropdown, { options: dropdownOptions, editor: editor, label: group.label, buttonStyle: {
308
+ padding: '5px 10px',
309
+ margin: '0',
310
+ background: isActive ? '#ffffff' : 'transparent',
311
+ border: 'none',
312
+ borderRadius: '3px',
313
+ cursor: 'pointer',
314
+ boxShadow: isActive ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'
315
+ } }) }));
316
+ })()) }, `group-${group.id || index}`));
317
+ };
318
+ const [showLinkDialog, setShowLinkDialog] = useState(false);
319
+ const [selectedLink, setSelectedLink] = useState(null);
320
+ const [linkDialogCallback, setLinkDialogCallback] = useState(null);
321
+ const editLink = useCallback((element) => {
322
+ const linkType = element.link?.type || 'external';
323
+ let linkData;
324
+ if (linkType === 'internal') {
325
+ linkData = {
326
+ type: 'internal',
327
+ itemId: element.link?.itemId || element.link?.targetItemLongId?.split("/").pop() || '',
328
+ targetItemLongId: element.link?.targetItemLongId || '',
329
+ target: element.link?.target || '',
330
+ queryString: element.link?.queryString || ''
331
+ };
332
+ }
333
+ else {
334
+ linkData = {
335
+ type: 'external',
336
+ url: element.url || element.link?.url || '',
337
+ target: element.link?.target || '_blank',
338
+ queryString: element.link?.queryString || ''
339
+ };
340
+ }
341
+ setSelectedLink(linkData);
342
+ setShowLinkDialog(true);
343
+ }, []);
344
+ const handleLinkUpdate = useCallback((link) => {
345
+ if (linkDialogCallback) {
346
+ linkDialogCallback(link);
347
+ setLinkDialogCallback(null);
348
+ }
349
+ else {
350
+ const [linkNode] = Editor.nodes(editor, {
351
+ match: n => !Editor.isEditor(n) && Element.isElement(n) && n.type === 'link'
352
+ });
353
+ if (linkNode) {
354
+ const [node, path] = linkNode;
355
+ let newProperties;
356
+ if (link.type === 'internal') {
357
+ newProperties = {
358
+ url: '',
359
+ link: {
360
+ type: 'internal',
361
+ targetItemLongId: link.targetItemLongId,
362
+ itemId: link.itemId,
363
+ target: link.target,
364
+ queryString: link.queryString
365
+ }
366
+ };
367
+ }
368
+ else {
369
+ newProperties = {
370
+ url: link.url,
371
+ link: {
372
+ type: 'external',
373
+ url: link.url,
374
+ target: link.target,
375
+ queryString: link.queryString
376
+ }
377
+ };
378
+ }
379
+ Transforms.setNodes(editor, newProperties, { at: path });
380
+ // Move cursor after the link
381
+ const after = Editor.after(editor, path);
382
+ if (after) {
383
+ Transforms.select(editor, after);
384
+ }
385
+ ReactEditor.focus(editor);
386
+ }
387
+ }
388
+ setShowLinkDialog(false);
389
+ setSelectedLink(null);
390
+ }, [editor, linkDialogCallback]);
391
+ const handleLinkButtonClick = useCallback(() => {
392
+ editor.insertLink({
393
+ onOpenLinkDialog: (callback) => {
394
+ setSelectedLink({
395
+ type: 'external',
396
+ url: '',
397
+ target: '_blank'
398
+ });
399
+ setShowLinkDialog(true);
400
+ setLinkDialogCallback(() => callback);
401
+ }
402
+ });
403
+ }, [editor]);
404
+ const handleKeyDown = useCallback((event) => {
405
+ if (event.key === 'Enter' && event.shiftKey) {
406
+ // Handle Shift+Enter for line breaks in all block types
407
+ event.preventDefault();
408
+ if (editor.selection) {
409
+ // Insert literal <br> text
410
+ editor.insertText('<br>');
411
+ }
412
+ }
413
+ else if (event.key === 'Tab') {
414
+ event.preventDefault();
415
+ // Check if we're in a list item more explicitly
416
+ if (editor.selection) {
417
+ // Try to find the closest list item ancestor using Editor.above
418
+ const listItem = Editor.above(editor, {
419
+ at: editor.selection,
420
+ match: n => !Editor.isEditor(n) && Element.isElement(n) && n.type === 'list-item'
421
+ });
422
+ if (listItem) {
423
+ if (event.shiftKey) {
424
+ // Shift+Tab: Outdent
425
+ editor.outdentList();
426
+ }
427
+ else {
428
+ // Tab: Indent
429
+ editor.indentList();
430
+ }
431
+ }
432
+ }
433
+ }
434
+ else if (event.key === 'Backspace' || event.key === 'Delete') {
435
+ // Handle empty list items
436
+ if (editor.selection) {
437
+ const listItem = Editor.above(editor, {
438
+ at: editor.selection,
439
+ match: n => !Editor.isEditor(n) && Element.isElement(n) && n.type === 'list-item'
440
+ });
441
+ if (listItem) {
442
+ const selectedText = Editor.string(editor, editor.selection);
443
+ const [node, path] = listItem;
444
+ const nodeText = Editor.string(editor, path);
445
+ // If the list item is empty or only contains whitespace, convert to paragraph
446
+ if (!nodeText.trim() || (selectedText === nodeText && nodeText.trim())) {
447
+ event.preventDefault();
448
+ Transforms.setNodes(editor, { type: 'paragraph', listType: undefined, indent: undefined }, {
449
+ match: n => !Editor.isEditor(n) && Element.isElement(n) && n.type === 'list-item',
450
+ split: true
451
+ });
452
+ }
453
+ }
454
+ }
455
+ }
456
+ }, [editor]);
457
+ return (_jsxs("div", { className: `slate-editor ${props.className}`, children: [_jsxs(Slate, { editor: editor, initialValue: internalValue, onChange: handleChange, children: [!readOnly && (_jsx("div", { className: "toolbar", children: (() => {
458
+ // Group toolbar items by row
459
+ const groupsByRow = editorProfile.toolbar.groups.reduce((acc, group, index) => {
460
+ const row = group.row !== undefined ? group.row : index;
461
+ if (!acc[row])
462
+ acc[row] = [];
463
+ acc[row].push(group);
464
+ return acc;
465
+ }, {});
466
+ // Render each row
467
+ return Object.entries(groupsByRow)
468
+ .sort(([a], [b]) => parseInt(a) - parseInt(b))
469
+ .map(([rowIndex, rowGroups]) => (_jsx("div", { className: "toolbar-row", children: rowGroups.map(group => renderToolbarGroup(group, parseInt(rowIndex))) }, `row-${rowIndex}`)));
470
+ })() })), _jsx(Editable, { className: classNames(readOnly ? "bg-gray-4" : "bg-gray-5", "focus-shadow"), readOnly: readOnly, placeholder: placeholder, onFocus: onFocus, onBlur: onBlur, onKeyDown: handleKeyDown, renderElement: ({ attributes, children, element }) => {
471
+ const style = {
472
+ textAlign: element.align || 'left',
473
+ };
474
+ if (element.type === 'link') {
475
+ const isInternal = element.link?.type === 'internal';
476
+ const url = isInternal ? '#' : (element.url || element.link?.url || '#');
477
+ return (_jsx("a", { ...attributes, href: url, style: style, className: `slate-link ${isInternal ? 'internal-link' : 'external-link'}`, onClick: (e) => {
478
+ if (!readOnly) {
479
+ e.preventDefault();
480
+ editLink(element);
481
+ }
482
+ }, children: children }));
483
+ }
484
+ if (element.type === 'list-item') {
485
+ const indent = element.indent || 0;
486
+ const listType = element.listType || 'unordered';
487
+ const isOrdered = listType === 'ordered';
488
+ // Calculate proper numbering for ordered lists
489
+ let listNumber = 1;
490
+ if (isOrdered) {
491
+ // Find the position of this item within its level
492
+ const allElements = editor.children;
493
+ const currentIndex = allElements.findIndex(el => el === element);
494
+ // Count preceding list items at the same indent level and list type
495
+ let count = 0;
496
+ for (let i = 0; i < currentIndex; i++) {
497
+ const prevElement = allElements[i];
498
+ if (prevElement &&
499
+ prevElement.type === 'list-item' &&
500
+ prevElement.listType === 'ordered' &&
501
+ (prevElement.indent || 0) === indent) {
502
+ count++;
503
+ }
504
+ else if (prevElement &&
505
+ prevElement.type === 'list-item' &&
506
+ (prevElement.indent || 0) < indent) {
507
+ // Reset count when we encounter a parent-level item
508
+ count = 0;
509
+ }
510
+ }
511
+ listNumber = count + 1;
512
+ }
513
+ const listStyle = {
514
+ ...style,
515
+ position: 'relative',
516
+ listStyleType: 'none',
517
+ };
518
+ const bulletContent = isOrdered ? `${listNumber}.` : '';
519
+ return (_jsxs("div", { ...attributes, style: listStyle, className: `slate-list-item slate-list-${listType}`, "data-indent": indent, children: [_jsx("span", { className: "slate-list-bullet", children: bulletContent }), _jsx("div", { className: "slate-list-content", children: children })] }));
520
+ }
521
+ // Handle different block types using built-in SLATE_BLOCKS configuration
522
+ const blockConfig = SLATE_BLOCKS[element.type];
523
+ if (blockConfig && element.type === 'no-tag') {
524
+ // Special handling for no-tag blocks (plain text without wrapper)
525
+ return _jsx("span", { ...attributes, style: style, children: children });
526
+ }
527
+ // For standard blocks, use the appropriate HTML tag
528
+ if (blockConfig) {
529
+ const tagName = blockConfig.htmlTag;
530
+ return React.createElement(tagName, { ...attributes, style }, children);
531
+ }
532
+ // Default fallback to paragraph
533
+ return _jsx("p", { ...attributes, style: style, children: children });
534
+ }, renderLeaf: ({ attributes, children, leaf }) => {
535
+ let el = _jsx("span", { ...attributes, children: children });
536
+ // Apply marks using the built-in SLATE_MARKS configuration
537
+ simplifiedProfile.marks.forEach(markId => {
538
+ if (leaf[markId]) {
539
+ const markConfig = SLATE_MARKS[markId];
540
+ if (markConfig) {
541
+ if (markId === 'extrabold') {
542
+ // Special handling for extrabold with CSS class
543
+ el = (_jsx("span", { className: "extrabold", children: el }));
544
+ }
545
+ else {
546
+ // Standard HTML tag rendering
547
+ const tagName = markConfig.htmlTag;
548
+ el = React.createElement(tagName, {}, el);
549
+ }
550
+ }
551
+ }
552
+ });
553
+ return el;
554
+ } })] }, remountKey), showLinkDialog && selectedLink && (_jsx(LinkEditorDialog, { linkValue: selectedLink, onOk: handleLinkUpdate, onCancel: () => {
555
+ setShowLinkDialog(false);
556
+ setSelectedLink(null);
557
+ setLinkDialogCallback(null);
558
+ } }))] }));
559
+ });
560
+ ReactSlate.displayName = 'ReactSlate';
561
+ export default ReactSlate;
562
+ //# sourceMappingURL=ReactSlate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReactSlate.js","sourceRoot":"","sources":["../../../../../src/editor/field-types/richtext/components/ReactSlate.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import { ToolbarButtonProps } from '../types';
3
+ export declare const ToolbarButton: React.FC<ToolbarButtonProps>;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const ToolbarButton = ({ icon, active, onMouseDown }) => {
3
+ return (_jsx("button", { className: `toolbar-button ${active ? 'active' : ''}`, onMouseDown: onMouseDown, style: {
4
+ padding: '5px 10px',
5
+ margin: '0 2px',
6
+ background: active ? '#ffffff' : 'transparent',
7
+ border: 'none',
8
+ borderRadius: '3px',
9
+ cursor: 'pointer',
10
+ boxShadow: active ? '0 1px 2px rgba(0,0,0,0.1)' : 'none'
11
+ }, children: icon }));
12
+ };
13
+ //# sourceMappingURL=ToolbarButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolbarButton.js","sourceRoot":"","sources":["../../../../../src/editor/field-types/richtext/components/ToolbarButton.tsx"],"names":[],"mappings":";AAGA,MAAM,CAAC,MAAM,aAAa,GAAiC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE;IAC3F,OAAO,CACL,iBACE,SAAS,EAAE,kBAAkB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EACrD,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE;YACL,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,OAAO;YACf,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;YAC9C,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,MAAM;SACzD,YAEA,IAAI,GACE,CACV,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Editor } from 'slate';
2
+ export declare const createPluginsFromConfig: (editor: Editor) => import("slate").BaseEditor & import("slate-react").ReactEditor & import("slate-history").HistoryEditor & {
3
+ isMarkActive(format: string): boolean;
4
+ toggleMark(format: string): void;
5
+ isBlockActive(format: string): boolean;
6
+ toggleBlock(format: string): void;
7
+ isAlignActive(align: string): boolean;
8
+ toggleAlign(align: string): void;
9
+ isLinkActive(): boolean;
10
+ insertLink(options?: {
11
+ onOpenLinkDialog?: (callback: (link: any) => void) => void;
12
+ }): void;
13
+ isListActive(listType?: "unordered" | "ordered"): boolean;
14
+ toggleList(listType: "unordered" | "ordered"): void;
15
+ indentList(): void;
16
+ outdentList(): void;
17
+ };