@alpaca-headless/alpaca-headless-nextjs 1.0.129 → 1.0.246

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 (364) hide show
  1. package/dist/editor.css +439 -49
  2. package/dist/esm/alpacaContext.js +16 -0
  3. package/dist/esm/client-components/ClientLink.js +34 -0
  4. package/dist/{cjs/components → esm/client-components}/LinkEditor.js +22 -19
  5. package/dist/esm/client-components/MultiComponentEditor.js +22 -0
  6. package/dist/esm/client-components/index.js +4 -0
  7. package/dist/esm/components/Error.js +10 -0
  8. package/dist/{cjs → esm}/components/Image.js +4 -7
  9. package/dist/esm/components/Link.js +32 -0
  10. package/dist/esm/components/LinkPreview.js +30 -0
  11. package/dist/esm/components/LockedFieldIndicator.js +21 -0
  12. package/dist/esm/components/Picture.js +133 -0
  13. package/dist/esm/components/PictureEditor.js +77 -0
  14. package/dist/esm/components/PictureEditorWrapper.js +6 -0
  15. package/dist/esm/components/Placeholder.js +117 -0
  16. package/dist/esm/components/RichText.js +30 -0
  17. package/dist/esm/components/RichTextEditor.js +92 -0
  18. package/dist/esm/components/RichTextEditorWrapper.js +7 -0
  19. package/dist/esm/components/Slot.js +6 -0
  20. package/dist/esm/components/Text.js +29 -0
  21. package/dist/esm/components/TextEditor.js +78 -0
  22. package/dist/esm/components/TextEditorWrapper.js +19 -0
  23. package/dist/esm/components/Translate.js +12 -0
  24. package/dist/esm/components/TranslateEditor.js +24 -0
  25. package/dist/esm/components/index.js +7 -0
  26. package/dist/esm/components/picture-shared.js +26 -0
  27. package/dist/esm/editor/ComponentInfo.js +12 -0
  28. package/dist/esm/editor/ConfirmationDialog.js +29 -0
  29. package/dist/{cjs → esm}/editor/ContentTree.js +55 -46
  30. package/dist/esm/editor/ContextMenu.js +90 -0
  31. package/dist/esm/editor/DialogButtons.js +4 -0
  32. package/dist/esm/editor/DictionaryEditor.js +37 -0
  33. package/dist/esm/editor/EditFrame.js +115 -0
  34. package/dist/esm/editor/EditFrameWrapper.js +7 -0
  35. package/dist/esm/editor/Editor.js +15 -0
  36. package/dist/esm/editor/EditorClient.js +877 -0
  37. package/dist/esm/editor/EditorClientHost.js +15 -0
  38. package/dist/esm/editor/EditorWarning.js +10 -0
  39. package/dist/esm/editor/EditorWarnings.js +13 -0
  40. package/dist/esm/editor/FieldEditorPopup.js +23 -0
  41. package/dist/esm/editor/FieldList.js +48 -0
  42. package/dist/esm/editor/FieldListField.js +137 -0
  43. package/dist/{cjs → esm}/editor/FloatingToolbar.js +20 -23
  44. package/dist/esm/editor/ItemInfo.js +14 -0
  45. package/dist/esm/editor/ItemNameDialog.js +32 -0
  46. package/dist/esm/editor/LinkEditorDialog.js +61 -0
  47. package/dist/esm/editor/MainLayout.js +18 -0
  48. package/dist/esm/editor/MediaSelector.js +85 -0
  49. package/dist/esm/editor/Outline.js +82 -0
  50. package/dist/esm/editor/PageViewer.js +41 -0
  51. package/dist/esm/editor/PictureEditorDialog.js +201 -0
  52. package/dist/esm/editor/PlaceholderDropZone.js +130 -0
  53. package/dist/esm/editor/PlaceholderDropZoneHost.js +7 -0
  54. package/dist/esm/editor/PreviewClient.js +5 -0
  55. package/dist/esm/editor/PreviewClientHost.js +7 -0
  56. package/dist/esm/editor/PreviewPanel.js +7 -0
  57. package/dist/esm/editor/PublishDialog.js +15 -0
  58. package/dist/esm/editor/Terminal.js +55 -0
  59. package/dist/esm/editor/ai/AiPopup.js +28 -0
  60. package/dist/esm/editor/ai/AiResponseMessage.js +20 -0
  61. package/dist/{cjs/editor → esm/editor/ai}/AiTerminal.js +67 -48
  62. package/dist/esm/editor/ai/AiToolCall.js +15 -0
  63. package/dist/esm/editor/commands/commands.js +1 -0
  64. package/dist/esm/editor/commands/componentCommands.js +287 -0
  65. package/dist/esm/editor/commands/createVersionCommand.js +26 -0
  66. package/dist/esm/editor/commands/undo.js +22 -0
  67. package/dist/esm/editor/componentTreeHelper.js +20 -0
  68. package/dist/esm/editor/config/config.js +261 -0
  69. package/dist/esm/editor/editContext.js +11 -0
  70. package/dist/esm/editor/editor-warnings/ItemLocked.js +40 -0
  71. package/dist/esm/editor/editor-warnings/ValidationErrors.js +22 -0
  72. package/dist/esm/editor/fieldTypes/CheckboxEditor.js +21 -0
  73. package/dist/esm/editor/fieldTypes/DropLinkEditor.js +50 -0
  74. package/dist/esm/editor/fieldTypes/InternalLinkFieldEditor.js +41 -0
  75. package/dist/{cjs → esm}/editor/fieldTypes/LinkFieldEditor.js +14 -16
  76. package/dist/esm/editor/fieldTypes/MultiLineText.js +25 -0
  77. package/dist/esm/editor/fieldTypes/PictureFieldEditor.js +33 -0
  78. package/dist/esm/editor/fieldTypes/RawEditor.js +26 -0
  79. package/dist/esm/editor/fieldTypes/RichTextEditor.js +7 -0
  80. package/dist/esm/editor/fieldTypes/RichTextEditorComponent.js +46 -0
  81. package/dist/esm/editor/fieldTypes/SingleLineText.js +25 -0
  82. package/dist/esm/editor/fieldTypes/TreeListEditor.js +57 -0
  83. package/dist/esm/editor/index.js +4 -0
  84. package/dist/esm/editor/itemCommands.js +27 -0
  85. package/dist/esm/editor/menubar/BrowseHistory.js +39 -0
  86. package/dist/esm/editor/menubar/ItemLanguageVersion.js +20 -0
  87. package/dist/esm/editor/menubar/LanguageSelector.js +18 -0
  88. package/dist/esm/editor/menubar/Menu.js +105 -0
  89. package/dist/esm/editor/menubar/PageViewerControls.js +66 -0
  90. package/dist/esm/editor/menubar/VersionSelector.js +18 -0
  91. package/dist/esm/editor/previewContext.js +5 -0
  92. package/dist/esm/editor/services/contentService.js +58 -0
  93. package/dist/esm/editor/services/editService.js +428 -0
  94. package/dist/esm/editor/sidebar/ComponentPalette.js +42 -0
  95. package/dist/esm/editor/sidebar/ComponentTree.js +237 -0
  96. package/dist/esm/editor/sidebar/Debug.js +46 -0
  97. package/dist/esm/editor/sidebar/EditHistory.js +66 -0
  98. package/dist/esm/editor/sidebar/EditorForm.js +24 -0
  99. package/dist/esm/editor/sidebar/GraphQL.js +85 -0
  100. package/dist/esm/editor/sidebar/Insert.js +7 -0
  101. package/dist/esm/editor/sidebar/MainContentTree.js +38 -0
  102. package/dist/esm/editor/sidebar/Sessions.js +11 -0
  103. package/dist/esm/editor/sidebar/Sidebar.js +13 -0
  104. package/dist/esm/editor/sidebar/SidebarView.js +69 -0
  105. package/dist/esm/editor/sidebar/Workbox.js +77 -0
  106. package/dist/esm/editor/ui/CopyToClipboardButton.js +14 -0
  107. package/dist/esm/editor/ui/Icons.js +19 -0
  108. package/dist/esm/editor/ui/Section.js +8 -0
  109. package/dist/esm/editor/utils/insertOptions.js +39 -0
  110. package/dist/esm/editor/utils.js +71 -0
  111. package/dist/esm/editor/views/ItemEditor.js +18 -0
  112. package/dist/esm/fieldTypes.js +1 -0
  113. package/dist/esm/graphQL.js +50 -0
  114. package/dist/esm/graphQLTypes.js +1 -0
  115. package/dist/esm/index.js +8 -0
  116. package/dist/{cjs → esm}/loadRouteData.js +23 -20
  117. package/dist/{cjs → esm}/mediaProtection.js +4 -11
  118. package/dist/esm/middleware/handleRequest.js +45 -0
  119. package/dist/esm/middleware/index.js +1 -0
  120. package/dist/esm/servertypes.js +1 -0
  121. package/dist/primereact/resources/themes/arya-blue/theme.css +854 -790
  122. package/dist/primereact/resources/themes/arya-green/theme.css +854 -790
  123. package/dist/primereact/resources/themes/arya-orange/theme.css +854 -790
  124. package/dist/primereact/resources/themes/arya-purple/theme.css +854 -790
  125. package/dist/primereact/resources/themes/bootstrap4-dark-blue/theme.css +678 -615
  126. package/dist/primereact/resources/themes/bootstrap4-dark-purple/theme.css +678 -615
  127. package/dist/primereact/resources/themes/bootstrap4-light-blue/theme.css +679 -616
  128. package/dist/primereact/resources/themes/bootstrap4-light-purple/theme.css +679 -616
  129. package/dist/primereact/resources/themes/fluent-light/theme.css +686 -638
  130. package/dist/primereact/resources/themes/lara-dark-amber/theme.css +679 -630
  131. package/dist/primereact/resources/themes/lara-dark-blue/theme.css +679 -630
  132. package/dist/primereact/resources/themes/lara-dark-cyan/theme.css +679 -630
  133. package/dist/primereact/resources/themes/lara-dark-green/theme.css +679 -630
  134. package/dist/primereact/resources/themes/lara-dark-indigo/theme.css +679 -630
  135. package/dist/primereact/resources/themes/lara-dark-pink/theme.css +679 -630
  136. package/dist/primereact/resources/themes/lara-dark-purple/theme.css +679 -630
  137. package/dist/primereact/resources/themes/lara-dark-teal/theme.css +679 -630
  138. package/dist/primereact/resources/themes/lara-light-amber/theme.css +776 -725
  139. package/dist/primereact/resources/themes/lara-light-blue/theme.css +1011 -960
  140. package/dist/primereact/resources/themes/lara-light-cyan/theme.css +776 -725
  141. package/dist/primereact/resources/themes/lara-light-green/theme.css +820 -769
  142. package/dist/primereact/resources/themes/lara-light-indigo/theme.css +1016 -965
  143. package/dist/primereact/resources/themes/lara-light-pink/theme.css +776 -725
  144. package/dist/primereact/resources/themes/lara-light-purple/theme.css +1016 -965
  145. package/dist/primereact/resources/themes/lara-light-teal/theme.css +776 -725
  146. package/dist/primereact/resources/themes/luna-amber/theme.css +950 -887
  147. package/dist/primereact/resources/themes/luna-blue/theme.css +950 -887
  148. package/dist/primereact/resources/themes/luna-green/theme.css +950 -887
  149. package/dist/primereact/resources/themes/luna-pink/theme.css +950 -887
  150. package/dist/primereact/resources/themes/md-dark-deeppurple/theme.css +918 -950
  151. package/dist/primereact/resources/themes/md-dark-indigo/theme.css +918 -950
  152. package/dist/primereact/resources/themes/md-light-deeppurple/theme.css +878 -910
  153. package/dist/primereact/resources/themes/md-light-indigo/theme.css +878 -910
  154. package/dist/primereact/resources/themes/mdc-dark-deeppurple/theme.css +918 -950
  155. package/dist/primereact/resources/themes/mdc-dark-indigo/theme.css +918 -950
  156. package/dist/primereact/resources/themes/mdc-light-deeppurple/theme.css +878 -910
  157. package/dist/primereact/resources/themes/mdc-light-indigo/theme.css +878 -910
  158. package/dist/primereact/resources/themes/mira/theme.css +1562 -1532
  159. package/dist/primereact/resources/themes/nano/theme.css +707 -641
  160. package/dist/primereact/resources/themes/nova/theme.css +705 -643
  161. package/dist/primereact/resources/themes/nova-accent/theme.css +701 -636
  162. package/dist/primereact/resources/themes/nova-alt/theme.css +705 -643
  163. package/dist/primereact/resources/themes/rhea/theme.css +876 -811
  164. package/dist/primereact/resources/themes/saga-blue/theme.css +896 -832
  165. package/dist/primereact/resources/themes/saga-green/theme.css +896 -832
  166. package/dist/primereact/resources/themes/saga-orange/theme.css +896 -832
  167. package/dist/primereact/resources/themes/saga-purple/theme.css +896 -832
  168. package/dist/primereact/resources/themes/soho-dark/theme.css +701 -643
  169. package/dist/primereact/resources/themes/soho-light/theme.css +690 -634
  170. package/dist/primereact/resources/themes/tailwind-light/theme.css +1370 -1306
  171. package/dist/primereact/resources/themes/vela-blue/theme.css +862 -798
  172. package/dist/primereact/resources/themes/vela-green/theme.css +862 -798
  173. package/dist/primereact/resources/themes/vela-orange/theme.css +862 -798
  174. package/dist/primereact/resources/themes/vela-purple/theme.css +862 -798
  175. package/dist/primereact/resources/themes/viva-dark/theme.css +655 -612
  176. package/dist/primereact/resources/themes/viva-light/theme.css +737 -694
  177. package/package.json +25 -22
  178. package/types/alpacaContext.d.ts +14 -8
  179. package/types/{components → client-components}/LinkEditor.d.ts +1 -1
  180. package/types/client-components/MultiComponentEditor.d.ts +4 -2
  181. package/types/client-components/index.d.ts +3 -2
  182. package/types/components/Image.d.ts +1 -0
  183. package/types/components/Link.d.ts +1 -0
  184. package/types/components/LinkPreview.d.ts +6 -0
  185. package/types/components/LockedFieldIndicator.d.ts +6 -0
  186. package/types/components/Picture.d.ts +4 -6
  187. package/types/components/PictureEditorWrapper.d.ts +3 -0
  188. package/types/components/Placeholder.d.ts +12 -11
  189. package/types/components/RichText.d.ts +2 -1
  190. package/types/components/RichTextEditor.d.ts +3 -290
  191. package/types/components/RichTextEditorWrapper.d.ts +2 -0
  192. package/types/components/Slot.d.ts +2 -1
  193. package/types/components/Text.d.ts +2 -1
  194. package/types/components/TextEditor.d.ts +3 -290
  195. package/types/components/TextEditorWrapper.d.ts +4 -0
  196. package/types/components/Translate.d.ts +1 -0
  197. package/types/components/picture-shared.d.ts +16 -0
  198. package/types/editor/ComponentInfo.d.ts +1 -1
  199. package/types/editor/ContentTree.d.ts +2 -2
  200. package/types/editor/ContextMenu.d.ts +14 -0
  201. package/types/editor/DictionaryEditor.d.ts +1 -4
  202. package/types/editor/EditFrameWrapper.d.ts +6 -0
  203. package/types/editor/Editor.d.ts +68 -5
  204. package/types/editor/EditorClient.d.ts +17 -5
  205. package/types/editor/EditorClientHost.d.ts +4 -2
  206. package/types/editor/EditorWarning.d.ts +6 -0
  207. package/types/editor/EditorWarnings.d.ts +9 -0
  208. package/types/editor/FieldEditorPopup.d.ts +10 -0
  209. package/types/editor/FieldList.d.ts +6 -2
  210. package/types/editor/FieldListField.d.ts +6 -2
  211. package/types/editor/ItemInfo.d.ts +1 -1
  212. package/types/editor/Outline.d.ts +11 -0
  213. package/types/editor/PageViewer.d.ts +1 -0
  214. package/types/editor/PictureEditorDialog.d.ts +4 -2
  215. package/types/editor/PlaceholderDropZone.d.ts +3 -2
  216. package/types/editor/PlaceholderDropZoneHost.d.ts +3 -2
  217. package/types/editor/PreviewClient.d.ts +4 -0
  218. package/types/editor/PreviewClientHost.d.ts +4 -0
  219. package/types/editor/PreviewPanel.d.ts +1 -0
  220. package/types/editor/PublishDialog.d.ts +7 -0
  221. package/types/editor/Terminal.d.ts +6 -2
  222. package/types/editor/{AiPopup.d.ts → ai/AiPopup.d.ts} +2 -3
  223. package/types/editor/ai/AiResponseMessage.d.ts +7 -0
  224. package/types/editor/ai/AiTerminal.d.ts +4 -0
  225. package/types/editor/ai/AiToolCall.d.ts +9 -0
  226. package/types/editor/commands/commands.d.ts +21 -0
  227. package/types/editor/commands/componentCommands.d.ts +5 -0
  228. package/types/editor/commands/createVersionCommand.d.ts +2 -0
  229. package/types/editor/commands/undo.d.ts +15 -0
  230. package/types/editor/componentTreeHelper.d.ts +2 -1
  231. package/types/editor/config/config.d.ts +2 -0
  232. package/types/editor/editContext.d.ts +70 -93
  233. package/types/editor/editor-warnings/ItemLocked.d.ts +2 -0
  234. package/types/editor/editor-warnings/ValidationErrors.d.ts +2 -0
  235. package/types/editor/fieldTypes/CheckboxEditor.d.ts +3 -2
  236. package/types/editor/fieldTypes/DropLinkEditor.d.ts +5 -0
  237. package/types/editor/fieldTypes/InternalLinkFieldEditor.d.ts +3 -2
  238. package/types/editor/fieldTypes/LinkFieldEditor.d.ts +3 -2
  239. package/types/editor/fieldTypes/MultiLineText.d.ts +3 -2
  240. package/types/editor/fieldTypes/PictureFieldEditor.d.ts +2 -1
  241. package/types/editor/fieldTypes/RawEditor.d.ts +5 -0
  242. package/types/editor/fieldTypes/RichTextEditor.d.ts +4 -3
  243. package/types/editor/fieldTypes/RichTextEditorComponent.d.ts +5 -0
  244. package/types/editor/fieldTypes/SingleLineText.d.ts +3 -2
  245. package/types/editor/fieldTypes/TreeListEditor.d.ts +2 -1
  246. package/types/editor/index.d.ts +2 -0
  247. package/types/editor/itemCommands.d.ts +3 -0
  248. package/types/editor/menubar/BrowseHistory.d.ts +4 -0
  249. package/types/editor/menubar/ItemLanguageVersion.d.ts +1 -0
  250. package/types/editor/menubar/LanguageSelector.d.ts +5 -0
  251. package/types/editor/menubar/Menu.d.ts +1 -0
  252. package/types/editor/menubar/PageViewerControls.d.ts +1 -0
  253. package/types/editor/menubar/VersionSelector.d.ts +5 -0
  254. package/types/editor/previewContext.d.ts +4 -0
  255. package/types/editor/{contentService.d.ts → services/contentService.d.ts} +2 -3
  256. package/types/editor/services/editService.d.ts +27 -0
  257. package/types/editor/sidebar/ComponentPalette.d.ts +1 -0
  258. package/types/editor/sidebar/ComponentTree.d.ts +1 -0
  259. package/types/editor/sidebar/Debug.d.ts +1 -0
  260. package/types/editor/sidebar/EditHistory.d.ts +1 -0
  261. package/types/editor/sidebar/EditorForm.d.ts +1 -0
  262. package/types/editor/sidebar/GraphQL.d.ts +1 -0
  263. package/types/editor/sidebar/Insert.d.ts +1 -0
  264. package/types/editor/sidebar/MainContentTree.d.ts +3 -0
  265. package/types/editor/sidebar/Sessions.d.ts +1 -0
  266. package/types/editor/sidebar/Sidebar.d.ts +4 -0
  267. package/types/editor/sidebar/SidebarView.d.ts +8 -0
  268. package/types/editor/sidebar/Workbox.d.ts +1 -0
  269. package/types/editor/ui/CopyToClipboardButton.d.ts +3 -0
  270. package/types/editor/ui/Icons.d.ts +16 -0
  271. package/types/editor/utils/insertOptions.d.ts +3 -0
  272. package/types/editor/utils.d.ts +8 -0
  273. package/types/editor/views/ItemEditor.d.ts +1 -0
  274. package/types/fieldTypes.d.ts +39 -11
  275. package/types/graphQL.d.ts +12 -0
  276. package/types/index.d.ts +4 -3
  277. package/types/loadRouteData.d.ts +7 -85
  278. package/types/middleware/handleRequest.d.ts +5 -0
  279. package/types/middleware/index.d.ts +1 -1
  280. package/types/servertypes.d.ts +306 -0
  281. package/dist/cjs/alpacaContext.js +0 -12
  282. package/dist/cjs/client-components/ClientLink.js +0 -36
  283. package/dist/cjs/client-components/MultiComponentEditor.js +0 -26
  284. package/dist/cjs/client-components/index.js +0 -19
  285. package/dist/cjs/components/Error.js +0 -15
  286. package/dist/cjs/components/Link.js +0 -36
  287. package/dist/cjs/components/Picture.js +0 -124
  288. package/dist/cjs/components/PictureEditor.js +0 -49
  289. package/dist/cjs/components/Placeholder.js +0 -118
  290. package/dist/cjs/components/RichText.js +0 -47
  291. package/dist/cjs/components/RichTextEditor.js +0 -94
  292. package/dist/cjs/components/Slot.js +0 -8
  293. package/dist/cjs/components/Text.js +0 -46
  294. package/dist/cjs/components/TextEditor.js +0 -77
  295. package/dist/cjs/components/Translate.js +0 -14
  296. package/dist/cjs/components/TranslateEditor.js +0 -28
  297. package/dist/cjs/components/index.js +0 -23
  298. package/dist/cjs/editor/AiPopup.js +0 -33
  299. package/dist/cjs/editor/ComponentInfo.js +0 -15
  300. package/dist/cjs/editor/ComponentPalette.js +0 -23
  301. package/dist/cjs/editor/ComponentTree.js +0 -217
  302. package/dist/cjs/editor/ConfirmationDialog.js +0 -31
  303. package/dist/cjs/editor/Debug.js +0 -26
  304. package/dist/cjs/editor/DialogButtons.js +0 -7
  305. package/dist/cjs/editor/DictionaryEditor.js +0 -41
  306. package/dist/cjs/editor/EditFrame.js +0 -129
  307. package/dist/cjs/editor/EditHistory.js +0 -43
  308. package/dist/cjs/editor/Editor.js +0 -27
  309. package/dist/cjs/editor/EditorClient.js +0 -753
  310. package/dist/cjs/editor/EditorClientHost.js +0 -37
  311. package/dist/cjs/editor/FieldList.js +0 -51
  312. package/dist/cjs/editor/FieldListField.js +0 -75
  313. package/dist/cjs/editor/GraphQL.js +0 -87
  314. package/dist/cjs/editor/ItemEditor.js +0 -9
  315. package/dist/cjs/editor/ItemInfo.js +0 -17
  316. package/dist/cjs/editor/ItemNameDialog.js +0 -37
  317. package/dist/cjs/editor/LanguageSelector.js +0 -21
  318. package/dist/cjs/editor/LinkEditorDialog.js +0 -67
  319. package/dist/cjs/editor/MainLayout.js +0 -24
  320. package/dist/cjs/editor/MediaSelector.js +0 -92
  321. package/dist/cjs/editor/PictureEditorDialog.js +0 -93
  322. package/dist/cjs/editor/PlaceholderDropZone.js +0 -93
  323. package/dist/cjs/editor/PlaceholderDropZoneHost.js +0 -37
  324. package/dist/cjs/editor/SidebarTabs.js +0 -47
  325. package/dist/cjs/editor/Terminal.js +0 -61
  326. package/dist/cjs/editor/Utils.js +0 -43
  327. package/dist/cjs/editor/VersionSelector.js +0 -21
  328. package/dist/cjs/editor/Workbox.js +0 -41
  329. package/dist/cjs/editor/componentCommands.js +0 -141
  330. package/dist/cjs/editor/componentTreeHelper.js +0 -18
  331. package/dist/cjs/editor/contentService.js +0 -80
  332. package/dist/cjs/editor/editContext.js +0 -40
  333. package/dist/cjs/editor/editService.js +0 -334
  334. package/dist/cjs/editor/fieldTypes/CheckboxEditor.js +0 -21
  335. package/dist/cjs/editor/fieldTypes/InternalLinkFieldEditor.js +0 -46
  336. package/dist/cjs/editor/fieldTypes/MultiLineText.js +0 -25
  337. package/dist/cjs/editor/fieldTypes/PictureFieldEditor.js +0 -19
  338. package/dist/cjs/editor/fieldTypes/RichTextEditor.js +0 -24
  339. package/dist/cjs/editor/fieldTypes/SingleLineText.js +0 -25
  340. package/dist/cjs/editor/fieldTypes/TreeListEditor.js +0 -59
  341. package/dist/cjs/editor/index.js +0 -18
  342. package/dist/cjs/editor/ui/Section.js +0 -8
  343. package/dist/cjs/fieldTypes.js +0 -2
  344. package/dist/cjs/graphQLTypes.js +0 -2
  345. package/dist/cjs/index.js +0 -36
  346. package/dist/cjs/layoutData.js +0 -2
  347. package/dist/cjs/middleware/authorization.js +0 -52
  348. package/dist/cjs/middleware/index.js +0 -17
  349. package/types/editor/AiTerminal.d.ts +0 -5
  350. package/types/editor/ComponentPalette.d.ts +0 -6
  351. package/types/editor/ComponentTree.d.ts +0 -5
  352. package/types/editor/Debug.d.ts +0 -6
  353. package/types/editor/EditHistory.d.ts +0 -4
  354. package/types/editor/GraphQL.d.ts +0 -5
  355. package/types/editor/ItemEditor.d.ts +0 -4
  356. package/types/editor/LanguageSelector.d.ts +0 -5
  357. package/types/editor/SidebarTabs.d.ts +0 -8
  358. package/types/editor/Utils.d.ts +0 -3
  359. package/types/editor/VersionSelector.d.ts +0 -5
  360. package/types/editor/Workbox.d.ts +0 -6
  361. package/types/editor/componentCommands.d.ts +0 -4
  362. package/types/editor/editService.d.ts +0 -20
  363. package/types/layoutData.d.ts +0 -92
  364. package/types/middleware/authorization.d.ts +0 -2
