@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,5 @@
1
+ import { Descendant } from 'slate';
2
+ import { CustomText, SimplifiedProfile } from '../types';
3
+ export declare const htmlToSlate: (html: string, profile: SimplifiedProfile) => Descendant[];
4
+ export declare const formatTextWithMarks: (child: CustomText, configuredMarks: string[]) => string;
5
+ export declare const slateToHtml: (value: Descendant[], profile: SimplifiedProfile) => string;
@@ -0,0 +1,539 @@
1
+ import { Element as SlateElement } from 'slate';
2
+ import { SLATE_MARKS, SLATE_BLOCKS } from '../types';
3
+ // Elements that should be completely preserved as raw HTML
4
+ const PRESERVE_AS_RAW_ELEMENTS = new Set([
5
+ 'table', 'tbody', 'thead', 'tfoot', 'tr', 'td', 'th',
6
+ 'svg', 'canvas', 'iframe', 'object', 'embed',
7
+ 'form', 'input', 'textarea', 'select', 'button',
8
+ 'video', 'audio', 'source', 'track',
9
+ 'script', 'style', 'noscript'
10
+ ]);
11
+ // Shared utility: Get default block type from profile
12
+ const getDefaultBlockType = (blocks) => {
13
+ return blocks.length > 0 && blocks[0] ? blocks[0] : 'paragraph';
14
+ };
15
+ // Shared utility: Unescape HTML entities
16
+ const unescapeHtmlEntities = (text) => {
17
+ return text
18
+ .replace(/&lt;/g, '<')
19
+ .replace(/&gt;/g, '>')
20
+ .replace(/&quot;/g, '"')
21
+ .replace(/&#39;/g, "'")
22
+ .replace(/&amp;/g, '&'); // This should be last to avoid double-unescaping
23
+ };
24
+ // Simplified preservation check
25
+ const shouldPreserveAsRaw = (element) => {
26
+ const tagName = element.tagName.toLowerCase();
27
+ // Check if it's in the preserve list
28
+ if (PRESERVE_AS_RAW_ELEMENTS.has(tagName)) {
29
+ return true;
30
+ }
31
+ // Check if this element contains any elements that should be preserved
32
+ const containsPreserveElements = element.querySelector(Array.from(PRESERVE_AS_RAW_ELEMENTS).join(','));
33
+ if (containsPreserveElements) {
34
+ return true;
35
+ }
36
+ // Check for complex styling that would be hard to preserve
37
+ const style = element.getAttribute('style') || '';
38
+ const hasComplexStyling = style.includes('background-color') ||
39
+ style.includes('font-family') ||
40
+ style.includes('font-size') ||
41
+ style.includes('color:');
42
+ return hasComplexStyling && element.children.length > 0;
43
+ };
44
+ // Shared utility: Process marks from element
45
+ const getMarksFromElement = (element, configuredMarks) => {
46
+ const marks = {};
47
+ // Check for HTML tag-based marks
48
+ const tagName = element.tagName.toLowerCase();
49
+ const markConfig = configuredMarks.find(markId => {
50
+ const config = SLATE_MARKS[markId];
51
+ return config && config.htmlTag === tagName;
52
+ });
53
+ if (markConfig) {
54
+ marks[markConfig] = true;
55
+ }
56
+ // Check for inline style-based marks
57
+ const style = element.getAttribute('style');
58
+ if (style) {
59
+ if (style.includes('font-weight: bold') || style.includes('font-weight:bold')) {
60
+ marks['bold'] = true;
61
+ }
62
+ if (style.includes('font-style: italic') || style.includes('font-style:italic')) {
63
+ marks['italic'] = true;
64
+ }
65
+ if (style.includes('text-decoration: underline') || style.includes('text-decoration:underline')) {
66
+ marks['underline'] = true;
67
+ }
68
+ if (style.includes('text-decoration: line-through') || style.includes('text-decoration:line-through')) {
69
+ marks['strikethrough'] = true;
70
+ }
71
+ }
72
+ return marks;
73
+ };
74
+ export const htmlToSlate = (html, profile) => {
75
+ const defaultBlockType = getDefaultBlockType(profile.blocks);
76
+ if (!html || html === '<p><br></p>') {
77
+ return [{ type: defaultBlockType, children: [{ text: '' }] }];
78
+ }
79
+ const div = document.createElement('div');
80
+ div.innerHTML = html;
81
+ const nodes = [];
82
+ // Determine block type for element
83
+ const getBlockTypeForElement = (element) => {
84
+ const tagName = element.tagName.toLowerCase();
85
+ // Check if we have a configured block for this element
86
+ const matchingBlockId = profile.blocks.find(blockId => {
87
+ const blockConfig = SLATE_BLOCKS[blockId];
88
+ return blockConfig && blockConfig.htmlTag === tagName;
89
+ });
90
+ return matchingBlockId || defaultBlockType;
91
+ };
92
+ // Process list elements
93
+ const processListElement = (element, currentIndent = 0) => {
94
+ const tagName = element.tagName.toLowerCase();
95
+ const listType = tagName === 'ul' ? 'unordered' : 'ordered';
96
+ Array.from(element.children).forEach(child => {
97
+ if (child.tagName.toLowerCase() === 'li') {
98
+ const liElement = child;
99
+ const style = liElement.getAttribute('style') || '';
100
+ const alignMatch = style.match(/text-align:\s*([^;]+)/);
101
+ const align = alignMatch ? alignMatch[1] : undefined;
102
+ // Process text content and inline elements (excluding nested lists)
103
+ const children = processNodeWithInlinesExcludingNestedLists(liElement, profile.marks);
104
+ nodes.push({
105
+ type: 'list-item',
106
+ listType: listType,
107
+ indent: currentIndent,
108
+ align,
109
+ children: children.length > 0 ? children : [{ text: '' }]
110
+ });
111
+ // Process nested lists separately
112
+ Array.from(liElement.children).forEach(childEl => {
113
+ const childTagName = childEl.tagName.toLowerCase();
114
+ if (childTagName === 'ul' || childTagName === 'ol') {
115
+ processListElement(childEl, currentIndent + 1);
116
+ }
117
+ });
118
+ }
119
+ });
120
+ };
121
+ // Process inline elements and text, excluding nested lists
122
+ const processNodeWithInlinesExcludingNestedLists = (element, configuredMarks) => {
123
+ const results = [];
124
+ const currentElementMarks = getMarksFromElement(element, configuredMarks);
125
+ Array.from(element.childNodes).forEach(child => {
126
+ if (child.nodeType === Node.TEXT_NODE) {
127
+ if (child.textContent) {
128
+ results.push({
129
+ text: child.textContent,
130
+ ...currentElementMarks
131
+ });
132
+ }
133
+ }
134
+ else if (child.nodeType === Node.ELEMENT_NODE) {
135
+ const childElement = child;
136
+ const tagName = childElement.tagName.toLowerCase();
137
+ // Skip nested lists - they're processed separately
138
+ if (tagName === 'ul' || tagName === 'ol') {
139
+ return;
140
+ }
141
+ if (tagName === 'br') {
142
+ results.push({ text: '<br>' });
143
+ }
144
+ else if (tagName === 'a') {
145
+ const href = childElement.getAttribute('href') || '';
146
+ const target = childElement.getAttribute('target') || '_self';
147
+ const isInternal = childElement.hasAttribute('data-internal');
148
+ const itemId = childElement.getAttribute('data-item-id') || '';
149
+ const targetItemLongId = childElement.getAttribute('data-item-longid') || '';
150
+ const queryString = childElement.getAttribute('data-querystring') || '';
151
+ const linkChildren = processNodeWithInlines(childElement, configuredMarks);
152
+ results.push({
153
+ type: 'link',
154
+ url: href,
155
+ link: {
156
+ type: isInternal ? 'internal' : 'external',
157
+ url: href,
158
+ target,
159
+ itemId,
160
+ targetItemLongId,
161
+ queryString
162
+ },
163
+ children: linkChildren.length ? linkChildren : [{ text: childElement.textContent || 'Link' }]
164
+ });
165
+ }
166
+ else if (shouldPreserveAsRaw(childElement)) {
167
+ // Preserve complex elements as raw HTML
168
+ results.push({
169
+ text: childElement.outerHTML,
170
+ isRawHtml: true
171
+ });
172
+ }
173
+ else {
174
+ // Process as regular inline element with marks
175
+ const childMarks = getMarksFromElement(childElement, configuredMarks);
176
+ const combinedMarks = { ...currentElementMarks, ...childMarks };
177
+ const childContent = processNodeWithInlines(childElement, configuredMarks);
178
+ childContent.forEach(node => {
179
+ if ('text' in node) {
180
+ Object.assign(node, combinedMarks);
181
+ }
182
+ results.push(node);
183
+ });
184
+ }
185
+ }
186
+ });
187
+ return results;
188
+ };
189
+ // Process inline elements and text
190
+ const processNodeWithInlines = (element, configuredMarks) => {
191
+ const results = [];
192
+ const currentElementMarks = getMarksFromElement(element, configuredMarks);
193
+ Array.from(element.childNodes).forEach(child => {
194
+ if (child.nodeType === Node.TEXT_NODE) {
195
+ if (child.textContent) {
196
+ results.push({
197
+ text: child.textContent,
198
+ ...currentElementMarks
199
+ });
200
+ }
201
+ }
202
+ else if (child.nodeType === Node.ELEMENT_NODE) {
203
+ const childElement = child;
204
+ const tagName = childElement.tagName.toLowerCase();
205
+ if (tagName === 'br') {
206
+ results.push({ text: '<br>' });
207
+ }
208
+ else if (tagName === 'a') {
209
+ const href = childElement.getAttribute('href') || '';
210
+ const target = childElement.getAttribute('target') || '_self';
211
+ const isInternal = childElement.hasAttribute('data-internal');
212
+ const itemId = childElement.getAttribute('data-item-id') || '';
213
+ const targetItemLongId = childElement.getAttribute('data-item-longid') || '';
214
+ const queryString = childElement.getAttribute('data-querystring') || '';
215
+ const linkChildren = processNodeWithInlines(childElement, configuredMarks);
216
+ results.push({
217
+ type: 'link',
218
+ url: href,
219
+ link: {
220
+ type: isInternal ? 'internal' : 'external',
221
+ url: href,
222
+ target,
223
+ itemId,
224
+ targetItemLongId,
225
+ queryString
226
+ },
227
+ children: linkChildren.length ? linkChildren : [{ text: childElement.textContent || 'Link' }]
228
+ });
229
+ }
230
+ else if (tagName === 'ul' || tagName === 'ol' || shouldPreserveAsRaw(childElement)) {
231
+ // Preserve nested lists and complex elements as raw HTML
232
+ results.push({
233
+ text: childElement.outerHTML,
234
+ isRawHtml: true
235
+ });
236
+ }
237
+ else {
238
+ // Process as regular inline element with marks
239
+ const childMarks = getMarksFromElement(childElement, configuredMarks);
240
+ const combinedMarks = { ...currentElementMarks, ...childMarks };
241
+ const childContent = processNodeWithInlines(childElement, configuredMarks);
242
+ childContent.forEach(node => {
243
+ if ('text' in node) {
244
+ Object.assign(node, combinedMarks);
245
+ }
246
+ results.push(node);
247
+ });
248
+ }
249
+ }
250
+ });
251
+ return results;
252
+ };
253
+ // Process top-level nodes
254
+ // First, check if we have mixed content (text and br elements) that should be combined
255
+ const topLevelNodes = Array.from(div.childNodes);
256
+ const hasMixedContent = topLevelNodes.some(node => (node.nodeType === Node.TEXT_NODE && node.textContent?.trim()) ||
257
+ (node.nodeType === Node.ELEMENT_NODE && node.tagName.toLowerCase() === 'br'));
258
+ if (hasMixedContent && topLevelNodes.length > 1) {
259
+ // Combine mixed text and br elements into a single element
260
+ const combinedChildren = [];
261
+ topLevelNodes.forEach(node => {
262
+ if (node.nodeType === Node.TEXT_NODE && node.textContent) {
263
+ combinedChildren.push({ text: node.textContent });
264
+ }
265
+ else if (node.nodeType === Node.ELEMENT_NODE) {
266
+ const element = node;
267
+ const tagName = element.tagName.toLowerCase();
268
+ if (tagName === 'br') {
269
+ combinedChildren.push({ text: '<br>' });
270
+ }
271
+ else {
272
+ // Process other inline elements
273
+ const inlineChildren = processNodeWithInlines(element, profile.marks);
274
+ combinedChildren.push(...inlineChildren);
275
+ }
276
+ }
277
+ });
278
+ if (combinedChildren.length > 0) {
279
+ nodes.push({
280
+ type: defaultBlockType,
281
+ children: combinedChildren
282
+ });
283
+ }
284
+ }
285
+ else {
286
+ // Process normally for single elements or non-mixed content
287
+ Array.from(div.childNodes).forEach(node => {
288
+ if (node.nodeType === Node.ELEMENT_NODE) {
289
+ const element = node;
290
+ const tagName = element.tagName.toLowerCase();
291
+ // Extract alignment if present
292
+ const style = element.getAttribute('style') || '';
293
+ const alignMatch = style.match(/text-align:\s*([^;]+)/);
294
+ const align = alignMatch ? alignMatch[1] : undefined;
295
+ if (tagName === 'br') {
296
+ // Handle standalone br elements at top level
297
+ nodes.push({
298
+ type: defaultBlockType,
299
+ children: [{ text: '<br>' }]
300
+ });
301
+ }
302
+ else if (tagName === 'ul' || tagName === 'ol') {
303
+ if (profile.lists) {
304
+ processListElement(element);
305
+ }
306
+ else {
307
+ // If lists are not enabled, treat as preserved elements
308
+ nodes.push({
309
+ type: defaultBlockType,
310
+ children: [{ text: element.outerHTML, isRawHtml: true }]
311
+ });
312
+ }
313
+ }
314
+ else if (tagName === 'li') {
315
+ if (profile.lists) {
316
+ // Handle standalone li elements
317
+ const parentTagName = element.parentElement?.tagName.toLowerCase();
318
+ const listType = parentTagName === 'ul' ? 'unordered' : parentTagName === 'ol' ? 'ordered' : 'unordered';
319
+ const children = processNodeWithInlines(element, profile.marks);
320
+ nodes.push({
321
+ type: 'list-item',
322
+ listType: listType,
323
+ indent: 0,
324
+ align,
325
+ children: children.length > 0 ? children : [{ text: '' }]
326
+ });
327
+ }
328
+ else {
329
+ nodes.push({
330
+ type: defaultBlockType,
331
+ children: [{ text: element.outerHTML, isRawHtml: true }]
332
+ });
333
+ }
334
+ }
335
+ else if (shouldPreserveAsRaw(element)) {
336
+ // Preserve complex elements as raw HTML
337
+ nodes.push({
338
+ type: defaultBlockType,
339
+ children: [{ text: element.outerHTML, isRawHtml: true }]
340
+ });
341
+ }
342
+ else {
343
+ const children = processNodeWithInlines(element, profile.marks);
344
+ const blockType = getBlockTypeForElement(element);
345
+ nodes.push({
346
+ type: blockType,
347
+ align,
348
+ children: children.length > 0 ? children : [{ text: '' }]
349
+ });
350
+ }
351
+ }
352
+ else if (node.nodeType === Node.TEXT_NODE && node.textContent?.trim()) {
353
+ nodes.push({
354
+ type: defaultBlockType,
355
+ children: [{ text: node.textContent }]
356
+ });
357
+ }
358
+ });
359
+ }
360
+ return nodes.length > 0 ? nodes : [{ type: defaultBlockType, children: [{ text: '' }] }];
361
+ };
362
+ export const formatTextWithMarks = (child, configuredMarks) => {
363
+ // If this is raw HTML, return it as-is with unescaping
364
+ if (child.isRawHtml) {
365
+ return unescapeHtmlEntities(child.text);
366
+ }
367
+ let text = child.text;
368
+ // Convert literal <br> text back to <br> tags
369
+ text = text.replace(/<br>/g, '<br>');
370
+ // Apply marks using Slate's built-in mark system
371
+ configuredMarks.forEach(markId => {
372
+ const markConfig = SLATE_MARKS[markId];
373
+ if (markConfig && child[markId]) {
374
+ text = markConfig.renderHtml(text);
375
+ }
376
+ });
377
+ return text;
378
+ };
379
+ export const slateToHtml = (value, profile) => {
380
+ let html = '';
381
+ let i = 0;
382
+ const defaultBlockType = getDefaultBlockType(profile.blocks);
383
+ // Build nested list HTML
384
+ const buildNestedListHtml = (startIndex, targetIndent = 0) => {
385
+ let listHtml = '';
386
+ let currentIndex = startIndex;
387
+ // Find first element at target level to determine list type
388
+ let firstListType = 'unordered';
389
+ while (currentIndex < value.length) {
390
+ const element = value[currentIndex];
391
+ if (element.type !== 'list-item')
392
+ break;
393
+ const elementIndent = element.indent || 0;
394
+ if (elementIndent === targetIndent) {
395
+ firstListType = element.listType || 'unordered';
396
+ break;
397
+ }
398
+ else if (elementIndent < targetIndent) {
399
+ break;
400
+ }
401
+ currentIndex++;
402
+ }
403
+ const listTag = firstListType === 'ordered' ? 'ol' : 'ul';
404
+ listHtml += `<${listTag}>`;
405
+ currentIndex = startIndex;
406
+ while (currentIndex < value.length) {
407
+ const element = value[currentIndex];
408
+ if (element.type !== 'list-item')
409
+ break;
410
+ const elementIndent = element.indent || 0;
411
+ const elementListType = element.listType || 'unordered';
412
+ if (elementIndent < targetIndent)
413
+ break;
414
+ if (elementIndent === targetIndent && elementListType === firstListType) {
415
+ const processedChildren = processChildrenWithInlines(element.children, profile.marks);
416
+ listHtml += `<li>${processedChildren}`;
417
+ // Check for nested lists
418
+ if (currentIndex + 1 < value.length) {
419
+ const nextElement = value[currentIndex + 1];
420
+ if (nextElement.type === 'list-item' && (nextElement.indent || 0) > elementIndent) {
421
+ const nestedResult = buildNestedListHtml(currentIndex + 1, elementIndent + 1);
422
+ listHtml += nestedResult.html;
423
+ currentIndex = nestedResult.nextIndex - 1;
424
+ }
425
+ }
426
+ listHtml += `</li>`;
427
+ currentIndex++;
428
+ }
429
+ else if (elementIndent > targetIndent) {
430
+ const nestedResult = buildNestedListHtml(currentIndex, elementIndent);
431
+ listHtml += nestedResult.html;
432
+ currentIndex = nestedResult.nextIndex;
433
+ }
434
+ else {
435
+ break;
436
+ }
437
+ }
438
+ listHtml += `</${listTag}>`;
439
+ return { html: listHtml, nextIndex: currentIndex };
440
+ };
441
+ // Process children with inline elements
442
+ const processChildrenWithInlines = (children, configuredMarks) => {
443
+ let result = '';
444
+ children.forEach(child => {
445
+ if (SlateElement.isElement(child)) {
446
+ if (child.type === 'link') {
447
+ const linkElement = child;
448
+ const isInternal = linkElement.link?.type === 'internal';
449
+ const linkText = linkElement.children?.map((c) => {
450
+ if (SlateElement.isElement(c)) {
451
+ return processChildrenWithInlines(c.children, configuredMarks);
452
+ }
453
+ else {
454
+ const textNode = c;
455
+ return textNode.isRawHtml ? unescapeHtmlEntities(textNode.text) : formatTextWithMarks(textNode, configuredMarks);
456
+ }
457
+ }).join('') || '';
458
+ if (isInternal) {
459
+ const itemId = linkElement.link?.itemId || '';
460
+ const targetItemLongId = linkElement.link?.targetItemLongId || '';
461
+ const target = linkElement.link?.target || '_self';
462
+ const queryString = linkElement.link?.queryString || '';
463
+ result += `<a href="#" data-internal="true" data-item-id="${itemId}" data-item-longid="${targetItemLongId}" target="${target}" data-querystring="${queryString}" class="internal-link">${linkText}</a>`;
464
+ }
465
+ else {
466
+ const url = linkElement.url || linkElement.link?.url || '#';
467
+ const target = linkElement.link?.target || '_self';
468
+ const queryString = linkElement.link?.queryString || '';
469
+ result += `<a href="${url}" target="${target}" data-querystring="${queryString}">${linkText}</a>`;
470
+ }
471
+ }
472
+ else {
473
+ // Handle other element types
474
+ result += processChildrenWithInlines(child.children, configuredMarks);
475
+ }
476
+ }
477
+ else {
478
+ // Regular text node
479
+ const textNode = child;
480
+ result += textNode.isRawHtml ? unescapeHtmlEntities(textNode.text) : formatTextWithMarks(textNode, configuredMarks);
481
+ }
482
+ });
483
+ return result;
484
+ };
485
+ // Process all elements
486
+ while (i < value.length) {
487
+ const element = value[i];
488
+ // Handle list items
489
+ if (element.type === 'list-item') {
490
+ const listResult = buildNestedListHtml(i, element.indent || 0);
491
+ html += listResult.html;
492
+ i = listResult.nextIndex;
493
+ continue;
494
+ }
495
+ const alignStyle = element.align ? ` style="text-align: ${element.align};"` : '';
496
+ if (element.type === 'preserved-element') {
497
+ // Handle preserved elements by restoring their original HTML
498
+ const preservedElement = element;
499
+ html += preservedElement.originalHtml;
500
+ }
501
+ else {
502
+ const blockConfig = SLATE_BLOCKS[element.type];
503
+ if (blockConfig && profile.blocks.includes(element.type) && element.children) {
504
+ const processedChildren = processChildrenWithInlines(element.children, profile.marks);
505
+ html += blockConfig.renderHtml(processedChildren, alignStyle);
506
+ }
507
+ else {
508
+ // Fallback for unknown types
509
+ const processedChildren = processChildrenWithInlines(element.children, profile.marks);
510
+ const defaultBlockConfig = SLATE_BLOCKS[defaultBlockType];
511
+ if (defaultBlockConfig) {
512
+ html += defaultBlockConfig.renderHtml(processedChildren, alignStyle);
513
+ }
514
+ else if (defaultBlockType === 'no-tag') {
515
+ html += processedChildren;
516
+ }
517
+ else {
518
+ html += `<p${alignStyle}>${processedChildren}</p>`;
519
+ }
520
+ }
521
+ }
522
+ i++;
523
+ }
524
+ // Handle empty content
525
+ if (!html) {
526
+ const defaultBlockConfig = SLATE_BLOCKS[defaultBlockType];
527
+ if (defaultBlockConfig) {
528
+ return defaultBlockConfig.renderHtml('<br>', '');
529
+ }
530
+ else if (defaultBlockType === 'no-tag') {
531
+ return '<br>';
532
+ }
533
+ else {
534
+ return '<p><br></p>';
535
+ }
536
+ }
537
+ return html;
538
+ };
539
+ //# sourceMappingURL=conversion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversion.js","sourceRoot":"","sources":["../../../../../src/editor/field-types/richtext/utils/conversion.ts"],"names":[],"mappings":"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"}