@alpaca-editor/core 1.0.0 → 1.0.3

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 (695) hide show
  1. package/build.css +3 -0
  2. package/components.json +21 -0
  3. package/dev.css +3 -0
  4. package/dist/client-components/api.d.ts +1 -0
  5. package/dist/client-components/api.js +4 -0
  6. package/dist/client-components/api.js.map +1 -0
  7. package/dist/client-components/index.d.ts +16 -0
  8. package/dist/client-components/index.js +17 -0
  9. package/dist/client-components/index.js.map +1 -0
  10. package/dist/components/ActionButton.d.ts +12 -0
  11. package/dist/components/ActionButton.js +6 -0
  12. package/dist/components/ActionButton.js.map +1 -0
  13. package/dist/components/Error.d.ts +9 -0
  14. package/dist/components/Error.js +24 -0
  15. package/dist/components/Error.js.map +1 -0
  16. package/dist/components/ui/button.d.ts +10 -0
  17. package/dist/components/ui/button.js +32 -0
  18. package/dist/components/ui/button.js.map +1 -0
  19. package/dist/config/config.d.ts +6 -0
  20. package/dist/config/config.js +647 -0
  21. package/dist/config/config.js.map +1 -0
  22. package/dist/config/types.d.ts +223 -0
  23. package/dist/config/types.js +2 -0
  24. package/dist/config/types.js.map +1 -0
  25. package/dist/editor/ComponentInfo.d.ts +4 -0
  26. package/dist/editor/ComponentInfo.js +29 -0
  27. package/dist/editor/ComponentInfo.js.map +1 -0
  28. package/dist/editor/ConfirmationDialog.d.ts +19 -0
  29. package/dist/editor/ConfirmationDialog.js +31 -0
  30. package/dist/editor/ConfirmationDialog.js.map +1 -0
  31. package/dist/editor/ContentTree.d.ts +35 -0
  32. package/dist/editor/ContentTree.js +404 -0
  33. package/dist/editor/ContentTree.js.map +1 -0
  34. package/dist/editor/ContextMenu.d.ts +13 -0
  35. package/dist/editor/ContextMenu.js +114 -0
  36. package/dist/editor/ContextMenu.js.map +1 -0
  37. package/dist/editor/Editor.d.ts +11 -0
  38. package/dist/editor/Editor.js +50 -0
  39. package/dist/editor/Editor.js.map +1 -0
  40. package/dist/editor/EditorWarning.d.ts +5 -0
  41. package/dist/editor/EditorWarning.js +11 -0
  42. package/dist/editor/EditorWarning.js.map +1 -0
  43. package/dist/editor/EditorWarnings.d.ts +9 -0
  44. package/dist/editor/EditorWarnings.js +19 -0
  45. package/dist/editor/EditorWarnings.js.map +1 -0
  46. package/dist/editor/FieldEditorPopup.d.ts +10 -0
  47. package/dist/editor/FieldEditorPopup.js +22 -0
  48. package/dist/editor/FieldEditorPopup.js.map +1 -0
  49. package/dist/editor/FieldHistory.d.ts +6 -0
  50. package/dist/editor/FieldHistory.js +38 -0
  51. package/dist/editor/FieldHistory.js.map +1 -0
  52. package/dist/editor/FieldList.d.ts +16 -0
  53. package/dist/editor/FieldList.js +58 -0
  54. package/dist/editor/FieldList.js.map +1 -0
  55. package/dist/editor/FieldListField.d.ts +14 -0
  56. package/dist/editor/FieldListField.js +161 -0
  57. package/dist/editor/FieldListField.js.map +1 -0
  58. package/dist/editor/FieldListFieldWithFallbacks.d.ts +10 -0
  59. package/dist/editor/FieldListFieldWithFallbacks.js +109 -0
  60. package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -0
  61. package/dist/editor/FloatingToolbar.d.ts +7 -0
  62. package/dist/editor/FloatingToolbar.js +90 -0
  63. package/dist/editor/FloatingToolbar.js.map +1 -0
  64. package/dist/editor/ImageEditor.d.ts +5 -0
  65. package/dist/editor/ImageEditor.js +53 -0
  66. package/dist/editor/ImageEditor.js.map +1 -0
  67. package/dist/editor/InsertMenu.d.ts +8 -0
  68. package/dist/editor/InsertMenu.js +158 -0
  69. package/dist/editor/InsertMenu.js.map +1 -0
  70. package/dist/editor/ItemInfo.d.ts +4 -0
  71. package/dist/editor/ItemInfo.js +28 -0
  72. package/dist/editor/ItemInfo.js.map +1 -0
  73. package/dist/editor/LinkEditorDialog.d.ts +15 -0
  74. package/dist/editor/LinkEditorDialog.js +84 -0
  75. package/dist/editor/LinkEditorDialog.js.map +1 -0
  76. package/dist/editor/MainLayout.d.ts +9 -0
  77. package/dist/editor/MainLayout.js +41 -0
  78. package/dist/editor/MainLayout.js.map +1 -0
  79. package/dist/editor/NewEditorClient.d.ts +5 -0
  80. package/dist/editor/NewEditorClient.js +7 -0
  81. package/dist/editor/NewEditorClient.js.map +1 -0
  82. package/dist/editor/PictureCropper.d.ts +6 -0
  83. package/dist/editor/PictureCropper.js +327 -0
  84. package/dist/editor/PictureCropper.js.map +1 -0
  85. package/dist/editor/PictureEditor.d.ts +8 -0
  86. package/dist/editor/PictureEditor.js +102 -0
  87. package/dist/editor/PictureEditor.js.map +1 -0
  88. package/dist/editor/PictureEditorDialog.d.ts +8 -0
  89. package/dist/editor/PictureEditorDialog.js +189 -0
  90. package/dist/editor/PictureEditorDialog.js.map +1 -0
  91. package/dist/editor/ScrollingContentTree.d.ts +6 -0
  92. package/dist/editor/ScrollingContentTree.js +25 -0
  93. package/dist/editor/ScrollingContentTree.js.map +1 -0
  94. package/dist/editor/Terminal.d.ts +14 -0
  95. package/dist/editor/Terminal.js +107 -0
  96. package/dist/editor/Terminal.js.map +1 -0
  97. package/dist/editor/Titlebar.d.ts +1 -0
  98. package/dist/editor/Titlebar.js +9 -0
  99. package/dist/editor/Titlebar.js.map +1 -0
  100. package/dist/editor/ai/AiPopup.d.ts +10 -0
  101. package/dist/editor/ai/AiPopup.js +23 -0
  102. package/dist/editor/ai/AiPopup.js.map +1 -0
  103. package/dist/editor/ai/AiResponseMessage.d.ts +8 -0
  104. package/dist/editor/ai/AiResponseMessage.js +22 -0
  105. package/dist/editor/ai/AiResponseMessage.js.map +1 -0
  106. package/dist/editor/ai/AiTerminal.d.ts +34 -0
  107. package/dist/editor/ai/AiTerminal.js +236 -0
  108. package/dist/editor/ai/AiTerminal.js.map +1 -0
  109. package/dist/editor/ai/AiToolCall.d.ts +9 -0
  110. package/dist/editor/ai/AiToolCall.js +16 -0
  111. package/dist/editor/ai/AiToolCall.js.map +1 -0
  112. package/dist/editor/ai/EditorAiTerminal.d.ts +5 -0
  113. package/dist/editor/ai/EditorAiTerminal.js +7 -0
  114. package/dist/editor/ai/EditorAiTerminal.js.map +1 -0
  115. package/dist/editor/ai/editorAiContext.d.ts +11 -0
  116. package/dist/editor/ai/editorAiContext.js +12 -0
  117. package/dist/editor/ai/editorAiContext.js.map +1 -0
  118. package/dist/editor/client/DialogContext.d.ts +12 -0
  119. package/dist/editor/client/DialogContext.js +25 -0
  120. package/dist/editor/client/DialogContext.js.map +1 -0
  121. package/dist/editor/client/EditorClient.d.ts +26 -0
  122. package/dist/editor/client/EditorClient.js +1298 -0
  123. package/dist/editor/client/EditorClient.js.map +1 -0
  124. package/dist/editor/client/GenericDialog.d.ts +10 -0
  125. package/dist/editor/client/GenericDialog.js +25 -0
  126. package/dist/editor/client/GenericDialog.js.map +1 -0
  127. package/dist/editor/client/editContext.d.ts +199 -0
  128. package/dist/editor/client/editContext.js +20 -0
  129. package/dist/editor/client/editContext.js.map +1 -0
  130. package/dist/editor/client/helpers.d.ts +12 -0
  131. package/dist/editor/client/helpers.js +29 -0
  132. package/dist/editor/client/helpers.js.map +1 -0
  133. package/dist/editor/client/itemsRepository.d.ts +24 -0
  134. package/dist/editor/client/itemsRepository.js +253 -0
  135. package/dist/editor/client/itemsRepository.js.map +1 -0
  136. package/dist/editor/client/operations.d.ts +57 -0
  137. package/dist/editor/client/operations.js +393 -0
  138. package/dist/editor/client/operations.js.map +1 -0
  139. package/dist/editor/client/pageModelBuilder.d.ts +6 -0
  140. package/dist/editor/client/pageModelBuilder.js +127 -0
  141. package/dist/editor/client/pageModelBuilder.js.map +1 -0
  142. package/dist/editor/commands/commands.d.ts +19 -0
  143. package/dist/editor/commands/commands.js +2 -0
  144. package/dist/editor/commands/commands.js.map +1 -0
  145. package/dist/editor/commands/componentCommands.d.ts +13 -0
  146. package/dist/editor/commands/componentCommands.js +271 -0
  147. package/dist/editor/commands/componentCommands.js.map +1 -0
  148. package/dist/editor/commands/createVersionCommand.d.ts +4 -0
  149. package/dist/editor/commands/createVersionCommand.js +24 -0
  150. package/dist/editor/commands/createVersionCommand.js.map +1 -0
  151. package/dist/editor/commands/deleteVersionCommand.d.ts +4 -0
  152. package/dist/editor/commands/deleteVersionCommand.js +53 -0
  153. package/dist/editor/commands/deleteVersionCommand.js.map +1 -0
  154. package/dist/editor/commands/itemCommands.d.ts +17 -0
  155. package/dist/editor/commands/itemCommands.js +132 -0
  156. package/dist/editor/commands/itemCommands.js.map +1 -0
  157. package/dist/editor/commands/localizeItem/LocalizeItemDialog.d.ts +8 -0
  158. package/dist/editor/commands/localizeItem/LocalizeItemDialog.js +89 -0
  159. package/dist/editor/commands/localizeItem/LocalizeItemDialog.js.map +1 -0
  160. package/dist/editor/commands/undo.d.ts +15 -0
  161. package/dist/editor/commands/undo.js +29 -0
  162. package/dist/editor/commands/undo.js.map +1 -0
  163. package/dist/editor/component-designer/ComponentDesigner.d.ts +1 -0
  164. package/dist/editor/component-designer/ComponentDesigner.js +56 -0
  165. package/dist/editor/component-designer/ComponentDesigner.js.map +1 -0
  166. package/dist/editor/component-designer/ComponentDesignerAiTerminal.d.ts +1 -0
  167. package/dist/editor/component-designer/ComponentDesignerAiTerminal.js +7 -0
  168. package/dist/editor/component-designer/ComponentDesignerAiTerminal.js.map +1 -0
  169. package/dist/editor/component-designer/ComponentDesignerMenu.d.ts +1 -0
  170. package/dist/editor/component-designer/ComponentDesignerMenu.js +65 -0
  171. package/dist/editor/component-designer/ComponentDesignerMenu.js.map +1 -0
  172. package/dist/editor/component-designer/ComponentEditor.d.ts +4 -0
  173. package/dist/editor/component-designer/ComponentEditor.js +57 -0
  174. package/dist/editor/component-designer/ComponentEditor.js.map +1 -0
  175. package/dist/editor/component-designer/ComponentRenderingCodeEditor.d.ts +5 -0
  176. package/dist/editor/component-designer/ComponentRenderingCodeEditor.js +11 -0
  177. package/dist/editor/component-designer/ComponentRenderingCodeEditor.js.map +1 -0
  178. package/dist/editor/component-designer/ComponentRenderingEditor.d.ts +1 -0
  179. package/dist/editor/component-designer/ComponentRenderingEditor.js +69 -0
  180. package/dist/editor/component-designer/ComponentRenderingEditor.js.map +1 -0
  181. package/dist/editor/component-designer/ComponentsDropdown.d.ts +4 -0
  182. package/dist/editor/component-designer/ComponentsDropdown.js +20 -0
  183. package/dist/editor/component-designer/ComponentsDropdown.js.map +1 -0
  184. package/dist/editor/component-designer/PlaceholdersEditor.d.ts +4 -0
  185. package/dist/editor/component-designer/PlaceholdersEditor.js +68 -0
  186. package/dist/editor/component-designer/PlaceholdersEditor.js.map +1 -0
  187. package/dist/editor/component-designer/RenderingsDropdown.d.ts +1 -0
  188. package/dist/editor/component-designer/RenderingsDropdown.js +23 -0
  189. package/dist/editor/component-designer/RenderingsDropdown.js.map +1 -0
  190. package/dist/editor/component-designer/TemplateEditor.d.ts +1 -0
  191. package/dist/editor/component-designer/TemplateEditor.js +142 -0
  192. package/dist/editor/component-designer/TemplateEditor.js.map +1 -0
  193. package/dist/editor/component-designer/aiContext.d.ts +5 -0
  194. package/dist/editor/component-designer/aiContext.js +16 -0
  195. package/dist/editor/component-designer/aiContext.js.map +1 -0
  196. package/dist/editor/componentTreeHelper.d.ts +16 -0
  197. package/dist/editor/componentTreeHelper.js +87 -0
  198. package/dist/editor/componentTreeHelper.js.map +1 -0
  199. package/dist/editor/control-center/ControlCenterMenu.d.ts +1 -0
  200. package/dist/editor/control-center/ControlCenterMenu.js +57 -0
  201. package/dist/editor/control-center/ControlCenterMenu.js.map +1 -0
  202. package/dist/editor/control-center/IndexOverview.d.ts +1 -0
  203. package/dist/editor/control-center/IndexOverview.js +25 -0
  204. package/dist/editor/control-center/IndexOverview.js.map +1 -0
  205. package/dist/editor/control-center/IndexSettings.d.ts +5 -0
  206. package/dist/editor/control-center/IndexSettings.js +104 -0
  207. package/dist/editor/control-center/IndexSettings.js.map +1 -0
  208. package/dist/editor/control-center/Status.d.ts +1 -0
  209. package/dist/editor/control-center/Status.js +5 -0
  210. package/dist/editor/control-center/Status.js.map +1 -0
  211. package/dist/editor/editor-warnings/ItemLocked.d.ts +2 -0
  212. package/dist/editor/editor-warnings/ItemLocked.js +38 -0
  213. package/dist/editor/editor-warnings/ItemLocked.js.map +1 -0
  214. package/dist/editor/editor-warnings/NoLanguageWriteAccess.d.ts +2 -0
  215. package/dist/editor/editor-warnings/NoLanguageWriteAccess.js +14 -0
  216. package/dist/editor/editor-warnings/NoLanguageWriteAccess.js.map +1 -0
  217. package/dist/editor/editor-warnings/NoWorkflowWriteAccess.d.ts +2 -0
  218. package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js +14 -0
  219. package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js.map +1 -0
  220. package/dist/editor/editor-warnings/NoWriteAccess.d.ts +2 -0
  221. package/dist/editor/editor-warnings/NoWriteAccess.js +12 -0
  222. package/dist/editor/editor-warnings/NoWriteAccess.js.map +1 -0
  223. package/dist/editor/editor-warnings/ValidationErrors.d.ts +2 -0
  224. package/dist/editor/editor-warnings/ValidationErrors.js +25 -0
  225. package/dist/editor/editor-warnings/ValidationErrors.js.map +1 -0
  226. package/dist/editor/field-types/AttachmentEditor.d.ts +4 -0
  227. package/dist/editor/field-types/AttachmentEditor.js +5 -0
  228. package/dist/editor/field-types/AttachmentEditor.js.map +1 -0
  229. package/dist/editor/field-types/CheckboxEditor.d.ts +5 -0
  230. package/dist/editor/field-types/CheckboxEditor.js +30 -0
  231. package/dist/editor/field-types/CheckboxEditor.js.map +1 -0
  232. package/dist/editor/field-types/DropLinkEditor.d.ts +5 -0
  233. package/dist/editor/field-types/DropLinkEditor.js +49 -0
  234. package/dist/editor/field-types/DropLinkEditor.js.map +1 -0
  235. package/dist/editor/field-types/DropListEditor.d.ts +5 -0
  236. package/dist/editor/field-types/DropListEditor.js +56 -0
  237. package/dist/editor/field-types/DropListEditor.js.map +1 -0
  238. package/dist/editor/field-types/ImageFieldEditor.d.ts +5 -0
  239. package/dist/editor/field-types/ImageFieldEditor.js +34 -0
  240. package/dist/editor/field-types/ImageFieldEditor.js.map +1 -0
  241. package/dist/editor/field-types/InternalLinkFieldEditor.d.ts +5 -0
  242. package/dist/editor/field-types/InternalLinkFieldEditor.js +59 -0
  243. package/dist/editor/field-types/InternalLinkFieldEditor.js.map +1 -0
  244. package/dist/editor/field-types/LinkFieldEditor.d.ts +5 -0
  245. package/dist/editor/field-types/LinkFieldEditor.js +56 -0
  246. package/dist/editor/field-types/LinkFieldEditor.js.map +1 -0
  247. package/dist/editor/field-types/MultiLineText.d.ts +6 -0
  248. package/dist/editor/field-types/MultiLineText.js +33 -0
  249. package/dist/editor/field-types/MultiLineText.js.map +1 -0
  250. package/dist/editor/field-types/PictureFieldEditor.d.ts +5 -0
  251. package/dist/editor/field-types/PictureFieldEditor.js +57 -0
  252. package/dist/editor/field-types/PictureFieldEditor.js.map +1 -0
  253. package/dist/editor/field-types/RawEditor.d.ts +5 -0
  254. package/dist/editor/field-types/RawEditor.js +31 -0
  255. package/dist/editor/field-types/RawEditor.js.map +1 -0
  256. package/dist/editor/field-types/ReactQuill.d.ts +125 -0
  257. package/dist/editor/field-types/ReactQuill.js +385 -0
  258. package/dist/editor/field-types/ReactQuill.js.map +1 -0
  259. package/dist/editor/field-types/RichTextEditor.d.ts +5 -0
  260. package/dist/editor/field-types/RichTextEditor.js +8 -0
  261. package/dist/editor/field-types/RichTextEditor.js.map +1 -0
  262. package/dist/editor/field-types/RichTextEditorComponent.d.ts +6 -0
  263. package/dist/editor/field-types/RichTextEditorComponent.js +70 -0
  264. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -0
  265. package/dist/editor/field-types/SingleLineText.d.ts +6 -0
  266. package/dist/editor/field-types/SingleLineText.js +90 -0
  267. package/dist/editor/field-types/SingleLineText.js.map +1 -0
  268. package/dist/editor/field-types/TreeListEditor.d.ts +5 -0
  269. package/dist/editor/field-types/TreeListEditor.js +132 -0
  270. package/dist/editor/field-types/TreeListEditor.js.map +1 -0
  271. package/dist/editor/fieldTypes.d.ts +117 -0
  272. package/dist/editor/fieldTypes.js +2 -0
  273. package/dist/editor/fieldTypes.js.map +1 -0
  274. package/dist/editor/media-selector/AiImageSearch.d.ts +4 -0
  275. package/dist/editor/media-selector/AiImageSearch.js +105 -0
  276. package/dist/editor/media-selector/AiImageSearch.js.map +1 -0
  277. package/dist/editor/media-selector/AiImageSearchPrompt.d.ts +3 -0
  278. package/dist/editor/media-selector/AiImageSearchPrompt.js +56 -0
  279. package/dist/editor/media-selector/AiImageSearchPrompt.js.map +1 -0
  280. package/dist/editor/media-selector/MediaSelector.d.ts +9 -0
  281. package/dist/editor/media-selector/MediaSelector.js +8 -0
  282. package/dist/editor/media-selector/MediaSelector.js.map +1 -0
  283. package/dist/editor/media-selector/Preview.d.ts +4 -0
  284. package/dist/editor/media-selector/Preview.js +7 -0
  285. package/dist/editor/media-selector/Preview.js.map +1 -0
  286. package/dist/editor/media-selector/Thumbnails.d.ts +13 -0
  287. package/dist/editor/media-selector/Thumbnails.js +9 -0
  288. package/dist/editor/media-selector/Thumbnails.js.map +1 -0
  289. package/dist/editor/media-selector/TreeSelector.d.ts +7 -0
  290. package/dist/editor/media-selector/TreeSelector.js +165 -0
  291. package/dist/editor/media-selector/TreeSelector.js.map +1 -0
  292. package/dist/editor/media-selector/UploadZone.d.ts +4 -0
  293. package/dist/editor/media-selector/UploadZone.js +78 -0
  294. package/dist/editor/media-selector/UploadZone.js.map +1 -0
  295. package/dist/editor/menubar/ActionsMenu.d.ts +1 -0
  296. package/dist/editor/menubar/ActionsMenu.js +31 -0
  297. package/dist/editor/menubar/ActionsMenu.js.map +1 -0
  298. package/dist/editor/menubar/ActiveUsers.d.ts +1 -0
  299. package/dist/editor/menubar/ActiveUsers.js +11 -0
  300. package/dist/editor/menubar/ActiveUsers.js.map +1 -0
  301. package/dist/editor/menubar/ApproveAndPublish.d.ts +1 -0
  302. package/dist/editor/menubar/ApproveAndPublish.js +11 -0
  303. package/dist/editor/menubar/ApproveAndPublish.js.map +1 -0
  304. package/dist/editor/menubar/BrowseHistory.d.ts +6 -0
  305. package/dist/editor/menubar/BrowseHistory.js +12 -0
  306. package/dist/editor/menubar/BrowseHistory.js.map +1 -0
  307. package/dist/editor/menubar/ItemLanguageVersion.d.ts +1 -0
  308. package/dist/editor/menubar/ItemLanguageVersion.js +34 -0
  309. package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -0
  310. package/dist/editor/menubar/LanguageSelector.d.ts +9 -0
  311. package/dist/editor/menubar/LanguageSelector.js +31 -0
  312. package/dist/editor/menubar/LanguageSelector.js.map +1 -0
  313. package/dist/editor/menubar/Menu.d.ts +1 -0
  314. package/dist/editor/menubar/Menu.js +63 -0
  315. package/dist/editor/menubar/Menu.js.map +1 -0
  316. package/dist/editor/menubar/NavButtons.d.ts +1 -0
  317. package/dist/editor/menubar/NavButtons.js +41 -0
  318. package/dist/editor/menubar/NavButtons.js.map +1 -0
  319. package/dist/editor/menubar/PageSelector.d.ts +4 -0
  320. package/dist/editor/menubar/PageSelector.js +48 -0
  321. package/dist/editor/menubar/PageSelector.js.map +1 -0
  322. package/dist/editor/menubar/PageViewerControls.d.ts +1 -0
  323. package/dist/editor/menubar/PageViewerControls.js +35 -0
  324. package/dist/editor/menubar/PageViewerControls.js.map +1 -0
  325. package/dist/editor/menubar/Separator.d.ts +3 -0
  326. package/dist/editor/menubar/Separator.js +6 -0
  327. package/dist/editor/menubar/Separator.js.map +1 -0
  328. package/dist/editor/menubar/SiteInfo.d.ts +1 -0
  329. package/dist/editor/menubar/SiteInfo.js +24 -0
  330. package/dist/editor/menubar/SiteInfo.js.map +1 -0
  331. package/dist/editor/menubar/User.d.ts +4 -0
  332. package/dist/editor/menubar/User.js +16 -0
  333. package/dist/editor/menubar/User.js.map +1 -0
  334. package/dist/editor/menubar/VersionSelector.d.ts +9 -0
  335. package/dist/editor/menubar/VersionSelector.js +47 -0
  336. package/dist/editor/menubar/VersionSelector.js.map +1 -0
  337. package/dist/editor/page-editor-chrome/CommentHighlighting.d.ts +6 -0
  338. package/dist/editor/page-editor-chrome/CommentHighlighting.js +212 -0
  339. package/dist/editor/page-editor-chrome/CommentHighlighting.js.map +1 -0
  340. package/dist/editor/page-editor-chrome/CommentHighlightings.d.ts +4 -0
  341. package/dist/editor/page-editor-chrome/CommentHighlightings.js +15 -0
  342. package/dist/editor/page-editor-chrome/CommentHighlightings.js.map +1 -0
  343. package/dist/editor/page-editor-chrome/FieldActionIndicator.d.ts +4 -0
  344. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +25 -0
  345. package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -0
  346. package/dist/editor/page-editor-chrome/FieldActionIndicators.d.ts +1 -0
  347. package/dist/editor/page-editor-chrome/FieldActionIndicators.js +13 -0
  348. package/dist/editor/page-editor-chrome/FieldActionIndicators.js.map +1 -0
  349. package/dist/editor/page-editor-chrome/FieldEditedIndicator.d.ts +8 -0
  350. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js +25 -0
  351. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js.map +1 -0
  352. package/dist/editor/page-editor-chrome/FieldEditedIndicators.d.ts +6 -0
  353. package/dist/editor/page-editor-chrome/FieldEditedIndicators.js +13 -0
  354. package/dist/editor/page-editor-chrome/FieldEditedIndicators.js.map +1 -0
  355. package/dist/editor/page-editor-chrome/FrameMenu.d.ts +7 -0
  356. package/dist/editor/page-editor-chrome/FrameMenu.js +176 -0
  357. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -0
  358. package/dist/editor/page-editor-chrome/FrameMenus.d.ts +5 -0
  359. package/dist/editor/page-editor-chrome/FrameMenus.js +22 -0
  360. package/dist/editor/page-editor-chrome/FrameMenus.js.map +1 -0
  361. package/dist/editor/page-editor-chrome/InlineEditor.d.ts +5 -0
  362. package/dist/editor/page-editor-chrome/InlineEditor.js +99 -0
  363. package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -0
  364. package/dist/editor/page-editor-chrome/LockedFieldIndicator.d.ts +1 -0
  365. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +33 -0
  366. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -0
  367. package/dist/editor/page-editor-chrome/NoLayout.d.ts +1 -0
  368. package/dist/editor/page-editor-chrome/NoLayout.js +19 -0
  369. package/dist/editor/page-editor-chrome/NoLayout.js.map +1 -0
  370. package/dist/editor/page-editor-chrome/PageEditorChrome.d.ts +6 -0
  371. package/dist/editor/page-editor-chrome/PageEditorChrome.js +63 -0
  372. package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -0
  373. package/dist/editor/page-editor-chrome/PictureEditorOverlay.d.ts +1 -0
  374. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +107 -0
  375. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js.map +1 -0
  376. package/dist/editor/page-editor-chrome/PlaceholderDropZone.d.ts +14 -0
  377. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +80 -0
  378. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -0
  379. package/dist/editor/page-editor-chrome/PlaceholderDropZones.d.ts +5 -0
  380. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +145 -0
  381. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -0
  382. package/dist/editor/page-viewer/DeviceToolbar.d.ts +6 -0
  383. package/dist/editor/page-viewer/DeviceToolbar.js +19 -0
  384. package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -0
  385. package/dist/editor/page-viewer/EditorForm.d.ts +5 -0
  386. package/dist/editor/page-viewer/EditorForm.js +128 -0
  387. package/dist/editor/page-viewer/EditorForm.js.map +1 -0
  388. package/dist/editor/page-viewer/MiniMap.d.ts +9 -0
  389. package/dist/editor/page-viewer/MiniMap.js +222 -0
  390. package/dist/editor/page-viewer/MiniMap.js.map +1 -0
  391. package/dist/editor/page-viewer/PageViewer.d.ts +8 -0
  392. package/dist/editor/page-viewer/PageViewer.js +62 -0
  393. package/dist/editor/page-viewer/PageViewer.js.map +1 -0
  394. package/dist/editor/page-viewer/PageViewerFrame.d.ts +11 -0
  395. package/dist/editor/page-viewer/PageViewerFrame.js +690 -0
  396. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -0
  397. package/dist/editor/page-viewer/pageViewContext.d.ts +38 -0
  398. package/dist/editor/page-viewer/pageViewContext.js +115 -0
  399. package/dist/editor/page-viewer/pageViewContext.js.map +1 -0
  400. package/dist/editor/pageModel.d.ts +171 -0
  401. package/dist/editor/pageModel.js +2 -0
  402. package/dist/editor/pageModel.js.map +1 -0
  403. package/dist/editor/picture-shared.d.ts +16 -0
  404. package/dist/editor/picture-shared.js +25 -0
  405. package/dist/editor/picture-shared.js.map +1 -0
  406. package/dist/editor/reviews/Comment.d.ts +4 -0
  407. package/dist/editor/reviews/Comment.js +114 -0
  408. package/dist/editor/reviews/Comment.js.map +1 -0
  409. package/dist/editor/reviews/Comments.d.ts +1 -0
  410. package/dist/editor/reviews/Comments.js +22 -0
  411. package/dist/editor/reviews/Comments.js.map +1 -0
  412. package/dist/editor/reviews/PreviewInfo.d.ts +1 -0
  413. package/dist/editor/reviews/PreviewInfo.js +11 -0
  414. package/dist/editor/reviews/PreviewInfo.js.map +1 -0
  415. package/dist/editor/reviews/Reviews.d.ts +1 -0
  416. package/dist/editor/reviews/Reviews.js +160 -0
  417. package/dist/editor/reviews/Reviews.js.map +1 -0
  418. package/dist/editor/reviews/reviewCommands.d.ts +3 -0
  419. package/dist/editor/reviews/reviewCommands.js +42 -0
  420. package/dist/editor/reviews/reviewCommands.js.map +1 -0
  421. package/dist/editor/reviews/useReviews.d.ts +12 -0
  422. package/dist/editor/reviews/useReviews.js +43 -0
  423. package/dist/editor/reviews/useReviews.js.map +1 -0
  424. package/dist/editor/services/aiService.d.ts +34 -0
  425. package/dist/editor/services/aiService.js +95 -0
  426. package/dist/editor/services/aiService.js.map +1 -0
  427. package/dist/editor/services/componentDesignerService.d.ts +46 -0
  428. package/dist/editor/services/componentDesignerService.js +72 -0
  429. package/dist/editor/services/componentDesignerService.js.map +1 -0
  430. package/dist/editor/services/contentService.d.ts +34 -0
  431. package/dist/editor/services/contentService.js +92 -0
  432. package/dist/editor/services/contentService.js.map +1 -0
  433. package/dist/editor/services/editService.d.ts +34 -0
  434. package/dist/editor/services/editService.js +294 -0
  435. package/dist/editor/services/editService.js.map +1 -0
  436. package/dist/editor/services/indexService.d.ts +6 -0
  437. package/dist/editor/services/indexService.js +19 -0
  438. package/dist/editor/services/indexService.js.map +1 -0
  439. package/dist/editor/services/reviewsService.d.ts +12 -0
  440. package/dist/editor/services/reviewsService.js +32 -0
  441. package/dist/editor/services/reviewsService.js.map +1 -0
  442. package/dist/editor/services/serviceHelper.d.ts +9 -0
  443. package/dist/editor/services/serviceHelper.js +64 -0
  444. package/dist/editor/services/serviceHelper.js.map +1 -0
  445. package/dist/editor/services/systemService.d.ts +2 -0
  446. package/dist/editor/services/systemService.js +5 -0
  447. package/dist/editor/services/systemService.js.map +1 -0
  448. package/dist/editor/services/translationService.d.ts +11 -0
  449. package/dist/editor/services/translationService.js +11 -0
  450. package/dist/editor/services/translationService.js.map +1 -0
  451. package/dist/editor/services-server/api.d.ts +19 -0
  452. package/dist/editor/services-server/api.js +111 -0
  453. package/dist/editor/services-server/api.js.map +1 -0
  454. package/dist/editor/services-server/graphQL.d.ts +29 -0
  455. package/dist/editor/services-server/graphQL.js +53 -0
  456. package/dist/editor/services-server/graphQL.js.map +1 -0
  457. package/dist/editor/sidebar/ComponentPalette.d.ts +1 -0
  458. package/dist/editor/sidebar/ComponentPalette.js +53 -0
  459. package/dist/editor/sidebar/ComponentPalette.js.map +1 -0
  460. package/dist/editor/sidebar/ComponentTree.d.ts +1 -0
  461. package/dist/editor/sidebar/ComponentTree.js +360 -0
  462. package/dist/editor/sidebar/ComponentTree.js.map +1 -0
  463. package/dist/editor/sidebar/Debug.d.ts +1 -0
  464. package/dist/editor/sidebar/Debug.js +58 -0
  465. package/dist/editor/sidebar/Debug.js.map +1 -0
  466. package/dist/editor/sidebar/DictionaryEditor.d.ts +1 -0
  467. package/dist/editor/sidebar/DictionaryEditor.js +158 -0
  468. package/dist/editor/sidebar/DictionaryEditor.js.map +1 -0
  469. package/dist/editor/sidebar/EditHistory.d.ts +1 -0
  470. package/dist/editor/sidebar/EditHistory.js +72 -0
  471. package/dist/editor/sidebar/EditHistory.js.map +1 -0
  472. package/dist/editor/sidebar/GraphQL.d.ts +1 -0
  473. package/dist/editor/sidebar/GraphQL.js +113 -0
  474. package/dist/editor/sidebar/GraphQL.js.map +1 -0
  475. package/dist/editor/sidebar/Insert.d.ts +1 -0
  476. package/dist/editor/sidebar/Insert.js +22 -0
  477. package/dist/editor/sidebar/Insert.js.map +1 -0
  478. package/dist/editor/sidebar/MainContentTree.d.ts +4 -0
  479. package/dist/editor/sidebar/MainContentTree.js +49 -0
  480. package/dist/editor/sidebar/MainContentTree.js.map +1 -0
  481. package/dist/editor/sidebar/Performance.d.ts +1 -0
  482. package/dist/editor/sidebar/Performance.js +32 -0
  483. package/dist/editor/sidebar/Performance.js.map +1 -0
  484. package/dist/editor/sidebar/Sessions.d.ts +1 -0
  485. package/dist/editor/sidebar/Sessions.js +29 -0
  486. package/dist/editor/sidebar/Sessions.js.map +1 -0
  487. package/dist/editor/sidebar/Sidebar.d.ts +1 -0
  488. package/dist/editor/sidebar/Sidebar.js +13 -0
  489. package/dist/editor/sidebar/Sidebar.js.map +1 -0
  490. package/dist/editor/sidebar/SidebarView.d.ts +8 -0
  491. package/dist/editor/sidebar/SidebarView.js +74 -0
  492. package/dist/editor/sidebar/SidebarView.js.map +1 -0
  493. package/dist/editor/sidebar/Translations.d.ts +1 -0
  494. package/dist/editor/sidebar/Translations.js +158 -0
  495. package/dist/editor/sidebar/Translations.js.map +1 -0
  496. package/dist/editor/sidebar/Validation.d.ts +1 -0
  497. package/dist/editor/sidebar/Validation.js +50 -0
  498. package/dist/editor/sidebar/Validation.js.map +1 -0
  499. package/dist/editor/sidebar/ViewSelector.d.ts +1 -0
  500. package/dist/editor/sidebar/ViewSelector.js +13 -0
  501. package/dist/editor/sidebar/ViewSelector.js.map +1 -0
  502. package/dist/editor/sidebar/Workbox.d.ts +1 -0
  503. package/dist/editor/sidebar/Workbox.js +78 -0
  504. package/dist/editor/sidebar/Workbox.js.map +1 -0
  505. package/dist/editor/ui/CenteredMessage.d.ts +3 -0
  506. package/dist/editor/ui/CenteredMessage.js +5 -0
  507. package/dist/editor/ui/CenteredMessage.js.map +1 -0
  508. package/dist/editor/ui/CopyToClipboardButton.d.ts +3 -0
  509. package/dist/editor/ui/CopyToClipboardButton.js +15 -0
  510. package/dist/editor/ui/CopyToClipboardButton.js.map +1 -0
  511. package/dist/editor/ui/DialogButtons.d.ts +3 -0
  512. package/dist/editor/ui/DialogButtons.js +5 -0
  513. package/dist/editor/ui/DialogButtons.js.map +1 -0
  514. package/dist/editor/ui/Icons.d.ts +38 -0
  515. package/dist/editor/ui/Icons.js +56 -0
  516. package/dist/editor/ui/Icons.js.map +1 -0
  517. package/dist/editor/ui/ItemNameDialog.d.ts +11 -0
  518. package/dist/editor/ui/ItemNameDialog.js +40 -0
  519. package/dist/editor/ui/ItemNameDialog.js.map +1 -0
  520. package/dist/editor/ui/ItemNameDialogNew.d.ts +10 -0
  521. package/dist/editor/ui/ItemNameDialogNew.js +56 -0
  522. package/dist/editor/ui/ItemNameDialogNew.js.map +1 -0
  523. package/dist/editor/ui/ItemSearch.d.ts +23 -0
  524. package/dist/editor/ui/ItemSearch.js +90 -0
  525. package/dist/editor/ui/ItemSearch.js.map +1 -0
  526. package/dist/editor/ui/PerfectTree.d.ts +60 -0
  527. package/dist/editor/ui/PerfectTree.js +187 -0
  528. package/dist/editor/ui/PerfectTree.js.map +1 -0
  529. package/dist/editor/ui/Section.d.ts +4 -0
  530. package/dist/editor/ui/Section.js +10 -0
  531. package/dist/editor/ui/Section.js.map +1 -0
  532. package/dist/editor/ui/SimpleIconButton.d.ts +11 -0
  533. package/dist/editor/ui/SimpleIconButton.js +9 -0
  534. package/dist/editor/ui/SimpleIconButton.js.map +1 -0
  535. package/dist/editor/ui/SimpleMenu.d.ts +13 -0
  536. package/dist/editor/ui/SimpleMenu.js +7 -0
  537. package/dist/editor/ui/SimpleMenu.js.map +1 -0
  538. package/dist/editor/ui/SimpleTable.d.ts +14 -0
  539. package/dist/editor/ui/SimpleTable.js +9 -0
  540. package/dist/editor/ui/SimpleTable.js.map +1 -0
  541. package/dist/editor/ui/SimpleTabs.d.ts +12 -0
  542. package/dist/editor/ui/SimpleTabs.js +19 -0
  543. package/dist/editor/ui/SimpleTabs.js.map +1 -0
  544. package/dist/editor/ui/SimpleToolbar.d.ts +3 -0
  545. package/dist/editor/ui/SimpleToolbar.js +5 -0
  546. package/dist/editor/ui/SimpleToolbar.js.map +1 -0
  547. package/dist/editor/ui/Spinner.d.ts +3 -0
  548. package/dist/editor/ui/Spinner.js +5 -0
  549. package/dist/editor/ui/Spinner.js.map +1 -0
  550. package/dist/editor/ui/Splitter.d.ts +15 -0
  551. package/dist/editor/ui/Splitter.js +151 -0
  552. package/dist/editor/ui/Splitter.js.map +1 -0
  553. package/dist/editor/ui/StackedPanels.d.ts +5 -0
  554. package/dist/editor/ui/StackedPanels.js +67 -0
  555. package/dist/editor/ui/StackedPanels.js.map +1 -0
  556. package/dist/editor/ui/Toolbar.d.ts +3 -0
  557. package/dist/editor/ui/Toolbar.js +5 -0
  558. package/dist/editor/ui/Toolbar.js.map +1 -0
  559. package/dist/editor/utils/id-helper.d.ts +1 -0
  560. package/dist/editor/utils/id-helper.js +5 -0
  561. package/dist/editor/utils/id-helper.js.map +1 -0
  562. package/dist/editor/utils/insertOptions.d.ts +3 -0
  563. package/dist/editor/utils/insertOptions.js +43 -0
  564. package/dist/editor/utils/insertOptions.js.map +1 -0
  565. package/dist/editor/utils/itemutils.d.ts +3 -0
  566. package/dist/editor/utils/itemutils.js +22 -0
  567. package/dist/editor/utils/itemutils.js.map +1 -0
  568. package/dist/editor/utils/useMemoDebug.d.ts +1 -0
  569. package/dist/editor/utils/useMemoDebug.js +18 -0
  570. package/dist/editor/utils/useMemoDebug.js.map +1 -0
  571. package/dist/editor/utils.d.ts +44 -0
  572. package/dist/editor/utils.js +309 -0
  573. package/dist/editor/utils.js.map +1 -0
  574. package/dist/editor/views/CompareView.d.ts +1 -0
  575. package/dist/editor/views/CompareView.js +145 -0
  576. package/dist/editor/views/CompareView.js.map +1 -0
  577. package/dist/editor/views/EditView.d.ts +1 -0
  578. package/dist/editor/views/EditView.js +15 -0
  579. package/dist/editor/views/EditView.js.map +1 -0
  580. package/dist/editor/views/ItemEditor.d.ts +7 -0
  581. package/dist/editor/views/ItemEditor.js +22 -0
  582. package/dist/editor/views/ItemEditor.js.map +1 -0
  583. package/dist/editor/views/SingleEditView.d.ts +8 -0
  584. package/dist/editor/views/SingleEditView.js +23 -0
  585. package/dist/editor/views/SingleEditView.js.map +1 -0
  586. package/dist/images/bg-shape-black.webp +0 -0
  587. package/dist/index.d.ts +5 -0
  588. package/dist/index.js +5 -0
  589. package/dist/index.js.map +1 -0
  590. package/dist/lib/utils.d.ts +2 -0
  591. package/dist/lib/utils.js +6 -0
  592. package/dist/lib/utils.js.map +1 -0
  593. package/dist/page-wizard/PageWizard.d.ts +70 -0
  594. package/dist/page-wizard/PageWizard.js +60 -0
  595. package/dist/page-wizard/PageWizard.js.map +1 -0
  596. package/dist/page-wizard/SelectWizard.d.ts +7 -0
  597. package/dist/page-wizard/SelectWizard.js +41 -0
  598. package/dist/page-wizard/SelectWizard.js.map +1 -0
  599. package/dist/page-wizard/WizardSteps.d.ts +8 -0
  600. package/dist/page-wizard/WizardSteps.js +69 -0
  601. package/dist/page-wizard/WizardSteps.js.map +1 -0
  602. package/dist/page-wizard/service.d.ts +15 -0
  603. package/dist/page-wizard/service.js +22 -0
  604. package/dist/page-wizard/service.js.map +1 -0
  605. package/dist/page-wizard/startPageWizardCommand.d.ts +13 -0
  606. package/dist/page-wizard/startPageWizardCommand.js +21 -0
  607. package/dist/page-wizard/startPageWizardCommand.js.map +1 -0
  608. package/dist/page-wizard/steps/BuildPageStep.d.ts +2 -0
  609. package/dist/page-wizard/steps/BuildPageStep.js +133 -0
  610. package/dist/page-wizard/steps/BuildPageStep.js.map +1 -0
  611. package/dist/page-wizard/steps/CollectStep.d.ts +2 -0
  612. package/dist/page-wizard/steps/CollectStep.js +119 -0
  613. package/dist/page-wizard/steps/CollectStep.js.map +1 -0
  614. package/dist/page-wizard/steps/ComponentTypesSelector.d.ts +11 -0
  615. package/dist/page-wizard/steps/ComponentTypesSelector.js +209 -0
  616. package/dist/page-wizard/steps/ComponentTypesSelector.js.map +1 -0
  617. package/dist/page-wizard/steps/Components.d.ts +9 -0
  618. package/dist/page-wizard/steps/Components.js +89 -0
  619. package/dist/page-wizard/steps/Components.js.map +1 -0
  620. package/dist/page-wizard/steps/CreatePage.d.ts +12 -0
  621. package/dist/page-wizard/steps/CreatePage.js +140 -0
  622. package/dist/page-wizard/steps/CreatePage.js.map +1 -0
  623. package/dist/page-wizard/steps/CreatePageAndLayoutStep.d.ts +2 -0
  624. package/dist/page-wizard/steps/CreatePageAndLayoutStep.js +228 -0
  625. package/dist/page-wizard/steps/CreatePageAndLayoutStep.js.map +1 -0
  626. package/dist/page-wizard/steps/EditButton.d.ts +8 -0
  627. package/dist/page-wizard/steps/EditButton.js +5 -0
  628. package/dist/page-wizard/steps/EditButton.js.map +1 -0
  629. package/dist/page-wizard/steps/FieldEditor.d.ts +5 -0
  630. package/dist/page-wizard/steps/FieldEditor.js +28 -0
  631. package/dist/page-wizard/steps/FieldEditor.js.map +1 -0
  632. package/dist/page-wizard/steps/Generate.d.ts +5 -0
  633. package/dist/page-wizard/steps/Generate.js +10 -0
  634. package/dist/page-wizard/steps/Generate.js.map +1 -0
  635. package/dist/page-wizard/steps/ImagesStep.d.ts +2 -0
  636. package/dist/page-wizard/steps/ImagesStep.js +156 -0
  637. package/dist/page-wizard/steps/ImagesStep.js.map +1 -0
  638. package/dist/page-wizard/steps/LayoutStep.d.ts +2 -0
  639. package/dist/page-wizard/steps/LayoutStep.js +118 -0
  640. package/dist/page-wizard/steps/LayoutStep.js.map +1 -0
  641. package/dist/page-wizard/steps/SelectStep.d.ts +2 -0
  642. package/dist/page-wizard/steps/SelectStep.js +145 -0
  643. package/dist/page-wizard/steps/SelectStep.js.map +1 -0
  644. package/dist/page-wizard/steps/schema.d.ts +13 -0
  645. package/dist/page-wizard/steps/schema.js +137 -0
  646. package/dist/page-wizard/steps/schema.js.map +1 -0
  647. package/dist/page-wizard/steps/usePageCreator.d.ts +6 -0
  648. package/dist/page-wizard/steps/usePageCreator.js +192 -0
  649. package/dist/page-wizard/steps/usePageCreator.js.map +1 -0
  650. package/dist/splash-screen/NewPage.d.ts +3 -0
  651. package/dist/splash-screen/NewPage.js +129 -0
  652. package/dist/splash-screen/NewPage.js.map +1 -0
  653. package/dist/splash-screen/SectionHeadline.d.ts +4 -0
  654. package/dist/splash-screen/SectionHeadline.js +7 -0
  655. package/dist/splash-screen/SectionHeadline.js.map +1 -0
  656. package/dist/splash-screen/SplashScreen.d.ts +1 -0
  657. package/dist/splash-screen/SplashScreen.js +79 -0
  658. package/dist/splash-screen/SplashScreen.js.map +1 -0
  659. package/dist/styles.css +2739 -0
  660. package/dist/tour/Tour.d.ts +3 -0
  661. package/dist/tour/Tour.js +319 -0
  662. package/dist/tour/Tour.js.map +1 -0
  663. package/dist/tour/default-tour.d.ts +9 -0
  664. package/dist/tour/default-tour.js +229 -0
  665. package/dist/tour/default-tour.js.map +1 -0
  666. package/dist/tour/preview-tour.d.ts +2 -0
  667. package/dist/tour/preview-tour.js +91 -0
  668. package/dist/tour/preview-tour.js.map +1 -0
  669. package/dist/types.d.ts +259 -0
  670. package/dist/types.js +2 -0
  671. package/dist/types.js.map +1 -0
  672. package/package.json +12 -5
  673. package/src/components/ui/button.tsx +62 -0
  674. package/src/editor/Titlebar.tsx +2 -2
  675. package/src/editor/client/EditorClient.tsx +8 -9
  676. package/src/editor/menubar/ActionsMenu.tsx +1 -1
  677. package/src/editor/menubar/Menu.tsx +3 -3
  678. package/src/editor/menubar/VersionSelector.tsx +9 -10
  679. package/src/editor/page-editor-chrome/CommentHighlighting.tsx +8 -9
  680. package/src/editor/page-viewer/MiniMap.tsx +11 -11
  681. package/src/editor/reviews/Comment.tsx +38 -33
  682. package/src/editor/sidebar/ComponentTree.tsx +512 -512
  683. package/src/editor/sidebar/Insert.tsx +2 -2
  684. package/src/editor/sidebar/MainContentTree.tsx +1 -0
  685. package/src/editor/sidebar/Translations.tsx +12 -12
  686. package/src/editor/sidebar/ViewSelector.tsx +6 -7
  687. package/src/editor/ui/PerfectTree.tsx +2 -2
  688. package/src/editor/ui/SimpleTable.tsx +3 -6
  689. package/src/editor/utils.ts +32 -29
  690. package/src/index.ts +2 -0
  691. package/src/lib/utils.ts +6 -0
  692. package/src/splash-screen/SplashScreen.tsx +2 -2
  693. package/styles.css +124 -2
  694. package/tsconfig.build.json +23 -13
  695. package/tsconfig.json +3 -0
