@alpaca-editor/core 1.0.3939 → 1.0.3942

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 (325) hide show
  1. package/dist/components/ActionButton.d.ts +1 -0
  2. package/dist/components/ActionButton.js +2 -2
  3. package/dist/components/ActionButton.js.map +1 -1
  4. package/dist/editor/FieldActionsOverlay.d.ts +1 -0
  5. package/dist/editor/FieldActionsOverlay.js +2 -11
  6. package/dist/editor/FieldActionsOverlay.js.map +1 -1
  7. package/dist/editor/PictureCropper.js +65 -23
  8. package/dist/editor/PictureCropper.js.map +1 -1
  9. package/dist/editor/PictureEditor.js +16 -2
  10. package/dist/editor/PictureEditor.js.map +1 -1
  11. package/dist/editor/Titlebar.js +1 -1
  12. package/dist/editor/Titlebar.js.map +1 -1
  13. package/dist/editor/ai/GhostWriter.js +21 -2
  14. package/dist/editor/ai/GhostWriter.js.map +1 -1
  15. package/dist/editor/commands/componentCommands.js +7 -3
  16. package/dist/editor/commands/componentCommands.js.map +1 -1
  17. package/dist/editor/media-selector/MediaFolderBrowser.d.ts +5 -0
  18. package/dist/editor/media-selector/MediaFolderBrowser.js +77 -0
  19. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -0
  20. package/dist/editor/media-selector/MediaSelector.js +1 -1
  21. package/dist/editor/media-selector/MediaSelector.js.map +1 -1
  22. package/dist/editor/media-selector/Thumbnails.js +2 -2
  23. package/dist/editor/media-selector/index.d.ts +8 -0
  24. package/dist/editor/media-selector/index.js +9 -0
  25. package/dist/editor/media-selector/index.js.map +1 -0
  26. package/dist/editor/menubar/BrowseHistory.js +1 -1
  27. package/dist/editor/menubar/PageSelector.js +39 -15
  28. package/dist/editor/menubar/PageSelector.js.map +1 -1
  29. package/dist/editor/page-editor-chrome/useInlineAICompletion.js +37 -11
  30. package/dist/editor/page-editor-chrome/useInlineAICompletion.js.map +1 -1
  31. package/dist/editor/reviews/Comment.js +1 -1
  32. package/dist/editor/reviews/Comment.js.map +1 -1
  33. package/dist/editor/services/aiService.js +0 -1
  34. package/dist/editor/services/aiService.js.map +1 -1
  35. package/dist/editor/sidebar/ComponentTree.js +3 -4
  36. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  37. package/dist/editor/ui/SimpleTabs.d.ts +1 -0
  38. package/dist/editor/ui/SimpleTabs.js +3 -3
  39. package/dist/editor/ui/SimpleTabs.js.map +1 -1
  40. package/dist/editor/ui/Splitter.js +61 -6
  41. package/dist/editor/ui/Splitter.js.map +1 -1
  42. package/dist/editor/views/MediaFolderEditView.d.ts +4 -0
  43. package/dist/editor/views/MediaFolderEditView.js +40 -0
  44. package/dist/editor/views/MediaFolderEditView.js.map +1 -0
  45. package/dist/editor/views/SingleEditView.js +9 -1
  46. package/dist/editor/views/SingleEditView.js.map +1 -1
  47. package/dist/revision.d.ts +2 -2
  48. package/dist/revision.js +2 -2
  49. package/dist/styles.css +61 -5
  50. package/package.json +8 -2
  51. package/.prettierrc +0 -3
  52. package/build.css +0 -3
  53. package/components.json +0 -21
  54. package/eslint.config.mjs +0 -4
  55. package/images/bg-shape-black.webp +0 -0
  56. package/images/wizard-bg.png +0 -0
  57. package/images/wizard-tour.png +0 -0
  58. package/images/wizard.png +0 -0
  59. package/src/client-components/api.ts +0 -6
  60. package/src/client-components/index.ts +0 -19
  61. package/src/components/ActionButton.tsx +0 -41
  62. package/src/components/Error.tsx +0 -57
  63. package/src/components/ui/CardConnector.tsx +0 -56
  64. package/src/components/ui/button.tsx +0 -62
  65. package/src/components/ui/card.tsx +0 -372
  66. package/src/components/ui/context-menu.tsx +0 -250
  67. package/src/config/config.tsx +0 -917
  68. package/src/config/types.ts +0 -286
  69. package/src/editor/ComponentInfo.tsx +0 -90
  70. package/src/editor/ConfirmationDialog.tsx +0 -103
  71. package/src/editor/ContentTree.tsx +0 -730
  72. package/src/editor/ContextMenu.tsx +0 -230
  73. package/src/editor/Editor.tsx +0 -90
  74. package/src/editor/EditorWarning.tsx +0 -34
  75. package/src/editor/EditorWarnings.tsx +0 -33
  76. package/src/editor/FieldActionsOverlay.tsx +0 -307
  77. package/src/editor/FieldEditorPopup.tsx +0 -65
  78. package/src/editor/FieldHistory.tsx +0 -75
  79. package/src/editor/FieldList.tsx +0 -190
  80. package/src/editor/FieldListField.tsx +0 -391
  81. package/src/editor/FieldListFieldWithFallbacks.tsx +0 -217
  82. package/src/editor/FloatingToolbar.tsx +0 -163
  83. package/src/editor/ImageEditor.tsx +0 -128
  84. package/src/editor/ItemInfo.tsx +0 -90
  85. package/src/editor/LinkEditorDialog.tsx +0 -196
  86. package/src/editor/MainLayout.tsx +0 -95
  87. package/src/editor/MobileLayout.tsx +0 -68
  88. package/src/editor/NewEditorClient.tsx +0 -11
  89. package/src/editor/PictureCropper.tsx +0 -503
  90. package/src/editor/PictureEditor.tsx +0 -277
  91. package/src/editor/PictureEditorDialog.tsx +0 -381
  92. package/src/editor/PublishDialog.ignore +0 -74
  93. package/src/editor/ScrollingContentTree.tsx +0 -67
  94. package/src/editor/Terminal.tsx +0 -227
  95. package/src/editor/Titlebar.tsx +0 -104
  96. package/src/editor/ai/AiPopup.tsx +0 -59
  97. package/src/editor/ai/AiResponseMessage.tsx +0 -106
  98. package/src/editor/ai/AiTerminal.tsx +0 -503
  99. package/src/editor/ai/AiToolCall.tsx +0 -61
  100. package/src/editor/ai/EditorAiTerminal.tsx +0 -20
  101. package/src/editor/ai/GhostWriter.tsx +0 -432
  102. package/src/editor/ai/aiPageModel.ts +0 -108
  103. package/src/editor/ai/editorAiContext.ts +0 -18
  104. package/src/editor/client/AboutDialog.tsx +0 -44
  105. package/src/editor/client/EditorClient.tsx +0 -2241
  106. package/src/editor/client/GenericDialog.tsx +0 -50
  107. package/src/editor/client/editContext.ts +0 -416
  108. package/src/editor/client/helpers.ts +0 -44
  109. package/src/editor/client/itemsRepository.ts +0 -574
  110. package/src/editor/client/operations.ts +0 -768
  111. package/src/editor/client/pageModelBuilder.ts +0 -219
  112. package/src/editor/commands/commands.ts +0 -22
  113. package/src/editor/commands/componentCommands.tsx +0 -424
  114. package/src/editor/commands/createVersionCommand.ts +0 -33
  115. package/src/editor/commands/deleteVersionCommand.ts +0 -71
  116. package/src/editor/commands/itemCommands.tsx +0 -351
  117. package/src/editor/commands/localizeItem/LocalizeItemDialog.tsx +0 -201
  118. package/src/editor/commands/localizeItem/LocalizeItemUtils.ts +0 -27
  119. package/src/editor/commands/undo.ts +0 -39
  120. package/src/editor/component-designer/ComponentDesigner.tsx +0 -70
  121. package/src/editor/component-designer/ComponentDesignerAiTerminal.tsx +0 -11
  122. package/src/editor/component-designer/ComponentDesignerMenu.tsx +0 -91
  123. package/src/editor/component-designer/ComponentEditor.tsx +0 -97
  124. package/src/editor/component-designer/ComponentRenderingCodeEditor.tsx +0 -31
  125. package/src/editor/component-designer/ComponentRenderingEditor.tsx +0 -104
  126. package/src/editor/component-designer/ComponentsDropdown.tsx +0 -39
  127. package/src/editor/component-designer/PlaceholdersEditor.tsx +0 -179
  128. package/src/editor/component-designer/RenderingsDropdown.tsx +0 -36
  129. package/src/editor/component-designer/TemplateEditor.tsx +0 -236
  130. package/src/editor/component-designer/aiContext.ts +0 -23
  131. package/src/editor/componentTreeHelper.tsx +0 -116
  132. package/src/editor/context-menu/CopyMoveMenu.tsx +0 -103
  133. package/src/editor/context-menu/InsertMenu.tsx +0 -347
  134. package/src/editor/control-center/About.tsx +0 -342
  135. package/src/editor/control-center/ControlCenterMenu.tsx +0 -76
  136. package/src/editor/control-center/IndexOverview.tsx +0 -50
  137. package/src/editor/control-center/IndexSettings.tsx +0 -266
  138. package/src/editor/control-center/Info.tsx +0 -104
  139. package/src/editor/control-center/QuotaInfo.tsx +0 -301
  140. package/src/editor/control-center/Status.tsx +0 -113
  141. package/src/editor/control-center/WebSocketMessages.tsx +0 -155
  142. package/src/editor/editor-warnings/ItemLocked.tsx +0 -63
  143. package/src/editor/editor-warnings/NoLanguageWriteAccess.tsx +0 -22
  144. package/src/editor/editor-warnings/NoWorkflowWriteAccess.tsx +0 -23
  145. package/src/editor/editor-warnings/NoWriteAccess.tsx +0 -16
  146. package/src/editor/editor-warnings/ValidationErrors.tsx +0 -54
  147. package/src/editor/field-types/AttachmentEditor.tsx +0 -9
  148. package/src/editor/field-types/CheckboxEditor.tsx +0 -47
  149. package/src/editor/field-types/DropLinkEditor.tsx +0 -80
  150. package/src/editor/field-types/DropListEditor.tsx +0 -84
  151. package/src/editor/field-types/ImageFieldEditor.tsx +0 -65
  152. package/src/editor/field-types/InternalLinkFieldEditor.tsx +0 -117
  153. package/src/editor/field-types/LinkFieldEditor.tsx +0 -85
  154. package/src/editor/field-types/MultiLineText.tsx +0 -82
  155. package/src/editor/field-types/PictureFieldEditor.tsx +0 -121
  156. package/src/editor/field-types/RawEditor.tsx +0 -53
  157. package/src/editor/field-types/ReactQuill.tsx +0 -580
  158. package/src/editor/field-types/RichTextEditor.tsx +0 -22
  159. package/src/editor/field-types/RichTextEditorComponent.tsx +0 -127
  160. package/src/editor/field-types/SingleLineText.tsx +0 -174
  161. package/src/editor/field-types/TreeListEditor.tsx +0 -261
  162. package/src/editor/fieldTypes.ts +0 -140
  163. package/src/editor/media-selector/AiImageSearch.tsx +0 -185
  164. package/src/editor/media-selector/AiImageSearchPrompt.tsx +0 -94
  165. package/src/editor/media-selector/MediaSelector.tsx +0 -42
  166. package/src/editor/media-selector/Preview.tsx +0 -14
  167. package/src/editor/media-selector/Thumbnails.tsx +0 -48
  168. package/src/editor/media-selector/TreeSelector.tsx +0 -292
  169. package/src/editor/media-selector/UploadZone.tsx +0 -137
  170. package/src/editor/menubar/ActionsMenu.tsx +0 -94
  171. package/src/editor/menubar/ActiveUsers.tsx +0 -17
  172. package/src/editor/menubar/ApproveAndPublish.tsx +0 -18
  173. package/src/editor/menubar/BrowseHistory.tsx +0 -28
  174. package/src/editor/menubar/ItemLanguageVersion.tsx +0 -76
  175. package/src/editor/menubar/LanguageSelector.tsx +0 -226
  176. package/src/editor/menubar/Menu.tsx +0 -83
  177. package/src/editor/menubar/NavButtons.tsx +0 -74
  178. package/src/editor/menubar/PageSelector.tsx +0 -166
  179. package/src/editor/menubar/PageViewerControls.tsx +0 -120
  180. package/src/editor/menubar/PreviewSecondaryControls.tsx +0 -18
  181. package/src/editor/menubar/SecondaryControls.tsx +0 -45
  182. package/src/editor/menubar/Separator.tsx +0 -12
  183. package/src/editor/menubar/SiteInfo.tsx +0 -53
  184. package/src/editor/menubar/User.tsx +0 -27
  185. package/src/editor/menubar/VersionSelector.tsx +0 -142
  186. package/src/editor/page-editor-chrome/CommentHighlighting.tsx +0 -307
  187. package/src/editor/page-editor-chrome/CommentHighlightings.tsx +0 -35
  188. package/src/editor/page-editor-chrome/FieldActionIndicator.tsx +0 -59
  189. package/src/editor/page-editor-chrome/FieldActionIndicators.tsx +0 -23
  190. package/src/editor/page-editor-chrome/FieldEditedIndicator.tsx +0 -64
  191. package/src/editor/page-editor-chrome/FieldEditedIndicators.tsx +0 -35
  192. package/src/editor/page-editor-chrome/FrameMenu.tsx +0 -338
  193. package/src/editor/page-editor-chrome/FrameMenus.tsx +0 -48
  194. package/src/editor/page-editor-chrome/InlineEditor.tsx +0 -765
  195. package/src/editor/page-editor-chrome/LockedFieldIndicator.tsx +0 -61
  196. package/src/editor/page-editor-chrome/NoLayout.tsx +0 -36
  197. package/src/editor/page-editor-chrome/PageEditorChrome.tsx +0 -122
  198. package/src/editor/page-editor-chrome/PictureEditorOverlay.tsx +0 -161
  199. package/src/editor/page-editor-chrome/PlaceholderDropZone.tsx +0 -169
  200. package/src/editor/page-editor-chrome/PlaceholderDropZones.tsx +0 -315
  201. package/src/editor/page-editor-chrome/SuggestionHighlighting.tsx +0 -300
  202. package/src/editor/page-editor-chrome/SuggestionHighlightings.tsx +0 -40
  203. package/src/editor/page-editor-chrome/useInlineAICompletion.tsx +0 -791
  204. package/src/editor/page-viewer/DeviceToolbar.tsx +0 -70
  205. package/src/editor/page-viewer/EditorForm.tsx +0 -258
  206. package/src/editor/page-viewer/MiniMap.tsx +0 -362
  207. package/src/editor/page-viewer/PageViewer.tsx +0 -169
  208. package/src/editor/page-viewer/PageViewerFrame.tsx +0 -1022
  209. package/src/editor/page-viewer/pageModelSkeletonBuilder.ts +0 -412
  210. package/src/editor/page-viewer/pageViewContext.ts +0 -186
  211. package/src/editor/pageModel.ts +0 -220
  212. package/src/editor/picture-shared.tsx +0 -53
  213. package/src/editor/reviews/Comment.tsx +0 -307
  214. package/src/editor/reviews/Comments.tsx +0 -125
  215. package/src/editor/reviews/DiffView.tsx +0 -109
  216. package/src/editor/reviews/PreviewInfo.tsx +0 -35
  217. package/src/editor/reviews/Reviews.tsx +0 -280
  218. package/src/editor/reviews/SuggestedEdit.tsx +0 -316
  219. package/src/editor/reviews/reviewCommands.tsx +0 -47
  220. package/src/editor/reviews/useReviews.tsx +0 -70
  221. package/src/editor/services/aiService.ts +0 -174
  222. package/src/editor/services/componentDesignerService.ts +0 -151
  223. package/src/editor/services/contentService.ts +0 -180
  224. package/src/editor/services/editService.ts +0 -488
  225. package/src/editor/services/indexService.ts +0 -24
  226. package/src/editor/services/reviewsService.ts +0 -53
  227. package/src/editor/services/serviceHelper.ts +0 -95
  228. package/src/editor/services/suggestedEditsService.ts +0 -39
  229. package/src/editor/services/systemService.ts +0 -5
  230. package/src/editor/services/translationService.ts +0 -21
  231. package/src/editor/services-server/api.ts +0 -150
  232. package/src/editor/services-server/graphQL.ts +0 -106
  233. package/src/editor/sidebar/ComponentPalette.tsx +0 -161
  234. package/src/editor/sidebar/ComponentTree.tsx +0 -548
  235. package/src/editor/sidebar/ComponentTree2.tsxx +0 -490
  236. package/src/editor/sidebar/Debug.tsx +0 -111
  237. package/src/editor/sidebar/DictionaryEditor.tsx +0 -261
  238. package/src/editor/sidebar/EditHistory.tsx +0 -134
  239. package/src/editor/sidebar/GraphQL.tsx +0 -164
  240. package/src/editor/sidebar/Insert.tsx +0 -35
  241. package/src/editor/sidebar/MainContentTree.tsx +0 -102
  242. package/src/editor/sidebar/Performance.tsx +0 -53
  243. package/src/editor/sidebar/Sessions.tsx +0 -35
  244. package/src/editor/sidebar/Sidebar.tsx +0 -20
  245. package/src/editor/sidebar/SidebarView.tsx +0 -152
  246. package/src/editor/sidebar/Translations.tsx +0 -295
  247. package/src/editor/sidebar/Validation.tsx +0 -102
  248. package/src/editor/sidebar/ViewSelector.tsx +0 -60
  249. package/src/editor/sidebar/Workbox.tsx +0 -209
  250. package/src/editor/ui/CenteredMessage.tsx +0 -7
  251. package/src/editor/ui/CopyMoveTargetSelectorDialog.tsx +0 -81
  252. package/src/editor/ui/CopyToClipboardButton.tsx +0 -24
  253. package/src/editor/ui/DialogButtons.tsx +0 -11
  254. package/src/editor/ui/Icons.tsx +0 -709
  255. package/src/editor/ui/ItemList.tsx +0 -76
  256. package/src/editor/ui/ItemNameDialogNew.tsx +0 -118
  257. package/src/editor/ui/ItemSearch.tsx +0 -153
  258. package/src/editor/ui/PerfectTree.tsx +0 -571
  259. package/src/editor/ui/Section.tsx +0 -35
  260. package/src/editor/ui/SimpleIconButton.tsx +0 -54
  261. package/src/editor/ui/SimpleMenu.tsx +0 -40
  262. package/src/editor/ui/SimpleTable.tsx +0 -60
  263. package/src/editor/ui/SimpleTabs.tsx +0 -55
  264. package/src/editor/ui/SimpleToolbar.tsx +0 -7
  265. package/src/editor/ui/Spinner.tsx +0 -9
  266. package/src/editor/ui/Splitter.tsx +0 -314
  267. package/src/editor/ui/StackedPanels.tsx +0 -134
  268. package/src/editor/ui/Toolbar.tsx +0 -7
  269. package/src/editor/utils/id-helper.ts +0 -3
  270. package/src/editor/utils/insertOptions.ts +0 -69
  271. package/src/editor/utils/itemutils.ts +0 -29
  272. package/src/editor/utils/useMemoDebug.ts +0 -28
  273. package/src/editor/utils.ts +0 -486
  274. package/src/editor/views/CompareView.tsx +0 -245
  275. package/src/editor/views/EditView.tsx +0 -27
  276. package/src/editor/views/ItemEditor.tsx +0 -58
  277. package/src/editor/views/SingleEditView.tsx +0 -46
  278. package/src/fonts/Geist-Black.woff2 +0 -0
  279. package/src/fonts/Geist-Bold.woff2 +0 -0
  280. package/src/fonts/Geist-ExtraBold.woff2 +0 -0
  281. package/src/fonts/Geist-ExtraLight.woff2 +0 -0
  282. package/src/fonts/Geist-Light.woff2 +0 -0
  283. package/src/fonts/Geist-Medium.woff2 +0 -0
  284. package/src/fonts/Geist-Regular.woff2 +0 -0
  285. package/src/fonts/Geist-SemiBold.woff2 +0 -0
  286. package/src/fonts/Geist-Thin.woff2 +0 -0
  287. package/src/fonts/Geist[wght].woff2 +0 -0
  288. package/src/fonts/index.ts +0 -10
  289. package/src/index.ts +0 -23
  290. package/src/lib/safelist.tsx +0 -16
  291. package/src/lib/utils.ts +0 -6
  292. package/src/page-wizard/PageWizard.tsx +0 -139
  293. package/src/page-wizard/WizardBox.tsx +0 -4
  294. package/src/page-wizard/WizardBoxConnector.tsx +0 -56
  295. package/src/page-wizard/WizardSteps.tsx +0 -458
  296. package/src/page-wizard/service.ts +0 -35
  297. package/src/page-wizard/startPageWizardCommand.ts +0 -26
  298. package/src/page-wizard/steps/BuildPageStep.tsx +0 -259
  299. package/src/page-wizard/steps/CollectStep.tsx +0 -296
  300. package/src/page-wizard/steps/ComponentTypesSelector.tsx +0 -454
  301. package/src/page-wizard/steps/Components.tsx +0 -193
  302. package/src/page-wizard/steps/ContentStep.tsx +0 -890
  303. package/src/page-wizard/steps/EditButton.tsx +0 -34
  304. package/src/page-wizard/steps/FieldEditor.tsx +0 -102
  305. package/src/page-wizard/steps/Generate.tsx +0 -60
  306. package/src/page-wizard/steps/ImagesStep.tsx +0 -382
  307. package/src/page-wizard/steps/LayoutStep.tsx +0 -227
  308. package/src/page-wizard/steps/MetaDataStep.tsx +0 -173
  309. package/src/page-wizard/steps/SelectStep.tsx +0 -281
  310. package/src/page-wizard/steps/schema.ts +0 -180
  311. package/src/page-wizard/steps/usePageCreator.ts +0 -325
  312. package/src/page-wizard/usePageWizard.ts +0 -79
  313. package/src/revision.ts +0 -2
  314. package/src/splash-screen/NewPage.tsx +0 -294
  315. package/src/splash-screen/OpenPage.tsx +0 -113
  316. package/src/splash-screen/RecentPages.tsx +0 -123
  317. package/src/splash-screen/SectionHeadline.tsx +0 -21
  318. package/src/splash-screen/SplashScreen.tsx +0 -195
  319. package/src/tour/Tour.tsx +0 -566
  320. package/src/tour/default-tour.tsx +0 -301
  321. package/src/tour/preview-tour.tsx +0 -128
  322. package/src/types.ts +0 -335
  323. package/styles.css +0 -765
  324. package/tsconfig.build.json +0 -31
  325. package/tsconfig.json +0 -14
