@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,211 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentTypeSelector = ComponentTypeSelector;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ // Component Type and Placeholder Selection UI
7
+ function ComponentTypeSelector({ selectedComponentTypes, setSelectedComponentTypes, schema, data, setData, step, }) {
8
+ const [availableComponentTypes, setAvailableComponentTypes] = (0, react_1.useState)([]);
9
+ const [isSettingsPanelCollapsed, setIsSettingsPanelCollapsed] = (0, react_1.useState)(true);
10
+ const [preselectedTypes, setPreselectedTypes] = (0, react_1.useState)([]);
11
+ const [searchFilter, setSearchFilter] = (0, react_1.useState)("");
12
+ // Handle select all component types
13
+ const handleSelectAllComponents = () => {
14
+ setSelectedComponentTypes(availableComponentTypes);
15
+ setData({
16
+ ...data,
17
+ selectedComponentTypes: availableComponentTypes,
18
+ });
19
+ };
20
+ // Handle clear all component types
21
+ const handleClearAllComponents = () => {
22
+ setSelectedComponentTypes([]);
23
+ setData({
24
+ ...data,
25
+ selectedComponentTypes: [],
26
+ });
27
+ };
28
+ // Toggle component type selection
29
+ const toggleComponentType = (type) => {
30
+ setSelectedComponentTypes((prevSelected) => {
31
+ const newSelected = prevSelected.includes(type)
32
+ ? prevSelected.filter((t) => t !== type)
33
+ : [...prevSelected, type];
34
+ // Save selected types to wizard data
35
+ setData({
36
+ ...data,
37
+ selectedComponentTypes: newSelected,
38
+ });
39
+ return newSelected;
40
+ });
41
+ };
42
+ // Filter available components by search term
43
+ const filteredComponentTypes = availableComponentTypes.filter((type) => type.toLowerCase().includes(searchFilter.toLowerCase()));
44
+ // Helper function to recursively extract component types
45
+ const extractComponentTypes = (items) => {
46
+ if (!items || !Array.isArray(items))
47
+ return [];
48
+ let types = [];
49
+ for (const item of items) {
50
+ // Add the current component type if it exists
51
+ if ("type" in item) {
52
+ types.push(item.type);
53
+ }
54
+ // Process components in placeholders recursively
55
+ if ("placeholders" in item && Array.isArray(item.placeholders)) {
56
+ for (const placeholder of item.placeholders) {
57
+ if (placeholder.components && Array.isArray(placeholder.components)) {
58
+ types = [
59
+ ...types,
60
+ ...extractComponentTypes(placeholder.components),
61
+ ];
62
+ }
63
+ }
64
+ }
65
+ // Process components directly (for top-level structure)
66
+ if ("components" in item && Array.isArray(item.components)) {
67
+ types = [...types, ...extractComponentTypes(item.components)];
68
+ }
69
+ }
70
+ return types;
71
+ };
72
+ // Helper function to extract placeholders from the schema
73
+ const extractPlaceholders = (items) => {
74
+ if (!items || !Array.isArray(items))
75
+ return [];
76
+ let placeholders = [];
77
+ for (const item of items) {
78
+ // Add the current placeholder name if it exists
79
+ if ("name" in item) {
80
+ placeholders.push(item.name);
81
+ }
82
+ // Handle SchemaComponent objects
83
+ if ("placeholders" in item && Array.isArray(item.placeholders)) {
84
+ // Extract names from each placeholder
85
+ item.placeholders.forEach((placeholder) => {
86
+ placeholders.push(placeholder.name);
87
+ // Recursively process components in this placeholder
88
+ if (placeholder.components && Array.isArray(placeholder.components)) {
89
+ placeholders = [
90
+ ...placeholders,
91
+ ...extractPlaceholders(placeholder.components),
92
+ ];
93
+ }
94
+ });
95
+ }
96
+ // Handle SchemaPlaceholder objects
97
+ if ("components" in item && Array.isArray(item.components)) {
98
+ placeholders = [
99
+ ...placeholders,
100
+ ...extractPlaceholders(item.components),
101
+ ];
102
+ }
103
+ }
104
+ return placeholders;
105
+ };
106
+ // Initialize selections based on data or preselected values
107
+ const initializeSelections = (uniqueTypes, stepPreselectedTypes) => {
108
+ // Initialize selected types
109
+ if (data.selectedComponentTypes &&
110
+ Array.isArray(data.selectedComponentTypes)) {
111
+ // Filter out any types that are no longer available
112
+ const validSelectedTypes = data.selectedComponentTypes.filter((type) => uniqueTypes.includes(type));
113
+ setSelectedComponentTypes(validSelectedTypes.length > 0
114
+ ? validSelectedTypes
115
+ : stepPreselectedTypes.length > 0
116
+ ? stepPreselectedTypes
117
+ : uniqueTypes);
118
+ }
119
+ else if (stepPreselectedTypes.length > 0) {
120
+ // Use preselected types from step
121
+ setSelectedComponentTypes(stepPreselectedTypes);
122
+ // Update data for persistence
123
+ setData((prev) => ({
124
+ ...prev,
125
+ selectedComponentTypes: stepPreselectedTypes,
126
+ }));
127
+ }
128
+ else {
129
+ // Default to selecting all component types
130
+ setSelectedComponentTypes(uniqueTypes);
131
+ // Update data for persistence
132
+ setData((prev) => ({
133
+ ...prev,
134
+ selectedComponentTypes: uniqueTypes,
135
+ }));
136
+ }
137
+ };
138
+ // Extract component types and placeholders from wizard schema when available
139
+ (0, react_1.useEffect)(() => {
140
+ if (schema) {
141
+ try {
142
+ // Parse schema if it's a string
143
+ schema =
144
+ typeof schema === "string"
145
+ ? JSON.parse(schema)
146
+ : schema;
147
+ // Extract component types
148
+ const componentTypes = extractComponentTypes(schema);
149
+ // Remove duplicates and sort alphabetically
150
+ const uniqueTypes = Array.from(new Set(componentTypes)).sort();
151
+ setAvailableComponentTypes(uniqueTypes);
152
+ // Parse preselected components from step if available
153
+ let stepPreselectedTypes = [];
154
+ if (step["preselectedComponents"]) {
155
+ // Split by comma or newline and trim whitespace
156
+ stepPreselectedTypes = step["preselectedComponents"]
157
+ .split(/[,\n\r]+/)
158
+ .map((type) => type.trim())
159
+ .filter((type) => type && uniqueTypes.includes(type)); // Only include valid types
160
+ }
161
+ // Set preselected types for UI differentiation
162
+ setPreselectedTypes(stepPreselectedTypes);
163
+ // Parse preselected placeholders from step if available
164
+ // Initialize component types and placeholders
165
+ initializeSelections(uniqueTypes, stepPreselectedTypes);
166
+ }
167
+ catch (error) {
168
+ console.error("Error processing schema:", error);
169
+ }
170
+ }
171
+ }, [schema, step]);
172
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "pb-3 mt-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-sm font-medium", children: "Layout Generation Settings" }), (0, jsx_runtime_1.jsxs)("div", { className: "text-xs text-gray-500", children: [selectedComponentTypes &&
173
+ selectedComponentTypes.length > 0 &&
174
+ `${selectedComponentTypes.length} component types`, selectedComponentTypes &&
175
+ selectedComponentTypes.length === 0 &&
176
+ "Configure what the AI will use to generate the layout"] })] }), (0, jsx_runtime_1.jsx)("button", { onClick: () => setIsSettingsPanelCollapsed(!isSettingsPanelCollapsed), className: "bg-gray-200 text-gray-700 p-1 rounded flex items-center justify-center w-6 h-6 hover:bg-gray-300", title: isSettingsPanelCollapsed ? "Expand settings" : "Collapse settings", "aria-expanded": !isSettingsPanelCollapsed, children: isSettingsPanelCollapsed ? ((0, jsx_runtime_1.jsx)("span", { className: "text-lg", children: "\u2193" })) : ((0, jsx_runtime_1.jsx)("span", { className: "text-lg", children: "\u2191" })) })] }), !isSettingsPanelCollapsed && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "mb-2", children: (0, jsx_runtime_1.jsx)("input", { type: "text", value: searchFilter, onChange: (e) => setSearchFilter(e.target.value), placeholder: "Search components and placeholders...", className: "w-full px-3 py-1 border border-gray-300 rounded text-sm focus:outline-none focus:ring-1 focus:ring-blue-500" }) }), (0, jsx_runtime_1.jsx)("div", { className: "flex flex-col gap-3 mb-3", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex-1 min-w-0 border border-gray-200 rounded p-2 bg-white", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center mb-2", children: [(0, jsx_runtime_1.jsx)("h4", { className: "text-sm font-bold", children: "Component Types" }), (0, jsx_runtime_1.jsxs)("span", { className: "text-xs text-gray-500 px-2 py-1 rounded-full bg-gray-200", children: [selectedComponentTypes && selectedComponentTypes.length, "of ", availableComponentTypes.length, " selected"] })] }), (0, jsx_runtime_1.jsx)("div", { className: "mb-2", children: (0, jsx_runtime_1.jsx)("div", { className: "flex flex-wrap gap-1 mb-2", children: selectedComponentTypes &&
177
+ selectedComponentTypes.length > 0 ? (selectedComponentTypes.map((type) => ((0, jsx_runtime_1.jsxs)("div", { className: `px-2 py-1 text-xs rounded-full flex items-center ${preselectedTypes.includes(type)
178
+ ? "bg-green-100 text-green-800"
179
+ : "bg-blue-100 text-blue-800"}`, children: [type, (0, jsx_runtime_1.jsx)("button", { onClick: () => toggleComponentType(type), className: `ml-1 ${preselectedTypes.includes(type)
180
+ ? "text-green-600 hover:text-green-800"
181
+ : "text-blue-600 hover:text-blue-800"}`, "aria-label": `Remove ${type}`, children: "\u00D7" })] }, type)))) : ((0, jsx_runtime_1.jsx)("div", { className: "text-xs text-gray-500 italic", children: "No component types selected" })) }) }), (0, jsx_runtime_1.jsx)("div", { className: `max-h-28 overflow-y-auto p-1 bg-white rounded border border-gray-200 mb-2 ${filteredComponentTypes.length === 0
182
+ ? "flex justify-center items-center"
183
+ : ""}`, children: filteredComponentTypes.length > 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-3 gap-1", children: filteredComponentTypes.map((type) => {
184
+ const isSelected = selectedComponentTypes &&
185
+ selectedComponentTypes.includes(type);
186
+ const isPreselected = preselectedTypes.includes(type);
187
+ return ((0, jsx_runtime_1.jsxs)("label", { className: `flex items-center cursor-pointer p-1 rounded-md text-sm border ${isSelected
188
+ ? isPreselected
189
+ ? "bg-green-50 text-green-700 border-green-200"
190
+ : "bg-blue-50 text-blue-700 border-blue-200"
191
+ : isPreselected
192
+ ? "bg-green-50/30 text-green-700/70 border-green-200 hover:bg-green-50/50"
193
+ : "hover:bg-gray-100 border-transparent"}`, children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", checked: isSelected, onChange: () => toggleComponentType(type), className: "mr-2" }), type, isPreselected && ((0, jsx_runtime_1.jsx)("span", { className: "ml-1 text-xs text-green-600", title: "Recommended by template", children: "\u2605" }))] }, type));
194
+ }) })) : ((0, jsx_runtime_1.jsx)("div", { className: "text-gray-500 text-sm p-4", children: searchFilter
195
+ ? "No matching component types found"
196
+ : "No component types available" })) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex gap-1", children: [(0, jsx_runtime_1.jsx)("button", { onClick: handleSelectAllComponents, disabled: selectedComponentTypes &&
197
+ selectedComponentTypes.length ===
198
+ availableComponentTypes.length, className: "flex-1 bg-gray-200 text-gray-700 px-2 py-1 rounded text-xs hover:bg-gray-300 disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed", children: "Select All" }), (0, jsx_runtime_1.jsx)("button", { onClick: handleClearAllComponents, disabled: selectedComponentTypes &&
199
+ selectedComponentTypes.length === 0, className: "flex-1 bg-gray-200 text-gray-700 px-2 py-1 rounded text-xs hover:bg-gray-300 disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed", children: "Clear All" })] }), (0, jsx_runtime_1.jsx)("div", { className: "w-full flex gap-2", children: !isSettingsPanelCollapsed ||
200
+ (selectedComponentTypes &&
201
+ selectedComponentTypes.length === 0 &&
202
+ preselectedTypes.length > 0) || ((0, jsx_runtime_1.jsx)("div", { className: "flex gap-1", children: preselectedTypes.length > 0 && ((0, jsx_runtime_1.jsx)("button", { onClick: () => {
203
+ setSelectedComponentTypes(preselectedTypes);
204
+ setData({
205
+ ...data,
206
+ selectedComponentTypes: preselectedTypes,
207
+ });
208
+ }, disabled: preselectedTypes.length ===
209
+ (selectedComponentTypes?.length || 0) &&
210
+ preselectedTypes.every((type) => selectedComponentTypes?.includes(type)), className: "flex-1 bg-green-500 text-white px-2 py-1 rounded text-xs hover:bg-green-600 disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed", children: "Use Recommended Components" })) })) })] }) })] }))] }));
211
+ }
@@ -0,0 +1,94 @@
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.Components = Components;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const editContext_1 = require("../../editor/client/editContext");
9
+ const SimpleIconButton_1 = require("../../editor/ui/SimpleIconButton");
10
+ const FieldEditor_1 = require("./FieldEditor");
11
+ const react_1 = __importDefault(require("react"));
12
+ function Components({ pageModel, onFieldEdited, onComponentRemoved, thumbnails, setInternalState, }) {
13
+ const editContext = (0, editContext_1.useEditContext)();
14
+ if (!pageModel)
15
+ return (0, jsx_runtime_1.jsx)("div", { children: "No layout generated yet" });
16
+ // Simplified component to only render component hierarchy
17
+ const SimpleLayoutItem = ({ components, depth = 0, }) => {
18
+ if (!components)
19
+ return null;
20
+ // Generate a random pastel background color based on component type
21
+ const getColorForType = (type) => {
22
+ // Simple hash function to generate consistent colors for the same type
23
+ const hash = type
24
+ .split("")
25
+ .reduce((acc, char) => acc + char.charCodeAt(0), 0);
26
+ const hue = hash % 360;
27
+ return `hsl(${hue}, 70%, 90%)`;
28
+ };
29
+ const getThumbnailUrl = (mediaId) => {
30
+ if (!thumbnails)
31
+ return;
32
+ return thumbnails.find((thumbnail) => thumbnail.id === mediaId)?.thumbUrl;
33
+ };
34
+ const getImage = (field) => {
35
+ const url = getThumbnailUrl(field.value);
36
+ if (url) {
37
+ return (0, jsx_runtime_1.jsx)("img", { src: url, alt: field.name, className: "mb-2" });
38
+ }
39
+ return field.value;
40
+ };
41
+ // Handle component with placeholders
42
+ const renderComponent = (component, collection) => {
43
+ const indent = depth * 20;
44
+ const componentType = component.type || "Unknown";
45
+ const borderColor = component.type
46
+ ? getColorForType(componentType)
47
+ : "#f0f0f0";
48
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "relative", style: {
49
+ marginBottom: "8px",
50
+ marginLeft: indent,
51
+ }, children: [(0, jsx_runtime_1.jsx)("div", { className: "absolute top-0 right-0", children: (0, jsx_runtime_1.jsx)(SimpleIconButton_1.SimpleIconButton, { icon: "pi pi-times", label: "Remove", onClick: () => {
52
+ // Remove component from its collection
53
+ const index = collection.findIndex((c) => c.id === component.id);
54
+ if (index !== -1) {
55
+ collection.splice(index, 1);
56
+ }
57
+ onComponentRemoved(component);
58
+ } }) }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-2 px-2 py-1 rounded-md bg-white border-2", style: {
59
+ borderColor,
60
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-gray-600", children: component.type }), ":", " ", component.name] }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-gray-500", children: component.fields?.map((field, index) => field.type === "Picture" || field.type === "Image" ? ((0, jsx_runtime_1.jsxs)("div", { className: "cursor-pointer", onClick: async () => {
61
+ const currentImage = await editContext?.itemsRepository.getItem({
62
+ id: field.value,
63
+ language: "en",
64
+ version: 1,
65
+ });
66
+ const selectedImageId = await editContext?.selectMedia({
67
+ selectedIdPath: currentImage?.idPath || "",
68
+ mode: "images",
69
+ });
70
+ if (selectedImageId) {
71
+ const newImage = await editContext?.itemsRepository.getItem({
72
+ id: selectedImageId,
73
+ language: "en",
74
+ version: 1,
75
+ });
76
+ const newThumb = {
77
+ id: newImage?.id || "",
78
+ name: newImage?.name || "",
79
+ thumbUrl: newImage?.thumbnail || "",
80
+ previewUrl: newImage?.thumbnail || "",
81
+ };
82
+ field.value = selectedImageId;
83
+ setInternalState((state) => ({
84
+ ...state,
85
+ thumbnails: [...(state.thumbnails || []), newThumb],
86
+ }));
87
+ onFieldEdited();
88
+ }
89
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { className: "font-bold text-gray-900", children: [field.name, ":"] }), (0, jsx_runtime_1.jsx)("div", { children: getImage(field) })] }, index)) : ((0, jsx_runtime_1.jsx)(FieldEditor_1.FieldEditor, { field: field, onFieldEdited: onFieldEdited }, index))) })] }), component.children && ((0, jsx_runtime_1.jsx)(SimpleLayoutItem, { components: component.children, depth: depth + 1 }))] }, component.id));
90
+ };
91
+ return components.map((component, index) => ((0, jsx_runtime_1.jsx)(react_1.default.Fragment, { children: renderComponent(component, components) }, component.id || index)));
92
+ };
93
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)("div", { className: "relative flex-1 w-full", children: (0, jsx_runtime_1.jsx)("div", { className: "overflow-y-auto inset-0 absolute", children: pageModel ? ((0, jsx_runtime_1.jsx)(SimpleLayoutItem, { components: pageModel.components })) : ((0, jsx_runtime_1.jsx)("div", { children: "No layout generated yet" })) }) }) }));
94
+ }
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreatePage = CreatePage;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const ActionButton_1 = require("../../components/ActionButton");
7
+ const use_debounce_1 = require("use-debounce");
8
+ const contentService_1 = require("../../editor/services/contentService");
9
+ const aiService_1 = require("../../editor/services/aiService");
10
+ const service_1 = require("../service");
11
+ const editContext_1 = require("../../editor/client/editContext");
12
+ const LanguageSelector_1 = require("../../editor/menubar/LanguageSelector");
13
+ function CreatePage({ wizard, parentItem, setPageItem, pageItem, pageModel, setPageModel, step, data, }) {
14
+ const [validationMessage, setValidationMessage] = (0, react_1.useState)();
15
+ const [isBuilding, setIsBuilding] = (0, react_1.useState)(false);
16
+ const [isGenerating, setIsGenerating] = (0, react_1.useState)(false);
17
+ const [language, setLanguage] = (0, react_1.useState)(parentItem.language || "en");
18
+ const [previousLanguage, setPreviousLanguage] = (0, react_1.useState)(language);
19
+ const [fullParentItem, setFullParentItem] = (0, react_1.useState)();
20
+ const editContext = (0, editContext_1.useEditContext)();
21
+ (0, react_1.useEffect)(() => {
22
+ if (!editContext)
23
+ return;
24
+ const generateNameAndMetaDescription = async () => {
25
+ const metaInstructions = step["Instructions for generating item name and meta fields"];
26
+ setIsGenerating(true);
27
+ try {
28
+ const abortController = new AbortController();
29
+ const result = await (0, aiService_1.executePrompt)([
30
+ {
31
+ content: `${metaInstructions?.trim()} Reply with a json object of type PageModel = { name: string; metaDescription: string; metaKeywords: string; };
32
+ The item name should be a valid sitecore item name. Spaces are allowed but no special characters or Umlaute.
33
+ The language of the page is ${language}.
34
+ Input data: ${JSON.stringify(data)}`,
35
+ name: "system",
36
+ role: "system",
37
+ },
38
+ ], editContext, service_1.createWizardAiContext, [""], true, { signal: abortController.signal }, "o3-mini-low", (response) => {
39
+ try {
40
+ const newLayout = JSON.parse(response.content);
41
+ setPageModel({
42
+ ...pageModel,
43
+ name: newLayout.name,
44
+ metaDescription: newLayout.metaDescription,
45
+ metaKeywords: newLayout.metaKeywords,
46
+ });
47
+ }
48
+ catch (parseError) { }
49
+ });
50
+ const pageModel = JSON.parse(result.content);
51
+ setPageModel({
52
+ ...pageModel,
53
+ name: pageModel.name,
54
+ metaDescription: pageModel.metaDescription,
55
+ metaKeywords: pageModel.metaKeywords,
56
+ });
57
+ }
58
+ catch (error) {
59
+ console.error("Error generating name and meta description", error);
60
+ }
61
+ finally {
62
+ setIsGenerating(false);
63
+ }
64
+ };
65
+ if (!pageModel.name || language !== previousLanguage) {
66
+ generateNameAndMetaDescription();
67
+ setPreviousLanguage(language);
68
+ }
69
+ }, [language, pageModel.name, previousLanguage, data, step, editContext]);
70
+ (0, react_1.useEffect)(() => {
71
+ const loadParentItem = async () => {
72
+ if (!parentItem)
73
+ return;
74
+ const item = await editContext?.itemsRepository.getItem(parentItem);
75
+ setFullParentItem(item);
76
+ };
77
+ loadParentItem();
78
+ }, [parentItem]);
79
+ const checkName = async () => {
80
+ if (!parentItem)
81
+ return;
82
+ let valid = !!wizard.templateId && pageModel.name.trim().length >= 3;
83
+ if (valid) {
84
+ const children = await (0, contentService_1.getChildren)(parentItem.id, editContext?.sessionId ?? "", [], false, editContext?.contentEditorItem?.language || "en");
85
+ if (children.find((x) => x.name.toLocaleLowerCase() ===
86
+ pageModel.name.trim().toLocaleLowerCase())) {
87
+ valid = false;
88
+ setValidationMessage("A page with this name already exists.");
89
+ }
90
+ }
91
+ else {
92
+ if (pageModel.name.trim().length > 0 && pageModel.name.trim().length < 3)
93
+ setValidationMessage("Name is too short.");
94
+ else
95
+ setValidationMessage(undefined);
96
+ }
97
+ if (valid)
98
+ setValidationMessage(undefined);
99
+ return valid;
100
+ };
101
+ const checkNameValidDebounced = (0, use_debounce_1.useDebouncedCallback)(async () => checkName(), 500);
102
+ (0, react_1.useEffect)(() => {
103
+ checkNameValidDebounced();
104
+ }, [pageModel.name]);
105
+ const createPage = () => {
106
+ setTimeout(async () => {
107
+ if (!editContext || !parentItem)
108
+ return;
109
+ try {
110
+ if (!(await checkName()))
111
+ return;
112
+ setIsBuilding(true);
113
+ const result = await editContext.operations.createItem({ ...parentItem, language }, wizard.templateId, pageModel.name);
114
+ if (result) {
115
+ editContext?.loadItem(result, { addToBrowseHistory: true });
116
+ const item = await editContext?.itemsRepository.getItem(result);
117
+ if (item)
118
+ setPageItem(item);
119
+ else
120
+ console.error("Failed to load newly created item", result);
121
+ console.log("Page created", result, "Page model", pageModel);
122
+ }
123
+ }
124
+ catch (error) {
125
+ console.error("Error creating page", error);
126
+ }
127
+ finally {
128
+ setIsBuilding(false);
129
+ }
130
+ }, 1);
131
+ };
132
+ const handleInputChange = (field, value) => {
133
+ const updatedPageModel = {
134
+ ...pageModel,
135
+ [field]: value,
136
+ };
137
+ setPageModel(updatedPageModel);
138
+ };
139
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "pr-6", style: { viewTransitionName: "page-properties" }, children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-medium mb-1", children: "Target Parent Item" }), (0, jsx_runtime_1.jsx)("div", { className: "mb-4 text-xs break-after-all", children: fullParentItem?.path })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-4 relative", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "language", className: "block text-sm font-medium mb-1", children: "Language" }), (0, jsx_runtime_1.jsx)("div", { className: "w-fit", children: (0, jsx_runtime_1.jsx)(LanguageSelector_1.LanguageSelector, { selectedLanguage: language, darkMode: true, disabled: isBuilding || isGenerating, onLanguageSelected: (language) => setLanguage(language.languageCode), showAllLanguages: true }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "pageName", className: "block text-sm font-medium mb-1", children: "Page Name" }), (0, jsx_runtime_1.jsx)("input", { id: "pageName", type: "text", disabled: !!pageItem || isBuilding || isGenerating, className: "w-full p-2 border rounded text-sm", value: pageModel.name, onChange: (e) => handleInputChange("name", e.target.value), placeholder: "Enter page name" }), validationMessage && ((0, jsx_runtime_1.jsx)("div", { className: "mt-2 text-sm text-red-500", children: validationMessage }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "metaDescription", className: "block text-sm font-medium mb-1", children: "Meta Description" }), (0, jsx_runtime_1.jsx)("textarea", { id: "metaDescription", disabled: !!pageItem || isBuilding || isGenerating, className: "w-full p-2 border rounded min-h-[100px] text-sm", value: pageModel.metaDescription, onChange: (e) => handleInputChange("metaDescription", e.target.value), placeholder: "Enter meta description" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "metaKeywords", className: "block text-sm font-medium mb-1", children: "Meta Keywords" }), (0, jsx_runtime_1.jsx)("textarea", { id: "metaKeywords", disabled: !!pageItem || isBuilding || isGenerating, className: "w-full p-2 border rounded min-h-[100px] text-sm", value: pageModel.metaKeywords, onChange: (e) => handleInputChange("metaKeywords", e.target.value), placeholder: "Enter meta keywords" })] }), !pageItem && ((0, jsx_runtime_1.jsx)(ActionButton_1.ActionButton, { disabled: isBuilding || isGenerating || !!validationMessage, className: "flex-1", onClick: () => {
140
+ createPage();
141
+ }, isLoading: isBuilding || isGenerating, loadingText: isGenerating ? "Generating..." : "Create Page", children: "Create Page" }))] }));
142
+ }