@@ -0,0 +1,1298 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React, { useState, useEffect, useRef, useCallback, useMemo, } from "react";
4
+ import { Toast } from "primereact/toast";
5
+ import { EditContextProvider, ModifiedFieldsContextProvider, OperationsContextProvider, } from "./editContext";
6
+ import { useRouter, useSearchParams, usePathname } from "next/navigation";
7
+ import { getComponentById } from "../componentTreeHelper";
8
+ import { getOperationsContext } from "./operations";
9
+ import { handleErrorResult } from "./helpers";
10
+ import { executeFieldAction as executeFieldServerAction, connectSocket, getEditHistory, releaseFieldLocks, validateItems, } from "../services/editService";
11
+ import "primeicons/primeicons.css";
12
+ import "primereact/resources/themes/md-light-indigo/theme.css";
13
+ import "react-json-view-lite/dist/index.css";
14
+ import { MediaSelector, } from "../media-selector/MediaSelector";
15
+ import { getComponentCommands } from "../commands/componentCommands";
16
+ import { getLanguagesAndVersions, getWorkbox, } from "../services/contentService";
17
+ import ConfirmationDialog from "../ConfirmationDialog";
18
+ import MainLayout from "../MainLayout";
19
+ import { useEventListenerExt } from "../utils";
20
+ import { EditContextMenu } from "../ContextMenu";
21
+ import { FieldEditorPopup } from "../FieldEditorPopup";
22
+ import { AiPopup } from "../ai/AiPopup";
23
+ import { post } from "../services/serviceHelper";
24
+ import { SidebarView } from "../sidebar/SidebarView";
25
+ import { PageViewerFrame } from "../page-viewer/PageViewerFrame";
26
+ import { useItemsRepository } from "./itemsRepository";
27
+ import { Spinner } from "../ui/Spinner";
28
+ import { cleanId } from "../utils/id-helper";
29
+ import { useDialog } from "./DialogContext";
30
+ import { useDebouncedCallback } from "use-debounce";
31
+ import { Tour } from "../../tour/Tour";
32
+ import { usePageViewContext } from "../page-viewer/pageViewContext";
33
+ import { getComments } from "../services/reviewsService";
34
+ import { useReviews } from "../reviews/useReviews";
35
+ import uuid from "react-uuid";
36
+ import { flushSync } from "react-dom";
37
+ export function EditorClient({ configuration, className, item: loadItemDescriptor, sessionId, }) {
38
+ const router = useRouter();
39
+ const pathname = usePathname();
40
+ const searchParams = useSearchParams();
41
+ const [selection, setSelection] = useState([]);
42
+ const [selectedForInsertion, setSelectedForInsertion] = useState("");
43
+ const [refreshCompletedFlag, setRefreshCompletedFlag] = useState(false);
44
+ const [isRefreshing, setIsRefreshing] = useState(false);
45
+ const [dragObject, setDragObject] = useState();
46
+ const [mediaResolver, setMediaResolver] = useState();
47
+ const [mediaSelectorVisible, setMediaSelectorVisible] = useState(false);
48
+ const [mediaSelectorMode, setMediaSelectorMode] = useState("images");
49
+ const [selectedMediaIdPath, setSelectedMediaIdPath] = useState("");
50
+ const [scrollIntoView, setScrollIntoView] = useState();
51
+ const confirmationDialogRef = useRef(null);
52
+ const contextMenuRef = useRef(null);
53
+ const editContextRef = useRef(undefined);
54
+ const [currentOverlay, setCurrentOverlay] = useState();
55
+ const [contentEditorItem, setContentEditorItem] = useState();
56
+ const [focusedField, setFocusedField] = useState();
57
+ const [selectedRange, setSelectedRange] = useState();
58
+ const [validating, setValidating] = useState(false);
59
+ const [inserting, setInserting] = useState();
60
+ const [showFullscreenHint, setShowFullscreenHint] = useState(false);
61
+ // const [showPublishDialog, setShowPublishDialog] = useState(false);
62
+ const [activeFieldActions, setActiveFieldActions] = useState([]);
63
+ const [renderedFields, setRenderedFields] = useState([]);
64
+ const aiPopupRef = React.useRef(null);
65
+ const fieldEditorPopupRef = React.useRef(null);
66
+ const [validationResult, setValidationResult] = useState();
67
+ const [editHistory, setEditHistory] = useState([]);
68
+ const [lastEditedFields, setLastEditedFields] = useState([]);
69
+ const [activeSessions, setActiveSessions] = useState([]);
70
+ if (typeof window !== "undefined")
71
+ sessionStorage?.setItem("sessionId", sessionId);
72
+ const [viewName, setViewName] = useState(
73
+ // default from query string
74
+ searchParams.get("view") ??
75
+ configuration.editor.views[0]?.name ??
76
+ "splash-screen");
77
+ const [compareMode, setCompareMode] = useState(false);
78
+ const [compareTo, setCompareTo] = useState();
79
+ const [componentDesignerComponent, setComponentDesignerComponent] = useState();
80
+ const [componentDesignerRendering, setComponentDesignerRendering] = useState();
81
+ const [insertMode, setInsertMode] = useState(false);
82
+ const [ignoreBlur, setIgnoreBlur] = useState(false);
83
+ const [currentItemDescriptor, setCurrentItemDescriptor] = useState();
84
+ const currentItemDescriptorRef = useRef(undefined);
85
+ useEffect(() => {
86
+ currentItemDescriptorRef.current = currentItemDescriptor;
87
+ }, [currentItemDescriptor]);
88
+ const currentItemRef = useRef(undefined);
89
+ useEffect(() => {
90
+ currentItemRef.current = contentEditorItem;
91
+ }, [contentEditorItem]);
92
+ const [inlineEditingFieldElement, setInlineEditingFieldElement] = useState();
93
+ const [lockedField, setLockedField] = useState();
94
+ const [itemLanguages, setItemLanguages] = useState([]);
95
+ const [itemVersions, setItemVersions] = useState([]);
96
+ const [modifiedFields, setModifiedFields] = useState([]);
97
+ const [comments, setComments] = useState([]);
98
+ const [showComments, setShowComments] = useState(() => {
99
+ const savedShowComments = typeof window !== "undefined"
100
+ ? localStorage.getItem("editor.showComments")
101
+ : null;
102
+ return savedShowComments ? JSON.parse(savedShowComments) : true;
103
+ });
104
+ useEffect(() => {
105
+ if (typeof window !== "undefined") {
106
+ localStorage.setItem("editor.showComments", JSON.stringify(showComments));
107
+ }
108
+ }, [showComments]);
109
+ const [selectedComment, setSelectedComment] = useState();
110
+ const [browseHistory, setBrowseHistory] = useState(() => {
111
+ const savedHistory = typeof window !== "undefined"
112
+ ? localStorage.getItem("editor.browseHistory")
113
+ : null;
114
+ return savedHistory ? JSON.parse(savedHistory) : [];
115
+ });
116
+ const [centerPanelView, setCenterPanelView] = useState();
117
+ const [timings, setTimings] = useState({});
118
+ const [revision, setRevision] = useState();
119
+ const [workboxItems, setWorkboxItems] = useState([]);
120
+ const [isTourActive, setIsTourActive] = useState(false);
121
+ const [previewMode, setPreviewMode] = useState(false);
122
+ const [statusMessage, setStatusMessage] = useState("");
123
+ const mode = searchParams.get("mode");
124
+ useEffect(() => {
125
+ if (mode === "preview") {
126
+ setPreviewMode(true);
127
+ }
128
+ }, [mode]);
129
+ useEffect(() => {
130
+ if (previewMode) {
131
+ }
132
+ }, [previewMode]);
133
+ useEffect(() => {
134
+ if (focusedField &&
135
+ selection.length > 0 &&
136
+ selection[0] !== focusedField.item.id) {
137
+ setFocusedField(undefined);
138
+ }
139
+ }, [selection]);
140
+ const dialogContext = useDialog();
141
+ const itemsRepository = useItemsRepository(setModifiedFields, setLastEditedFields);
142
+ const pageViewContext = usePageViewContext({
143
+ pageItemDescriptor: currentItemDescriptor,
144
+ itemsRepository,
145
+ configuration,
146
+ });
147
+ const socketMessageListeners = useRef(new Set());
148
+ const addSocketMessageListener = (callback) => {
149
+ socketMessageListeners.current.add(callback);
150
+ return () => socketMessageListeners.current.delete(callback);
151
+ };
152
+ const reviews = useReviews({
153
+ currentItemDescriptor,
154
+ addSocketMessageListener: addSocketMessageListener,
155
+ });
156
+ const validate = useDebouncedCallback(async (items) => {
157
+ setValidating(true);
158
+ const result = await validateItems(items, sessionId);
159
+ if (result.type === "success")
160
+ setValidationResult(await result.data);
161
+ setValidating(false);
162
+ }, 1000);
163
+ useEffect(() => {
164
+ setSelectedForInsertion("");
165
+ }, [selection]);
166
+ useEffect(() => {
167
+ if (focusedField?.fieldId !== selectedRange?.fieldId) {
168
+ setSelectedRange(undefined);
169
+ }
170
+ }, [focusedField]);
171
+ const currentView = configuration.editor.views.find((x) => x.name === viewName) ??
172
+ configuration.editor.views[0];
173
+ useEffect(() => {
174
+ if (currentView?.defaultCenterPanelView)
175
+ setCenterPanelView(currentView.defaultCenterPanelView);
176
+ }, [currentView]);
177
+ const sendClientInfo = async () => {
178
+ const socket = globalThis.editorSocket;
179
+ const clientInfoMessage = {
180
+ type: "client-info",
181
+ sessionId: sessionId,
182
+ url: window.location.href,
183
+ userAgent: navigator.userAgent,
184
+ item: currentItemRef.current
185
+ ? {
186
+ ...currentItemRef.current.descriptor,
187
+ name: currentItemRef.current.name,
188
+ }
189
+ : null,
190
+ };
191
+ if (socket.readyState !== WebSocket.OPEN) {
192
+ const url = "/alpaca/editor/client";
193
+ await post(url, clientInfoMessage);
194
+ }
195
+ else
196
+ socket.send(JSON.stringify(clientInfoMessage));
197
+ };
198
+ const startTour = () => {
199
+ setIsTourActive(true);
200
+ };
201
+ const messageHandler = useCallback(async (event) => {
202
+ if (!event.data.startsWith("{"))
203
+ return;
204
+ const message = JSON.parse(event.data);
205
+ if (message.type === "active-sessions") {
206
+ setActiveSessions(() => {
207
+ return message.payload;
208
+ });
209
+ }
210
+ if (message.type === "item-deleted") {
211
+ itemsRepository.onItemsDeleted([
212
+ { item: message.payload.item, parentId: message.payload.parentId },
213
+ ]);
214
+ if (message.payload.item.id === currentItemDescriptor?.id) {
215
+ console.log("Load", message.payload.parentId);
216
+ loadItem({
217
+ id: message.payload.parentId,
218
+ language: currentItemDescriptor?.language ?? "en",
219
+ version: 0,
220
+ });
221
+ }
222
+ }
223
+ if (message.type === "item-changed") {
224
+ await itemsRepository.refreshItems([message.payload.item]);
225
+ if (message.payload.item.id === currentItemDescriptor?.id)
226
+ loadItemVersions();
227
+ }
228
+ if (message.type === "item-version-added") {
229
+ if (currentItemDescriptorRef.current) {
230
+ if (currentItemDescriptorRef.current.id === message.payload.item.id)
231
+ await loadItemVersions();
232
+ setCurrentItemDescriptor({ ...currentItemDescriptorRef.current });
233
+ }
234
+ }
235
+ if (message.type === "comment-updated") {
236
+ setComments((x) => {
237
+ const newComments = [...x];
238
+ const index = newComments.findIndex((c) => c.id === message.payload.comment.id);
239
+ if (index !== -1)
240
+ newComments[index] = message.payload.comment;
241
+ else
242
+ newComments.push(message.payload.comment);
243
+ return newComments;
244
+ });
245
+ }
246
+ if (message.type === "comment-deleted") {
247
+ setComments((x) => {
248
+ return x.filter((c) => c.id !== message.payload.id);
249
+ });
250
+ }
251
+ if (message.type === "edit-operation") {
252
+ const op = message.payload;
253
+ if (op.type === "edit-field") {
254
+ const editFieldOperation = op;
255
+ const field = await itemsRepository.getField(editFieldOperation);
256
+ if (!field ||
257
+ (field.type !== "single-line text" &&
258
+ field.type !== "multi-line text" &&
259
+ field.type !== "rich text")) {
260
+ itemsRepository.refreshItems([editFieldOperation.item]);
261
+ requestRefresh("immediate");
262
+ }
263
+ //TODO: field value changes that require rerender
264
+ else
265
+ itemsRepository.updateFieldValue({
266
+ fieldId: editFieldOperation.fieldId,
267
+ item: editFieldOperation.item,
268
+ }, editFieldOperation.user ?? { name: "unknown", ai: false }, false, editFieldOperation.undone
269
+ ? editFieldOperation.oldValue
270
+ : editFieldOperation.value);
271
+ }
272
+ else {
273
+ requestRefresh("immediate");
274
+ }
275
+ if (op.mainItem &&
276
+ op.mainItem.id === currentItemRef.current?.descriptor.id &&
277
+ op.mainItem.language ===
278
+ currentItemRef.current?.descriptor.language &&
279
+ op.mainItem.version === currentItemRef.current?.descriptor.version) {
280
+ loadHistory(op.mainItem);
281
+ }
282
+ }
283
+ socketMessageListeners.current.forEach((listener) => listener(message));
284
+ }, [currentItemDescriptorRef, setLastEditedFields]);
285
+ const user = activeSessions.find((x) => x.sessionId === sessionId)?.user;
286
+ useEffect(() => {
287
+ if (typeof window === "undefined")
288
+ return;
289
+ var keepAliveUrl = "/alpaca/editor/keepalive";
290
+ const interval = setInterval(() => {
291
+ fetch(keepAliveUrl + "?ts=" + Date.now()).catch((error) => console.error("Keep Alive error:", error));
292
+ }, 5 * 60 * 1000);
293
+ const handleMessage = (event) => {
294
+ if (event.data.type === "componentsSelected") {
295
+ setSelection(event.data.componentIds);
296
+ }
297
+ };
298
+ window.addEventListener("message", handleMessage);
299
+ return () => {
300
+ window.removeEventListener("message", handleMessage);
301
+ clearInterval(interval);
302
+ };
303
+ }, []);
304
+ useEffect(() => {
305
+ const tour = configuration.activeTour;
306
+ const key = tour === "default" ? "editor.tourShown" : "editor.tourShown." + tour;
307
+ const tourShown = localStorage.getItem(key);
308
+ if (!tourShown) {
309
+ setIsTourActive(true);
310
+ localStorage.setItem(key, "true");
311
+ }
312
+ }, []);
313
+ useEffect(() => {
314
+ let socket = globalThis.editorSocket;
315
+ if (socket &&
316
+ (socket.readyState === WebSocket.OPEN ||
317
+ socket.readyState === WebSocket.CONNECTING))
318
+ return;
319
+ socket = connectSocket(sessionId);
320
+ // Connection opened
321
+ socket.addEventListener("open", () => {
322
+ console.log("Connected!");
323
+ sendClientInfo();
324
+ //TODO: Load clients
325
+ });
326
+ // Listen for messages
327
+ socket.addEventListener("message", messageHandler);
328
+ globalThis.editorSocket = socket;
329
+ }, []);
330
+ useEffect(() => {
331
+ const itemid = searchParams.get("itemid");
332
+ if (searchParams.has("view")) {
333
+ setViewName(searchParams.get("view"));
334
+ }
335
+ else if (!itemid) {
336
+ setViewName("splash-screen");
337
+ }
338
+ if (searchParams.has("compare"))
339
+ setCompareMode(searchParams.get("compare") === "true");
340
+ const itemId = cleanId(loadItemDescriptor?.id ?? itemid ?? undefined);
341
+ const language = loadItemDescriptor?.language ?? searchParams.get("lang");
342
+ const version = loadItemDescriptor?.version ??
343
+ (searchParams.has("version")
344
+ ? parseInt(searchParams.get("version"))
345
+ : 0);
346
+ if (itemid && viewName === "splash-screen") {
347
+ setViewName("page-editor");
348
+ }
349
+ if (!itemId || !language)
350
+ return;
351
+ if (currentItemDescriptor?.id === itemId &&
352
+ currentItemDescriptor?.language === language &&
353
+ (!version || currentItemDescriptor?.version === version)) {
354
+ return;
355
+ }
356
+ loadItem({ id: itemId, language, version });
357
+ }, [searchParams, loadItemDescriptor]);
358
+ useEffect(() => {
359
+ if (selection.length)
360
+ setSelectedForInsertion("");
361
+ // Does the current focused field belong to the current item?
362
+ const currentItem = selection.length > 0 ? selection[0] : pageViewContext.page?.item.id;
363
+ if (currentItem && focusedField?.item.id !== currentItem) {
364
+ setFocusedField(undefined);
365
+ }
366
+ }, [selection]);
367
+ const addToEditHistory = useCallback((currentEditOperation) => {
368
+ setEditHistory((history) => {
369
+ // Check if the operation was updated or needs to be added
370
+ const exists = history.some((item) => item.id === currentEditOperation.id);
371
+ return exists ? history : [currentEditOperation, ...history];
372
+ });
373
+ }, []);
374
+ useEffect(() => {
375
+ setRefreshCompletedFlag(!refreshCompletedFlag);
376
+ setInserting(undefined);
377
+ }, [currentItemDescriptor, pageViewContext.page]);
378
+ useEffect(() => {
379
+ sendClientInfo();
380
+ }, [currentItemRef.current]);
381
+ const loadComments = useCallback(async () => {
382
+ if (!currentItemDescriptor)
383
+ return;
384
+ const result = await getComments(currentItemDescriptor.id, currentItemDescriptor.language, currentItemDescriptor.version);
385
+ if (handleErrorResult(result, ui, state))
386
+ return;
387
+ setComments((x) => {
388
+ const loadedComments = result.data;
389
+ const newComments = x.filter((c) => c.isNew &&
390
+ c.mainItemId === currentItemDescriptor.id &&
391
+ c.language === currentItemDescriptor.language &&
392
+ c.version === currentItemDescriptor.version);
393
+ var allComments = [...loadedComments, ...newComments];
394
+ allComments.sort((a, b) => a.position - b.position);
395
+ return allComments;
396
+ });
397
+ }, [currentItemDescriptor]);
398
+ const page = pageViewContext.page;
399
+ useEffect(() => {
400
+ const isLoading = !page || (page?.editRevision ?? "") != (revision ?? "");
401
+ setIsRefreshing(isLoading && viewName === "page-editor");
402
+ if (!isLoading)
403
+ setInserting(undefined);
404
+ }, [page, viewName, revision]);
405
+ useEffect(() => {
406
+ if (searchParams.get("fullscreen")) {
407
+ pageViewContext.setFullscreen(true);
408
+ }
409
+ const handleMessage = (event) => {
410
+ if (event.data.action === "refresh") {
411
+ requestRefresh("immediate");
412
+ }
413
+ };
414
+ window.addEventListener("message", handleMessage);
415
+ return () => {
416
+ window.removeEventListener("message", handleMessage);
417
+ };
418
+ }, []);
419
+ const loadHistory = useDebouncedCallback(async (item) => {
420
+ const result = await getEditHistory(item);
421
+ if (handleErrorResult(result, ui, state))
422
+ return;
423
+ setEditHistory(result.data || []);
424
+ }, 200);
425
+ const refreshHistory = useCallback(async (item) => {
426
+ const result = await getEditHistory(item);
427
+ if (handleErrorResult(result, ui, state))
428
+ return;
429
+ setEditHistory(result.data || []);
430
+ }, []);
431
+ const requestRefresh = useCallback((mode) => {
432
+ const refreshTimer = globalThis.editorRefreshTimer;
433
+ const doRefresh = () => {
434
+ //console.log("Refreshing");
435
+ //const url = new URL(window.location.href);
436
+ //url.searchParams.set("edit_rev", uuid());
437
+ const newRevision = uuid();
438
+ setRevision(newRevision);
439
+ console.log("doRefresh", newRevision);
440
+ //router.replace(url.toString(), { scroll: false });
441
+ globalThis.editorRefreshTimer = undefined;
442
+ };
443
+ if (mode === "immediate") {
444
+ // console.error(
445
+ // "Immediate refresh requested. Stack trace:",
446
+ // new Error().stack
447
+ // );
448
+ console.log("Immediate refresh requested");
449
+ doRefresh();
450
+ return;
451
+ }
452
+ //console.log("request refresh with mode: " + mode, "timer: ", refreshTimer);
453
+ if (mode === "waitForQuietPeriod" && refreshTimer) {
454
+ clearTimeout(refreshTimer);
455
+ }
456
+ if (!refreshTimer || mode === "waitForQuietPeriod") {
457
+ globalThis.editorRefreshTimer = setTimeout(() => {
458
+ doRefresh();
459
+ }, mode === "waitForQuietPeriod" ? 1200 : 700);
460
+ }
461
+ }, [contentEditorItem, router]);
462
+ useEffect(() => {
463
+ if (!currentItemDescriptor)
464
+ return;
465
+ loadComments();
466
+ }, [currentItemDescriptor]);
467
+ useEffect(() => {
468
+ if (!currentItemDescriptor)
469
+ return;
470
+ const current = new URLSearchParams(Array.from(searchParams.entries()));
471
+ if (current.get("itemid") !== currentItemDescriptor?.id) {
472
+ current.set("itemid", currentItemDescriptor.id);
473
+ }
474
+ if (current.get("lang") !== currentItemDescriptor?.language) {
475
+ current.set("lang", currentItemDescriptor.language);
476
+ }
477
+ if (current.get("version") !== currentItemDescriptor?.version.toString()) {
478
+ current.set("version", currentItemDescriptor.version.toString());
479
+ }
480
+ if (current.get("view") !== viewName) {
481
+ current.set("view", viewName);
482
+ }
483
+ if (!compareMode) {
484
+ current.delete("compare");
485
+ current.delete("compareLanguage");
486
+ current.delete("compareVersion");
487
+ current.delete("compareDevice");
488
+ }
489
+ else {
490
+ current.set("compare", "true");
491
+ }
492
+ if (previewMode) {
493
+ current.set("mode", "preview");
494
+ }
495
+ else {
496
+ current.delete("mode");
497
+ }
498
+ const newUrl = `${pathname}?${current.toString()}`;
499
+ router.push(newUrl, { scroll: false });
500
+ }, [currentItemDescriptor, viewName, compareMode, previewMode]);
501
+ useEffect(() => {
502
+ async function load() {
503
+ if (!currentItemDescriptor)
504
+ return;
505
+ const item = await itemsRepository.getItem(currentItemDescriptor);
506
+ setContentEditorItem(item);
507
+ if (!item)
508
+ return;
509
+ if (contentEditorItem?.descriptor.id === currentItemDescriptor.id &&
510
+ contentEditorItem?.descriptor.language ===
511
+ currentItemDescriptor.language &&
512
+ contentEditorItem?.descriptor.version !== item.version) {
513
+ showInfoToast({
514
+ summary: "New version!",
515
+ details: "New version of item loaded",
516
+ });
517
+ }
518
+ }
519
+ load();
520
+ }, [itemsRepository.revision]);
521
+ const addToBrowseHistory = useCallback((item) => {
522
+ let historyEntry = {
523
+ path: item.path || "unknown",
524
+ name: item.name || "unknown",
525
+ language: item.language,
526
+ templateName: item.templateName,
527
+ id: item.id,
528
+ hasLayout: item.hasLayout,
529
+ icon: item.icon,
530
+ version: item.version,
531
+ };
532
+ setBrowseHistory((history) => {
533
+ const newItem = item;
534
+ if (!newItem)
535
+ return history;
536
+ const newHistory = [
537
+ historyEntry,
538
+ ...history
539
+ .filter((x) => x.id !== newItem.id || x.language !== newItem.language)
540
+ .slice(0, 25),
541
+ ];
542
+ localStorage.setItem("editor.browseHistory", JSON.stringify(newHistory));
543
+ return newHistory;
544
+ });
545
+ }, [browseHistory, setBrowseHistory]);
546
+ const loadItem = useCallback(async (itemToLoad, options) => {
547
+ if (typeof itemToLoad === "string")
548
+ itemToLoad = {
549
+ id: itemToLoad,
550
+ language: contentEditorItem?.language || "en",
551
+ version: 0,
552
+ };
553
+ console.log("load item: " + itemToLoad.id, itemToLoad.language);
554
+ const item = await itemsRepository.getItem(itemToLoad);
555
+ if (!item) {
556
+ //TODO: Show error
557
+ console.log("item not found: ", itemToLoad.id, itemToLoad.language);
558
+ return undefined;
559
+ }
560
+ if (!item.hasLayout && viewName === "page-editor") {
561
+ setViewName("content-editor");
562
+ }
563
+ // Set state for the item
564
+ setCurrentItemDescriptor(itemToLoad);
565
+ setContentEditorItem(item);
566
+ setSelection([]);
567
+ // Directly update URL here
568
+ const current = new URLSearchParams(Array.from(searchParams.entries()));
569
+ current.set("itemid", itemToLoad.id);
570
+ current.set("lang", itemToLoad.language);
571
+ current.set("version", itemToLoad.version.toString());
572
+ current.set("view", viewName);
573
+ if (!compareMode) {
574
+ current.delete("compare");
575
+ current.delete("compareLanguage");
576
+ current.delete("compareVersion");
577
+ current.delete("compareDevice");
578
+ }
579
+ else {
580
+ current.set("compare", "true");
581
+ }
582
+ if (previewMode) {
583
+ current.set("mode", "preview");
584
+ }
585
+ else {
586
+ current.delete("mode");
587
+ }
588
+ const newUrl = `${pathname}?${current.toString()}`;
589
+ // Wait for the URL update to complete
590
+ await router.push(newUrl, { scroll: false });
591
+ // Now that URL is updated, load history and add to browse history
592
+ loadHistory(itemToLoad);
593
+ if (options?.addToBrowseHistory ||
594
+ options?.addToBrowseHistory === undefined) {
595
+ addToBrowseHistory(item);
596
+ }
597
+ return item;
598
+ }, [
599
+ itemsRepository,
600
+ setContentEditorItem,
601
+ searchParams,
602
+ pathname,
603
+ router,
604
+ viewName,
605
+ compareMode,
606
+ previewMode,
607
+ ]);
608
+ useEffect(() => {
609
+ if (pageViewContext.fullscreen && !searchParams.get("fullscreen"))
610
+ setShowFullscreenHint(true);
611
+ }, [pageViewContext.fullscreen]);
612
+ const executeCommand = useCallback(async ({ command, event, data, }) => {
613
+ if (!editContextRef.current)
614
+ return;
615
+ const context = {
616
+ editContext: editContextRef.current,
617
+ pathname,
618
+ router,
619
+ searchParams,
620
+ openDialog: dialogContext.openDialog,
621
+ event,
622
+ data,
623
+ };
624
+ const result = await command.execute(context);
625
+ return result;
626
+ }, [editContextRef, pathname, router, searchParams, dialogContext]);
627
+ const handleKeyDownDebounced = useDebouncedCallback(async (event) => {
628
+ if (!event.key)
629
+ return;
630
+ if (event.ctrlKey && event.key === "z") {
631
+ await operations.undo();
632
+ }
633
+ if (event.ctrlKey && event.key === "y") {
634
+ await operations.redo();
635
+ }
636
+ if (event.ctrlKey && event.key === "F11") {
637
+ event.preventDefault();
638
+ pageViewContext.setFullscreen(false);
639
+ }
640
+ const command = configuration.commands.allItemCommands.find((x) => x.keyBinding === event.key);
641
+ if (command) {
642
+ event.preventDefault();
643
+ const contentEditorItem = editContextRef.current?.contentEditorItem;
644
+ if (!contentEditorItem)
645
+ return;
646
+ const items = editContextRef.current?.selection?.map((x) => ({
647
+ id: x,
648
+ language: contentEditorItem.language,
649
+ version: 0,
650
+ })) || [];
651
+ if (!items.length)
652
+ items.push(contentEditorItem.descriptor);
653
+ if (items.length > 0) {
654
+ const fullItems = await editContextRef.current?.itemsRepository.getItems(items);
655
+ executeCommand({
656
+ command,
657
+ data: {
658
+ items: fullItems,
659
+ },
660
+ });
661
+ }
662
+ }
663
+ }, 50);
664
+ const handleKeyDown = useCallback(async (event) => {
665
+ if (event.key === "Insert") {
666
+ event.preventDefault();
667
+ event.stopPropagation();
668
+ editContext.setInsertMode((x) => !x);
669
+ }
670
+ if (event.ctrlKey && event.key === "s") {
671
+ event.preventDefault();
672
+ event.stopPropagation();
673
+ return;
674
+ }
675
+ const target = event.target;
676
+ const isTyping = target instanceof HTMLInputElement ||
677
+ target instanceof HTMLTextAreaElement ||
678
+ target.isContentEditable;
679
+ if ((event.ctrlKey && event.key === "z") ||
680
+ (event.ctrlKey && event.key === "y")) {
681
+ if (!isTyping) {
682
+ event.preventDefault();
683
+ event.stopPropagation();
684
+ handleKeyDownDebounced(event);
685
+ }
686
+ return;
687
+ }
688
+ handleKeyDownDebounced(event);
689
+ }, [
690
+ configuration.commands.allItemCommands,
691
+ executeCommand,
692
+ editContextRef.current,
693
+ ]);
694
+ if (typeof window !== "undefined")
695
+ if (typeof window !== "undefined")
696
+ useEventListenerExt("keydown", handleKeyDown, window, true);
697
+ if (typeof window !== "undefined")
698
+ useEventListenerExt("click", () => {
699
+ contextMenuRef.current?.close({});
700
+ }, window, true);
701
+ const state = useMemo(() => ({
702
+ page,
703
+ configuration,
704
+ selection,
705
+ setSelection,
706
+ loadItem,
707
+ addToEditHistory,
708
+ setLockedField,
709
+ contentEditorItem,
710
+ sessionId,
711
+ requestRefresh,
712
+ lockedField,
713
+ itemsRepository,
714
+ user,
715
+ editHistory,
716
+ refreshHistory,
717
+ }), [
718
+ page,
719
+ configuration,
720
+ selection,
721
+ setSelection,
722
+ loadItem,
723
+ addToEditHistory,
724
+ setLockedField,
725
+ contentEditorItem,
726
+ sessionId,
727
+ requestRefresh,
728
+ lockedField,
729
+ itemsRepository,
730
+ user,
731
+ editHistory,
732
+ refreshHistory,
733
+ ]);
734
+ useEffect(() => {
735
+ if (currentOverlay !== "ai")
736
+ aiPopupRef.current?.close();
737
+ if (currentOverlay !== "fields")
738
+ fieldEditorPopupRef.current?.close();
739
+ if (currentOverlay !== "context-menu")
740
+ contextMenuRef.current?.close({});
741
+ }, [currentOverlay]);
742
+ const toast = useRef(null);
743
+ useEffect(() => {
744
+ loadItemVersions();
745
+ }, [currentItemDescriptor]);
746
+ const loadItemVersions = useCallback(async () => {
747
+ if (!currentItemDescriptorRef.current) {
748
+ setItemVersions([]);
749
+ setItemLanguages([]);
750
+ return;
751
+ }
752
+ const result = await getLanguagesAndVersions(currentItemDescriptorRef.current);
753
+ if (!result?.data) {
754
+ setItemVersions([]);
755
+ setItemLanguages([]);
756
+ showErrorToast({
757
+ summary: "Error",
758
+ details: "Failed to load item versions",
759
+ });
760
+ return;
761
+ }
762
+ var v = [...result.data.versions].reverse() || [];
763
+ setItemVersions(v);
764
+ setItemLanguages(result.data.languages);
765
+ }, [currentItemDescriptorRef.current, setItemVersions, setItemLanguages]);
766
+ const showErrorToast = useCallback(({ summary, details }) => {
767
+ toast.current?.show({
768
+ severity: "error",
769
+ summary: summary || "Error",
770
+ detail: details || "An error occurred",
771
+ life: 3000,
772
+ });
773
+ }, []);
774
+ const showInfoToast = useCallback(({ summary, details }) => {
775
+ toast.current?.show({
776
+ severity: "info",
777
+ summary: summary || "Info",
778
+ detail: details || "Information",
779
+ life: 3000,
780
+ });
781
+ }, []);
782
+ const ui = useMemo(() => ({
783
+ showErrorToast,
784
+ confirmationDialogRef,
785
+ onOperationExecuted: (op) => {
786
+ // Replace the operation in edit history with the executed operation
787
+ setEditHistory((prev) => {
788
+ const existingOpIndex = prev.findIndex((x) => x.id === op.id);
789
+ if (existingOpIndex >= 0) {
790
+ prev[existingOpIndex] = op;
791
+ }
792
+ return prev;
793
+ });
794
+ if (contentEditorItem?.id === op.mainItem?.id &&
795
+ contentEditorItem?.language === op.mainItem?.language &&
796
+ contentEditorItem?.version === op.mainItem?.version) {
797
+ setInsertMode(false);
798
+ }
799
+ },
800
+ }), [showErrorToast, confirmationDialogRef, currentItemDescriptor]);
801
+ const selectMedia = useCallback(({ selectedIdPath, mode, }) => {
802
+ setSelectedMediaIdPath(selectedIdPath);
803
+ setMediaSelectorVisible(true);
804
+ if (mode)
805
+ setMediaSelectorMode(mode);
806
+ return new Promise((resolve) => {
807
+ setMediaResolver(() => resolve);
808
+ });
809
+ }, []);
810
+ const onMediaSelect = useCallback((mediaUrl) => {
811
+ mediaResolver?.(mediaUrl);
812
+ setMediaSelectorVisible(false);
813
+ setMediaResolver(undefined);
814
+ }, [mediaResolver]);
815
+ useEffect(() => {
816
+ if (!workboxItems || workboxItems.length === 0)
817
+ return;
818
+ const itemsToValidate = workboxItems.map((x) => x.item);
819
+ validate(itemsToValidate);
820
+ }, [workboxItems]);
821
+ async function loadWorkbox(items) {
822
+ if (!items.length) {
823
+ setWorkboxItems([]);
824
+ return;
825
+ }
826
+ const workbox = await getWorkbox(items);
827
+ const workboxItems = workbox.data || [];
828
+ const sortedWorkboxItems = workboxItems.sort((a, b) => {
829
+ if (a.isPublished === b.isPublished)
830
+ return ((b.workflowCommands?.length || 0) - (a.workflowCommands?.length || 0));
831
+ return !a.isPublished || !a.isPublishable ? -1 : 1;
832
+ });
833
+ setWorkboxItems(sortedWorkboxItems);
834
+ }
835
+ const loadWorkboxDebounced = useDebouncedCallback((items) => loadWorkbox(items), 3000);
836
+ useEffect(() => {
837
+ let items = [];
838
+ if (editContext.contentEditorItem) {
839
+ items.push(editContext.contentEditorItem.descriptor);
840
+ }
841
+ if (editContext.page) {
842
+ collectAllItems(editContext.page.rootComponent, items);
843
+ }
844
+ loadWorkboxDebounced(items.filter((x) => x));
845
+ }, [page, contentEditorItem]);
846
+ function collectAllItems(component, items) {
847
+ component.placeholders.forEach((x) => {
848
+ x.components.forEach((y) => {
849
+ if (y.isShared && y.datasourceItem) {
850
+ items.push(y.datasourceItem.descriptor);
851
+ }
852
+ y.datasourceItem?.fields.forEach((z) => {
853
+ if (z.type === "picture") {
854
+ const picture = z.value;
855
+ if (picture.variants) {
856
+ picture.variants.forEach((v) => {
857
+ if (v.mediaId) {
858
+ items.push({
859
+ id: v.mediaId,
860
+ language: y.datasourceItem.descriptor.language,
861
+ version: 0,
862
+ });
863
+ }
864
+ });
865
+ }
866
+ }
867
+ });
868
+ collectAllItems(y, items);
869
+ });
870
+ });
871
+ }
872
+ const switchView = (viewName) => {
873
+ document.startViewTransition(() => {
874
+ flushSync(() => {
875
+ setViewName(viewName);
876
+ });
877
+ });
878
+ };
879
+ const operationsContext = getOperationsContext(state, ui);
880
+ const operations = operationsContext.ops;
881
+ //const pageItem = page ? itemsRepository.getItem(page.item) : undefined;
882
+ const isReadOnly = false; //pageItem && (!pageItem.hasLock || !pageItem.canWrite);
883
+ const updateUrl = useCallback((params) => {
884
+ const url = new URL(window.location.href);
885
+ Object.entries(params).forEach(([key, value]) => {
886
+ if (value)
887
+ url.searchParams.set(key, value);
888
+ else
889
+ url.searchParams.delete(key);
890
+ });
891
+ router.push(url.toString(), { scroll: false });
892
+ }, []);
893
+ const editContext = useMemo(() => {
894
+ return {
895
+ operations: operationsContext.ops,
896
+ itemsRepository,
897
+ configuration,
898
+ updateUrl,
899
+ openSplashScreen: () => {
900
+ router.push("/alpaca/editor");
901
+ },
902
+ item: contentEditorItem || page?.item,
903
+ itemLanguages,
904
+ itemVersions,
905
+ sessionId: sessionId,
906
+ readonly: isReadOnly,
907
+ selection,
908
+ select: (ids) => {
909
+ setSelection(ids);
910
+ },
911
+ selectedForInsertion,
912
+ setSelectedForInsertion,
913
+ dragObject,
914
+ workboxItems,
915
+ requestRefresh,
916
+ refreshCompletedFlag,
917
+ openCreatePageDialog: () => {
918
+ const current = new URLSearchParams(Array.from(searchParams.entries()));
919
+ current.delete("version");
920
+ current.delete("itemid");
921
+ current.delete("view");
922
+ current.set("create", "1");
923
+ const newUrl = `${pathname}?${current.toString()}`;
924
+ router.push(newUrl, { scroll: false });
925
+ },
926
+ selectMedia,
927
+ showToast: (message) => {
928
+ toast.current?.show(message);
929
+ },
930
+ scrollIntoView,
931
+ setScrollIntoView,
932
+ focusedField,
933
+ setFocusedField: async (field, requestLock) => {
934
+ if (field) {
935
+ // if (nonComponentItems.find((x) => x.id == field.item.id))
936
+ // setSelection([field.item.id]);
937
+ setIgnoreBlur(true);
938
+ setTimeout(() => {
939
+ setIgnoreBlur(false);
940
+ }, 20);
941
+ setFocusedField({ ...field });
942
+ if (requestLock) {
943
+ return (await operations.ensureLock(field)) || false;
944
+ }
945
+ }
946
+ else {
947
+ if (!ignoreBlur) {
948
+ setFocusedField(undefined);
949
+ releaseFieldLocks(sessionId);
950
+ }
951
+ }
952
+ return true;
953
+ },
954
+ renderedFields,
955
+ setRenderedFields,
956
+ getComponentCommands: (components) => {
957
+ return getComponentCommands(components, editContext);
958
+ },
959
+ dragStart: (dragObject) => {
960
+ setDragObject(dragObject);
961
+ },
962
+ dragEnd: () => {
963
+ setDragObject(undefined);
964
+ },
965
+ droppedInPlaceholder: async (placeholderKey, index, spotPositionElement, spotPositionAnchor, insertOption) => {
966
+ if ((!dragObject && !insertOption) || !page)
967
+ return;
968
+ setDragObject(undefined);
969
+ if (spotPositionElement && spotPositionAnchor) {
970
+ setInserting({
971
+ positionElement: spotPositionElement,
972
+ positionAnchor: spotPositionAnchor,
973
+ });
974
+ }
975
+ const placeholderKeyComponents = placeholderKey.split("_");
976
+ const parentId = placeholderKeyComponents.length === 1
977
+ ? undefined
978
+ : placeholderKeyComponents[1];
979
+ if (parentId)
980
+ setSelection([parentId]);
981
+ let op;
982
+ if (insertOption) {
983
+ operations.addComponent(insertOption.typeId, placeholderKey, index);
984
+ return;
985
+ }
986
+ if (!dragObject)
987
+ return;
988
+ if (dragObject && dragObject.type == "template") {
989
+ operations.addComponent(dragObject.typeId, placeholderKey, index);
990
+ return;
991
+ }
992
+ if (dragObject.type == "component" ||
993
+ (dragObject.type == "link-component" && dragObject.component)) {
994
+ const parentComponent = parentId && page ? getComponentById(parentId, page) : null;
995
+ if (dragObject.type == "link-component") {
996
+ op = {
997
+ type: "link-component",
998
+ mainItem: page.item.descriptor,
999
+ parent: parentId && {
1000
+ id: parentId,
1001
+ language: page.item.descriptor.language,
1002
+ version: page.item.descriptor.version,
1003
+ name: parentComponent?.name,
1004
+ },
1005
+ placeholderKey,
1006
+ placeholderIndex: index,
1007
+ date: new Date().toISOString(),
1008
+ id: uuid(),
1009
+ linkedComponentItem: dragObject.component,
1010
+ description: "Link component",
1011
+ };
1012
+ }
1013
+ else {
1014
+ if (!dragObject.component)
1015
+ return;
1016
+ op = {
1017
+ type: "move-component",
1018
+ mainItem: page.item.descriptor,
1019
+ parent: parentId && {
1020
+ id: parentId,
1021
+ language: page.item.descriptor.language,
1022
+ version: page.item.descriptor.version,
1023
+ },
1024
+ placeholderKey,
1025
+ placeholderIndex: index,
1026
+ componentIds: [dragObject.component.id],
1027
+ date: new Date().toISOString(),
1028
+ id: uuid(),
1029
+ description: "Move component",
1030
+ };
1031
+ }
1032
+ }
1033
+ if (op)
1034
+ operations.executeEditOperation(op);
1035
+ },
1036
+ page,
1037
+ triggerFieldAction: async (fieldDescriptor, actionButton) => {
1038
+ const field = await itemsRepository.getField(fieldDescriptor);
1039
+ if (!field)
1040
+ return;
1041
+ const op = {
1042
+ field: fieldDescriptor,
1043
+ actionButton,
1044
+ state: "running",
1045
+ };
1046
+ const fieldItem = fieldDescriptor.item;
1047
+ setActiveFieldActions((prevFieldActions) => [
1048
+ ...prevFieldActions.filter((x) => !(x.field.fieldId == fieldDescriptor.fieldId &&
1049
+ x.field.item.id == fieldItem.id &&
1050
+ x.field.item.language == fieldItem.language &&
1051
+ x.field.item.version == fieldItem.version)),
1052
+ op,
1053
+ ]);
1054
+ if ("clientAction" in actionButton) {
1055
+ await actionButton.clientAction({
1056
+ field,
1057
+ editContext,
1058
+ dialogContext,
1059
+ });
1060
+ }
1061
+ if (actionButton.action) {
1062
+ await executeFieldServerAction(fieldDescriptor.item, fieldDescriptor.fieldId, contentEditorItem.descriptor, actionButton.action, editContext.sessionId, selectedRange?.text || "", (data) => {
1063
+ op.message = data.responseText;
1064
+ setActiveFieldActions((prevFieldActions) => [
1065
+ ...prevFieldActions,
1066
+ ]);
1067
+ });
1068
+ itemsRepository.refreshItems([fieldDescriptor.item]);
1069
+ op.state = "success";
1070
+ requestRefresh("immediate");
1071
+ }
1072
+ },
1073
+ activeFieldActions,
1074
+ showContextMenu: (event, items) => {
1075
+ contextMenuRef.current?.show(event, items);
1076
+ setCurrentOverlay("context-menu");
1077
+ },
1078
+ showAiPopup: (event, aiTerminalOptions) => {
1079
+ setCurrentOverlay("ai");
1080
+ aiPopupRef.current?.show(event, aiTerminalOptions);
1081
+ },
1082
+ showFieldEditorPopup: (fields, sections, ev) => {
1083
+ setCurrentOverlay("fields");
1084
+ fieldEditorPopupRef.current?.show(fields, sections, ev);
1085
+ },
1086
+ inserting,
1087
+ validating,
1088
+ validationResult,
1089
+ contentEditorItem,
1090
+ loadItem,
1091
+ editHistory,
1092
+ isRefreshing,
1093
+ activeSessions,
1094
+ unlockField: async () => {
1095
+ await releaseFieldLocks(sessionId);
1096
+ },
1097
+ isCommandDisabled: ({ command, data, }) => {
1098
+ const props = {
1099
+ editContext,
1100
+ pathname,
1101
+ router,
1102
+ searchParams,
1103
+ data,
1104
+ openDialog: dialogContext.openDialog,
1105
+ };
1106
+ return command.disabled(props);
1107
+ },
1108
+ executeCommand,
1109
+ viewName,
1110
+ switchView,
1111
+ compareMode,
1112
+ setCompareMode,
1113
+ view: currentView,
1114
+ pageView: pageViewContext,
1115
+ componentDesignerComponent,
1116
+ setComponentDesignerComponent,
1117
+ componentDesignerRendering,
1118
+ setComponentDesignerRendering,
1119
+ insertMode,
1120
+ setInsertMode,
1121
+ currentOverlay,
1122
+ setCurrentOverlay,
1123
+ inlineEditingFieldElement,
1124
+ setInlineEditingFieldElement,
1125
+ lockedField,
1126
+ timings,
1127
+ setTimings,
1128
+ selectedRange,
1129
+ setSelectedRange,
1130
+ confirmationDialogRef,
1131
+ confirm: (props) => {
1132
+ confirmationDialogRef.current?.confirm(props);
1133
+ },
1134
+ showMessageDialog: (props) => {
1135
+ confirmationDialogRef.current?.confirm({
1136
+ header: props.header,
1137
+ message: props.message,
1138
+ accept: () => { },
1139
+ acceptLabel: "Ok",
1140
+ });
1141
+ },
1142
+ browseHistory,
1143
+ setCenterPanelView,
1144
+ handleKeyDown,
1145
+ startTour,
1146
+ addSocketMessageListener,
1147
+ currentItemDescriptor,
1148
+ compareTo,
1149
+ setCompareTo,
1150
+ lastEditedFields,
1151
+ revision,
1152
+ selectedComment,
1153
+ setSelectedComment,
1154
+ comments,
1155
+ loadComments,
1156
+ setComments,
1157
+ showComments,
1158
+ setShowComments,
1159
+ addComment: async () => {
1160
+ const descriptor = contentEditorItem?.descriptor;
1161
+ if (!descriptor)
1162
+ return;
1163
+ const itemId = focusedField?.item.id ||
1164
+ (selection.length > 0 ? selection[0] : undefined) ||
1165
+ descriptor.id;
1166
+ if (!itemId)
1167
+ return;
1168
+ const language = descriptor.language;
1169
+ const version = descriptor.version;
1170
+ const getFieldName = async () => {
1171
+ if (!focusedField)
1172
+ return "";
1173
+ const field = await itemsRepository.getField(focusedField);
1174
+ return field?.name;
1175
+ };
1176
+ const getItemName = async () => {
1177
+ const item = await itemsRepository.getItem({
1178
+ id: itemId,
1179
+ language,
1180
+ version,
1181
+ });
1182
+ return item?.name;
1183
+ };
1184
+ const newComment = {
1185
+ id: uuid(),
1186
+ isNew: true,
1187
+ itemId: focusedField?.item.id || descriptor.id,
1188
+ itemName: await getItemName(),
1189
+ fieldId: focusedField?.fieldId,
1190
+ fieldName: await getFieldName(),
1191
+ mainItemId: descriptor.id,
1192
+ language,
1193
+ version,
1194
+ position: 0,
1195
+ rangeStart: selectedRange?.startOffset || 0,
1196
+ rangeEnd: selectedRange?.endOffset || 0,
1197
+ author: user?.name,
1198
+ authorDisplayName: user?.displayName,
1199
+ date: new Date().toISOString(),
1200
+ };
1201
+ setComments([newComment, ...comments]);
1202
+ setSelectedComment(newComment);
1203
+ setShowComments(true);
1204
+ },
1205
+ previewMode,
1206
+ setPreviewMode,
1207
+ user,
1208
+ reviews,
1209
+ statusMessage,
1210
+ setStatusMessage,
1211
+ };
1212
+ }, [
1213
+ operations,
1214
+ itemsRepository,
1215
+ configuration,
1216
+ contentEditorItem,
1217
+ page?.item,
1218
+ itemLanguages,
1219
+ itemVersions,
1220
+ sessionId,
1221
+ isReadOnly,
1222
+ selection,
1223
+ selectedForInsertion,
1224
+ dragObject,
1225
+ requestRefresh,
1226
+ refreshCompletedFlag,
1227
+ searchParams,
1228
+ pathname,
1229
+ router,
1230
+ selectMedia,
1231
+ scrollIntoView,
1232
+ focusedField,
1233
+ renderedFields,
1234
+ inserting,
1235
+ page,
1236
+ activeFieldActions,
1237
+ editHistory,
1238
+ isRefreshing,
1239
+ activeSessions,
1240
+ currentView,
1241
+ componentDesignerComponent,
1242
+ componentDesignerRendering,
1243
+ insertMode,
1244
+ currentOverlay,
1245
+ inlineEditingFieldElement,
1246
+ lockedField,
1247
+ selectedRange,
1248
+ pageViewContext,
1249
+ browseHistory,
1250
+ workboxItems,
1251
+ validating,
1252
+ setCenterPanelView,
1253
+ handleKeyDown,
1254
+ setTimings,
1255
+ timings,
1256
+ startTour,
1257
+ viewName,
1258
+ setViewName,
1259
+ compareMode,
1260
+ setCompareMode,
1261
+ addSocketMessageListener,
1262
+ currentItemDescriptor,
1263
+ compareTo,
1264
+ setCompareTo,
1265
+ lastEditedFields,
1266
+ revision,
1267
+ comments,
1268
+ setComments,
1269
+ selectedComment,
1270
+ setSelectedComment,
1271
+ loadComments,
1272
+ previewMode,
1273
+ setPreviewMode,
1274
+ showComments,
1275
+ setShowComments,
1276
+ user,
1277
+ reviews,
1278
+ statusMessage,
1279
+ setStatusMessage,
1280
+ ]);
1281
+ const modifiedFieldsContext = useMemo(() => {
1282
+ return {
1283
+ modifiedFields,
1284
+ setModifiedFields,
1285
+ };
1286
+ }, [modifiedFields, setModifiedFields]);
1287
+ useEffect(() => {
1288
+ editContextRef.current = editContext;
1289
+ }, [editContext]);
1290
+ if (!currentView)
1291
+ return null;
1292
+ return (_jsx("div", { className: `editor h-full`, children: _jsx(OperationsContextProvider, { value: operationsContext.context, children: _jsx(ModifiedFieldsContextProvider, { value: modifiedFieldsContext, children: _jsxs(EditContextProvider, { value: editContext, children: [pageViewContext.fullscreen ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 flex", children: _jsx(PageViewerFrame, { mode: editContext.previewMode ? "view" : "edit", pageViewContext: pageViewContext }) }), showFullscreenHint && (_jsx("div", { className: "fixed inset-0", onMouseMoveCapture: () => {
1293
+ setTimeout(() => {
1294
+ setShowFullscreenHint(false);
1295
+ }, 600);
1296
+ }, children: _jsx("div", { className: "fixed top-3 left-1/2 -translate-x-1/2 transform rounded-sm bg-gray-200 p-12", children: "Press Ctrl + F11 to exit fullscreen mode" }) }))] })) : (_jsxs(_Fragment, { children: [_jsx(Toast, { ref: toast }), _jsx(ConfirmationDialog, { ref: confirmationDialogRef }), _jsx(EditContextMenu, { ref: contextMenuRef }), _jsx(MainLayout, { className: className, view: currentView, centerPanelView: centerPanelView, rightSidebar: currentView.rightSidebar && (_jsx(SidebarView, { sidebar: currentView.rightSidebar, editContext: editContext, active: true })), rightSidebarTitle: currentView.rightSidebar?.title }), mediaSelectorVisible && (_jsx(MediaSelector, { language: editContext.currentItemDescriptor.language, visible: mediaSelectorVisible, onHide: () => setMediaSelectorVisible(false), onMediaSelected: onMediaSelect, selectedIdPath: selectedMediaIdPath, mode: mediaSelectorMode })), _jsx(AiPopup, { ref: aiPopupRef }), _jsx(FieldEditorPopup, { ref: fieldEditorPopupRef }), isTourActive && (_jsx(Tour, { tourStopCallback: () => setIsTourActive(false) }))] })), editContext.isRefreshing && (_jsx("div", { className: "pointer-events-none fixed right-0 bottom-0 flex h-24 w-24 items-center justify-center text-gray-600 opacity-50 select-none", children: _jsx(Spinner, {}) }))] }) }) }) }));
1297
+ }
1298
+ //# sourceMappingURL=EditorClient.js.map