@@ -1,180 +0,0 @@
1
- import {
2
- WizardSchemaComponent,
3
- PageSchema,
4
- SchemaComponent,
5
- WizardSchemaField,
6
- } from "../PageWizard";
7
- type WizardSchemaComponentAccumulator = {
8
- name: string;
9
- type: string;
10
- fields: WizardSchemaField[];
11
- validParentPlaceholders: Set<string>;
12
- validChildComponentTypes: Set<string>;
13
- allowedOnRoot: boolean;
14
- };
15
-
16
- export function convertPageSchemaToWizardComponents(
17
- pageSchema: PageSchema,
18
- whitelist: string[]
19
- ): WizardSchemaComponent[] {
20
- const componentMap = new Map<string, WizardSchemaComponentAccumulator>();
21
-
22
- /**
23
- * Recursively processes a SchemaComponent.
24
- *
25
- * @param component - The current SchemaComponent to process.
26
- * @param parentPlaceholder - The name of the placeholder where the component appears.
27
- * @param isRoot - True if the component is at the root level.
28
- * @param parentAccumulator - The accumulator of the parent component (if the parent is allowed).
29
- */
30
- function processComponent(
31
- component: SchemaComponent,
32
- parentPlaceholder: string,
33
- isRoot: boolean,
34
- parentAccumulator?: WizardSchemaComponentAccumulator
35
- ): void {
36
- const isAllowed = whitelist.includes(component.type);
37
- let currentAccumulator: WizardSchemaComponentAccumulator | undefined =
38
- undefined;
39
-
40
- if (isAllowed) {
41
- // If a parent accumulator exists (and is allowed), record the child's type as a valid child type.
42
- if (parentAccumulator) {
43
- parentAccumulator.validChildComponentTypes.add(component.type);
44
- }
45
-
46
- if (componentMap.has(component.typeId)) {
47
- currentAccumulator = componentMap.get(component.typeId)!;
48
- currentAccumulator.validParentPlaceholders.add(parentPlaceholder);
49
- // Mark as allowed on root if encountered at the root level in any instance.
50
- if (isRoot) {
51
- currentAccumulator.allowedOnRoot = true;
52
- }
53
- } else {
54
- currentAccumulator = {
55
- name: component.typeId, // using typeId as the wizard component name
56
- type: component.type,
57
- fields: component.fields.map((field) => ({
58
- name: field.name,
59
- type: field.type,
60
- })),
61
- validParentPlaceholders: new Set([parentPlaceholder]),
62
- validChildComponentTypes: new Set<string>(),
63
- allowedOnRoot: isRoot,
64
- };
65
- componentMap.set(component.typeId, currentAccumulator);
66
- }
67
- }
68
- // Process child components regardless of whether the current component is allowed.
69
- for (const placeholder of component.placeholders) {
70
- for (const child of placeholder.components) {
71
- processComponent(child, placeholder.name, false, currentAccumulator);
72
- }
73
- }
74
- }
75
-
76
- // Process each top-level component in the PageSchema.
77
- for (const placeholder of pageSchema) {
78
- for (const component of placeholder.components) {
79
- processComponent(component, placeholder.name, true);
80
- }
81
- }
82
-
83
- // Convert accumulators to final WizardSchemaComponent objects.
84
- const wizardComponents: WizardSchemaComponent[] = [];
85
- for (const acc of componentMap.values()) {
86
- const wizardComponent: WizardSchemaComponent = {
87
- type: acc.type,
88
- fields: acc.fields,
89
- allowedChildrenComponentTypes: Array.from(acc.validChildComponentTypes),
90
- allowedOnRoot: acc.allowedOnRoot,
91
- };
92
- // Only include validParentPlaceholders if there is more than one.
93
- if (acc.validParentPlaceholders.size > 1) {
94
- wizardComponent.availableParentPlaceholders = Array.from(
95
- acc.validParentPlaceholders
96
- );
97
- }
98
- wizardComponents.push(wizardComponent);
99
- }
100
-
101
- return wizardComponents;
102
- }
103
-
104
- /**
105
- * Finds a placeholder (by its name) where a child component of type `childComponentType`
106
- * can be placed inside a parent of type `parentComponentType`. For a parentComponentType
107
- * equal to "root" (case‑insensitive), the function searches among top‑level placeholders.
108
- *
109
- * @param schema - The PageSchema (an array of SchemaPlaceholders).
110
- * @param parentComponentType - The type of the parent component, or "root" to indicate top‑level.
111
- * @param childComponentType - The type of the child component to place.
112
- * @returns The name of a valid placeholder or undefined if none is found.
113
- */
114
- export function getPlaceholder(
115
- schema: PageSchema,
116
- parentComponentType: string,
117
- childComponentType: string
118
- ): string | undefined {
119
- // Check for the special case where we want to place at the root level.
120
- if (parentComponentType.toLowerCase() === "root") {
121
- // First, look for a top-level placeholder that already contains a component
122
- // of the given childComponentType.
123
- for (const topPlaceholder of schema) {
124
- if (
125
- topPlaceholder.components.some((c) => c.type === childComponentType)
126
- ) {
127
- return topPlaceholder.name;
128
- }
129
- }
130
- // If not found, return the first top-level placeholder that is empty.
131
- for (const topPlaceholder of schema) {
132
- if (topPlaceholder.components.length === 0) {
133
- return topPlaceholder.name;
134
- }
135
- }
136
- return undefined;
137
- }
138
-
139
- // Recursive helper to search through nested SchemaComponents.
140
- function searchComponents(components: SchemaComponent[]): string | undefined {
141
- for (const component of components) {
142
- // If this component matches the desired parent type, check its placeholders.
143
- if (component.type === parentComponentType) {
144
- // First, try to find a placeholder that already has a child of the desired type.
145
- for (const placeholder of component.placeholders) {
146
- if (
147
- placeholder.components.some(
148
- (child) => child.type === childComponentType
149
- )
150
- ) {
151
- return placeholder.name;
152
- }
153
- }
154
- // Otherwise, pick an empty placeholder.
155
- for (const placeholder of component.placeholders) {
156
- if (placeholder.components.length === 0) {
157
- return placeholder.name;
158
- }
159
- }
160
- }
161
- // Recurse into any placeholders in the current component.
162
- for (const placeholder of component.placeholders) {
163
- const result = searchComponents(placeholder.components);
164
- if (result) {
165
- return result;
166
- }
167
- }
168
- }
169
- return undefined;
170
- }
171
-
172
- // Search through all top-level placeholders' components.
173
- for (const topPlaceholder of schema) {
174
- const result = searchComponents(topPlaceholder.components);
175
- if (result) {
176
- return result;
177
- }
178
- }
179
- return undefined;
180
- }
@@ -1,325 +0,0 @@
1
- import { Dispatch, SetStateAction, useMemo } from "react";
2
- import {
3
- SchemaComponent,
4
- Wizard,
5
- WizardPageComponent,
6
- WizardPageModel,
7
- WizardField,
8
- SchemaField,
9
- } from "../PageWizard";
10
- import { useEditContextRef } from "../../editor/client/editContext";
11
- import { useEditContext } from "../../editor/client/editContext";
12
- import { getComponentById } from "../../editor/componentTreeHelper";
13
- import { getPlaceholder } from "./schema";
14
- import { getItemDescriptor, normalizeGuid } from "../../editor/utils";
15
- import { ItemDescriptor } from "../../editor/pageModel";
16
- import { generateImage } from "../../editor/services/aiService";
17
-
18
- export function usePageCreator(
19
- pageItem: ItemDescriptor | undefined,
20
- wizard: Wizard,
21
- setPageModel: Dispatch<SetStateAction<WizardPageModel>>,
22
- ) {
23
- const editContext = useEditContext();
24
- const editContextRef = useEditContextRef();
25
-
26
- // Function to build a map of all components from wizard schema
27
- const buildComponentTypeMap = () => {
28
- const componentMap = new Map<string, string>();
29
- const fieldsMap = new Map<string, SchemaField>();
30
- const placeholderMap = new Map<string, string>();
31
-
32
- const processComponentsRecursively = (components: SchemaComponent[]) => {
33
- for (const component of components) {
34
- // Store the mapping from component type to typeId
35
- componentMap.set(component.type, component.typeId);
36
- placeholderMap.set(component.typeId, component.type);
37
-
38
- // Process nested components in placeholders
39
- if (component.placeholders && component.placeholders.length > 0) {
40
- for (const placeholder of component.placeholders) {
41
- if (placeholder.components && placeholder.components.length > 0) {
42
- processComponentsRecursively(placeholder.components);
43
- }
44
- }
45
- }
46
- if (component.fields && component.fields.length > 0) {
47
- for (const field of component.fields) {
48
- fieldsMap.set(component.typeId + "_" + field.name, field);
49
- }
50
- }
51
- }
52
- };
53
-
54
- // Start processing from the root level of the schema
55
- if (wizard.schema && wizard.schema.length > 0) {
56
- for (const placeholder of wizard.schema) {
57
- if (placeholder.components && placeholder.components.length > 0) {
58
- processComponentsRecursively(placeholder.components);
59
- }
60
- }
61
- }
62
-
63
- return { componentMap, fieldsMap };
64
- };
65
-
66
- // Build the component type to typeId map
67
- const mappings = useMemo(() => buildComponentTypeMap(), [wizard.schema]);
68
-
69
- const createNewComponent = async (
70
- component: WizardPageComponent,
71
- parentComponentType: string,
72
- index: number,
73
- parentComponentId?: string,
74
- ): Promise<ItemDescriptor | undefined> => {
75
- if (!editContext) return undefined;
76
- const { componentMap } = mappings;
77
- // Get the typeId from the map using the component type
78
- const typeId = componentMap.get(component.type) || component.type;
79
-
80
- if (!typeId) return undefined;
81
-
82
- // 1. Add the component to the placeholder
83
- console.log(
84
- `! Adding component ${component.type} (typeId: ${typeId}) to placeholder ${parentComponentId} at index ${index}. Name: ${component.name}`,
85
- );
86
-
87
- const placeholderKey =
88
- component.placeholder ||
89
- getPlaceholder(wizard.schema, parentComponentType, component.type);
90
-
91
- const placeholderId = parentComponentId
92
- ? placeholderKey + "_" + normalizeGuid(parentComponentId)
93
- : placeholderKey;
94
-
95
- if (!placeholderId) {
96
- console.error("Placeholder ID not found", component);
97
- return undefined;
98
- }
99
-
100
- const addComponentOp = await editContext.operations.addComponent(
101
- typeId, // Use typeId instead of just type
102
- placeholderId,
103
- index,
104
- getItemDescriptor(pageItem!),
105
- );
106
-
107
- if (!addComponentOp?.componentId) {
108
- console.warn(
109
- "Failed to add component",
110
- component,
111
- "Result Op:",
112
- addComponentOp,
113
- );
114
- return undefined;
115
- }
116
-
117
- // Wait for the component to be created
118
- const componentId = addComponentOp.componentId;
119
- console.log("! Waiting for component to be created", componentId);
120
-
121
- let createdComponent;
122
- let attempts = 0;
123
- const maxAttempts = 10;
124
-
125
- while (!createdComponent && attempts < maxAttempts) {
126
- if (editContextRef.current?.page) {
127
- createdComponent = getComponentById(
128
- componentId,
129
- editContextRef.current?.page,
130
- );
131
- if (createdComponent) {
132
- break;
133
- }
134
- }
135
- if (createdComponent) break;
136
-
137
- await new Promise((resolve) => setTimeout(resolve, 1000)); // Wait 100ms between attempts
138
- console.log("! Waiting for component to be created", componentId);
139
- attempts++;
140
- }
141
-
142
- if (!createdComponent) {
143
- console.error(
144
- "Timeout waiting for component to appear in page model",
145
- componentId,
146
- );
147
- }
148
-
149
- const componentDescriptor = {
150
- ...addComponentOp.mainItem,
151
- id: addComponentOp.componentId,
152
- };
153
-
154
- console.log("! Component created:", componentDescriptor);
155
-
156
- return componentDescriptor;
157
- };
158
-
159
- const findComponent = (components: WizardPageComponent[], path: number[]) => {
160
- const child = components[path[0]!];
161
- if (!child) return null;
162
- if (path.length === 1) return child;
163
- return findComponent(child.children || [], path.slice(1));
164
- };
165
-
166
- // Function to recursively create components from the page model
167
- const createComponentsRecursively = async (
168
- components: WizardPageComponent[],
169
- parentComponentType: string,
170
- parentComponentId?: string,
171
- parentPath?: number[],
172
- ) => {
173
- if (!editContext || !pageItem) return;
174
-
175
- const { componentMap, fieldsMap } = mappings;
176
-
177
- // Process each component in the array
178
- for (let i = 0; i < components.length; i++) {
179
- //console.log("Processing component", i);
180
- const component = components[i];
181
- const componentPath = [...(parentPath || []), i];
182
-
183
- if (!component?.id) {
184
- if (!component?.type || !component?.fields) {
185
- continue;
186
- }
187
-
188
- const descriptor = await createNewComponent(
189
- component,
190
- parentComponentType,
191
- i,
192
- parentComponentId,
193
- );
194
- if (!descriptor) continue;
195
- component.id = descriptor.id;
196
- setPageModel((prev) => {
197
- const component = findComponent(prev.components, componentPath);
198
- if (component) {
199
- component.id = descriptor.id;
200
- }
201
- return {
202
- ...prev,
203
- };
204
- });
205
- }
206
-
207
- if (component.fields && component.fields.length > 0) {
208
- const typeId = componentMap.get(component.type) || component.type;
209
-
210
- // 2. Edit fields of the component
211
- for (const field of component.fields) {
212
- if (
213
- !field.name ||
214
- !field.value ||
215
- field.value + field.type === field.writtenValue
216
- ) {
217
- continue;
218
- }
219
-
220
- const schemaField = fieldsMap.get(typeId + "_" + field.name);
221
-
222
- if (!schemaField) {
223
- console.warn(
224
- "Field not found",
225
- field,
226
- typeId,
227
- component.type,
228
- componentMap,
229
- );
230
- continue;
231
- }
232
-
233
- const fieldDescriptor = {
234
- fieldId: schemaField.id.toLowerCase().replace(/[{}]/g, ""),
235
- item: {
236
- id: component.id,
237
- language: pageItem.language,
238
- version: pageItem.version,
239
- },
240
- };
241
-
242
- let rawValue = field.value;
243
- let value = field.value as any;
244
-
245
- // console.log("##Processing field: ", field, schemaField, rawValue);
246
-
247
- if (
248
- schemaField.type === "Picture" ||
249
- schemaField.type === "picture"
250
- ) {
251
- console.log("##Processing picture field: ", field, schemaField);
252
- if (rawValue.indexOf("[...]") >= 0) continue;
253
-
254
- if (
255
- rawValue.startsWith("generate:") ||
256
- rawValue.startsWith("id:generate:")
257
- ) {
258
- console.log("##Generating image");
259
- rawValue = rawValue.slice(9);
260
- const image = await generateImage({
261
- ...fieldDescriptor,
262
- prompt: rawValue,
263
- sessionId: editContext.sessionId,
264
- pageItem: getItemDescriptor(pageItem),
265
- });
266
- } else {
267
- if (rawValue.startsWith("id:")) {
268
- console.log("##Processing image id");
269
- const imageId = rawValue.slice(3);
270
- if (imageId) {
271
- value = {
272
- Variants: [{ Name: "Landscape", MediaId: imageId }],
273
- };
274
- }
275
-
276
- await editContext.operations.editField({
277
- field: fieldDescriptor,
278
- rawValue: JSON.stringify(value),
279
- refresh: "none",
280
- });
281
- } else
282
- console.log(
283
- "##Do not know how to process picture value: ",
284
- rawValue,
285
- );
286
- }
287
- } else {
288
- await editContext.operations.editField({
289
- field: fieldDescriptor,
290
- value: value,
291
- rawValue: rawValue,
292
- refresh: "none",
293
- });
294
- }
295
-
296
- setPageModel((prev) => {
297
- const component = findComponent(prev.components, componentPath);
298
- if (component) {
299
- const prevField: WizardField | undefined = component.fields.find(
300
- (f: WizardField) => f.name === field.name,
301
- );
302
- if (prevField) {
303
- prevField.writtenValue = field.value + field.type;
304
- }
305
- }
306
- return {
307
- ...prev,
308
- };
309
- });
310
- }
311
- }
312
-
313
- // 3. Recursively process placeholders
314
- if (component.children && component.children.length > 0) {
315
- await createComponentsRecursively(
316
- component.children,
317
- component.type,
318
- component.id,
319
- componentPath,
320
- );
321
- }
322
- }
323
- };
324
- return { createComponentsRecursively };
325
- }
@@ -1,79 +0,0 @@
1
- import React, { useMemo, useState, useRef } from "react";
2
- import { Wizard, WizardData, WizardPageModel } from "./PageWizard";
3
- import { ItemDescriptor } from "../editor/pageModel";
4
-
5
- export const usePageWizard = () => {
6
- const [wizard, setWizard] = useState<Wizard | undefined>(undefined);
7
- const [parentItem, setParentItem] = useState<ItemDescriptor | undefined>(
8
- undefined,
9
- );
10
-
11
- // Wizard step state that should persist across re-renders
12
- const [currentStepIndex, setCurrentStepIndex] = useState(0);
13
- const [data, setData] = useState<WizardData>({});
14
- const [pageModel, setPageModel] = useState<WizardPageModel>({
15
- components: [],
16
- name: "",
17
- metaDescription: "",
18
- metaKeywords: "",
19
- });
20
- const [internalState, setInternalState] = useState<any>({});
21
- const [stepCompleted, setStepCompleted] = useState(-1);
22
- const [pageItem, setPageItem] = useState<ItemDescriptor>();
23
- const beforeNextCallbackRef = useRef<(() => Promise<boolean>) | null>(null);
24
-
25
- // Reset wizard step state when wizard changes
26
- const setWizardWithReset = (
27
- value: React.SetStateAction<Wizard | undefined>,
28
- ) => {
29
- const newWizard = typeof value === "function" ? value(wizard) : value;
30
- if (newWizard !== wizard) {
31
- setCurrentStepIndex(0);
32
- setData({});
33
- setPageModel({
34
- components: [],
35
- name: "",
36
- metaDescription: "",
37
- metaKeywords: "",
38
- });
39
- setInternalState({});
40
- setStepCompleted(-1);
41
- setPageItem(undefined);
42
- beforeNextCallbackRef.current = null;
43
- }
44
- setWizard(newWizard);
45
- };
46
-
47
- return useMemo(
48
- () => ({
49
- wizard,
50
- setWizard: setWizardWithReset,
51
- parentItem,
52
- setParentItem,
53
- // Wizard step state
54
- currentStepIndex,
55
- setCurrentStepIndex,
56
- data,
57
- setData,
58
- pageModel,
59
- setPageModel,
60
- internalState,
61
- setInternalState,
62
- stepCompleted,
63
- setStepCompleted,
64
- pageItem,
65
- setPageItem,
66
- beforeNextCallbackRef,
67
- }),
68
- [
69
- wizard,
70
- parentItem,
71
- currentStepIndex,
72
- data,
73
- pageModel,
74
- internalState,
75
- stepCompleted,
76
- pageItem,
77
- ],
78
- );
79
- };
package/src/revision.ts DELETED
@@ -1,2 +0,0 @@
1
- export const version = "1.0.3939";
2
- export const buildDate = "2025-06-07 12:23:08";