@alpaca-editor/core 1.0.3762-mono

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 (460) hide show
  1. package/.prettierrc +3 -0
  2. package/dist/client-components/api.js +6 -0
  3. package/dist/client-components/index.js +36 -0
  4. package/dist/components/ActionButton.js +9 -0
  5. package/dist/components/Error.js +28 -0
  6. package/dist/config/config.js +654 -0
  7. package/dist/config/types.js +2 -0
  8. package/dist/editor/ComponentInfo.js +31 -0
  9. package/dist/editor/ConfirmationDialog.js +32 -0
  10. package/dist/editor/ContentTree.js +406 -0
  11. package/dist/editor/ContextMenu.js +117 -0
  12. package/dist/editor/Editor.js +55 -0
  13. package/dist/editor/EditorWarning.js +13 -0
  14. package/dist/editor/EditorWarnings.js +24 -0
  15. package/dist/editor/FieldEditorPopup.js +24 -0
  16. package/dist/editor/FieldHistory.js +40 -0
  17. package/dist/editor/FieldList.js +63 -0
  18. package/dist/editor/FieldListField.js +164 -0
  19. package/dist/editor/FieldListFieldWithFallbacks.js +114 -0
  20. package/dist/editor/FloatingToolbar.js +92 -0
  21. package/dist/editor/ImageEditor.js +55 -0
  22. package/dist/editor/InsertMenu.js +164 -0
  23. package/dist/editor/ItemInfo.js +30 -0
  24. package/dist/editor/LinkEditorDialog.js +89 -0
  25. package/dist/editor/MainLayout.js +46 -0
  26. package/dist/editor/NewEditorClient.js +9 -0
  27. package/dist/editor/PictureCropper.js +332 -0
  28. package/dist/editor/PictureEditor.js +104 -0
  29. package/dist/editor/PictureEditorDialog.js +194 -0
  30. package/dist/editor/ScrollingContentTree.js +30 -0
  31. package/dist/editor/Terminal.js +109 -0
  32. package/dist/editor/Titlebar.js +11 -0
  33. package/dist/editor/ai/AiPopup.js +25 -0
  34. package/dist/editor/ai/AiResponseMessage.js +24 -0
  35. package/dist/editor/ai/AiTerminal.js +241 -0
  36. package/dist/editor/ai/AiToolCall.js +18 -0
  37. package/dist/editor/ai/EditorAiTerminal.js +9 -0
  38. package/dist/editor/ai/editorAiContext.js +14 -0
  39. package/dist/editor/client/DialogContext.js +29 -0
  40. package/dist/editor/client/EditorClient.js +1336 -0
  41. package/dist/editor/client/GenericDialog.js +27 -0
  42. package/dist/editor/client/editContext.js +59 -0
  43. package/dist/editor/client/helpers.js +31 -0
  44. package/dist/editor/client/itemsRepository.js +255 -0
  45. package/dist/editor/client/operations.js +398 -0
  46. package/dist/editor/client/pageModelBuilder.js +129 -0
  47. package/dist/editor/commands/commands.js +2 -0
  48. package/dist/editor/commands/componentCommands.js +277 -0
  49. package/dist/editor/commands/createVersionCommand.js +26 -0
  50. package/dist/editor/commands/deleteVersionCommand.js +55 -0
  51. package/dist/editor/commands/itemCommands.js +134 -0
  52. package/dist/editor/commands/localizeItem/LocalizeItemDialog.js +94 -0
  53. package/dist/editor/commands/undo.js +32 -0
  54. package/dist/editor/component-designer/ComponentDesigner.js +58 -0
  55. package/dist/editor/component-designer/ComponentDesignerAiTerminal.js +9 -0
  56. package/dist/editor/component-designer/ComponentDesignerMenu.js +67 -0
  57. package/dist/editor/component-designer/ComponentEditor.js +59 -0
  58. package/dist/editor/component-designer/ComponentRenderingCodeEditor.js +16 -0
  59. package/dist/editor/component-designer/ComponentRenderingEditor.js +71 -0
  60. package/dist/editor/component-designer/ComponentsDropdown.js +22 -0
  61. package/dist/editor/component-designer/PlaceholdersEditor.js +70 -0
  62. package/dist/editor/component-designer/RenderingsDropdown.js +25 -0
  63. package/dist/editor/component-designer/TemplateEditor.js +144 -0
  64. package/dist/editor/component-designer/aiContext.js +18 -0
  65. package/dist/editor/componentTreeHelper.js +97 -0
  66. package/dist/editor/control-center/ControlCenterMenu.js +59 -0
  67. package/dist/editor/control-center/IndexOverview.js +27 -0
  68. package/dist/editor/control-center/IndexSettings.js +106 -0
  69. package/dist/editor/control-center/Status.js +7 -0
  70. package/dist/editor/editor-warnings/ItemLocked.js +40 -0
  71. package/dist/editor/editor-warnings/NoLanguageWriteAccess.js +16 -0
  72. package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js +16 -0
  73. package/dist/editor/editor-warnings/NoWriteAccess.js +14 -0
  74. package/dist/editor/editor-warnings/ValidationErrors.js +27 -0
  75. package/dist/editor/field-types/AttachmentEditor.js +7 -0
  76. package/dist/editor/field-types/CheckboxEditor.js +32 -0
  77. package/dist/editor/field-types/DropLinkEditor.js +51 -0
  78. package/dist/editor/field-types/DropListEditor.js +58 -0
  79. package/dist/editor/field-types/ImageFieldEditor.js +36 -0
  80. package/dist/editor/field-types/InternalLinkFieldEditor.js +64 -0
  81. package/dist/editor/field-types/LinkFieldEditor.js +58 -0
  82. package/dist/editor/field-types/MultiLineText.js +35 -0
  83. package/dist/editor/field-types/PictureFieldEditor.js +59 -0
  84. package/dist/editor/field-types/RawEditor.js +33 -0
  85. package/dist/editor/field-types/ReactQuill.js +366 -0
  86. package/dist/editor/field-types/RichTextEditor.js +46 -0
  87. package/dist/editor/field-types/RichTextEditorComponent.js +72 -0
  88. package/dist/editor/field-types/SingleLineText.js +92 -0
  89. package/dist/editor/field-types/TreeListEditor.js +137 -0
  90. package/dist/editor/fieldTypes.js +2 -0
  91. package/dist/editor/media-selector/AiImageSearch.js +110 -0
  92. package/dist/editor/media-selector/AiImageSearchPrompt.js +58 -0
  93. package/dist/editor/media-selector/MediaSelector.js +11 -0
  94. package/dist/editor/media-selector/Preview.js +9 -0
  95. package/dist/editor/media-selector/Thumbnails.js +11 -0
  96. package/dist/editor/media-selector/TreeSelector.js +171 -0
  97. package/dist/editor/media-selector/UploadZone.js +80 -0
  98. package/dist/editor/menubar/ActionsMenu.js +33 -0
  99. package/dist/editor/menubar/ActiveUsers.js +13 -0
  100. package/dist/editor/menubar/ApproveAndPublish.js +13 -0
  101. package/dist/editor/menubar/BrowseHistory.js +14 -0
  102. package/dist/editor/menubar/ItemLanguageVersion.js +36 -0
  103. package/dist/editor/menubar/LanguageSelector.js +33 -0
  104. package/dist/editor/menubar/Menu.js +65 -0
  105. package/dist/editor/menubar/NavButtons.js +43 -0
  106. package/dist/editor/menubar/PageSelector.js +50 -0
  107. package/dist/editor/menubar/PageViewerControls.js +37 -0
  108. package/dist/editor/menubar/Separator.js +8 -0
  109. package/dist/editor/menubar/SiteInfo.js +26 -0
  110. package/dist/editor/menubar/User.js +18 -0
  111. package/dist/editor/menubar/VersionSelector.js +49 -0
  112. package/dist/editor/page-editor-chrome/CommentHighlighting.js +214 -0
  113. package/dist/editor/page-editor-chrome/CommentHighlightings.js +17 -0
  114. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +27 -0
  115. package/dist/editor/page-editor-chrome/FieldActionIndicators.js +15 -0
  116. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js +27 -0
  117. package/dist/editor/page-editor-chrome/FieldEditedIndicators.js +15 -0
  118. package/dist/editor/page-editor-chrome/FrameMenu.js +178 -0
  119. package/dist/editor/page-editor-chrome/FrameMenus.js +24 -0
  120. package/dist/editor/page-editor-chrome/InlineEditor.js +101 -0
  121. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +35 -0
  122. package/dist/editor/page-editor-chrome/NoLayout.js +21 -0
  123. package/dist/editor/page-editor-chrome/PageEditorChrome.js +65 -0
  124. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +109 -0
  125. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +82 -0
  126. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +147 -0
  127. package/dist/editor/page-viewer/DeviceToolbar.js +21 -0
  128. package/dist/editor/page-viewer/EditorForm.js +130 -0
  129. package/dist/editor/page-viewer/MiniMap.js +257 -0
  130. package/dist/editor/page-viewer/PageViewer.js +64 -0
  131. package/dist/editor/page-viewer/PageViewerFrame.js +696 -0
  132. package/dist/editor/page-viewer/pageViewContext.js +117 -0
  133. package/dist/editor/pageModel.js +2 -0
  134. package/dist/editor/picture-shared.js +28 -0
  135. package/dist/editor/reviews/Comment.js +112 -0
  136. package/dist/editor/reviews/Comments.js +24 -0
  137. package/dist/editor/reviews/PreviewInfo.js +13 -0
  138. package/dist/editor/reviews/Reviews.js +165 -0
  139. package/dist/editor/reviews/reviewCommands.js +44 -0
  140. package/dist/editor/reviews/useReviews.js +48 -0
  141. package/dist/editor/services/aiService.js +99 -0
  142. package/dist/editor/services/componentDesignerService.js +79 -0
  143. package/dist/editor/services/contentService.js +104 -0
  144. package/dist/editor/services/editService.js +322 -0
  145. package/dist/editor/services/indexService.js +25 -0
  146. package/dist/editor/services/reviewsService.js +43 -0
  147. package/dist/editor/services/serviceHelper.js +67 -0
  148. package/dist/editor/services/systemService.js +7 -0
  149. package/dist/editor/services/translationService.js +15 -0
  150. package/dist/editor/services-server/api.js +119 -0
  151. package/dist/editor/services-server/graphQL.js +56 -0
  152. package/dist/editor/sidebar/ComponentPalette.js +55 -0
  153. package/dist/editor/sidebar/ComponentTree.js +362 -0
  154. package/dist/editor/sidebar/Debug.js +60 -0
  155. package/dist/editor/sidebar/DictionaryEditor.js +160 -0
  156. package/dist/editor/sidebar/EditHistory.js +74 -0
  157. package/dist/editor/sidebar/GraphQL.js +115 -0
  158. package/dist/editor/sidebar/Insert.js +24 -0
  159. package/dist/editor/sidebar/MainContentTree.js +52 -0
  160. package/dist/editor/sidebar/Performance.js +34 -0
  161. package/dist/editor/sidebar/Sessions.js +31 -0
  162. package/dist/editor/sidebar/Sidebar.js +15 -0
  163. package/dist/editor/sidebar/SidebarView.js +76 -0
  164. package/dist/editor/sidebar/Translations.js +160 -0
  165. package/dist/editor/sidebar/Validation.js +52 -0
  166. package/dist/editor/sidebar/ViewSelector.js +15 -0
  167. package/dist/editor/sidebar/Workbox.js +80 -0
  168. package/dist/editor/ui/CenteredMessage.js +7 -0
  169. package/dist/editor/ui/CopyToClipboardButton.js +17 -0
  170. package/dist/editor/ui/DialogButtons.js +7 -0
  171. package/dist/editor/ui/Icons.js +75 -0
  172. package/dist/editor/ui/ItemNameDialog.js +45 -0
  173. package/dist/editor/ui/ItemNameDialogNew.js +61 -0
  174. package/dist/editor/ui/ItemSearch.js +93 -0
  175. package/dist/editor/ui/PerfectTree.js +223 -0
  176. package/dist/editor/ui/Section.js +12 -0
  177. package/dist/editor/ui/SimpleIconButton.js +11 -0
  178. package/dist/editor/ui/SimpleMenu.js +9 -0
  179. package/dist/editor/ui/SimpleTable.js +11 -0
  180. package/dist/editor/ui/SimpleTabs.js +21 -0
  181. package/dist/editor/ui/SimpleToolbar.js +7 -0
  182. package/dist/editor/ui/Spinner.js +7 -0
  183. package/dist/editor/ui/Splitter.js +187 -0
  184. package/dist/editor/ui/StackedPanels.js +69 -0
  185. package/dist/editor/ui/Toolbar.js +7 -0
  186. package/dist/editor/utils/id-helper.js +7 -0
  187. package/dist/editor/utils/insertOptions.js +45 -0
  188. package/dist/editor/utils/itemutils.js +25 -0
  189. package/dist/editor/utils/useMemoDebug.js +20 -0
  190. package/dist/editor/utils.js +328 -0
  191. package/dist/editor/views/CompareView.js +147 -0
  192. package/dist/editor/views/EditView.js +17 -0
  193. package/dist/editor/views/ItemEditor.js +24 -0
  194. package/dist/editor/views/SingleEditView.js +25 -0
  195. package/dist/index.js +22 -0
  196. package/dist/page-wizard/PageWizard.js +62 -0
  197. package/dist/page-wizard/SelectWizard.js +43 -0
  198. package/dist/page-wizard/WizardSteps.js +71 -0
  199. package/dist/page-wizard/service.js +26 -0
  200. package/dist/page-wizard/startPageWizardCommand.js +23 -0
  201. package/dist/page-wizard/steps/BuildPageStep.js +138 -0
  202. package/dist/page-wizard/steps/CollectStep.js +124 -0
  203. package/dist/page-wizard/steps/ComponentTypesSelector.js +211 -0
  204. package/dist/page-wizard/steps/Components.js +94 -0
  205. package/dist/page-wizard/steps/CreatePage.js +142 -0
  206. package/dist/page-wizard/steps/CreatePageAndLayoutStep.js +230 -0
  207. package/dist/page-wizard/steps/EditButton.js +7 -0
  208. package/dist/page-wizard/steps/FieldEditor.js +30 -0
  209. package/dist/page-wizard/steps/Generate.js +11 -0
  210. package/dist/page-wizard/steps/ImagesStep.js +159 -0
  211. package/dist/page-wizard/steps/LayoutStep.js +120 -0
  212. package/dist/page-wizard/steps/SelectStep.js +150 -0
  213. package/dist/page-wizard/steps/schema.js +140 -0
  214. package/dist/page-wizard/steps/usePageCreator.js +194 -0
  215. package/dist/splash-screen/NewPage.js +131 -0
  216. package/dist/splash-screen/SectionHeadline.js +9 -0
  217. package/dist/splash-screen/SplashScreen.js +81 -0
  218. package/dist/tour/Tour.js +321 -0
  219. package/dist/tour/default-tour.js +231 -0
  220. package/dist/tour/preview-tour.js +93 -0
  221. package/dist/tsconfig.build.tsbuildinfo +1 -0
  222. package/dist/types.js +2 -0
  223. package/eslint.config.mjs +4 -0
  224. package/images/bg-shape-black.webp +0 -0
  225. package/package.json +52 -0
  226. package/src/client-components/api.ts +6 -0
  227. package/src/client-components/index.ts +19 -0
  228. package/src/components/ActionButton.tsx +43 -0
  229. package/src/components/Error.tsx +57 -0
  230. package/src/config/config.tsx +737 -0
  231. package/src/config/types.ts +263 -0
  232. package/src/editor/ComponentInfo.tsx +77 -0
  233. package/src/editor/ConfirmationDialog.tsx +103 -0
  234. package/src/editor/ContentTree.tsx +654 -0
  235. package/src/editor/ContextMenu.tsx +155 -0
  236. package/src/editor/Editor.tsx +91 -0
  237. package/src/editor/EditorWarning.tsx +34 -0
  238. package/src/editor/EditorWarnings.tsx +33 -0
  239. package/src/editor/FieldEditorPopup.tsx +65 -0
  240. package/src/editor/FieldHistory.tsx +74 -0
  241. package/src/editor/FieldList.tsx +190 -0
  242. package/src/editor/FieldListField.tsx +387 -0
  243. package/src/editor/FieldListFieldWithFallbacks.tsx +211 -0
  244. package/src/editor/FloatingToolbar.tsx +163 -0
  245. package/src/editor/ImageEditor.tsx +129 -0
  246. package/src/editor/InsertMenu.tsx +332 -0
  247. package/src/editor/ItemInfo.tsx +90 -0
  248. package/src/editor/LinkEditorDialog.tsx +192 -0
  249. package/src/editor/MainLayout.tsx +94 -0
  250. package/src/editor/NewEditorClient.tsx +11 -0
  251. package/src/editor/PictureCropper.tsx +505 -0
  252. package/src/editor/PictureEditor.tsx +206 -0
  253. package/src/editor/PictureEditorDialog.tsx +381 -0
  254. package/src/editor/PublishDialog.ignore +74 -0
  255. package/src/editor/ScrollingContentTree.tsx +47 -0
  256. package/src/editor/Terminal.tsx +215 -0
  257. package/src/editor/Titlebar.tsx +23 -0
  258. package/src/editor/ai/AiPopup.tsx +59 -0
  259. package/src/editor/ai/AiResponseMessage.tsx +82 -0
  260. package/src/editor/ai/AiTerminal.tsx +450 -0
  261. package/src/editor/ai/AiToolCall.tsx +46 -0
  262. package/src/editor/ai/EditorAiTerminal.tsx +20 -0
  263. package/src/editor/ai/editorAiContext.ts +18 -0
  264. package/src/editor/client/DialogContext.tsx +49 -0
  265. package/src/editor/client/EditorClient.tsx +1831 -0
  266. package/src/editor/client/GenericDialog.tsx +50 -0
  267. package/src/editor/client/editContext.ts +330 -0
  268. package/src/editor/client/helpers.ts +44 -0
  269. package/src/editor/client/itemsRepository.ts +391 -0
  270. package/src/editor/client/operations.ts +610 -0
  271. package/src/editor/client/pageModelBuilder.ts +182 -0
  272. package/src/editor/commands/commands.ts +23 -0
  273. package/src/editor/commands/componentCommands.tsx +408 -0
  274. package/src/editor/commands/createVersionCommand.ts +33 -0
  275. package/src/editor/commands/deleteVersionCommand.ts +71 -0
  276. package/src/editor/commands/itemCommands.tsx +186 -0
  277. package/src/editor/commands/localizeItem/LocalizeItemDialog.tsx +201 -0
  278. package/src/editor/commands/undo.ts +39 -0
  279. package/src/editor/component-designer/ComponentDesigner.tsx +70 -0
  280. package/src/editor/component-designer/ComponentDesignerAiTerminal.tsx +11 -0
  281. package/src/editor/component-designer/ComponentDesignerMenu.tsx +91 -0
  282. package/src/editor/component-designer/ComponentEditor.tsx +97 -0
  283. package/src/editor/component-designer/ComponentRenderingCodeEditor.tsx +31 -0
  284. package/src/editor/component-designer/ComponentRenderingEditor.tsx +104 -0
  285. package/src/editor/component-designer/ComponentsDropdown.tsx +39 -0
  286. package/src/editor/component-designer/PlaceholdersEditor.tsx +183 -0
  287. package/src/editor/component-designer/RenderingsDropdown.tsx +36 -0
  288. package/src/editor/component-designer/TemplateEditor.tsx +236 -0
  289. package/src/editor/component-designer/aiContext.ts +23 -0
  290. package/src/editor/componentTreeHelper.tsx +114 -0
  291. package/src/editor/control-center/ControlCenterMenu.tsx +71 -0
  292. package/src/editor/control-center/IndexOverview.tsx +50 -0
  293. package/src/editor/control-center/IndexSettings.tsx +266 -0
  294. package/src/editor/control-center/Status.tsx +7 -0
  295. package/src/editor/editor-warnings/ItemLocked.tsx +63 -0
  296. package/src/editor/editor-warnings/NoLanguageWriteAccess.tsx +22 -0
  297. package/src/editor/editor-warnings/NoWorkflowWriteAccess.tsx +23 -0
  298. package/src/editor/editor-warnings/NoWriteAccess.tsx +15 -0
  299. package/src/editor/editor-warnings/ValidationErrors.tsx +54 -0
  300. package/src/editor/field-types/AttachmentEditor.tsx +9 -0
  301. package/src/editor/field-types/CheckboxEditor.tsx +47 -0
  302. package/src/editor/field-types/DropLinkEditor.tsx +75 -0
  303. package/src/editor/field-types/DropListEditor.tsx +84 -0
  304. package/src/editor/field-types/ImageFieldEditor.tsx +65 -0
  305. package/src/editor/field-types/InternalLinkFieldEditor.tsx +112 -0
  306. package/src/editor/field-types/LinkFieldEditor.tsx +85 -0
  307. package/src/editor/field-types/MultiLineText.tsx +63 -0
  308. package/src/editor/field-types/PictureFieldEditor.tsx +121 -0
  309. package/src/editor/field-types/RawEditor.tsx +53 -0
  310. package/src/editor/field-types/ReactQuill.tsx +580 -0
  311. package/src/editor/field-types/RichTextEditor.tsx +22 -0
  312. package/src/editor/field-types/RichTextEditorComponent.tsx +108 -0
  313. package/src/editor/field-types/SingleLineText.tsx +150 -0
  314. package/src/editor/field-types/TreeListEditor.tsx +261 -0
  315. package/src/editor/fieldTypes.ts +140 -0
  316. package/src/editor/media-selector/AiImageSearch.tsx +186 -0
  317. package/src/editor/media-selector/AiImageSearchPrompt.tsx +95 -0
  318. package/src/editor/media-selector/MediaSelector.tsx +42 -0
  319. package/src/editor/media-selector/Preview.tsx +14 -0
  320. package/src/editor/media-selector/Thumbnails.tsx +48 -0
  321. package/src/editor/media-selector/TreeSelector.tsx +292 -0
  322. package/src/editor/media-selector/UploadZone.tsx +137 -0
  323. package/src/editor/menubar/ActionsMenu.tsx +47 -0
  324. package/src/editor/menubar/ActiveUsers.tsx +17 -0
  325. package/src/editor/menubar/ApproveAndPublish.tsx +18 -0
  326. package/src/editor/menubar/BrowseHistory.tsx +37 -0
  327. package/src/editor/menubar/ItemLanguageVersion.tsx +52 -0
  328. package/src/editor/menubar/LanguageSelector.tsx +152 -0
  329. package/src/editor/menubar/Menu.tsx +83 -0
  330. package/src/editor/menubar/NavButtons.tsx +74 -0
  331. package/src/editor/menubar/PageSelector.tsx +139 -0
  332. package/src/editor/menubar/PageViewerControls.tsx +99 -0
  333. package/src/editor/menubar/Separator.tsx +12 -0
  334. package/src/editor/menubar/SiteInfo.tsx +53 -0
  335. package/src/editor/menubar/User.tsx +27 -0
  336. package/src/editor/menubar/VersionSelector.tsx +143 -0
  337. package/src/editor/page-editor-chrome/CommentHighlighting.tsx +287 -0
  338. package/src/editor/page-editor-chrome/CommentHighlightings.tsx +35 -0
  339. package/src/editor/page-editor-chrome/FieldActionIndicator.tsx +44 -0
  340. package/src/editor/page-editor-chrome/FieldActionIndicators.tsx +23 -0
  341. package/src/editor/page-editor-chrome/FieldEditedIndicator.tsx +64 -0
  342. package/src/editor/page-editor-chrome/FieldEditedIndicators.tsx +35 -0
  343. package/src/editor/page-editor-chrome/FrameMenu.tsx +263 -0
  344. package/src/editor/page-editor-chrome/FrameMenus.tsx +48 -0
  345. package/src/editor/page-editor-chrome/InlineEditor.tsx +147 -0
  346. package/src/editor/page-editor-chrome/LockedFieldIndicator.tsx +61 -0
  347. package/src/editor/page-editor-chrome/NoLayout.tsx +36 -0
  348. package/src/editor/page-editor-chrome/PageEditorChrome.tsx +119 -0
  349. package/src/editor/page-editor-chrome/PictureEditorOverlay.tsx +154 -0
  350. package/src/editor/page-editor-chrome/PlaceholderDropZone.tsx +171 -0
  351. package/src/editor/page-editor-chrome/PlaceholderDropZones.tsx +233 -0
  352. package/src/editor/page-viewer/DeviceToolbar.tsx +70 -0
  353. package/src/editor/page-viewer/EditorForm.tsx +247 -0
  354. package/src/editor/page-viewer/MiniMap.tsx +351 -0
  355. package/src/editor/page-viewer/PageViewer.tsx +127 -0
  356. package/src/editor/page-viewer/PageViewerFrame.tsx +1030 -0
  357. package/src/editor/page-viewer/pageViewContext.ts +186 -0
  358. package/src/editor/pageModel.ts +191 -0
  359. package/src/editor/picture-shared.tsx +53 -0
  360. package/src/editor/reviews/Comment.tsx +265 -0
  361. package/src/editor/reviews/Comments.tsx +50 -0
  362. package/src/editor/reviews/PreviewInfo.tsx +35 -0
  363. package/src/editor/reviews/Reviews.tsx +280 -0
  364. package/src/editor/reviews/reviewCommands.tsx +47 -0
  365. package/src/editor/reviews/useReviews.tsx +70 -0
  366. package/src/editor/services/aiService.ts +155 -0
  367. package/src/editor/services/componentDesignerService.ts +151 -0
  368. package/src/editor/services/contentService.ts +159 -0
  369. package/src/editor/services/editService.ts +462 -0
  370. package/src/editor/services/indexService.ts +24 -0
  371. package/src/editor/services/reviewsService.ts +45 -0
  372. package/src/editor/services/serviceHelper.ts +95 -0
  373. package/src/editor/services/systemService.ts +5 -0
  374. package/src/editor/services/translationService.ts +21 -0
  375. package/src/editor/services-server/api.ts +150 -0
  376. package/src/editor/services-server/graphQL.ts +106 -0
  377. package/src/editor/sidebar/ComponentPalette.tsx +146 -0
  378. package/src/editor/sidebar/ComponentTree.tsx +512 -0
  379. package/src/editor/sidebar/ComponentTree2.tsxx +490 -0
  380. package/src/editor/sidebar/Debug.tsx +105 -0
  381. package/src/editor/sidebar/DictionaryEditor.tsx +261 -0
  382. package/src/editor/sidebar/EditHistory.tsx +134 -0
  383. package/src/editor/sidebar/GraphQL.tsx +164 -0
  384. package/src/editor/sidebar/Insert.tsx +35 -0
  385. package/src/editor/sidebar/MainContentTree.tsx +95 -0
  386. package/src/editor/sidebar/Performance.tsx +53 -0
  387. package/src/editor/sidebar/Sessions.tsx +35 -0
  388. package/src/editor/sidebar/Sidebar.tsx +20 -0
  389. package/src/editor/sidebar/SidebarView.tsx +150 -0
  390. package/src/editor/sidebar/Translations.tsx +276 -0
  391. package/src/editor/sidebar/Validation.tsx +102 -0
  392. package/src/editor/sidebar/ViewSelector.tsx +49 -0
  393. package/src/editor/sidebar/Workbox.tsx +209 -0
  394. package/src/editor/ui/CenteredMessage.tsx +7 -0
  395. package/src/editor/ui/CopyToClipboardButton.tsx +23 -0
  396. package/src/editor/ui/DialogButtons.tsx +11 -0
  397. package/src/editor/ui/Icons.tsx +585 -0
  398. package/src/editor/ui/ItemNameDialog.tsx +94 -0
  399. package/src/editor/ui/ItemNameDialogNew.tsx +118 -0
  400. package/src/editor/ui/ItemSearch.tsx +173 -0
  401. package/src/editor/ui/PerfectTree.tsx +550 -0
  402. package/src/editor/ui/Section.tsx +35 -0
  403. package/src/editor/ui/SimpleIconButton.tsx +43 -0
  404. package/src/editor/ui/SimpleMenu.tsx +48 -0
  405. package/src/editor/ui/SimpleTable.tsx +63 -0
  406. package/src/editor/ui/SimpleTabs.tsx +55 -0
  407. package/src/editor/ui/SimpleToolbar.tsx +7 -0
  408. package/src/editor/ui/Spinner.tsx +7 -0
  409. package/src/editor/ui/Splitter.tsx +247 -0
  410. package/src/editor/ui/StackedPanels.tsx +134 -0
  411. package/src/editor/ui/Toolbar.tsx +7 -0
  412. package/src/editor/utils/id-helper.ts +3 -0
  413. package/src/editor/utils/insertOptions.ts +69 -0
  414. package/src/editor/utils/itemutils.ts +29 -0
  415. package/src/editor/utils/useMemoDebug.ts +28 -0
  416. package/src/editor/utils.ts +435 -0
  417. package/src/editor/views/CompareView.tsx +256 -0
  418. package/src/editor/views/EditView.tsx +27 -0
  419. package/src/editor/views/ItemEditor.tsx +58 -0
  420. package/src/editor/views/SingleEditView.tsx +44 -0
  421. package/src/fonts/Geist-Black.woff2 +0 -0
  422. package/src/fonts/Geist-Bold.woff2 +0 -0
  423. package/src/fonts/Geist-ExtraBold.woff2 +0 -0
  424. package/src/fonts/Geist-ExtraLight.woff2 +0 -0
  425. package/src/fonts/Geist-Light.woff2 +0 -0
  426. package/src/fonts/Geist-Medium.woff2 +0 -0
  427. package/src/fonts/Geist-Regular.woff2 +0 -0
  428. package/src/fonts/Geist-SemiBold.woff2 +0 -0
  429. package/src/fonts/Geist-Thin.woff2 +0 -0
  430. package/src/fonts/Geist[wght].woff2 +0 -0
  431. package/src/index.ts +7 -0
  432. package/src/page-wizard/PageWizard.tsx +163 -0
  433. package/src/page-wizard/SelectWizard.tsx +109 -0
  434. package/src/page-wizard/WizardSteps.tsx +207 -0
  435. package/src/page-wizard/service.ts +35 -0
  436. package/src/page-wizard/startPageWizardCommand.ts +27 -0
  437. package/src/page-wizard/steps/BuildPageStep.tsx +266 -0
  438. package/src/page-wizard/steps/CollectStep.tsx +233 -0
  439. package/src/page-wizard/steps/ComponentTypesSelector.tsx +443 -0
  440. package/src/page-wizard/steps/Components.tsx +193 -0
  441. package/src/page-wizard/steps/CreatePage.tsx +285 -0
  442. package/src/page-wizard/steps/CreatePageAndLayoutStep.tsx +384 -0
  443. package/src/page-wizard/steps/EditButton.tsx +34 -0
  444. package/src/page-wizard/steps/FieldEditor.tsx +102 -0
  445. package/src/page-wizard/steps/Generate.tsx +32 -0
  446. package/src/page-wizard/steps/ImagesStep.tsx +318 -0
  447. package/src/page-wizard/steps/LayoutStep.tsx +228 -0
  448. package/src/page-wizard/steps/SelectStep.tsx +256 -0
  449. package/src/page-wizard/steps/schema.ts +180 -0
  450. package/src/page-wizard/steps/usePageCreator.ts +279 -0
  451. package/src/splash-screen/NewPage.tsx +232 -0
  452. package/src/splash-screen/SectionHeadline.tsx +21 -0
  453. package/src/splash-screen/SplashScreen.tsx +156 -0
  454. package/src/tour/Tour.tsx +558 -0
  455. package/src/tour/default-tour.tsx +300 -0
  456. package/src/tour/preview-tour.tsx +127 -0
  457. package/src/types.ts +302 -0
  458. package/styles.css +476 -0
  459. package/tsconfig.build.json +21 -0
  460. package/tsconfig.json +11 -0