@@ -0,0 +1,877 @@
1
+ "use client";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
12
+ import React, { useState, useEffect, useRef, useCallback, } from "react";
13
+ import uuid from "react-uuid";
14
+ import { PrimeReactProvider } from "primereact/api";
15
+ import { ProgressSpinner } from "primereact/progressspinner";
16
+ import { Toast } from "primereact/toast";
17
+ import { BlockUI } from "primereact/blockui";
18
+ import { ConfirmDialog } from "primereact/confirmdialog";
19
+ import { EditContextProvider, } from ".";
20
+ import { useRouter, useSearchParams, usePathname } from "next/navigation";
21
+ import { findComponent, getComponentById } from "./componentTreeHelper";
22
+ import { executeRedo, executeUndo, executeEditOperation, createVersion, executeWorkflowCommand, executeFieldAction, validateItems, connectSocket, lockField, lockItems, unlockItems, getEditHistory, releaseFieldLocks, } from "./services/editService";
23
+ import "../../editor.css";
24
+ import "../../primeicons/primeicons.css";
25
+ import "../../primereact/resources/themes/md-light-indigo/theme.css";
26
+ import "react-json-view-lite/dist/index.css";
27
+ import { MediaSelector } from "./MediaSelector";
28
+ import { getComponentCommands } from "./commands/componentCommands";
29
+ import { getItem } from "./services/contentService";
30
+ import ConfirmationDialog from "./ConfirmationDialog";
31
+ import MainLayout from "./MainLayout";
32
+ import { getItemDescriptor, getSelectedText, useEventListenerExt, } from "./utils";
33
+ import { PublishDialog } from "./PublishDialog";
34
+ import { EditContextMenu } from "./ContextMenu";
35
+ import { FieldEditorPopup } from "./FieldEditorPopup";
36
+ import { Sidebar } from "./sidebar/Sidebar";
37
+ import { Menu } from "./menubar/Menu";
38
+ import { AiPopup } from "./ai/AiPopup";
39
+ export function EditorClient({ page, dictionaryObject, editData, children, configuration, }) {
40
+ var _a, _b;
41
+ const router = useRouter();
42
+ const pathname = usePathname();
43
+ const searchParams = useSearchParams();
44
+ const [selection, setSelection] = useState([]);
45
+ const [selectedForInsertion, setSelectedForInsertion] = useState("");
46
+ const [currentEditOperation, setCurrentEditOperation] = useState();
47
+ const [dictionary, setDictionary] = useState(dictionaryObject);
48
+ const [unresolvedDictionaryKeys, setUnresolvedDictionaryKeys] = useState([]);
49
+ const [refreshCompletedFlag, setRefreshCompletedFlag] = useState(false);
50
+ //const [refreshing, setRefreshing] = useState(false);
51
+ const [updateContentEditingFields, setUpdateContentEditingFields] = useState(false);
52
+ const [dragObject, setDragObject] = useState();
53
+ const [refreshTimer, setRefreshTimer] = useState();
54
+ const [mediaResolver, setMediaResolver] = useState();
55
+ const [mediaSelectorVisible, setMediaSelectorVisible] = useState(false);
56
+ const [selectedMediaIdPath, setSelectedMediaIdPath] = useState("");
57
+ const [scrollIntoView, setScrollIntoView] = useState();
58
+ const [nextSelection, setNextSelection] = useState();
59
+ const [zoom, setZoom] = useState(1);
60
+ const [device, setDevice] = useState("desktop");
61
+ const [windowSize, setWindowSize] = useState();
62
+ const confirmationDialogRef = useRef(null);
63
+ const contextMenuRef = useRef(null);
64
+ const [secondaryItem, setSecondaryItem] = useState();
65
+ const [focusedField, setFocusedField] = useState();
66
+ const [fullscreen, setFullscreen] = useState(false);
67
+ const [scroll, setScroll] = useState(0);
68
+ const [viewportRect, setViewportRect] = React.useState({
69
+ width: 0,
70
+ height: 0,
71
+ });
72
+ const editorContainerRef = useRef(null);
73
+ const [showFullscreenHint, setShowFullscreenHint] = useState(false);
74
+ const [showPublishDialog, setShowPublishDialog] = useState(false);
75
+ const [activeFieldActions, setActiveFieldActions] = useState([]);
76
+ const [renderedFields, setRenderedFields] = useState([]);
77
+ const aiPopupRef = React.useRef(null);
78
+ const fieldEditorPopupRef = React.useRef(null);
79
+ const [pageValidationResult, setPageValidationResult] = useState();
80
+ const [editHistory, setEditHistory] = useState([]);
81
+ const sessionId = sessionStorage.getItem("sessionId") || uuid();
82
+ const [activeSessions, setActiveSessions] = useState([]);
83
+ sessionStorage.setItem("sessionId", sessionId);
84
+ const [view, setView] = useState(configuration.chrome.editor.views[0]);
85
+ const [centerPanelView, setCenterPanelView] = useState("edit");
86
+ const validate = () => __awaiter(this, void 0, void 0, function* () {
87
+ if (page._editor.workbox.items.length === 0)
88
+ return;
89
+ const result = yield validateItems(page._editor.workbox.items.map((x) => x.item), sessionId);
90
+ if (result.type === "success")
91
+ setPageValidationResult(yield result.response.json());
92
+ });
93
+ useEffect(() => {
94
+ validate();
95
+ }, [page._editor.workbox]);
96
+ const sendClientInfo = () => {
97
+ const socket = globalThis.editorSocket;
98
+ if (socket.readyState !== WebSocket.OPEN)
99
+ return;
100
+ socket.send(JSON.stringify({
101
+ type: "client-info",
102
+ sessionId: sessionId,
103
+ url: window.location.href,
104
+ userAgent: navigator.userAgent,
105
+ page: getPageItemDescriptor(),
106
+ item: secondaryItem ? getItemDescriptor(secondaryItem) : null,
107
+ }));
108
+ };
109
+ const messageHandler = useCallback((event) => {
110
+ if (!event.data.startsWith("{"))
111
+ return;
112
+ const message = JSON.parse(event.data);
113
+ if (message.type === "active-sessions") {
114
+ setActiveSessions(() => {
115
+ return message.payload;
116
+ });
117
+ }
118
+ if (message.type === "edit-operation") {
119
+ const op = message.payload;
120
+ if (op.type === "edit-field") {
121
+ const editFieldOperation = op;
122
+ const liveField = getLiveFieldIfExists({
123
+ item: editFieldOperation.item,
124
+ fieldId: editFieldOperation.fieldId,
125
+ });
126
+ if (liveField) {
127
+ liveField.value = editFieldOperation.value;
128
+ liveField.rawValue = editFieldOperation.value;
129
+ setSelection([...selection]);
130
+ }
131
+ }
132
+ else
133
+ requestRefresh("waitForQuietPeriod");
134
+ addToEditHistory(op);
135
+ loadHistory(secondaryItem || page);
136
+ }
137
+ }, []);
138
+ useEffect(() => {
139
+ if (view.centerPanelView) {
140
+ setCenterPanelView(view.centerPanelView);
141
+ }
142
+ }, [view]);
143
+ useEffect(() => {
144
+ let socket = globalThis.editorSocket;
145
+ if (socket &&
146
+ (socket.readyState === WebSocket.OPEN ||
147
+ socket.readyState === WebSocket.CONNECTING))
148
+ return;
149
+ socket = connectSocket(sessionId);
150
+ // Connection opened
151
+ socket.addEventListener("open", () => {
152
+ console.log("Connected!");
153
+ sendClientInfo();
154
+ requestRefresh("immediate");
155
+ });
156
+ // Listen for messages
157
+ socket.addEventListener("message", messageHandler);
158
+ globalThis.editorSocket = socket;
159
+ }, []);
160
+ if (!globalThis.editorLiveUpdatingFields)
161
+ globalThis.editorLiveUpdatingFields = [];
162
+ function loadUrl(url) {
163
+ //setRefreshing(true);
164
+ releaseFieldLocks(sessionId);
165
+ router.push(url, { scroll: false });
166
+ }
167
+ function switchLanguage(language) {
168
+ return __awaiter(this, void 0, void 0, function* () {
169
+ const current = new URLSearchParams(Array.from(searchParams.entries()));
170
+ current.set("language", language);
171
+ current.delete("version");
172
+ const newUrl = `${pathname}?${current.toString()}`;
173
+ loadUrl(newUrl);
174
+ });
175
+ }
176
+ function switchVersion(version) {
177
+ return __awaiter(this, void 0, void 0, function* () {
178
+ const current = new URLSearchParams(Array.from(searchParams.entries()));
179
+ current.set("version", version.toString());
180
+ const newUrl = `${pathname}?${current.toString()}`;
181
+ loadUrl(newUrl);
182
+ });
183
+ }
184
+ function navigateToPage(pageId) {
185
+ return __awaiter(this, void 0, void 0, function* () {
186
+ console.log("navigate to page: " + pageId);
187
+ const current = new URLSearchParams(Array.from(searchParams.entries()));
188
+ current.set("itemid", pageId);
189
+ current.delete("version");
190
+ const newUrl = `${pathname}?${current.toString()}`;
191
+ setNextSelection([]);
192
+ setSecondaryItem(undefined);
193
+ loadUrl(newUrl);
194
+ });
195
+ }
196
+ function createAndSwitchToNewVersion() {
197
+ return __awaiter(this, void 0, void 0, function* () {
198
+ yield createVersion(getPageItemDescriptor(), sessionId);
199
+ const current = new URLSearchParams(Array.from(searchParams.entries()));
200
+ current.delete("version");
201
+ const newUrl = `${pathname}?${current.toString()}`;
202
+ router.push(newUrl, { scroll: false });
203
+ });
204
+ }
205
+ function loadItem(itemToLoad) {
206
+ return __awaiter(this, void 0, void 0, function* () {
207
+ if (itemToLoad.hasLayout) {
208
+ if (itemToLoad.id !== page.id) {
209
+ navigateToPage(itemToLoad.id);
210
+ return;
211
+ }
212
+ if (itemToLoad.language !== page.language) {
213
+ switchLanguage(itemToLoad.language);
214
+ return;
215
+ }
216
+ switchVersion(itemToLoad.version);
217
+ return;
218
+ }
219
+ const result = yield getItem(itemToLoad, sessionId);
220
+ setSecondaryItem(result);
221
+ setSelection([]);
222
+ setEditHistory([]);
223
+ loadHistory(itemToLoad);
224
+ });
225
+ }
226
+ function handleErrorResult(result) {
227
+ var _a;
228
+ if (result.type === "error") {
229
+ showErrorToast(result);
230
+ return true;
231
+ }
232
+ if (result.type === "unauthenticated") {
233
+ (_a = confirmationDialogRef.current) === null || _a === void 0 ? void 0 : _a.confirm({
234
+ header: "Not logged in",
235
+ message: "You are not logged in anymore. Proceed to login page?",
236
+ accept: () => {
237
+ window.location.href = editData.loginUrl;
238
+ },
239
+ });
240
+ showErrorToast(result);
241
+ return true;
242
+ }
243
+ }
244
+ useEffect(() => {
245
+ if (selection.length)
246
+ setSelectedForInsertion("");
247
+ }, [selection]);
248
+ const addToEditHistory = (currentEditOperation) => {
249
+ setEditHistory((history) => {
250
+ const existing = history.find((x) => x.id == currentEditOperation.id);
251
+ if (!existing)
252
+ return [currentEditOperation, ...history];
253
+ else {
254
+ existing.date = currentEditOperation.date;
255
+ return history;
256
+ }
257
+ });
258
+ };
259
+ const handleResult = (result) => {
260
+ if (handleErrorResult(result))
261
+ return;
262
+ if (result.type == "move-component" ||
263
+ result.type === "add-component" ||
264
+ result.type === "link-component" ||
265
+ result.type === "duplicate-components") {
266
+ setNextSelection(result.components.map((x) => x.id));
267
+ requestRefresh("immediate");
268
+ return;
269
+ }
270
+ };
271
+ useEffect(() => {
272
+ const sync = () => __awaiter(this, void 0, void 0, function* () {
273
+ if (currentEditOperation) {
274
+ const result = yield executeEditOperation(currentEditOperation, sessionId);
275
+ addToEditHistory(currentEditOperation);
276
+ handleResult(result);
277
+ if (!currentEditOperation.noRefresh)
278
+ requestRefresh(currentEditOperation.refreshAfterQuietPeriod
279
+ ? "waitForQuietPeriod"
280
+ : "immediate");
281
+ }
282
+ });
283
+ sync();
284
+ }, [currentEditOperation]);
285
+ const ensureLock = (field) => __awaiter(this, void 0, void 0, function* () {
286
+ var _c;
287
+ if (!field || !field.item)
288
+ return;
289
+ const result = yield lockField(field.item, field.fieldId, sessionId);
290
+ const status = yield ((_c = result.response) === null || _c === void 0 ? void 0 : _c.json());
291
+ if (status.success) {
292
+ const existingField = getLiveFieldIfExists(field);
293
+ if (!existingField)
294
+ return;
295
+ updateLockedBy(existingField);
296
+ return true;
297
+ }
298
+ else {
299
+ toast.current.show({
300
+ severity: "error",
301
+ summary: "Could not lock field",
302
+ detail: status.error,
303
+ life: 3000,
304
+ });
305
+ return false;
306
+ }
307
+ });
308
+ const lockItemsAndRefresh = (items) => __awaiter(this, void 0, void 0, function* () {
309
+ yield lockItems(items);
310
+ if (items.length == 1 && items[0].id == (secondaryItem === null || secondaryItem === void 0 ? void 0 : secondaryItem.id)) {
311
+ yield loadItem(items[0]);
312
+ }
313
+ else
314
+ requestRefresh("immediate");
315
+ });
316
+ const unlockItemsAndRefresh = (items) => __awaiter(this, void 0, void 0, function* () {
317
+ yield unlockItems(items);
318
+ if (items.length == 1 && items[0].id == (secondaryItem === null || secondaryItem === void 0 ? void 0 : secondaryItem.id)) {
319
+ yield loadItem(items[0]);
320
+ }
321
+ else
322
+ requestRefresh("immediate");
323
+ });
324
+ const executeWorkflowCommandAndRefresh = (item, commandId) => __awaiter(this, void 0, void 0, function* () {
325
+ yield executeWorkflowCommand(item, commandId, "");
326
+ requestRefresh("immediate");
327
+ });
328
+ useEffect(() => {
329
+ if (focusedField === null || focusedField === void 0 ? void 0 : focusedField.item) {
330
+ if (!getComponentById(focusedField.item.id, page))
331
+ loadItem(focusedField.item);
332
+ }
333
+ }, [focusedField]);
334
+ const addParentComponentReferencesToPlaceholders = (component) => {
335
+ component.placeholders.forEach((p) => {
336
+ p.parentComponent = component;
337
+ p.components.forEach((c) => {
338
+ c._editor.placeholderReference = p;
339
+ addParentComponentReferencesToPlaceholders(c);
340
+ });
341
+ });
342
+ };
343
+ useEffect(() => {
344
+ var _a, _b;
345
+ setRefreshCompletedFlag(!refreshCompletedFlag);
346
+ page.hasLayout = true;
347
+ if (nextSelection) {
348
+ setSelection(nextSelection);
349
+ setNextSelection(undefined);
350
+ }
351
+ globalThis.editorLiveUpdatingFields = [];
352
+ addParentComponentReferencesToPlaceholders(page);
353
+ if (((_a = page === null || page === void 0 ? void 0 : page._editor) === null || _a === void 0 ? void 0 : _a.versions.length) === 0) {
354
+ (_b = confirmationDialogRef.current) === null || _b === void 0 ? void 0 : _b.confirm({
355
+ message: "This page has no version in language " +
356
+ (page === null || page === void 0 ? void 0 : page.language) +
357
+ ". Do you want to create a new version?",
358
+ header: "Create Version?",
359
+ icon: "pi pi-exclamation-triangle",
360
+ acceptLabel: "Yes, create version",
361
+ rejectLabel: "No",
362
+ accept: () => createAndSwitchToNewVersion(),
363
+ });
364
+ }
365
+ loadHistory(page);
366
+ sendClientInfo();
367
+ }, [page]);
368
+ function loadHistory(item) {
369
+ return __awaiter(this, void 0, void 0, function* () {
370
+ const operations = yield getEditHistory(item);
371
+ setEditHistory(operations);
372
+ });
373
+ }
374
+ const requestRefresh = (mode) => {
375
+ const doRefresh = () => {
376
+ clearTimeout(refreshTimer);
377
+ //setRefreshing(true);
378
+ if (secondaryItem)
379
+ loadItem(secondaryItem);
380
+ router.refresh();
381
+ setRefreshTimer(undefined);
382
+ };
383
+ if (mode === "immediate") {
384
+ console.log("Immediate refresh requested");
385
+ doRefresh();
386
+ return;
387
+ }
388
+ console.log("request refresh with mode: " + mode);
389
+ if (mode === "waitForQuietPeriod" && refreshTimer) {
390
+ clearTimeout(refreshTimer);
391
+ }
392
+ if (!refreshTimer || mode === "waitForQuietPeriod") {
393
+ setRefreshTimer(setTimeout(() => {
394
+ console.log("refreshing");
395
+ doRefresh();
396
+ }, mode === "waitForQuietPeriod" ? 1200 : 700));
397
+ }
398
+ };
399
+ useEffect(() => {
400
+ if (fullscreen)
401
+ setShowFullscreenHint(true);
402
+ }, [fullscreen]);
403
+ // function requestPageLock(page: Item) {
404
+ // if (page.lockedBy) {
405
+ // const message =
406
+ // "This page is currently locked by " +
407
+ // page.lockedBy +
408
+ // ". Do you want to take over the lock and edit the page?";
409
+ // confirmationDialogRef.current?.confirm({
410
+ // message: message,
411
+ // header: "Take over lock?",
412
+ // icon: "pi pi-exclamation-triangle",
413
+ // acceptLabel: "Yes, take over lock",
414
+ // showCancel: true,
415
+ // accept: () => {
416
+ // lockItemsAndRefresh([getItemDescriptor(page)]);
417
+ // },
418
+ // });
419
+ // } else {
420
+ // confirmationDialogRef.current?.confirm({
421
+ // message: "Do you want to lock and edit this page?",
422
+ // header: "Lock page",
423
+ // icon: "pi pi-exclamation-triangle",
424
+ // acceptLabel: "Lock end edit page",
425
+ // showCancel: true,
426
+ // accept: () => lockItemsAndRefresh([getItemDescriptor(page)]),
427
+ // reject: () => {},
428
+ // });
429
+ // }
430
+ // }
431
+ function handleKeyDown(event) {
432
+ return __awaiter(this, void 0, void 0, function* () {
433
+ if (event.ctrlKey && event.key === "z") {
434
+ event.preventDefault();
435
+ yield undo();
436
+ }
437
+ if (event.ctrlKey && event.key === "y") {
438
+ event.preventDefault();
439
+ yield redo();
440
+ }
441
+ if (event.ctrlKey && event.key === "F11") {
442
+ event.preventDefault();
443
+ setFullscreen(!fullscreen);
444
+ }
445
+ });
446
+ }
447
+ useEffect(() => {
448
+ setWindowSize({ width: window.innerWidth, height: window.innerHeight });
449
+ }, []);
450
+ if (typeof window !== "undefined")
451
+ useEventListenerExt("keydown", handleKeyDown, window);
452
+ useEventListenerExt("resize", () => {
453
+ setWindowSize({ width: window.innerWidth, height: window.innerHeight });
454
+ }, window);
455
+ useEventListenerExt("click", () => {
456
+ var _a;
457
+ (_a = contextMenuRef.current) === null || _a === void 0 ? void 0 : _a.close({});
458
+ }, window, true);
459
+ const toast = useRef();
460
+ useEffect(() => {
461
+ var _a;
462
+ const rect = (_a = editorContainerRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
463
+ if (rect)
464
+ setViewportRect({ width: rect.width, height: rect.height });
465
+ }, [windowSize]);
466
+ function redo() {
467
+ return __awaiter(this, void 0, void 0, function* () {
468
+ setUpdateContentEditingFields(!updateContentEditingFields);
469
+ let result = yield executeRedo(sessionId, secondaryItem || page);
470
+ handleResult(result);
471
+ if (result.type === "success") {
472
+ router.refresh();
473
+ //setRefreshing(true);
474
+ return true;
475
+ }
476
+ else {
477
+ showErrorToast(result);
478
+ return false;
479
+ }
480
+ });
481
+ }
482
+ function showErrorToast(result) {
483
+ toast.current.show({
484
+ severity: "error",
485
+ summary: result.summary,
486
+ detail: result.details,
487
+ life: 3000,
488
+ });
489
+ }
490
+ function undo(numOperations) {
491
+ return __awaiter(this, void 0, void 0, function* () {
492
+ setUpdateContentEditingFields(!updateContentEditingFields);
493
+ let result = yield executeUndo(sessionId, secondaryItem || page, numOperations);
494
+ if (result.type === "success") {
495
+ router.refresh();
496
+ //setRefreshing(true);
497
+ setCurrentEditOperation(undefined);
498
+ return true;
499
+ }
500
+ else {
501
+ showErrorToast(result);
502
+ return false;
503
+ }
504
+ });
505
+ }
506
+ const getLiveFieldIfExists = (field) => {
507
+ const liveUpdatingFields = globalThis.editorLiveUpdatingFields;
508
+ const existingField = liveUpdatingFields.find((f) => {
509
+ var _a, _b, _c, _d, _e, _f, _g;
510
+ return ((_a = f._editor) === null || _a === void 0 ? void 0 : _a.descriptor.fieldId) === field.fieldId &&
511
+ ((_c = (_b = f._editor) === null || _b === void 0 ? void 0 : _b.descriptor.item) === null || _c === void 0 ? void 0 : _c.language) === field.item.language &&
512
+ ((_e = (_d = f._editor) === null || _d === void 0 ? void 0 : _d.descriptor.item) === null || _e === void 0 ? void 0 : _e.version) === field.item.version &&
513
+ ((_g = (_f = f._editor) === null || _f === void 0 ? void 0 : _f.descriptor.item) === null || _g === void 0 ? void 0 : _g.id) === field.item.id;
514
+ });
515
+ if (!existingField)
516
+ return null;
517
+ updateLockedBy(existingField);
518
+ return existingField;
519
+ };
520
+ const getLiveField = (field) => {
521
+ if (!field._editor)
522
+ return field;
523
+ const descriptor = field._editor.descriptor;
524
+ const liveUpdatingFields = globalThis.editorLiveUpdatingFields;
525
+ let liveField = liveUpdatingFields.find((f) => {
526
+ var _a, _b, _c, _d, _e, _f, _g;
527
+ return ((_a = f._editor) === null || _a === void 0 ? void 0 : _a.descriptor.fieldId) === descriptor.fieldId &&
528
+ ((_c = (_b = f._editor) === null || _b === void 0 ? void 0 : _b.descriptor.item) === null || _c === void 0 ? void 0 : _c.language) === descriptor.item.language &&
529
+ ((_e = (_d = f._editor) === null || _d === void 0 ? void 0 : _d.descriptor.item) === null || _e === void 0 ? void 0 : _e.version) === descriptor.item.version &&
530
+ ((_g = (_f = f._editor) === null || _f === void 0 ? void 0 : _f.descriptor.item) === null || _g === void 0 ? void 0 : _g.id) === descriptor.item.id;
531
+ });
532
+ if (!liveField) {
533
+ var component = findComponent(field._editor.descriptor.item.id, page.placeholders);
534
+ if (component) {
535
+ const existingField = Object.values(component.fields).find((f) => f.id === field.id);
536
+ if (existingField)
537
+ field = existingField;
538
+ }
539
+ liveUpdatingFields.push(field);
540
+ liveField = field;
541
+ }
542
+ updateLockedBy(liveField);
543
+ return liveField;
544
+ };
545
+ const editField = ({ field, value, rawValue, refresh = "immediate", }) => {
546
+ if (!page)
547
+ return;
548
+ setCurrentEditOperation((op) => {
549
+ const newOp = getEditOP(op, field, refresh, rawValue, value);
550
+ return Object.assign({}, newOp);
551
+ });
552
+ };
553
+ const selectMedia = useCallback(({ selectedIdPath }) => {
554
+ setSelectedMediaIdPath(selectedIdPath);
555
+ setMediaSelectorVisible(true);
556
+ return new Promise((resolve) => {
557
+ setMediaResolver(() => resolve);
558
+ });
559
+ }, []);
560
+ const onMediaSelect = useCallback((mediaUrl) => {
561
+ mediaResolver === null || mediaResolver === void 0 ? void 0 : mediaResolver(mediaUrl);
562
+ setMediaSelectorVisible(false);
563
+ setMediaResolver(undefined);
564
+ }, [mediaResolver]);
565
+ function getEditOP(currentOp, field, refresh, rawValue, value) {
566
+ var _a;
567
+ const fieldItem = field._editor.descriptor.item;
568
+ const component = findComponent(fieldItem.id, page.placeholders);
569
+ let op = currentOp;
570
+ if (!op ||
571
+ op.undone ||
572
+ op.type !== "edit-field" ||
573
+ op.item.id !== fieldItem.id ||
574
+ op.fieldId !== field.id ||
575
+ op.item.language !== fieldItem.language ||
576
+ op.item.version !== fieldItem.version) {
577
+ op = {
578
+ type: "edit-field",
579
+ item: {
580
+ id: fieldItem.id,
581
+ version: fieldItem.version,
582
+ language: fieldItem.language,
583
+ name: fieldItem.id == page.id ? "Page" : (_a = component === null || component === void 0 ? void 0 : component.name) !== null && _a !== void 0 ? _a : "<unknown>",
584
+ },
585
+ fieldId: field.id,
586
+ fieldName: field._editor.name,
587
+ pageItem: getPageItemDescriptor(),
588
+ date: new Date().toISOString(),
589
+ id: uuid(),
590
+ description: "Edit " + field._editor.name,
591
+ focus: fieldItem.id + ":" + field.id,
592
+ };
593
+ }
594
+ op.date = new Date().toISOString();
595
+ op.noRefresh = refresh === "none";
596
+ op.refreshAfterQuietPeriod = refresh === "waitForQuietPeriod";
597
+ op.value = rawValue !== null && rawValue !== void 0 ? rawValue : value;
598
+ const firstEditInheritedComponent = (component === null || component === void 0 ? void 0 : component._editor.isInheritedFromMasterLanguage) &&
599
+ op.item.language != page.language;
600
+ if (firstEditInheritedComponent)
601
+ op.item.language = page.language;
602
+ if (value || value === "") {
603
+ const liveField = getLiveField(field);
604
+ liveField.value = value;
605
+ liveField.rawValue = op.value;
606
+ }
607
+ return op;
608
+ }
609
+ function updateLockedBy(existingField) {
610
+ const fieldItem = existingField._editor.descriptor.item;
611
+ const lockedBy = activeSessions.find((x) => {
612
+ var _a, _b, _c, _d;
613
+ return ((_a = x.fieldLock) === null || _a === void 0 ? void 0 : _a.item.id) === fieldItem.id &&
614
+ ((_b = x.fieldLock) === null || _b === void 0 ? void 0 : _b.item.language) === fieldItem.language &&
615
+ ((_c = x.fieldLock) === null || _c === void 0 ? void 0 : _c.item.version) === fieldItem.version &&
616
+ ((_d = x.fieldLock) === null || _d === void 0 ? void 0 : _d.fieldId) === existingField.id;
617
+ });
618
+ if (existingField._editor)
619
+ existingField._editor.lockedBy = lockedBy;
620
+ }
621
+ function getPageItemDescriptor() {
622
+ return getItemDescriptor(page);
623
+ }
624
+ function addComponent(templateId, templateName, placeholderName, index, parentId) {
625
+ const op = {
626
+ type: "add-component",
627
+ pageItem: getPageItemDescriptor(),
628
+ parent: parentId && {
629
+ id: parentId,
630
+ language: page.language,
631
+ version: page.version,
632
+ },
633
+ placeholderName: placeholderName,
634
+ placeholderIndex: index,
635
+ templateId: templateId,
636
+ date: new Date().toISOString(),
637
+ id: uuid(),
638
+ description: "Add " + templateName,
639
+ };
640
+ setCurrentEditOperation(op);
641
+ }
642
+ const editContext = {
643
+ configuration,
644
+ item: centerPanelView == "form" ? secondaryItem || page : page,
645
+ renderedPage: children,
646
+ sessionId: sessionId,
647
+ readonly: !page._editor.hasLock,
648
+ selection,
649
+ select: (ids) => {
650
+ setView(configuration.chrome.editor.views.find((x) => x.name == "edit"));
651
+ setSelection(ids);
652
+ setSecondaryItem(undefined);
653
+ },
654
+ selectedForInsertion,
655
+ setSelectedForInsertion,
656
+ editField,
657
+ dragObject,
658
+ dictionary,
659
+ setDictionary,
660
+ requestRefresh,
661
+ refreshCompletedFlag,
662
+ unresolvedDictionaryKeys,
663
+ setUnresolvedDictionaryKeys,
664
+ updateContentEditingFields,
665
+ getLiveField,
666
+ getLiveFieldIfExists,
667
+ selectMedia,
668
+ showToast: (message) => {
669
+ toast.current.show(message);
670
+ },
671
+ scrollIntoView,
672
+ setScrollIntoView,
673
+ focusedField,
674
+ setFocusedField: (field, requestLock) => {
675
+ if (field)
676
+ setFocusedField(Object.assign({}, field));
677
+ else
678
+ setFocusedField(undefined);
679
+ if (field && requestLock)
680
+ ensureLock(field);
681
+ if (!field)
682
+ releaseFieldLocks(sessionId);
683
+ },
684
+ undo,
685
+ redo,
686
+ renderedFields,
687
+ registerAsRenderedField: (field) => {
688
+ setRenderedFields((prev) => {
689
+ if (!field._editor ||
690
+ prev.find((x) => {
691
+ var _a;
692
+ return x.fieldId === field.id &&
693
+ x.item.id === ((_a = field._editor) === null || _a === void 0 ? void 0 : _a.descriptor.item.id);
694
+ }))
695
+ return prev;
696
+ return [...prev, field._editor.descriptor];
697
+ });
698
+ },
699
+ getComponentCommands: (components) => {
700
+ return getComponentCommands(components, editContext);
701
+ },
702
+ dragStart: (dragObject) => {
703
+ // console.log("dragging " + JSON.stringify(dragObject));
704
+ setDragObject(dragObject);
705
+ },
706
+ dragEnd: () => {
707
+ setDragObject(undefined);
708
+ },
709
+ droppedInPlaceholder: (placeholderKey, index) => __awaiter(this, void 0, void 0, function* () {
710
+ if (!dragObject)
711
+ return;
712
+ console.log(dragObject.templateId + " dropped in " + placeholderKey + " " + index);
713
+ // console.log(JSON.stringify(page));
714
+ const placeholderKeyComponents = placeholderKey.split("_");
715
+ const parentId = placeholderKeyComponents.length === 1
716
+ ? undefined
717
+ : placeholderKeyComponents[0];
718
+ if (parentId)
719
+ setSelection([parentId]);
720
+ const placeholderName = placeholderKeyComponents.length === 1
721
+ ? placeholderKeyComponents[0]
722
+ : placeholderKeyComponents[1];
723
+ let op;
724
+ if (dragObject.type == "template") {
725
+ addComponent(dragObject.templateId, dragObject.name || "component", placeholderName, index, parentId);
726
+ return;
727
+ }
728
+ if (dragObject.type == "component" ||
729
+ (dragObject.type == "link-component" && dragObject.component)) {
730
+ const parentComponent = parentId
731
+ ? getComponentById(parentId, page)
732
+ : null;
733
+ if (dragObject.type == "link-component") {
734
+ op = {
735
+ type: "link-component",
736
+ pageItem: getPageItemDescriptor(),
737
+ parent: parentId && {
738
+ id: parentId,
739
+ language: page.language,
740
+ version: page.version,
741
+ name: parentComponent === null || parentComponent === void 0 ? void 0 : parentComponent.name,
742
+ },
743
+ placeholderName: placeholderName,
744
+ placeholderIndex: index,
745
+ date: new Date().toISOString(),
746
+ id: uuid(),
747
+ linkedComponentItem: dragObject.component,
748
+ description: "Link component",
749
+ };
750
+ }
751
+ else {
752
+ op = {
753
+ type: "move-component",
754
+ pageItem: getPageItemDescriptor(),
755
+ parent: parentId && {
756
+ id: parentId,
757
+ language: page.language,
758
+ version: page.version,
759
+ name: parentComponent === null || parentComponent === void 0 ? void 0 : parentComponent.name,
760
+ },
761
+ placeholderName: placeholderName,
762
+ placeholderIndex: index,
763
+ components: [dragObject.component],
764
+ date: new Date().toISOString(),
765
+ id: uuid(),
766
+ description: "Move component",
767
+ };
768
+ }
769
+ }
770
+ if (op)
771
+ setCurrentEditOperation(op);
772
+ setDragObject(undefined);
773
+ }),
774
+ addComponent,
775
+ executeEditOperation: (op) => {
776
+ setCurrentEditOperation(op);
777
+ },
778
+ page,
779
+ windowSize,
780
+ triggerFieldAction: (field, actionButton) => __awaiter(this, void 0, void 0, function* () {
781
+ const op = { field, actionButton, state: "running" };
782
+ const fieldItem = field._editor.descriptor.item;
783
+ setActiveFieldActions((prevFieldActions) => [
784
+ ...prevFieldActions.filter((x) => {
785
+ var _a, _b, _c;
786
+ return !(x.field.id == field.id &&
787
+ ((_a = x.field._editor) === null || _a === void 0 ? void 0 : _a.descriptor.item.id) == fieldItem.id &&
788
+ ((_b = x.field._editor) === null || _b === void 0 ? void 0 : _b.descriptor.item.language) == fieldItem.language &&
789
+ ((_c = x.field._editor) === null || _c === void 0 ? void 0 : _c.descriptor.item.version) == fieldItem.version);
790
+ }),
791
+ op,
792
+ ]);
793
+ yield executeFieldAction(field._editor.descriptor.item, field.id, { id: page.id, language: page.language, version: page.version }, actionButton.action, editContext.sessionId, getSelectedText(), (data) => {
794
+ op.message = data.responseText;
795
+ setActiveFieldActions((prevFieldActions) => [...prevFieldActions]);
796
+ });
797
+ op.state = "success";
798
+ requestRefresh("immediate");
799
+ }),
800
+ activeFieldActions,
801
+ showContextMenu: (event, items) => {
802
+ var _a;
803
+ (_a = contextMenuRef.current) === null || _a === void 0 ? void 0 : _a.show(event, items);
804
+ },
805
+ showAiPopup: (event) => {
806
+ var _a;
807
+ (_a = aiPopupRef.current) === null || _a === void 0 ? void 0 : _a.show(event);
808
+ },
809
+ showFieldEditorPopup: (fields, sections, ev) => {
810
+ var _a;
811
+ (_a = fieldEditorPopupRef.current) === null || _a === void 0 ? void 0 : _a.show(fields, sections, ev);
812
+ },
813
+ lockItems: lockItemsAndRefresh,
814
+ unlockItems: unlockItemsAndRefresh,
815
+ pageValidationResult,
816
+ secondaryItem,
817
+ loadItem,
818
+ editHistory,
819
+ activeSessions,
820
+ unlockField: () => __awaiter(this, void 0, void 0, function* () {
821
+ yield releaseFieldLocks(sessionId);
822
+ }),
823
+ executeWorkflowCommand: executeWorkflowCommandAndRefresh,
824
+ editData,
825
+ duplicateComponents: ({ componentIds, parent, placeholderName, }) => {
826
+ const op = {
827
+ type: "duplicate-components",
828
+ pageItem: getPageItemDescriptor(),
829
+ sourceComponentIds: componentIds,
830
+ date: new Date().toISOString(),
831
+ id: uuid(),
832
+ description: "Duplicate components",
833
+ placeholderName,
834
+ parent: getItemDescriptor(parent),
835
+ };
836
+ setCurrentEditOperation(op);
837
+ },
838
+ isCommandDisabled: (command) => {
839
+ if (!command.disabled)
840
+ return false;
841
+ return command.disabled({
842
+ editContext,
843
+ pathname,
844
+ router,
845
+ searchParams,
846
+ });
847
+ },
848
+ executeCommand: ({ command, event, }) => {
849
+ return command.execute({
850
+ editContext,
851
+ pathname,
852
+ router,
853
+ searchParams,
854
+ event,
855
+ });
856
+ },
857
+ setView,
858
+ view,
859
+ pageView: {
860
+ device,
861
+ setDevice,
862
+ scroll,
863
+ setScroll,
864
+ zoom,
865
+ setZoom,
866
+ viewport: viewportRect,
867
+ fullscreen,
868
+ setFullscreen,
869
+ editorContainerRef,
870
+ },
871
+ };
872
+ const spinner = _jsx(ProgressSpinner, {});
873
+ return (_jsx(EditContextProvider, { value: editContext, children: fullscreen ? (_jsxs("div", { onMouseMoveCapture: () => setTimeout(() => setShowFullscreenHint(false), 600), children: [children, showFullscreenHint && (_jsx("div", { className: "a-fixed a-left-1/2 a-top-3 a-transform \r\n -a-translate-x-1/2 a-p-12 a-bg-gray-200", children: "Press Ctrl + F11 to exit fullscreen mode" }))] })) : (_jsxs(_Fragment, { children: [_jsx(Toast, { ref: toast }), _jsxs(PrimeReactProvider, { children: [_jsx(ConfirmationDialog, { ref: confirmationDialogRef }), _jsx(ConfirmDialog, {}), _jsxs(BlockUI, { blocked: false, template: spinner, children: [_jsx(EditContextMenu, { ref: contextMenuRef }), _jsx(Menu, {}), _jsx(MainLayout, { content: ((_a = configuration.chrome.editor.centerPanelViews.find((x) => x.name === centerPanelView)) === null || _a === void 0 ? void 0 : _a.content) || "Unknown view " + centerPanelView, leftSidebar: _jsx(Sidebar, { views: (_b = configuration.chrome.editor.views) !== null && _b !== void 0 ? _b : [] }) })] }), _jsx(MediaSelector, { visible: mediaSelectorVisible, onHide: () => setMediaSelectorVisible(false), onMediaSelected: onMediaSelect, selectedIdPath: selectedMediaIdPath }), _jsx(PublishDialog, { visible: showPublishDialog, onHide: () => setShowPublishDialog(false), page: page,
874
+ // lockItems={lockItemsAndRefresh}
875
+ // unlockItems={unlockItemsAndRefresh}
876
+ executeWorkflowCommand: executeWorkflowCommandAndRefresh }), _jsx(AiPopup, { ref: aiPopupRef }), _jsx(FieldEditorPopup, { ref: fieldEditorPopupRef })] })] })) }));
877
+ }