@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
@@ -1,512 +1,512 @@
1
- "use client";
2
-
3
- import { useEditContext, useEditContextRef } from "../client/editContext";
4
-
5
- import { useEffect, useRef, useState } from "react";
6
-
7
- import { confirmDialog } from "primereact/confirmdialog";
8
- import { getComponentCommands } from "../commands/componentCommands";
9
- import { MenuItem, MenuItemCommandEvent } from "primereact/menuitem";
10
-
11
- import { Component, Placeholder } from "../pageModel";
12
- import { PerfectTree, TreeNode } from "../ui/PerfectTree";
13
-
14
- import { isValidPlaceholder } from "../componentTreeHelper";
15
-
16
- type CustomTreeNode = TreeNode<Component | Placeholder> & {
17
- parent?: CustomTreeNode;
18
- componentId?: string;
19
- className?: string;
20
- type: string;
21
- tags?: {
22
- value: string;
23
- icon: string;
24
- severity: "success" | "info" | "warning" | "danger" | null | undefined;
25
- onClick?: () => void;
26
- color?: string;
27
- tooltip?: string;
28
- id: string;
29
- }[];
30
- };
31
-
32
- export function ComponentTree({}) {
33
- const [expandedKeys, setExpandedKeys] = useState<string[]>([]);
34
- const [selectedKeys, setSelectedKeys] = useState<string[]>([]);
35
-
36
- const [rootNodes, setRootNodes] = useState<TreeNode[]>([]);
37
- const [nodeDictionary, setNodeDictionary] = useState<{
38
- [key: string]: CustomTreeNode;
39
- }>({});
40
-
41
- let editContextRef = useEditContextRef();
42
- const editContext = useEditContext();
43
-
44
- const treeRef = useRef<HTMLDivElement>(null);
45
-
46
- useEffect(() => {
47
- if (treeRef.current) {
48
- const selectedNodeKey = Object.keys(selectedKeys || {})[0];
49
-
50
- const selectedNodeElement = treeRef.current.querySelector(
51
- `[data-id="${selectedNodeKey}"]`,
52
- );
53
-
54
- if (selectedNodeElement) {
55
- selectedNodeElement.scrollIntoView({
56
- behavior: "smooth",
57
- block: "nearest",
58
- });
59
- }
60
- }
61
- }, [selectedKeys]);
62
-
63
- useEffect(() => {
64
- if (editContext?.selection) {
65
- setSelectedKeys(editContext.selection);
66
- }
67
- }, [editContext?.selection]);
68
-
69
- const selection = editContext?.selection || [];
70
- const page = editContext?.page;
71
-
72
- useEffect(() => {
73
- const newExpandedKeys = [...expandedKeys];
74
-
75
- for (const id of selection) {
76
- if (nodeDictionary[id]?.parent) {
77
- expandParents(nodeDictionary[id].parent, newExpandedKeys);
78
- }
79
- }
80
-
81
- if (
82
- newExpandedKeys.length !== expandedKeys.length ||
83
- !newExpandedKeys.every((key, i) => key === expandedKeys[i])
84
- ) {
85
- setExpandedKeys(newExpandedKeys);
86
- }
87
- }, [selection, nodeDictionary]);
88
-
89
- function mapPlaceholderNode(
90
- p: Placeholder,
91
- parent: CustomTreeNode,
92
- ): CustomTreeNode {
93
- const node: CustomTreeNode = {
94
- key: p.key,
95
- componentId: p.key,
96
- label: p.name,
97
- icon: "pi pi-folder",
98
- data: p,
99
- parent: parent,
100
- type: "placeholder",
101
- };
102
- node.children = p.components.map((c) => mapComponentNode(c, node));
103
- return node;
104
- }
105
-
106
- function mapPlaceholders(
107
- c: Component,
108
- parent: CustomTreeNode,
109
- ): CustomTreeNode[] {
110
- if (!c?.placeholders) return [];
111
- if (c.placeholders.length > 1)
112
- return c.placeholders.map((x) => mapPlaceholderNode(x, parent));
113
- else if (c.placeholders.length > 0) {
114
- return c.placeholders[0]!.components.map((c) =>
115
- mapComponentNode(c, parent),
116
- );
117
- }
118
- return [];
119
- }
120
-
121
- function mapComponentNode(
122
- c: Component,
123
- parent: CustomTreeNode,
124
- ): CustomTreeNode {
125
- const node: CustomTreeNode = {
126
- key: c.id,
127
- componentId: c.id,
128
- label: c.name,
129
- icon: "pi pi-stop",
130
- data: c,
131
- parent: parent,
132
- tags: [],
133
- className: c.isRemovedFromMasterLanguage ? "text-gray-400" : "",
134
- type: "component",
135
- };
136
-
137
- if (c.isInheritedFromMasterLanguage) {
138
- node.tags!.push({
139
- id: "inherited",
140
- severity: "info",
141
- value:
142
- "Inherited " + (c.isRemovedFromMasterLanguage ? " / removed" : ""),
143
- tooltip: c.isRemovedFromMasterLanguage
144
- ? "Component was removed from master language"
145
- : "Component is inherited from master language",
146
- icon: "pi pi-caret-right",
147
- });
148
- }
149
-
150
- if (c.layoutId) {
151
- node.tags!.push({
152
- id: "layout",
153
- severity: "warning",
154
- value: "Layout",
155
- icon: "",
156
- color: "rgb(192 132 252)",
157
- tooltip: "Component is inherited from layout. Click to edit layout.",
158
- onClick: async () => {
159
- if (!editContext || !c.layoutId) return;
160
- const hostItem = await editContext.itemsRepository.getItem({
161
- id: c.layoutId,
162
- language: page!.item.language,
163
- version: 0,
164
- });
165
- if (!hostItem) return;
166
- confirmDialog({
167
- header: "Edit layout",
168
- message: "Edit layout " + hostItem.path + "?",
169
- accept: () =>
170
- editContext.loadItem({
171
- id: c.layoutId!,
172
- language: page!.item.language,
173
- version: 0,
174
- }),
175
- });
176
- },
177
- });
178
- }
179
-
180
- if (c.datasourceItem && c.datasourceItem?.id !== c.id) {
181
- node.tags!.push({
182
- id: "linked",
183
- severity: "warning",
184
- value: "Shared",
185
- icon: "",
186
- tooltip: "Component is linked to " + c.datasourceItem?.id,
187
- color: "rgb(251, 146, 60)",
188
- });
189
- }
190
-
191
- node.children = mapPlaceholders(c, node);
192
-
193
- if (c.items.length > 0 && c.items[0]!.id !== c.datasourceItem?.id) {
194
- const itemsNode: CustomTreeNode = {
195
- key: "items" + c.id,
196
- label: "items",
197
- icon: "pi pi-circle",
198
- parent: node,
199
- type: "items",
200
- };
201
-
202
- itemsNode.children = c.items.map((x) => {
203
- const itemNode: CustomTreeNode = {
204
- key: x.id,
205
- label: x.name,
206
- icon: "pi pi-file",
207
- parent: itemsNode,
208
- type: "item",
209
- };
210
- return itemNode;
211
- });
212
-
213
- node.children.push(itemsNode);
214
- }
215
-
216
- return node;
217
- }
218
-
219
- useEffect(() => {
220
- if (!page) return;
221
-
222
- const treeNodes = mapPlaceholders(page.rootComponent, {
223
- key: "root",
224
- label: "Root",
225
- icon: "pi pi-home",
226
- children: [],
227
- type: "placeholder",
228
- });
229
- const dict: { [key: string]: CustomTreeNode } = {};
230
- createMap(treeNodes, dict);
231
-
232
- const otherNode: CustomTreeNode = {
233
- key: "other",
234
- label: "Other",
235
- icon: "pi pi-file",
236
- children: [],
237
- type: "other",
238
- };
239
-
240
- if (otherNode.children?.length) treeNodes.push(otherNode);
241
-
242
- const pageNode: CustomTreeNode = {
243
- key: "page",
244
- label: "Page",
245
- icon: "pi pi-home",
246
- parent: undefined,
247
- componentId: page.item.id,
248
- type: "page",
249
- };
250
-
251
- setRootNodes([pageNode, ...treeNodes]);
252
- setNodeDictionary(dict);
253
- }, [page]);
254
-
255
- const handleTreeSelection = (key: string, event: React.MouseEvent) => {
256
- let newKeys = [key];
257
- if (event.ctrlKey) {
258
- if (selectedKeys.includes(key)) {
259
- newKeys = selectedKeys.filter((x) => x !== key);
260
- } else {
261
- newKeys = [...selectedKeys, key];
262
- }
263
- }
264
-
265
- const selectedComponentIds = newKeys
266
- .filter((key) => nodeDictionary[key])
267
- .map((key) => nodeDictionary[key]!.componentId!);
268
-
269
- editContextRef.current?.select(selectedComponentIds);
270
-
271
- if (selectedComponentIds.length === 1) {
272
- editContextRef.current?.setScrollIntoView(selectedComponentIds[0]);
273
- }
274
- };
275
-
276
- // Handle tree context menu
277
- const handleTreeContextMenu = (item: any, event: React.MouseEvent) => {
278
- const componentId = nodeDictionary[item.id]?.componentId;
279
-
280
- let selectedComponentIds = editContext?.selection || [];
281
-
282
- if (componentId) {
283
- if (selectedComponentIds.indexOf(componentId) < 0) {
284
- editContextRef.current?.select([componentId]);
285
- selectedComponentIds = [componentId];
286
- }
287
- }
288
-
289
- function isDefinedEntity(
290
- entity: Component | Placeholder | undefined,
291
- ): entity is Component | Placeholder {
292
- return entity !== undefined;
293
- }
294
-
295
- let selectedEntities = selectedComponentIds
296
- .filter((key) => nodeDictionary[key])
297
- .map((key) => nodeDictionary[key]!.data)
298
- .filter(isDefinedEntity);
299
-
300
- if (selectedEntities.length === 0 && item.data) {
301
- selectedEntities = [item.data];
302
- }
303
-
304
- let commands = getComponentCommands(
305
- selectedEntities,
306
- editContextRef.current!,
307
- );
308
-
309
- const menu: MenuItem[] = commands.map((x) => ({
310
- label: x.label,
311
- icon: x.icon,
312
- disabled: editContextRef.current?.isCommandDisabled({
313
- command: x,
314
- }),
315
- command: (ev: MenuItemCommandEvent) => {
316
- editContextRef.current?.executeCommand({
317
- command: x,
318
- data: { components: selectedEntities as Component[] },
319
- event: ev.originalEvent,
320
- });
321
- },
322
- }));
323
-
324
- editContextRef.current?.showContextMenu(event, menu);
325
- };
326
-
327
- // Convert expanded keys for PerfectTree
328
- const expandedItems = expandedKeys;
329
-
330
- // Convert selected keys for PerfectTree
331
- const selectedItems = selectedKeys;
332
-
333
- // Handle expanding nodes
334
- const handleToggle = (key: string) => {
335
- if (expandedKeys.includes(key)) {
336
- handleCollapseItem(key);
337
- } else {
338
- const newExpandedKeys = [...expandedKeys];
339
- newExpandedKeys.push(key);
340
- setExpandedKeys(newExpandedKeys);
341
- }
342
- };
343
-
344
- // Handle collapsing nodes
345
- const handleCollapseItem = (key: string) => {
346
- // First, get the node we're collapsing
347
- const nodeToCollapse = nodeDictionary[key];
348
-
349
- // Create a new array for expanded keys
350
- const newExpandedKeys = [...expandedKeys].filter((x) => x !== key);
351
-
352
- setExpandedKeys(newExpandedKeys);
353
- };
354
-
355
- const getPlaceholder = (node: CustomTreeNode | null): Placeholder | null => {
356
- if (!node) return null;
357
- if (node.type === "placeholder") return node.data as Placeholder;
358
- if (node.type === "component" && (node.data as Component).placeholders) {
359
- if ((node.data as Component).placeholders.length === 1)
360
- return (node.data as Component).placeholders[0]!;
361
- }
362
- return null;
363
- };
364
-
365
- // Handle drag over node
366
- const handleDragOverZone = (
367
- dragOverNode: CustomTreeNode | null,
368
- index: number,
369
- event: React.DragEvent,
370
- ): boolean => {
371
- if (!editContext?.dragObject) return false;
372
- const placeholder = getPlaceholder(dragOverNode);
373
- if (!placeholder) return false;
374
- var isValid = isValidPlaceholder(placeholder, editContext.dragObject);
375
- return isValid;
376
- };
377
-
378
- // Handle drop on node
379
- const handleDropZone = (
380
- droppedOnNode: CustomTreeNode | null,
381
- index: number,
382
- event: React.DragEvent,
383
- ): void => {
384
- const placeholder = getPlaceholder(droppedOnNode);
385
- if (!placeholder) return;
386
-
387
- editContext!.droppedInPlaceholder(placeholder.key, index);
388
- };
389
-
390
- if (!page)
391
- return (
392
- <div className="flex h-full items-center justify-center text-sm text-gray-500"></div>
393
- );
394
-
395
- // Use the PerfectTree component
396
- return (
397
- <div className="p-2" ref={treeRef}>
398
- <PerfectTree
399
- nodes={rootNodes}
400
- isDragging={!!editContext?.dragObject}
401
- selectedKeys={selectedItems}
402
- expandedKeys={expandedItems}
403
- onToggleExpand={handleToggle}
404
- onSelect={handleTreeSelection}
405
- enableDragAndDrop={true}
406
- onDragOverZone={(parent, index, event) =>
407
- handleDragOverZone(parent as CustomTreeNode | null, index, event)
408
- }
409
- onStartDrag={(data) => {
410
- const component = data.node.data as Component;
411
-
412
- // Initialize drag data to make sure dataTransfer is set
413
- data.event.dataTransfer.setData("text/plain", data.node.key);
414
-
415
- // Only create drag object for components with datasourceItem
416
- if (!component?.datasourceItem) return;
417
-
418
- editContext!.dragStart({
419
- type: "component",
420
- typeId: component.typeId,
421
- templateId: component.datasourceItem?.templateId,
422
- name: component.name,
423
- component: {
424
- id: component.id,
425
- language: editContext!.page!.item.language,
426
- version: editContext!.page!.item.version,
427
- },
428
- });
429
- }}
430
- onDragEnd={(event) => {
431
- editContext!.dragEnd();
432
- }}
433
- onDrop={(parent, index, event) =>
434
- handleDropZone(parent as CustomTreeNode | null, index, event)
435
- }
436
- renderNode={(node) => renderNode(node as CustomTreeNode)}
437
- />
438
- </div>
439
- );
440
- }
441
-
442
- function renderNode(node: CustomTreeNode) {
443
- return (
444
- <div>
445
- <div className="font-geist-sans flex items-center gap-2 p-0.5 text-[12px] text-gray-600">
446
- <i className={node.icon}></i>
447
- <span className={node.className}>{node.label}</span>
448
- {node.tags?.map((x: any) => (
449
- <div key={`tag-${node.key}-${x.id}`}>
450
- <span
451
- id={`id-${node.key}-${x.id}`}
452
- className="ml-2 rounded px-1 py-0.5 text-xs"
453
- style={{
454
- backgroundColor: x.color,
455
- marginLeft: "8px",
456
- fontSize: "10px",
457
- padding: "1px 4px 2px 2px",
458
- }}
459
- title={x.tooltip}
460
- onClick={
461
- x.onClick
462
- ? (e) => {
463
- e.stopPropagation();
464
- x.onClick();
465
- }
466
- : undefined
467
- }
468
- >
469
- {x.icon && <i className={x.icon}></i>}
470
- {x.value}
471
- </span>
472
- </div>
473
- ))}
474
- </div>
475
- </div>
476
- );
477
- }
478
-
479
- function createMap(
480
- treeNodes: CustomTreeNode[],
481
- nodeDictionary: { [key: string]: CustomTreeNode },
482
- ) {
483
- treeNodes.forEach((n) => {
484
- if (n.key) nodeDictionary[n.key] = n;
485
- if (n.children) createMap(n.children as CustomTreeNode[], nodeDictionary);
486
- });
487
- }
488
-
489
- function expandParents(node: CustomTreeNode, expandedKeysList: string[]) {
490
- if (!node) return;
491
-
492
- if (node.key && !expandedKeysList.includes(node.key)) {
493
- expandedKeysList.push(node.key);
494
- }
495
-
496
- if (node.parent) {
497
- expandParents(node.parent, expandedKeysList);
498
- }
499
- }
500
-
501
- function hasSameProps(obj1: any, obj2: any) {
502
- var obj1Props = Object.keys(obj1),
503
- obj2Props = Object.keys(obj2);
504
-
505
- if (obj1Props.length == obj2Props.length) {
506
- return obj1Props.every(function (prop) {
507
- return obj2Props.indexOf(prop) >= 0;
508
- });
509
- }
510
-
511
- return false;
512
- }
1
+ "use client";
2
+
3
+ import { useEditContext, useEditContextRef } from "../client/editContext";
4
+
5
+ import { useEffect, useRef, useState } from "react";
6
+
7
+ import { confirmDialog } from "primereact/confirmdialog";
8
+ import { getComponentCommands } from "../commands/componentCommands";
9
+ import { MenuItem, MenuItemCommandEvent } from "primereact/menuitem";
10
+
11
+ import { Component, Placeholder } from "../pageModel";
12
+ import { PerfectTree, TreeNode } from "../ui/PerfectTree";
13
+
14
+ import { isValidPlaceholder } from "../componentTreeHelper";
15
+
16
+ type CustomTreeNode = TreeNode<Component | Placeholder> & {
17
+ parent?: CustomTreeNode;
18
+ componentId?: string;
19
+ className?: string;
20
+ type: string;
21
+ tags?: {
22
+ value: string;
23
+ icon: string;
24
+ severity: "success" | "info" | "warning" | "danger" | null | undefined;
25
+ onClick?: () => void;
26
+ color?: string;
27
+ tooltip?: string;
28
+ id: string;
29
+ }[];
30
+ };
31
+
32
+ export function ComponentTree({}) {
33
+ const [expandedKeys, setExpandedKeys] = useState<string[]>([]);
34
+ const [selectedKeys, setSelectedKeys] = useState<string[]>([]);
35
+
36
+ const [rootNodes, setRootNodes] = useState<TreeNode[]>([]);
37
+ const [nodeDictionary, setNodeDictionary] = useState<{
38
+ [key: string]: CustomTreeNode;
39
+ }>({});
40
+
41
+ let editContextRef = useEditContextRef();
42
+ const editContext = useEditContext();
43
+
44
+ const treeRef = useRef<HTMLDivElement>(null);
45
+
46
+ useEffect(() => {
47
+ if (treeRef.current) {
48
+ const selectedNodeKey = Object.keys(selectedKeys || {})[0];
49
+
50
+ const selectedNodeElement = treeRef.current.querySelector(
51
+ `[data-id="${selectedNodeKey}"]`,
52
+ );
53
+
54
+ if (selectedNodeElement) {
55
+ selectedNodeElement.scrollIntoView({
56
+ behavior: "smooth",
57
+ block: "nearest",
58
+ });
59
+ }
60
+ }
61
+ }, [selectedKeys]);
62
+
63
+ useEffect(() => {
64
+ if (editContext?.selection) {
65
+ setSelectedKeys(editContext.selection);
66
+ }
67
+ }, [editContext?.selection]);
68
+
69
+ const selection = editContext?.selection || [];
70
+ const page = editContext?.page;
71
+
72
+ useEffect(() => {
73
+ const newExpandedKeys = [...expandedKeys];
74
+
75
+ for (const id of selection) {
76
+ if (nodeDictionary[id]?.parent) {
77
+ expandParents(nodeDictionary[id].parent, newExpandedKeys);
78
+ }
79
+ }
80
+
81
+ if (
82
+ newExpandedKeys.length !== expandedKeys.length ||
83
+ !newExpandedKeys.every((key, i) => key === expandedKeys[i])
84
+ ) {
85
+ setExpandedKeys(newExpandedKeys);
86
+ }
87
+ }, [selection, nodeDictionary]);
88
+
89
+ function mapPlaceholderNode(
90
+ p: Placeholder,
91
+ parent: CustomTreeNode,
92
+ ): CustomTreeNode {
93
+ const node: CustomTreeNode = {
94
+ key: p.key,
95
+ componentId: p.key,
96
+ label: p.name,
97
+ icon: "pi pi-folder",
98
+ data: p,
99
+ parent: parent,
100
+ type: "placeholder",
101
+ };
102
+ node.children = p.components.map((c) => mapComponentNode(c, node));
103
+ return node;
104
+ }
105
+
106
+ function mapPlaceholders(
107
+ c: Component,
108
+ parent: CustomTreeNode,
109
+ ): CustomTreeNode[] {
110
+ if (!c?.placeholders) return [];
111
+ if (c.placeholders.length > 1)
112
+ return c.placeholders.map((x) => mapPlaceholderNode(x, parent));
113
+ else if (c.placeholders.length > 0) {
114
+ return c.placeholders[0]!.components.map((c) =>
115
+ mapComponentNode(c, parent),
116
+ );
117
+ }
118
+ return [];
119
+ }
120
+
121
+ function mapComponentNode(
122
+ c: Component,
123
+ parent: CustomTreeNode,
124
+ ): CustomTreeNode {
125
+ const node: CustomTreeNode = {
126
+ key: c.id,
127
+ componentId: c.id,
128
+ label: c.name,
129
+ icon: "pi pi-stop",
130
+ data: c,
131
+ parent: parent,
132
+ tags: [],
133
+ className: c.isRemovedFromMasterLanguage ? "text-gray-400" : "",
134
+ type: "component",
135
+ };
136
+
137
+ if (c.isInheritedFromMasterLanguage) {
138
+ node.tags!.push({
139
+ id: "inherited",
140
+ severity: "info",
141
+ value:
142
+ "Inherited " + (c.isRemovedFromMasterLanguage ? " / removed" : ""),
143
+ tooltip: c.isRemovedFromMasterLanguage
144
+ ? "Component was removed from master language"
145
+ : "Component is inherited from master language",
146
+ icon: "pi pi-caret-right",
147
+ });
148
+ }
149
+
150
+ if (c.layoutId) {
151
+ node.tags!.push({
152
+ id: "layout",
153
+ severity: "warning",
154
+ value: "Layout",
155
+ icon: "",
156
+ color: "rgb(192 132 252)",
157
+ tooltip: "Component is inherited from layout. Click to edit layout.",
158
+ onClick: async () => {
159
+ if (!editContext || !c.layoutId) return;
160
+ const hostItem = await editContext.itemsRepository.getItem({
161
+ id: c.layoutId,
162
+ language: page!.item.language,
163
+ version: 0,
164
+ });
165
+ if (!hostItem) return;
166
+ confirmDialog({
167
+ header: "Edit layout",
168
+ message: "Edit layout " + hostItem.path + "?",
169
+ accept: () =>
170
+ editContext.loadItem({
171
+ id: c.layoutId!,
172
+ language: page!.item.language,
173
+ version: 0,
174
+ }),
175
+ });
176
+ },
177
+ });
178
+ }
179
+
180
+ if (c.datasourceItem && c.datasourceItem?.id !== c.id) {
181
+ node.tags!.push({
182
+ id: "linked",
183
+ severity: "warning",
184
+ value: "Shared",
185
+ icon: "",
186
+ tooltip: "Component is linked to " + c.datasourceItem?.id,
187
+ color: "rgb(251, 146, 60)",
188
+ });
189
+ }
190
+
191
+ node.children = mapPlaceholders(c, node);
192
+
193
+ if (c.items.length > 0 && c.items[0]!.id !== c.datasourceItem?.id) {
194
+ const itemsNode: CustomTreeNode = {
195
+ key: "items" + c.id,
196
+ label: "items",
197
+ icon: "pi pi-circle",
198
+ parent: node,
199
+ type: "items",
200
+ };
201
+
202
+ itemsNode.children = c.items.map((x) => {
203
+ const itemNode: CustomTreeNode = {
204
+ key: x.id,
205
+ label: x.name,
206
+ icon: "pi pi-file",
207
+ parent: itemsNode,
208
+ type: "item",
209
+ };
210
+ return itemNode;
211
+ });
212
+
213
+ node.children.push(itemsNode);
214
+ }
215
+
216
+ return node;
217
+ }
218
+
219
+ useEffect(() => {
220
+ if (!page) return;
221
+
222
+ const treeNodes = mapPlaceholders(page.rootComponent, {
223
+ key: "root",
224
+ label: "Root",
225
+ icon: "pi pi-home",
226
+ children: [],
227
+ type: "placeholder",
228
+ });
229
+ const dict: { [key: string]: CustomTreeNode } = {};
230
+ createMap(treeNodes, dict);
231
+
232
+ const otherNode: CustomTreeNode = {
233
+ key: "other",
234
+ label: "Other",
235
+ icon: "pi pi-file",
236
+ children: [],
237
+ type: "other",
238
+ };
239
+
240
+ if (otherNode.children?.length) treeNodes.push(otherNode);
241
+
242
+ const pageNode: CustomTreeNode = {
243
+ key: "page",
244
+ label: "Page",
245
+ icon: "pi pi-home",
246
+ parent: undefined,
247
+ componentId: page.item.id,
248
+ type: "page",
249
+ };
250
+
251
+ setRootNodes([pageNode, ...treeNodes]);
252
+ setNodeDictionary(dict);
253
+ }, [page]);
254
+
255
+ const handleTreeSelection = (key: string, event: React.MouseEvent) => {
256
+ let newKeys = [key];
257
+ if (event.ctrlKey) {
258
+ if (selectedKeys.includes(key)) {
259
+ newKeys = selectedKeys.filter((x) => x !== key);
260
+ } else {
261
+ newKeys = [...selectedKeys, key];
262
+ }
263
+ }
264
+
265
+ const selectedComponentIds = newKeys
266
+ .filter((key) => nodeDictionary[key])
267
+ .map((key) => nodeDictionary[key]!.componentId!);
268
+
269
+ editContextRef.current?.select(selectedComponentIds);
270
+
271
+ if (selectedComponentIds.length === 1) {
272
+ editContextRef.current?.setScrollIntoView(selectedComponentIds[0]);
273
+ }
274
+ };
275
+
276
+ // Handle tree context menu
277
+ const handleTreeContextMenu = (item: any, event: React.MouseEvent) => {
278
+ const componentId = nodeDictionary[item.id]?.componentId;
279
+
280
+ let selectedComponentIds = editContext?.selection || [];
281
+
282
+ if (componentId) {
283
+ if (selectedComponentIds.indexOf(componentId) < 0) {
284
+ editContextRef.current?.select([componentId]);
285
+ selectedComponentIds = [componentId];
286
+ }
287
+ }
288
+
289
+ function isDefinedEntity(
290
+ entity: Component | Placeholder | undefined,
291
+ ): entity is Component | Placeholder {
292
+ return entity !== undefined;
293
+ }
294
+
295
+ let selectedEntities = selectedComponentIds
296
+ .filter((key) => nodeDictionary[key])
297
+ .map((key) => nodeDictionary[key]!.data)
298
+ .filter(isDefinedEntity);
299
+
300
+ if (selectedEntities.length === 0 && item.data) {
301
+ selectedEntities = [item.data];
302
+ }
303
+
304
+ let commands = getComponentCommands(
305
+ selectedEntities,
306
+ editContextRef.current!,
307
+ );
308
+
309
+ const menu: MenuItem[] = commands.map((x) => ({
310
+ label: x.label,
311
+ icon: x.icon,
312
+ disabled: editContextRef.current?.isCommandDisabled({
313
+ command: x,
314
+ }),
315
+ command: (ev: MenuItemCommandEvent) => {
316
+ editContextRef.current?.executeCommand({
317
+ command: x,
318
+ data: { components: selectedEntities as Component[] },
319
+ event: ev.originalEvent,
320
+ });
321
+ },
322
+ }));
323
+
324
+ editContextRef.current?.showContextMenu(event, menu);
325
+ };
326
+
327
+ // Convert expanded keys for PerfectTree
328
+ const expandedItems = expandedKeys;
329
+
330
+ // Convert selected keys for PerfectTree
331
+ const selectedItems = selectedKeys;
332
+
333
+ // Handle expanding nodes
334
+ const handleToggle = (key: string) => {
335
+ if (expandedKeys.includes(key)) {
336
+ handleCollapseItem(key);
337
+ } else {
338
+ const newExpandedKeys = [...expandedKeys];
339
+ newExpandedKeys.push(key);
340
+ setExpandedKeys(newExpandedKeys);
341
+ }
342
+ };
343
+
344
+ // Handle collapsing nodes
345
+ const handleCollapseItem = (key: string) => {
346
+ // First, get the node we're collapsing
347
+ const nodeToCollapse = nodeDictionary[key];
348
+
349
+ // Create a new array for expanded keys
350
+ const newExpandedKeys = [...expandedKeys].filter((x) => x !== key);
351
+
352
+ setExpandedKeys(newExpandedKeys);
353
+ };
354
+
355
+ const getPlaceholder = (node: CustomTreeNode | null): Placeholder | null => {
356
+ if (!node) return null;
357
+ if (node.type === "placeholder") return node.data as Placeholder;
358
+ if (node.type === "component" && (node.data as Component).placeholders) {
359
+ if ((node.data as Component).placeholders.length === 1)
360
+ return (node.data as Component).placeholders[0]!;
361
+ }
362
+ return null;
363
+ };
364
+
365
+ // Handle drag over node
366
+ const handleDragOverZone = (
367
+ dragOverNode: CustomTreeNode | null,
368
+ index: number,
369
+ event: React.DragEvent,
370
+ ): boolean => {
371
+ if (!editContext?.dragObject) return false;
372
+ const placeholder = getPlaceholder(dragOverNode);
373
+ if (!placeholder) return false;
374
+ var isValid = isValidPlaceholder(placeholder, editContext.dragObject);
375
+ return isValid;
376
+ };
377
+
378
+ // Handle drop on node
379
+ const handleDropZone = (
380
+ droppedOnNode: CustomTreeNode | null,
381
+ index: number,
382
+ event: React.DragEvent,
383
+ ): void => {
384
+ const placeholder = getPlaceholder(droppedOnNode);
385
+ if (!placeholder) return;
386
+
387
+ editContext!.droppedInPlaceholder(placeholder.key, index);
388
+ };
389
+
390
+ if (!page)
391
+ return (
392
+ <div className="flex h-full items-center justify-center text-sm text-gray-500"></div>
393
+ );
394
+
395
+ // Use the PerfectTree component
396
+ return (
397
+ <div className="p-2" ref={treeRef}>
398
+ <PerfectTree
399
+ nodes={rootNodes}
400
+ isDragging={!!editContext?.dragObject}
401
+ selectedKeys={selectedItems}
402
+ expandedKeys={expandedItems}
403
+ onToggleExpand={handleToggle}
404
+ onSelect={handleTreeSelection}
405
+ enableDragAndDrop={true}
406
+ onDragOverZone={(parent, index, event) =>
407
+ handleDragOverZone(parent as CustomTreeNode | null, index, event)
408
+ }
409
+ onStartDrag={(data) => {
410
+ const component = data.node.data as Component;
411
+
412
+ // Initialize drag data to make sure dataTransfer is set
413
+ data.event.dataTransfer.setData("text/plain", data.node.key);
414
+
415
+ // Only create drag object for components with datasourceItem
416
+ if (!component?.datasourceItem) return;
417
+
418
+ editContext!.dragStart({
419
+ type: "component",
420
+ typeId: component.typeId,
421
+ templateId: component.datasourceItem?.templateId,
422
+ name: component.name,
423
+ component: {
424
+ id: component.id,
425
+ language: editContext!.page!.item.language,
426
+ version: editContext!.page!.item.version,
427
+ },
428
+ });
429
+ }}
430
+ onDragEnd={(event) => {
431
+ editContext!.dragEnd();
432
+ }}
433
+ onDrop={(parent, index, event) =>
434
+ handleDropZone(parent as CustomTreeNode | null, index, event)
435
+ }
436
+ renderNode={(node) => renderNode(node as CustomTreeNode)}
437
+ />
438
+ </div>
439
+ );
440
+ }
441
+
442
+ function renderNode(node: CustomTreeNode) {
443
+ return (
444
+ <div>
445
+ <div className="font-geist-sans flex items-center gap-2 p-0.5 text-[12px] text-gray-600">
446
+ <i className={node.icon}></i>
447
+ <span className={node.className}>{node.label}</span>
448
+ {node.tags?.map((x: any) => (
449
+ <div key={`tag-${node.key}-${x.id}`}>
450
+ <span
451
+ id={`id-${node.key}-${x.id}`}
452
+ className="ml-2 rounded px-1 py-0.5 text-xs"
453
+ style={{
454
+ backgroundColor: x.color,
455
+ marginLeft: "8px",
456
+ fontSize: "10px",
457
+ padding: "1px 4px 2px 2px",
458
+ }}
459
+ title={x.tooltip}
460
+ onClick={
461
+ x.onClick
462
+ ? (e) => {
463
+ e.stopPropagation();
464
+ x.onClick();
465
+ }
466
+ : undefined
467
+ }
468
+ >
469
+ {x.icon && <i className={x.icon}></i>}
470
+ {x.value}
471
+ </span>
472
+ </div>
473
+ ))}
474
+ </div>
475
+ </div>
476
+ );
477
+ }
478
+
479
+ function createMap(
480
+ treeNodes: CustomTreeNode[],
481
+ nodeDictionary: { [key: string]: CustomTreeNode },
482
+ ) {
483
+ treeNodes.forEach((n) => {
484
+ if (n.key) nodeDictionary[n.key] = n;
485
+ if (n.children) createMap(n.children as CustomTreeNode[], nodeDictionary);
486
+ });
487
+ }
488
+
489
+ function expandParents(node: CustomTreeNode, expandedKeysList: string[]) {
490
+ if (!node) return;
491
+
492
+ if (node.key && !expandedKeysList.includes(node.key)) {
493
+ expandedKeysList.push(node.key);
494
+ }
495
+
496
+ if (node.parent) {
497
+ expandParents(node.parent, expandedKeysList);
498
+ }
499
+ }
500
+
501
+ function hasSameProps(obj1: any, obj2: any) {
502
+ var obj1Props = Object.keys(obj1),
503
+ obj2Props = Object.keys(obj2);
504
+
505
+ if (obj1Props.length == obj2Props.length) {
506
+ return obj1Props.every(function (prop) {
507
+ return obj2Props.indexOf(prop) >= 0;
508
+ });
509
+ }
510
+
511
+ return false;
512
+ }