@@ -0,0 +1,398 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getOperationsContext = getOperationsContext;
7
+ const react_uuid_1 = __importDefault(require("react-uuid"));
8
+ const editService_1 = require("../services/editService");
9
+ const react_1 = require("react");
10
+ const helpers_1 = require("./helpers");
11
+ const use_debounce_1 = require("use-debounce");
12
+ function getOperationsContext(state, ui) {
13
+ const [editOperationExecuted, setEditOperationExecuted] = (0, react_1.useState)();
14
+ const [executingEditOperations, setExecutingEditOperations] = (0, react_1.useState)([]);
15
+ const lastOp = (0, react_1.useRef)(undefined);
16
+ const undoing = (0, react_1.useRef)(false);
17
+ const stateRef = (0, react_1.useRef)(state);
18
+ (0, react_1.useEffect)(() => {
19
+ stateRef.current = state;
20
+ }, [state]);
21
+ const executeOp = async (op, options = {
22
+ refresh: "immediate",
23
+ }) => {
24
+ console.log("Executing op", op);
25
+ setExecutingEditOperations((ops) => (ops ? [...ops, op] : [op]));
26
+ const result = await (0, editService_1.executeEditOperation)(op, state.sessionId);
27
+ console.log("Result", result);
28
+ handleResult(result, options);
29
+ await state.refreshHistory(op.mainItem);
30
+ //state.addToEditHistory(result.data as EditOperation);
31
+ setEditOperationExecuted(result.data);
32
+ setExecutingEditOperations((ops) => ops ? ops.filter((x) => x.id !== op.id) : []);
33
+ return result.data;
34
+ };
35
+ const duplicateComponents = (0, react_1.useCallback)(({ componentIds }) => {
36
+ const op = {
37
+ type: "duplicate-components",
38
+ mainItem: state.page?.item.descriptor,
39
+ sourceComponentIds: componentIds,
40
+ date: new Date().toISOString(),
41
+ id: (0, react_uuid_1.default)(),
42
+ description: "Duplicate components",
43
+ };
44
+ executeOp(op);
45
+ }, [state.page]);
46
+ const addComponent = async (componentTypeId, placeholderKey, index) => {
47
+ const page = stateRef.current.page;
48
+ console.log(" component A", componentTypeId, placeholderKey, index, "PAGE ", page);
49
+ if (!page) {
50
+ return;
51
+ }
52
+ const op = {
53
+ type: "add-component",
54
+ mainItem: page.item.descriptor,
55
+ // parent: parentId
56
+ // ? {
57
+ // id: parentId,
58
+ // language: page.item.language,
59
+ // version: page.item.version,
60
+ // }
61
+ // : undefined,
62
+ placeholderKey,
63
+ placeholderIndex: index,
64
+ componentTypeId,
65
+ date: new Date().toISOString(),
66
+ id: (0, react_uuid_1.default)(),
67
+ description: "Add component",
68
+ };
69
+ const result = await executeOp(op);
70
+ return result;
71
+ };
72
+ const handleResult = (result, options) => {
73
+ if ((0, helpers_1.handleErrorResult)(result, ui, state))
74
+ return;
75
+ const executedOps = Array.isArray(result.data)
76
+ ? result.data
77
+ : [result.data];
78
+ for (const executedOp of executedOps) {
79
+ if (executedOp &&
80
+ (executedOp.type === "move-component" ||
81
+ executedOp.type === "add-component" ||
82
+ executedOp.type === "link-component" ||
83
+ executedOp.type === "duplicate-components")) {
84
+ if (executedOp.focus) {
85
+ state.setSelection([executedOp.focus]);
86
+ }
87
+ }
88
+ ui.onOperationExecuted(executedOp);
89
+ }
90
+ if (options.refresh !== "none") {
91
+ state.requestRefresh(options.refresh === "immediate" ? "immediate" : "waitForQuietPeriod");
92
+ }
93
+ };
94
+ const ensureLock = (0, react_1.useCallback)(async (field) => {
95
+ if (!field || !field.item)
96
+ return false;
97
+ if (state.lockedField?.fieldId === field.fieldId &&
98
+ state.lockedField?.item.id === field.item.id &&
99
+ state.lockedField?.item.language === field.item.language &&
100
+ state.lockedField?.item.version === field.item.version)
101
+ return true;
102
+ const result = await (0, editService_1.lockField)(field.item, field.fieldId, state.sessionId);
103
+ if (result.type == "error") {
104
+ console.log("error locking field", result);
105
+ }
106
+ //handleErrorResult(result, ui, state);
107
+ if (result.type == "success" && result.data.success) {
108
+ state.setLockedField(field);
109
+ return true;
110
+ }
111
+ return false;
112
+ }, [state, ui]);
113
+ const lockItemsAndRefresh = (0, react_1.useCallback)(async (items) => {
114
+ const item = items[0];
115
+ if (!item)
116
+ return;
117
+ await (0, editService_1.lockItems)(items);
118
+ if (item.id == state.contentEditorItem?.id) {
119
+ await state.loadItem(item);
120
+ }
121
+ else
122
+ state.requestRefresh("immediate");
123
+ }, [state]);
124
+ const unlockItemsAndRefresh = (0, react_1.useCallback)(async (items) => {
125
+ const item = items[0];
126
+ if (!item)
127
+ return;
128
+ await (0, editService_1.unlockItems)(items);
129
+ if (item.id == state.contentEditorItem?.id) {
130
+ await state.loadItem(item);
131
+ }
132
+ else
133
+ state.requestRefresh("immediate");
134
+ }, [state]);
135
+ const executeWorkflowCommandAndRefresh = (0, react_1.useCallback)(async (item, commandId) => {
136
+ const result = await (0, editService_1.executeWorkflowCommand)(item, commandId, "");
137
+ if (result.type === "success") {
138
+ if (!result.data.succeeded) {
139
+ const errorMessage = {
140
+ summary: "Workflow command failed",
141
+ details: result.data.message,
142
+ };
143
+ ui.showErrorToast(errorMessage);
144
+ }
145
+ state.requestRefresh("immediate");
146
+ }
147
+ }, [state]);
148
+ const renameItem = (0, react_1.useCallback)(async (item, newName) => {
149
+ await executeOp({
150
+ type: "rename-item",
151
+ mainItem: state.page?.item.descriptor || item,
152
+ date: new Date().toISOString(),
153
+ id: (0, react_uuid_1.default)(),
154
+ item,
155
+ newName,
156
+ description: "Rename item",
157
+ });
158
+ state.requestRefresh("immediate");
159
+ state.itemsRepository.refreshItems([item]);
160
+ }, [state.itemsRepository, executeOp]);
161
+ const lastEditField = (0, react_1.useRef)(undefined);
162
+ const editField = (0, react_1.useCallback)(async ({ field, value, rawValue, refresh = "immediate", }) => {
163
+ state.itemsRepository.updateFieldValue(field, state.user ?? { name: "unknown", ai: false }, true, value, rawValue);
164
+ if (refresh === "immediate" || refresh === "none") {
165
+ return editFieldImmediate({ field, value, rawValue, refresh });
166
+ }
167
+ if (lastEditField.current?.fieldId !== field.fieldId ||
168
+ lastEditField.current?.item?.id !== field.item?.id ||
169
+ lastEditField.current?.item?.language !== field.item?.language ||
170
+ lastEditField.current?.item?.version !== field.item?.version) {
171
+ executeEditFieldDebounced.flush();
172
+ }
173
+ lastEditField.current = field;
174
+ return executeEditFieldDebounced({ field, value, rawValue, refresh });
175
+ }, [state.itemsRepository]);
176
+ const editFieldImmediate = (0, react_1.useCallback)(async ({ field, value, rawValue, refresh = "immediate", }) => {
177
+ state.itemsRepository.updateFieldValue(field, state.user ?? { name: "unknown", ai: false }, true, value, rawValue);
178
+ const val = rawValue !== undefined ? rawValue : value;
179
+ if (val === undefined)
180
+ return;
181
+ const op = await getEditOP(field, rawValue, value);
182
+ if (op) {
183
+ await executeOp(op, { refresh });
184
+ await state.itemsRepository.refreshItems([field.item]);
185
+ state.itemsRepository.onFieldSaved(field, val);
186
+ }
187
+ }, [state.itemsRepository, executeOp]);
188
+ const executeEditFieldDebounced = (0, use_debounce_1.useDebouncedCallback)(editFieldImmediate, state.configuration.debounceFieldEditsInterval * 2, { trailing: true });
189
+ async function getEditOP(field, rawValue, value) {
190
+ const item = await state.itemsRepository.getItem(field.item);
191
+ if (!item)
192
+ return;
193
+ const fieldItem = await state.itemsRepository.getItem({
194
+ id: field.fieldId,
195
+ language: "en",
196
+ version: 0,
197
+ });
198
+ if (!fieldItem) {
199
+ console.log("Could not fetch field item " + field.fieldId);
200
+ return;
201
+ }
202
+ let op = lastOp.current;
203
+ if (!op ||
204
+ op.undone ||
205
+ op.type !== "edit-field" ||
206
+ !op.item ||
207
+ op.item.id !== item.id ||
208
+ op.fieldId !== field.fieldId ||
209
+ op.item.language !== item.language ||
210
+ op.item.version !== item.version) {
211
+ op = {
212
+ type: "edit-field",
213
+ item: {
214
+ id: item.id,
215
+ version: item.version,
216
+ language: item.language,
217
+ name: item.name,
218
+ },
219
+ fieldId: field.fieldId,
220
+ fieldName: fieldItem.name,
221
+ date: new Date().toISOString(),
222
+ id: (0, react_uuid_1.default)(),
223
+ description: "Edit " + item.name,
224
+ focus: item.id + ":" + field.fieldId,
225
+ canUndo: true,
226
+ mainItem: state.page?.item.descriptor || item.descriptor,
227
+ };
228
+ }
229
+ op.date = new Date().toISOString();
230
+ op.value = rawValue ?? value;
231
+ const firstEditInheritedComponent = item.isInheritedFromMasterLanguage &&
232
+ op.item.language != state.page?.item.language;
233
+ if (firstEditInheritedComponent)
234
+ op.item.language = state.page.item.language;
235
+ lastOp.current = op;
236
+ return op;
237
+ }
238
+ const undo = (0, react_1.useCallback)(async (numberOfOperations) => {
239
+ if (undoing.current) {
240
+ return false;
241
+ }
242
+ undoing.current = true;
243
+ try {
244
+ const item = state.contentEditorItem?.descriptor;
245
+ if (!item)
246
+ return false;
247
+ const ops = state.editHistory
248
+ .filter((x) => x.canUndo && x.sessionId === state.sessionId)
249
+ .slice(0, numberOfOperations || 1);
250
+ if (!ops.length)
251
+ return false;
252
+ // Mark operations as undone
253
+ ops.forEach((x) => {
254
+ x.undone = true;
255
+ x.canUndo = false;
256
+ });
257
+ const result = await (0, editService_1.executeUndo)(state.sessionId, ops.map((x) => x.id));
258
+ handleResult(result, { refresh: "immediate" });
259
+ if (result.type === "success") {
260
+ const itemsToRefresh = result.data
261
+ .map((x) => {
262
+ if (x.type === "edit-field")
263
+ return x.item;
264
+ if (x.type === "add-component")
265
+ return {
266
+ id: x.componentId,
267
+ language: x.mainItem.language,
268
+ version: x.mainItem.version,
269
+ };
270
+ return undefined;
271
+ })
272
+ .filter((x) => x != null);
273
+ await state.itemsRepository.refreshItems(itemsToRefresh);
274
+ await state.refreshHistory(item);
275
+ return true;
276
+ }
277
+ else {
278
+ ui.showErrorToast(result);
279
+ return false;
280
+ }
281
+ }
282
+ finally {
283
+ // Always reset the flag
284
+ undoing.current = false;
285
+ console.log("undoing flag reset");
286
+ }
287
+ }, [state, ui, undoing]);
288
+ const redo = (0, react_1.useCallback)(async () => {
289
+ if (undoing.current)
290
+ return false;
291
+ undoing.current = true;
292
+ try {
293
+ const item = state.contentEditorItem?.descriptor;
294
+ if (!item)
295
+ return false;
296
+ // Clone the array to avoid mutating the original state
297
+ const op = [...state.editHistory]
298
+ .reverse()
299
+ .find((x) => x.canRedo && x.sessionId === state.sessionId);
300
+ if (!op)
301
+ return false;
302
+ op.canRedo = false;
303
+ op.undone = false;
304
+ const result = await (0, editService_1.executeRedo)(state.sessionId, op.id);
305
+ handleResult(result, { refresh: "immediate" });
306
+ if (result.type === "success") {
307
+ const itemsToRefresh = result.data
308
+ .map((x) => {
309
+ if (x.type === "edit-field")
310
+ return x.item;
311
+ if (x.type === "add-component")
312
+ return {
313
+ id: x.componentId,
314
+ language: x.mainItem.language,
315
+ version: x.mainItem.version,
316
+ };
317
+ return undefined;
318
+ })
319
+ .filter((x) => x != null);
320
+ await state.itemsRepository.refreshItems(itemsToRefresh);
321
+ await state.refreshHistory(item);
322
+ return true;
323
+ }
324
+ else {
325
+ ui.showErrorToast(result);
326
+ return false;
327
+ }
328
+ }
329
+ finally {
330
+ // Always reset the flag
331
+ undoing.current = false;
332
+ }
333
+ }, [state, ui, undoing]);
334
+ const deleteItems = (0, react_1.useCallback)(async (items) => {
335
+ const itemsToDelete = await state.itemsRepository.getItems(items);
336
+ await (0, editService_1.executeDeleteItems)(items);
337
+ state.itemsRepository.onItemsDeleted(itemsToDelete.map((x) => ({
338
+ item: x.descriptor,
339
+ parentId: x.parentId,
340
+ })));
341
+ state.requestRefresh("immediate");
342
+ }, [state.itemsRepository]);
343
+ const moveItems = (0, react_1.useCallback)(async (items, target, index) => {
344
+ await (0, editService_1.executeMoveItems)(items, target, index);
345
+ }, [state.itemsRepository]);
346
+ const createItem = (0, react_1.useCallback)(async (parent, templateId, name) => {
347
+ const result = await (0, editService_1.executeCreateItem)(parent, templateId, name);
348
+ if ((0, helpers_1.handleErrorResult)(result, ui, state))
349
+ return;
350
+ state.itemsRepository.refreshItems([parent]);
351
+ return result.data;
352
+ }, [state.itemsRepository]);
353
+ const createVersion = (0, react_1.useCallback)(async (item) => {
354
+ await (0, editService_1.createVersion)(item, state.sessionId);
355
+ }, [state]);
356
+ const ops = (0, react_1.useMemo)(() => ({
357
+ addComponent,
358
+ ensureLock,
359
+ lockItems: lockItemsAndRefresh,
360
+ unlockItems: unlockItemsAndRefresh,
361
+ executeWorkflowCommand: executeWorkflowCommandAndRefresh,
362
+ editField,
363
+ undo,
364
+ redo,
365
+ executeEditOperation: executeOp,
366
+ renameItem,
367
+ deleteItems,
368
+ createItem,
369
+ createVersion,
370
+ duplicateComponents,
371
+ undoing: undoing.current,
372
+ moveItems,
373
+ }), [
374
+ addComponent,
375
+ ensureLock,
376
+ lockItemsAndRefresh,
377
+ unlockItemsAndRefresh,
378
+ executeWorkflowCommandAndRefresh,
379
+ editField,
380
+ undo,
381
+ redo,
382
+ executeOp,
383
+ renameItem,
384
+ deleteItems,
385
+ createItem,
386
+ createVersion,
387
+ duplicateComponents,
388
+ undoing.current,
389
+ moveItems,
390
+ ]);
391
+ return (0, react_1.useMemo)(() => ({
392
+ ops,
393
+ context: {
394
+ editOperationExecuted,
395
+ executingEditOperations,
396
+ },
397
+ }), [executingEditOperations, editOperationExecuted, ops, undoing]);
398
+ }
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.usePageModel = usePageModel;
4
+ const react_1 = require("react");
5
+ const editService_1 = require("../services/editService");
6
+ function usePageModel(itemsRepository, pageItemDescriptor) {
7
+ const [page, setPage] = (0, react_1.useState)();
8
+ const [pageSkeleton, setPageSkeleton] = (0, react_1.useState)();
9
+ const [insertOptions, setInsertOptions] = (0, react_1.useState)([]);
10
+ (0, react_1.useEffect)(() => {
11
+ setPage(undefined);
12
+ setPageSkeleton(undefined);
13
+ }, [pageItemDescriptor]);
14
+ (0, react_1.useEffect)(() => {
15
+ const loadInsertOptions = async () => {
16
+ if (!pageSkeleton)
17
+ return;
18
+ const collectPlaceholderKeys = (skeleton) => {
19
+ const keys = [];
20
+ const collectFromComponent = (component) => {
21
+ component.placeholders.forEach(placeholder => {
22
+ keys.push(placeholder.key);
23
+ placeholder.components.forEach(c => collectFromComponent(c));
24
+ });
25
+ };
26
+ collectFromComponent(skeleton.rootComponent);
27
+ return keys;
28
+ };
29
+ const placeholderKeys = collectPlaceholderKeys(pageSkeleton);
30
+ const options = await (0, editService_1.loadPlaceholderInsertOptions)(pageSkeleton.item, placeholderKeys);
31
+ setInsertOptions(options);
32
+ };
33
+ loadInsertOptions();
34
+ }, [pageSkeleton]);
35
+ const updatePageModel = async () => {
36
+ if (!itemsRepository)
37
+ return;
38
+ //const start = performance.now();
39
+ const itemsToFetch = [];
40
+ if (!pageSkeleton) {
41
+ setPage(undefined);
42
+ return;
43
+ }
44
+ itemsToFetch.push(pageSkeleton.item);
45
+ const collectItems = (component) => {
46
+ if (component.datasourceItem)
47
+ itemsToFetch.push({
48
+ id: component.datasourceItem.id,
49
+ language: component.datasourceItem.language,
50
+ version: component.datasourceItem.version,
51
+ });
52
+ component.placeholders
53
+ .flatMap((x) => x.components)
54
+ .forEach((c) => collectItems(c));
55
+ component.items.forEach((i) => itemsToFetch.push(i));
56
+ };
57
+ collectItems(pageSkeleton.rootComponent);
58
+ const fullItems = await itemsRepository.getItems(itemsToFetch);
59
+ const getItem = (descriptor) => fullItems.find((x) => x.id === descriptor.id &&
60
+ x.language === descriptor.language &&
61
+ x.version === descriptor.version);
62
+ const pageItem = await itemsRepository.getItem(pageSkeleton.item);
63
+ if (!pageItem) {
64
+ setPage(undefined);
65
+ return;
66
+ }
67
+ const buildModel = (skeleton, parentPlaceholder) => {
68
+ const datasourceItemTemp = skeleton.datasourceItem
69
+ ? getItem(skeleton.datasourceItem)
70
+ : undefined;
71
+ const datasourceItem = skeleton.datasourceItem && datasourceItemTemp
72
+ ? { ...skeleton.datasourceItem, ...datasourceItemTemp }
73
+ : undefined;
74
+ let name = skeleton.name || datasourceItem?.name || skeleton.type || "unknown";
75
+ const mapItem = (x) => {
76
+ const item = getItem(x);
77
+ if (!item)
78
+ return null;
79
+ return { ...x, ...item };
80
+ };
81
+ const items = skeleton.items.map(mapItem).filter((x) => x !== null);
82
+ const placeholders = [];
83
+ const component = {
84
+ ...skeleton,
85
+ name,
86
+ datasourceItem,
87
+ items,
88
+ placeholders,
89
+ isShared: skeleton.id !== skeleton.datasourceItem?.id,
90
+ parentPlaceholder
91
+ };
92
+ component.placeholders = skeleton.placeholders.map((x) => {
93
+ const insOpts = insertOptions.find((y) => y.key === x.key)?.insertOptions ?? [];
94
+ const placeholder = {
95
+ ...x,
96
+ components: [],
97
+ canSynchronize: false,
98
+ parentComponent: component,
99
+ insertOptions: insOpts,
100
+ };
101
+ placeholder.components = x.components
102
+ .map((y) => buildModel(y, placeholder))
103
+ .filter((x) => x !== undefined);
104
+ return placeholder;
105
+ });
106
+ return component;
107
+ };
108
+ const rootComponent = buildModel(pageSkeleton.rootComponent);
109
+ if (!rootComponent) {
110
+ setPage(undefined);
111
+ return;
112
+ }
113
+ const page = {
114
+ item: pageItem,
115
+ rootComponent,
116
+ // revision: itemsRepository.revision,
117
+ editRevision: pageSkeleton.editRevision,
118
+ };
119
+ //console.log("Page model updated", performance.now() - start);
120
+ setPage(page);
121
+ };
122
+ (0, react_1.useEffect)(() => {
123
+ updatePageModel();
124
+ }, [pageSkeleton, itemsRepository, insertOptions]);
125
+ return {
126
+ setPageSkeleton,
127
+ page,
128
+ };
129
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });