@parhelia/core 0.1.11004 → 0.1.11007

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 (1104) hide show
  1. package/dist/dist/agents-view/AgentCard.d.ts +12 -0
  2. package/dist/dist/agents-view/AgentCard.js +30 -0
  3. package/dist/dist/agents-view/AgentCard.js.map +1 -0
  4. package/dist/dist/agents-view/AgentsView.d.ts +5 -0
  5. package/dist/dist/agents-view/AgentsView.js +255 -0
  6. package/dist/dist/agents-view/AgentsView.js.map +1 -0
  7. package/dist/dist/agents-view/ProfileAgentsGroup.d.ts +17 -0
  8. package/dist/dist/agents-view/ProfileAgentsGroup.js +13 -0
  9. package/dist/dist/agents-view/ProfileAgentsGroup.js.map +1 -0
  10. package/dist/dist/client-components/api.d.ts +1 -0
  11. package/dist/dist/client-components/api.js +4 -0
  12. package/dist/dist/client-components/api.js.map +1 -0
  13. package/dist/dist/client-components/index.d.ts +17 -0
  14. package/dist/dist/client-components/index.js +18 -0
  15. package/dist/dist/client-components/index.js.map +1 -0
  16. package/dist/dist/components/ActionButton.d.ts +14 -0
  17. package/dist/dist/components/ActionButton.js +6 -0
  18. package/dist/dist/components/ActionButton.js.map +1 -0
  19. package/dist/dist/components/Error.d.ts +9 -0
  20. package/dist/dist/components/Error.js +24 -0
  21. package/dist/dist/components/Error.js.map +1 -0
  22. package/dist/dist/components/FilterInput.d.ts +22 -0
  23. package/dist/dist/components/FilterInput.js +29 -0
  24. package/dist/dist/components/FilterInput.js.map +1 -0
  25. package/dist/dist/components/index.d.ts +7 -0
  26. package/dist/dist/components/index.js +5 -0
  27. package/dist/dist/components/index.js.map +1 -0
  28. package/dist/dist/components/ui/CardConnector.d.ts +4 -0
  29. package/dist/dist/components/ui/CardConnector.js +6 -0
  30. package/dist/dist/components/ui/CardConnector.js.map +1 -0
  31. package/dist/dist/components/ui/LanguageSelector.d.ts +8 -0
  32. package/dist/dist/components/ui/LanguageSelector.js +53 -0
  33. package/dist/dist/components/ui/LanguageSelector.js.map +1 -0
  34. package/dist/dist/components/ui/PlaceholderInput.d.ts +41 -0
  35. package/dist/dist/components/ui/PlaceholderInput.js +160 -0
  36. package/dist/dist/components/ui/PlaceholderInput.js.map +1 -0
  37. package/dist/dist/components/ui/PlaceholderInputTypes.d.ts +41 -0
  38. package/dist/dist/components/ui/PlaceholderInputTypes.js +48 -0
  39. package/dist/dist/components/ui/PlaceholderInputTypes.js.map +1 -0
  40. package/dist/dist/components/ui/PlaceholderItemSelector.d.ts +7 -0
  41. package/dist/dist/components/ui/PlaceholderItemSelector.js +154 -0
  42. package/dist/dist/components/ui/PlaceholderItemSelector.js.map +1 -0
  43. package/dist/dist/components/ui/alert.d.ts +7 -0
  44. package/dist/dist/components/ui/alert.js +21 -0
  45. package/dist/dist/components/ui/alert.js.map +1 -0
  46. package/dist/dist/components/ui/badge.d.ts +9 -0
  47. package/dist/dist/components/ui/badge.js +23 -0
  48. package/dist/dist/components/ui/badge.js.map +1 -0
  49. package/dist/dist/components/ui/button.d.ts +10 -0
  50. package/dist/dist/components/ui/button.js +33 -0
  51. package/dist/dist/components/ui/button.js.map +1 -0
  52. package/dist/dist/components/ui/calendar.d.ts +7 -0
  53. package/dist/dist/components/ui/calendar.js +58 -0
  54. package/dist/dist/components/ui/calendar.js.map +1 -0
  55. package/dist/dist/components/ui/card.d.ts +19 -0
  56. package/dist/dist/components/ui/card.js +78 -0
  57. package/dist/dist/components/ui/card.js.map +1 -0
  58. package/dist/dist/components/ui/checkbox.d.ts +4 -0
  59. package/dist/dist/components/ui/checkbox.js +10 -0
  60. package/dist/dist/components/ui/checkbox.js.map +1 -0
  61. package/dist/dist/components/ui/command.d.ts +18 -0
  62. package/dist/dist/components/ui/command.js +35 -0
  63. package/dist/dist/components/ui/command.js.map +1 -0
  64. package/dist/dist/components/ui/context-menu.d.ts +53 -0
  65. package/dist/dist/components/ui/context-menu.js +290 -0
  66. package/dist/dist/components/ui/context-menu.js.map +1 -0
  67. package/dist/dist/components/ui/copy-button.d.ts +10 -0
  68. package/dist/dist/components/ui/copy-button.js +61 -0
  69. package/dist/dist/components/ui/copy-button.js.map +1 -0
  70. package/dist/dist/components/ui/dialog.d.ts +16 -0
  71. package/dist/dist/components/ui/dialog.js +37 -0
  72. package/dist/dist/components/ui/dialog.js.map +1 -0
  73. package/dist/dist/components/ui/dropdown-menu.d.ts +25 -0
  74. package/dist/dist/components/ui/dropdown-menu.js +52 -0
  75. package/dist/dist/components/ui/dropdown-menu.js.map +1 -0
  76. package/dist/dist/components/ui/input.d.ts +3 -0
  77. package/dist/dist/components/ui/input.js +9 -0
  78. package/dist/dist/components/ui/input.js.map +1 -0
  79. package/dist/dist/components/ui/label.d.ts +5 -0
  80. package/dist/dist/components/ui/label.js +9 -0
  81. package/dist/dist/components/ui/label.js.map +1 -0
  82. package/dist/dist/components/ui/menubar.d.ts +26 -0
  83. package/dist/dist/components/ui/menubar.js +55 -0
  84. package/dist/dist/components/ui/menubar.js.map +1 -0
  85. package/dist/dist/components/ui/paste-button.d.ts +14 -0
  86. package/dist/dist/components/ui/paste-button.js +114 -0
  87. package/dist/dist/components/ui/paste-button.js.map +1 -0
  88. package/dist/dist/components/ui/popover.d.ts +11 -0
  89. package/dist/dist/components/ui/popover.js +66 -0
  90. package/dist/dist/components/ui/popover.js.map +1 -0
  91. package/dist/dist/components/ui/progress.d.ts +7 -0
  92. package/dist/dist/components/ui/progress.js +9 -0
  93. package/dist/dist/components/ui/progress.js.map +1 -0
  94. package/dist/dist/components/ui/select.d.ts +18 -0
  95. package/dist/dist/components/ui/select.js +34 -0
  96. package/dist/dist/components/ui/select.js.map +1 -0
  97. package/dist/dist/components/ui/sonner.d.ts +3 -0
  98. package/dist/dist/components/ui/sonner.js +16 -0
  99. package/dist/dist/components/ui/sonner.js.map +1 -0
  100. package/dist/dist/components/ui/switch.d.ts +4 -0
  101. package/dist/dist/components/ui/switch.js +9 -0
  102. package/dist/dist/components/ui/switch.js.map +1 -0
  103. package/dist/dist/components/ui/tabs.d.ts +17 -0
  104. package/dist/dist/components/ui/tabs.js +27 -0
  105. package/dist/dist/components/ui/tabs.js.map +1 -0
  106. package/dist/dist/components/ui/textarea.d.ts +3 -0
  107. package/dist/dist/components/ui/textarea.js +11 -0
  108. package/dist/dist/components/ui/textarea.js.map +1 -0
  109. package/dist/dist/components/ui/tooltip.d.ts +9 -0
  110. package/dist/dist/components/ui/tooltip.js +18 -0
  111. package/dist/dist/components/ui/tooltip.js.map +1 -0
  112. package/dist/dist/components/ui/upload-button.d.ts +15 -0
  113. package/dist/dist/components/ui/upload-button.js +56 -0
  114. package/dist/dist/components/ui/upload-button.js.map +1 -0
  115. package/dist/dist/config/config.d.ts +24 -0
  116. package/dist/dist/config/config.js +1088 -0
  117. package/dist/dist/config/config.js.map +1 -0
  118. package/dist/dist/config/types.d.ts +244 -0
  119. package/dist/dist/config/types.js +2 -0
  120. package/dist/dist/config/types.js.map +1 -0
  121. package/dist/dist/editor/AspectRatioSelector.d.ts +13 -0
  122. package/dist/dist/editor/AspectRatioSelector.js +71 -0
  123. package/dist/dist/editor/AspectRatioSelector.js.map +1 -0
  124. package/dist/dist/editor/ComponentInfo.d.ts +4 -0
  125. package/dist/dist/editor/ComponentInfo.js +41 -0
  126. package/dist/dist/editor/ComponentInfo.js.map +1 -0
  127. package/dist/dist/editor/ConfirmationDialog.d.ts +19 -0
  128. package/dist/dist/editor/ConfirmationDialog.js +31 -0
  129. package/dist/dist/editor/ConfirmationDialog.js.map +1 -0
  130. package/dist/dist/editor/ContentTree.d.ts +39 -0
  131. package/dist/dist/editor/ContentTree.js +602 -0
  132. package/dist/dist/editor/ContentTree.js.map +1 -0
  133. package/dist/dist/editor/ContextMenu.d.ts +15 -0
  134. package/dist/dist/editor/ContextMenu.js +239 -0
  135. package/dist/dist/editor/ContextMenu.js.map +1 -0
  136. package/dist/dist/editor/Editor.d.ts +12 -0
  137. package/dist/dist/editor/Editor.js +116 -0
  138. package/dist/dist/editor/Editor.js.map +1 -0
  139. package/dist/dist/editor/EditorWarning.d.ts +5 -0
  140. package/dist/dist/editor/EditorWarning.js +12 -0
  141. package/dist/dist/editor/EditorWarning.js.map +1 -0
  142. package/dist/dist/editor/EditorWarnings.d.ts +9 -0
  143. package/dist/dist/editor/EditorWarnings.js +19 -0
  144. package/dist/dist/editor/EditorWarnings.js.map +1 -0
  145. package/dist/dist/editor/FieldActionsOverlay.d.ts +18 -0
  146. package/dist/dist/editor/FieldActionsOverlay.js +201 -0
  147. package/dist/dist/editor/FieldActionsOverlay.js.map +1 -0
  148. package/dist/dist/editor/FieldEditorPopup.d.ts +10 -0
  149. package/dist/dist/editor/FieldEditorPopup.js +23 -0
  150. package/dist/dist/editor/FieldEditorPopup.js.map +1 -0
  151. package/dist/dist/editor/FieldHistory.d.ts +7 -0
  152. package/dist/dist/editor/FieldHistory.js +45 -0
  153. package/dist/dist/editor/FieldHistory.js.map +1 -0
  154. package/dist/dist/editor/FieldList.d.ts +19 -0
  155. package/dist/dist/editor/FieldList.js +90 -0
  156. package/dist/dist/editor/FieldList.js.map +1 -0
  157. package/dist/dist/editor/FieldListField.d.ts +16 -0
  158. package/dist/dist/editor/FieldListField.js +286 -0
  159. package/dist/dist/editor/FieldListField.js.map +1 -0
  160. package/dist/dist/editor/FieldListFieldWithFallbacks.d.ts +11 -0
  161. package/dist/dist/editor/FieldListFieldWithFallbacks.js +120 -0
  162. package/dist/dist/editor/FieldListFieldWithFallbacks.js.map +1 -0
  163. package/dist/dist/editor/FloatingToolbar.d.ts +7 -0
  164. package/dist/dist/editor/FloatingToolbar.js +91 -0
  165. package/dist/dist/editor/FloatingToolbar.js.map +1 -0
  166. package/dist/dist/editor/ImageEditButton.d.ts +27 -0
  167. package/dist/dist/editor/ImageEditButton.js +22 -0
  168. package/dist/dist/editor/ImageEditButton.js.map +1 -0
  169. package/dist/dist/editor/ImageEditor.d.ts +5 -0
  170. package/dist/dist/editor/ImageEditor.js +76 -0
  171. package/dist/dist/editor/ImageEditor.js.map +1 -0
  172. package/dist/dist/editor/ItemInfo.d.ts +4 -0
  173. package/dist/dist/editor/ItemInfo.js +60 -0
  174. package/dist/dist/editor/ItemInfo.js.map +1 -0
  175. package/dist/dist/editor/LinkEditorDialog.d.ts +18 -0
  176. package/dist/dist/editor/LinkEditorDialog.js +101 -0
  177. package/dist/dist/editor/LinkEditorDialog.js.map +1 -0
  178. package/dist/dist/editor/MainLayout.d.ts +12 -0
  179. package/dist/dist/editor/MainLayout.js +124 -0
  180. package/dist/dist/editor/MainLayout.js.map +1 -0
  181. package/dist/dist/editor/MobileLayout.d.ts +2 -0
  182. package/dist/dist/editor/MobileLayout.js +34 -0
  183. package/dist/dist/editor/MobileLayout.js.map +1 -0
  184. package/dist/dist/editor/NewEditorClient.d.ts +5 -0
  185. package/dist/dist/editor/NewEditorClient.js +7 -0
  186. package/dist/dist/editor/NewEditorClient.js.map +1 -0
  187. package/dist/dist/editor/PictureCropper.d.ts +6 -0
  188. package/dist/dist/editor/PictureCropper.js +722 -0
  189. package/dist/dist/editor/PictureCropper.js.map +1 -0
  190. package/dist/dist/editor/PictureEditor.d.ts +9 -0
  191. package/dist/dist/editor/PictureEditor.js +180 -0
  192. package/dist/dist/editor/PictureEditor.js.map +1 -0
  193. package/dist/dist/editor/PictureEditorDialog.d.ts +8 -0
  194. package/dist/dist/editor/PictureEditorDialog.js +195 -0
  195. package/dist/dist/editor/PictureEditorDialog.js.map +1 -0
  196. package/dist/dist/editor/QuickItemSwitcher.d.ts +9 -0
  197. package/dist/dist/editor/QuickItemSwitcher.js +78 -0
  198. package/dist/dist/editor/QuickItemSwitcher.js.map +1 -0
  199. package/dist/dist/editor/ScrollingContentTree.d.ts +10 -0
  200. package/dist/dist/editor/ScrollingContentTree.js +48 -0
  201. package/dist/dist/editor/ScrollingContentTree.js.map +1 -0
  202. package/dist/dist/editor/SetupLoadingScreen.d.ts +5 -0
  203. package/dist/dist/editor/SetupLoadingScreen.js +11 -0
  204. package/dist/dist/editor/SetupLoadingScreen.js.map +1 -0
  205. package/dist/dist/editor/Titlebar.d.ts +1 -0
  206. package/dist/dist/editor/Titlebar.js +46 -0
  207. package/dist/dist/editor/Titlebar.js.map +1 -0
  208. package/dist/dist/editor/ai/AgentCostDisplay.d.ts +32 -0
  209. package/dist/dist/editor/ai/AgentCostDisplay.js +93 -0
  210. package/dist/dist/editor/ai/AgentCostDisplay.js.map +1 -0
  211. package/dist/dist/editor/ai/AgentDocumentList.d.ts +8 -0
  212. package/dist/dist/editor/ai/AgentDocumentList.js +132 -0
  213. package/dist/dist/editor/ai/AgentDocumentList.js.map +1 -0
  214. package/dist/dist/editor/ai/AgentHistory.d.ts +11 -0
  215. package/dist/dist/editor/ai/AgentHistory.js +12 -0
  216. package/dist/dist/editor/ai/AgentHistory.js.map +1 -0
  217. package/dist/dist/editor/ai/AgentProfilesOverview.d.ts +9 -0
  218. package/dist/dist/editor/ai/AgentProfilesOverview.js +16 -0
  219. package/dist/dist/editor/ai/AgentProfilesOverview.js.map +1 -0
  220. package/dist/dist/editor/ai/AgentStatusBadge.d.ts +26 -0
  221. package/dist/dist/editor/ai/AgentStatusBadge.js +126 -0
  222. package/dist/dist/editor/ai/AgentStatusBadge.js.map +1 -0
  223. package/dist/dist/editor/ai/AgentTerminal.d.ts +14 -0
  224. package/dist/dist/editor/ai/AgentTerminal.js +3012 -0
  225. package/dist/dist/editor/ai/AgentTerminal.js.map +1 -0
  226. package/dist/dist/editor/ai/Agents.d.ts +4 -0
  227. package/dist/dist/editor/ai/Agents.js +891 -0
  228. package/dist/dist/editor/ai/Agents.js.map +1 -0
  229. package/dist/dist/editor/ai/AiResponseMessage.d.ts +18 -0
  230. package/dist/dist/editor/ai/AiResponseMessage.js +684 -0
  231. package/dist/dist/editor/ai/AiResponseMessage.js.map +1 -0
  232. package/dist/dist/editor/ai/ContextInfoBar.d.ts +14 -0
  233. package/dist/dist/editor/ai/ContextInfoBar.js +432 -0
  234. package/dist/dist/editor/ai/ContextInfoBar.js.map +1 -0
  235. package/dist/dist/editor/ai/DancingDots.d.ts +1 -0
  236. package/dist/dist/editor/ai/DancingDots.js +6 -0
  237. package/dist/dist/editor/ai/DancingDots.js.map +1 -0
  238. package/dist/dist/editor/ai/MediaImage.d.ts +6 -0
  239. package/dist/dist/editor/ai/MediaImage.js +38 -0
  240. package/dist/dist/editor/ai/MediaImage.js.map +1 -0
  241. package/dist/dist/editor/ai/ToolCallDisplay.d.ts +45 -0
  242. package/dist/dist/editor/ai/ToolCallDisplay.js +292 -0
  243. package/dist/dist/editor/ai/ToolCallDisplay.js.map +1 -0
  244. package/dist/dist/editor/ai/aiPageModel.d.ts +24 -0
  245. package/dist/dist/editor/ai/aiPageModel.js +97 -0
  246. package/dist/dist/editor/ai/aiPageModel.js.map +1 -0
  247. package/dist/dist/editor/ai/editorAiContext.d.ts +10 -0
  248. package/dist/dist/editor/ai/editorAiContext.js +10 -0
  249. package/dist/dist/editor/ai/editorAiContext.js.map +1 -0
  250. package/dist/dist/editor/ai/types.d.ts +30 -0
  251. package/dist/dist/editor/ai/types.js +2 -0
  252. package/dist/dist/editor/ai/types.js.map +1 -0
  253. package/dist/dist/editor/ai/useAgentStatus.d.ts +14 -0
  254. package/dist/dist/editor/ai/useAgentStatus.js +203 -0
  255. package/dist/dist/editor/ai/useAgentStatus.js.map +1 -0
  256. package/dist/dist/editor/client/AboutDialog.d.ts +2 -0
  257. package/dist/dist/editor/client/AboutDialog.js +23 -0
  258. package/dist/dist/editor/client/AboutDialog.js.map +1 -0
  259. package/dist/dist/editor/client/EditorShell.d.ts +37 -0
  260. package/dist/dist/editor/client/EditorShell.js +2283 -0
  261. package/dist/dist/editor/client/EditorShell.js.map +1 -0
  262. package/dist/dist/editor/client/GenericDialog.d.ts +10 -0
  263. package/dist/dist/editor/client/GenericDialog.js +25 -0
  264. package/dist/dist/editor/client/GenericDialog.js.map +1 -0
  265. package/dist/dist/editor/client/editContext.d.ts +262 -0
  266. package/dist/dist/editor/client/editContext.js +29 -0
  267. package/dist/dist/editor/client/editContext.js.map +1 -0
  268. package/dist/dist/editor/client/fieldModificationStore.d.ts +25 -0
  269. package/dist/dist/editor/client/fieldModificationStore.js +184 -0
  270. package/dist/dist/editor/client/fieldModificationStore.js.map +1 -0
  271. package/dist/dist/editor/client/helpers.d.ts +12 -0
  272. package/dist/dist/editor/client/helpers.js +29 -0
  273. package/dist/dist/editor/client/helpers.js.map +1 -0
  274. package/dist/dist/editor/client/hooks/useEditorUrlSync.d.ts +18 -0
  275. package/dist/dist/editor/client/hooks/useEditorUrlSync.js +56 -0
  276. package/dist/dist/editor/client/hooks/useEditorUrlSync.js.map +1 -0
  277. package/dist/dist/editor/client/hooks/useEditorWebSocket.d.ts +11 -0
  278. package/dist/dist/editor/client/hooks/useEditorWebSocket.js +86 -0
  279. package/dist/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -0
  280. package/dist/dist/editor/client/hooks/useGlobalEditorKeyDown.d.ts +1 -0
  281. package/dist/dist/editor/client/hooks/useGlobalEditorKeyDown.js +12 -0
  282. package/dist/dist/editor/client/hooks/useGlobalEditorKeyDown.js.map +1 -0
  283. package/dist/dist/editor/client/hooks/useMediaQuery.d.ts +1 -0
  284. package/dist/dist/editor/client/hooks/useMediaQuery.js +19 -0
  285. package/dist/dist/editor/client/hooks/useMediaQuery.js.map +1 -0
  286. package/dist/dist/editor/client/hooks/useMediaSelector.d.ts +12 -0
  287. package/dist/dist/editor/client/hooks/useMediaSelector.js +30 -0
  288. package/dist/dist/editor/client/hooks/useMediaSelector.js.map +1 -0
  289. package/dist/dist/editor/client/hooks/useQuota.d.ts +29 -0
  290. package/dist/dist/editor/client/hooks/useQuota.js +53 -0
  291. package/dist/dist/editor/client/hooks/useQuota.js.map +1 -0
  292. package/dist/dist/editor/client/hooks/useSocketMessageHandler.d.ts +35 -0
  293. package/dist/dist/editor/client/hooks/useSocketMessageHandler.js +241 -0
  294. package/dist/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -0
  295. package/dist/dist/editor/client/hooks/useWorkbox.d.ts +9 -0
  296. package/dist/dist/editor/client/hooks/useWorkbox.js +52 -0
  297. package/dist/dist/editor/client/hooks/useWorkbox.js.map +1 -0
  298. package/dist/dist/editor/client/itemsRepository.d.ts +38 -0
  299. package/dist/dist/editor/client/itemsRepository.js +482 -0
  300. package/dist/dist/editor/client/itemsRepository.js.map +1 -0
  301. package/dist/dist/editor/client/operations.d.ts +69 -0
  302. package/dist/dist/editor/client/operations.js +633 -0
  303. package/dist/dist/editor/client/operations.js.map +1 -0
  304. package/dist/dist/editor/client/pageModelBuilder.d.ts +6 -0
  305. package/dist/dist/editor/client/pageModelBuilder.js +171 -0
  306. package/dist/dist/editor/client/pageModelBuilder.js.map +1 -0
  307. package/dist/dist/editor/client/ui/EditorChrome.d.ts +12 -0
  308. package/dist/dist/editor/client/ui/EditorChrome.js +30 -0
  309. package/dist/dist/editor/client/ui/EditorChrome.js.map +1 -0
  310. package/dist/dist/editor/client/ui/FullscreenControls.d.ts +7 -0
  311. package/dist/dist/editor/client/ui/FullscreenControls.js +21 -0
  312. package/dist/dist/editor/client/ui/FullscreenControls.js.map +1 -0
  313. package/dist/dist/editor/commands/agentCommands.d.ts +9 -0
  314. package/dist/dist/editor/commands/agentCommands.js +30 -0
  315. package/dist/dist/editor/commands/agentCommands.js.map +1 -0
  316. package/dist/dist/editor/commands/commands.d.ts +19 -0
  317. package/dist/dist/editor/commands/commands.js +2 -0
  318. package/dist/dist/editor/commands/commands.js.map +1 -0
  319. package/dist/dist/editor/commands/componentCommands.d.ts +12 -0
  320. package/dist/dist/editor/commands/componentCommands.js +367 -0
  321. package/dist/dist/editor/commands/componentCommands.js.map +1 -0
  322. package/dist/dist/editor/commands/createVersionCommand.d.ts +4 -0
  323. package/dist/dist/editor/commands/createVersionCommand.js +24 -0
  324. package/dist/dist/editor/commands/createVersionCommand.js.map +1 -0
  325. package/dist/dist/editor/commands/deleteVersionCommand.d.ts +4 -0
  326. package/dist/dist/editor/commands/deleteVersionCommand.js +53 -0
  327. package/dist/dist/editor/commands/deleteVersionCommand.js.map +1 -0
  328. package/dist/dist/editor/commands/itemCommands.d.ts +29 -0
  329. package/dist/dist/editor/commands/itemCommands.js +448 -0
  330. package/dist/dist/editor/commands/itemCommands.js.map +1 -0
  331. package/dist/dist/editor/commands/localizeItem/LocalizeItemDialog.d.ts +8 -0
  332. package/dist/dist/editor/commands/localizeItem/LocalizeItemDialog.js +91 -0
  333. package/dist/dist/editor/commands/localizeItem/LocalizeItemDialog.js.map +1 -0
  334. package/dist/dist/editor/commands/undo.d.ts +15 -0
  335. package/dist/dist/editor/commands/undo.js +29 -0
  336. package/dist/dist/editor/commands/undo.js.map +1 -0
  337. package/dist/dist/editor/componentTreeHelper.d.ts +18 -0
  338. package/dist/dist/editor/componentTreeHelper.js +123 -0
  339. package/dist/dist/editor/componentTreeHelper.js.map +1 -0
  340. package/dist/dist/editor/context-menu/CopyMoveMenu.d.ts +7 -0
  341. package/dist/dist/editor/context-menu/CopyMoveMenu.js +58 -0
  342. package/dist/dist/editor/context-menu/CopyMoveMenu.js.map +1 -0
  343. package/dist/dist/editor/context-menu/InsertMenu.d.ts +9 -0
  344. package/dist/dist/editor/context-menu/InsertMenu.js +229 -0
  345. package/dist/dist/editor/context-menu/InsertMenu.js.map +1 -0
  346. package/dist/dist/editor/control-center/About.d.ts +1 -0
  347. package/dist/dist/editor/control-center/About.js +8 -0
  348. package/dist/dist/editor/control-center/About.js.map +1 -0
  349. package/dist/dist/editor/control-center/AllAgentsPanel.d.ts +5 -0
  350. package/dist/dist/editor/control-center/AllAgentsPanel.js +126 -0
  351. package/dist/dist/editor/control-center/AllAgentsPanel.js.map +1 -0
  352. package/dist/dist/editor/control-center/ControlCenterMenu.d.ts +1 -0
  353. package/dist/dist/editor/control-center/ControlCenterMenu.js +66 -0
  354. package/dist/dist/editor/control-center/ControlCenterMenu.js.map +1 -0
  355. package/dist/dist/editor/control-center/IndexOverview.d.ts +1 -0
  356. package/dist/dist/editor/control-center/IndexOverview.js +323 -0
  357. package/dist/dist/editor/control-center/IndexOverview.js.map +1 -0
  358. package/dist/dist/editor/control-center/Info.d.ts +1 -0
  359. package/dist/dist/editor/control-center/Info.js +10 -0
  360. package/dist/dist/editor/control-center/Info.js.map +1 -0
  361. package/dist/dist/editor/control-center/LatestFeedback.d.ts +1 -0
  362. package/dist/dist/editor/control-center/LatestFeedback.js +136 -0
  363. package/dist/dist/editor/control-center/LatestFeedback.js.map +1 -0
  364. package/dist/dist/editor/control-center/QuotaInfo.d.ts +1 -0
  365. package/dist/dist/editor/control-center/QuotaInfo.js +102 -0
  366. package/dist/dist/editor/control-center/QuotaInfo.js.map +1 -0
  367. package/dist/dist/editor/control-center/Setup.d.ts +1 -0
  368. package/dist/dist/editor/control-center/Setup.js +174 -0
  369. package/dist/dist/editor/control-center/Setup.js.map +1 -0
  370. package/dist/dist/editor/control-center/Status.d.ts +1 -0
  371. package/dist/dist/editor/control-center/Status.js +79 -0
  372. package/dist/dist/editor/control-center/Status.js.map +1 -0
  373. package/dist/dist/editor/control-center/WebSocketMessages.d.ts +1 -0
  374. package/dist/dist/editor/control-center/WebSocketMessages.js +71 -0
  375. package/dist/dist/editor/control-center/WebSocketMessages.js.map +1 -0
  376. package/dist/dist/editor/control-center/parhelia-setup/Overview.d.ts +1 -0
  377. package/dist/dist/editor/control-center/parhelia-setup/Overview.js +91 -0
  378. package/dist/dist/editor/control-center/parhelia-setup/Overview.js.map +1 -0
  379. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/EmbeddingsModelSection.d.ts +2 -0
  380. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/EmbeddingsModelSection.js +195 -0
  381. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/EmbeddingsModelSection.js.map +1 -0
  382. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/index.d.ts +2 -0
  383. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/index.js +22 -0
  384. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/index.js.map +1 -0
  385. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/provider/ProviderSection.d.ts +1 -0
  386. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/provider/ProviderSection.js +233 -0
  387. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/provider/ProviderSection.js.map +1 -0
  388. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersList.d.ts +15 -0
  389. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js +14 -0
  390. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js.map +1 -0
  391. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.d.ts +1 -0
  392. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js +94 -0
  393. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js.map +1 -0
  394. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/tools/GenerateToolsSection.d.ts +1 -0
  395. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/tools/GenerateToolsSection.js +367 -0
  396. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/tools/GenerateToolsSection.js.map +1 -0
  397. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/types.d.ts +1 -0
  398. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/types.js +2 -0
  399. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/types.js.map +1 -0
  400. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/utils.d.ts +5 -0
  401. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/utils.js +44 -0
  402. package/dist/dist/editor/control-center/setup-steps/AiSetupStep/utils.js.map +1 -0
  403. package/dist/dist/editor/control-center/setup-steps/DbSetupStep.d.ts +2 -0
  404. package/dist/dist/editor/control-center/setup-steps/DbSetupStep.js +46 -0
  405. package/dist/dist/editor/control-center/setup-steps/DbSetupStep.js.map +1 -0
  406. package/dist/dist/editor/control-center/setup-steps/IndexSetupStep.d.ts +2 -0
  407. package/dist/dist/editor/control-center/setup-steps/IndexSetupStep.js +36 -0
  408. package/dist/dist/editor/control-center/setup-steps/IndexSetupStep.js.map +1 -0
  409. package/dist/dist/editor/control-center/setup-steps/SettingsSetupStep.d.ts +2 -0
  410. package/dist/dist/editor/control-center/setup-steps/SettingsSetupStep.js +111 -0
  411. package/dist/dist/editor/control-center/setup-steps/SettingsSetupStep.js.map +1 -0
  412. package/dist/dist/editor/control-center/setup-steps/SetupOverview.d.ts +14 -0
  413. package/dist/dist/editor/control-center/setup-steps/SetupOverview.js +38 -0
  414. package/dist/dist/editor/control-center/setup-steps/SetupOverview.js.map +1 -0
  415. package/dist/dist/editor/editor-warnings/ItemLocked.d.ts +2 -0
  416. package/dist/dist/editor/editor-warnings/ItemLocked.js +38 -0
  417. package/dist/dist/editor/editor-warnings/ItemLocked.js.map +1 -0
  418. package/dist/dist/editor/editor-warnings/NoLanguageWriteAccess.d.ts +2 -0
  419. package/dist/dist/editor/editor-warnings/NoLanguageWriteAccess.js +14 -0
  420. package/dist/dist/editor/editor-warnings/NoLanguageWriteAccess.js.map +1 -0
  421. package/dist/dist/editor/editor-warnings/NoWorkflowWriteAccess.d.ts +2 -0
  422. package/dist/dist/editor/editor-warnings/NoWorkflowWriteAccess.js +14 -0
  423. package/dist/dist/editor/editor-warnings/NoWorkflowWriteAccess.js.map +1 -0
  424. package/dist/dist/editor/editor-warnings/NoWriteAccess.d.ts +2 -0
  425. package/dist/dist/editor/editor-warnings/NoWriteAccess.js +14 -0
  426. package/dist/dist/editor/editor-warnings/NoWriteAccess.js.map +1 -0
  427. package/dist/dist/editor/editor-warnings/ValidationErrors.d.ts +2 -0
  428. package/dist/dist/editor/editor-warnings/ValidationErrors.js +28 -0
  429. package/dist/dist/editor/editor-warnings/ValidationErrors.js.map +1 -0
  430. package/dist/dist/editor/field-types/AttachmentEditor.d.ts +9 -0
  431. package/dist/dist/editor/field-types/AttachmentEditor.js +68 -0
  432. package/dist/dist/editor/field-types/AttachmentEditor.js.map +1 -0
  433. package/dist/dist/editor/field-types/CheckboxEditor.d.ts +5 -0
  434. package/dist/dist/editor/field-types/CheckboxEditor.js +30 -0
  435. package/dist/dist/editor/field-types/CheckboxEditor.js.map +1 -0
  436. package/dist/dist/editor/field-types/DateFieldEditor.d.ts +5 -0
  437. package/dist/dist/editor/field-types/DateFieldEditor.js +93 -0
  438. package/dist/dist/editor/field-types/DateFieldEditor.js.map +1 -0
  439. package/dist/dist/editor/field-types/DateTimeFieldEditor.d.ts +5 -0
  440. package/dist/dist/editor/field-types/DateTimeFieldEditor.js +151 -0
  441. package/dist/dist/editor/field-types/DateTimeFieldEditor.js.map +1 -0
  442. package/dist/dist/editor/field-types/DropLinkEditor.d.ts +5 -0
  443. package/dist/dist/editor/field-types/DropLinkEditor.js +42 -0
  444. package/dist/dist/editor/field-types/DropLinkEditor.js.map +1 -0
  445. package/dist/dist/editor/field-types/DropListEditor.d.ts +5 -0
  446. package/dist/dist/editor/field-types/DropListEditor.js +46 -0
  447. package/dist/dist/editor/field-types/DropListEditor.js.map +1 -0
  448. package/dist/dist/editor/field-types/ImageFieldEditor.d.ts +5 -0
  449. package/dist/dist/editor/field-types/ImageFieldEditor.js +34 -0
  450. package/dist/dist/editor/field-types/ImageFieldEditor.js.map +1 -0
  451. package/dist/dist/editor/field-types/InternalLinkFieldEditor.d.ts +5 -0
  452. package/dist/dist/editor/field-types/InternalLinkFieldEditor.js +172 -0
  453. package/dist/dist/editor/field-types/InternalLinkFieldEditor.js.map +1 -0
  454. package/dist/dist/editor/field-types/LinkFieldEditor.d.ts +5 -0
  455. package/dist/dist/editor/field-types/LinkFieldEditor.js +62 -0
  456. package/dist/dist/editor/field-types/LinkFieldEditor.js.map +1 -0
  457. package/dist/dist/editor/field-types/MultiLineText.d.ts +7 -0
  458. package/dist/dist/editor/field-types/MultiLineText.js +48 -0
  459. package/dist/dist/editor/field-types/MultiLineText.js.map +1 -0
  460. package/dist/dist/editor/field-types/NameValueListEditor.d.ts +7 -0
  461. package/dist/dist/editor/field-types/NameValueListEditor.js +101 -0
  462. package/dist/dist/editor/field-types/NameValueListEditor.js.map +1 -0
  463. package/dist/dist/editor/field-types/PictureFieldEditor.d.ts +5 -0
  464. package/dist/dist/editor/field-types/PictureFieldEditor.js +58 -0
  465. package/dist/dist/editor/field-types/PictureFieldEditor.js.map +1 -0
  466. package/dist/dist/editor/field-types/RawEditor.d.ts +6 -0
  467. package/dist/dist/editor/field-types/RawEditor.js +31 -0
  468. package/dist/dist/editor/field-types/RawEditor.js.map +1 -0
  469. package/dist/dist/editor/field-types/ReactQuill.d.ts +125 -0
  470. package/dist/dist/editor/field-types/ReactQuill.js +385 -0
  471. package/dist/dist/editor/field-types/ReactQuill.js.map +1 -0
  472. package/dist/dist/editor/field-types/RichTextEditor.d.ts +7 -0
  473. package/dist/dist/editor/field-types/RichTextEditor.js +21 -0
  474. package/dist/dist/editor/field-types/RichTextEditor.js.map +1 -0
  475. package/dist/dist/editor/field-types/RichTextEditorComponent.d.ts +8 -0
  476. package/dist/dist/editor/field-types/RichTextEditorComponent.js +88 -0
  477. package/dist/dist/editor/field-types/RichTextEditorComponent.js.map +1 -0
  478. package/dist/dist/editor/field-types/SingleLineText.d.ts +7 -0
  479. package/dist/dist/editor/field-types/SingleLineText.js +113 -0
  480. package/dist/dist/editor/field-types/SingleLineText.js.map +1 -0
  481. package/dist/dist/editor/field-types/TreeListEditor.d.ts +5 -0
  482. package/dist/dist/editor/field-types/TreeListEditor.js +387 -0
  483. package/dist/dist/editor/field-types/TreeListEditor.js.map +1 -0
  484. package/dist/dist/editor/field-types/richtext/components/EditorDropdown.css +82 -0
  485. package/dist/dist/editor/field-types/richtext/components/EditorDropdown.d.ts +11 -0
  486. package/dist/dist/editor/field-types/richtext/components/EditorDropdown.js +83 -0
  487. package/dist/dist/editor/field-types/richtext/components/EditorDropdown.js.map +1 -0
  488. package/dist/dist/editor/field-types/richtext/components/ReactSlate.css +208 -0
  489. package/dist/dist/editor/field-types/richtext/components/ReactSlate.d.ts +5 -0
  490. package/dist/dist/editor/field-types/richtext/components/ReactSlate.js +607 -0
  491. package/dist/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -0
  492. package/dist/dist/editor/field-types/richtext/components/SimpleDropdown.d.ts +18 -0
  493. package/dist/dist/editor/field-types/richtext/components/SimpleDropdown.js +71 -0
  494. package/dist/dist/editor/field-types/richtext/components/SimpleDropdown.js.map +1 -0
  495. package/dist/dist/editor/field-types/richtext/components/SimpleRichTextEditor.css +325 -0
  496. package/dist/dist/editor/field-types/richtext/components/SimpleRichTextEditor.d.ts +5 -0
  497. package/dist/dist/editor/field-types/richtext/components/SimpleRichTextEditor.js +359 -0
  498. package/dist/dist/editor/field-types/richtext/components/SimpleRichTextEditor.js.map +1 -0
  499. package/dist/dist/editor/field-types/richtext/components/SimpleToolbar.d.ts +16 -0
  500. package/dist/dist/editor/field-types/richtext/components/SimpleToolbar.js +181 -0
  501. package/dist/dist/editor/field-types/richtext/components/SimpleToolbar.js.map +1 -0
  502. package/dist/dist/editor/field-types/richtext/components/SimpleToolbarButton.d.ts +9 -0
  503. package/dist/dist/editor/field-types/richtext/components/SimpleToolbarButton.js +14 -0
  504. package/dist/dist/editor/field-types/richtext/components/SimpleToolbarButton.js.map +1 -0
  505. package/dist/dist/editor/field-types/richtext/components/ToolbarButton.d.ts +3 -0
  506. package/dist/dist/editor/field-types/richtext/components/ToolbarButton.js +6 -0
  507. package/dist/dist/editor/field-types/richtext/components/ToolbarButton.js.map +1 -0
  508. package/dist/dist/editor/field-types/richtext/config/pluginFactory.d.ts +19 -0
  509. package/dist/dist/editor/field-types/richtext/config/pluginFactory.js +17 -0
  510. package/dist/dist/editor/field-types/richtext/config/pluginFactory.js.map +1 -0
  511. package/dist/dist/editor/field-types/richtext/contextMenuFactory.d.ts +4 -0
  512. package/dist/dist/editor/field-types/richtext/contextMenuFactory.js +201 -0
  513. package/dist/dist/editor/field-types/richtext/contextMenuFactory.js.map +1 -0
  514. package/dist/dist/editor/field-types/richtext/hooks/useProfileCache.d.ts +68 -0
  515. package/dist/dist/editor/field-types/richtext/hooks/useProfileCache.js +214 -0
  516. package/dist/dist/editor/field-types/richtext/hooks/useProfileCache.js.map +1 -0
  517. package/dist/dist/editor/field-types/richtext/hooks/useRichTextProfile.d.ts +25 -0
  518. package/dist/dist/editor/field-types/richtext/hooks/useRichTextProfile.js +64 -0
  519. package/dist/dist/editor/field-types/richtext/hooks/useRichTextProfile.js.map +1 -0
  520. package/dist/dist/editor/field-types/richtext/index.d.ts +6 -0
  521. package/dist/dist/editor/field-types/richtext/index.js +7 -0
  522. package/dist/dist/editor/field-types/richtext/index.js.map +1 -0
  523. package/dist/dist/editor/field-types/richtext/types.d.ts +288 -0
  524. package/dist/dist/editor/field-types/richtext/types.js +107 -0
  525. package/dist/dist/editor/field-types/richtext/types.js.map +1 -0
  526. package/dist/dist/editor/field-types/richtext/utils/conversion.d.ts +7 -0
  527. package/dist/dist/editor/field-types/richtext/utils/conversion.js +762 -0
  528. package/dist/dist/editor/field-types/richtext/utils/conversion.js.map +1 -0
  529. package/dist/dist/editor/field-types/richtext/utils/plugins.d.ts +170 -0
  530. package/dist/dist/editor/field-types/richtext/utils/plugins.js +490 -0
  531. package/dist/dist/editor/field-types/richtext/utils/plugins.js.map +1 -0
  532. package/dist/dist/editor/field-types/richtext/utils/profileMapper.d.ts +38 -0
  533. package/dist/dist/editor/field-types/richtext/utils/profileMapper.js +386 -0
  534. package/dist/dist/editor/field-types/richtext/utils/profileMapper.js.map +1 -0
  535. package/dist/dist/editor/field-types/richtext/utils/profileServiceCache.d.ts +37 -0
  536. package/dist/dist/editor/field-types/richtext/utils/profileServiceCache.js +119 -0
  537. package/dist/dist/editor/field-types/richtext/utils/profileServiceCache.js.map +1 -0
  538. package/dist/dist/editor/fieldTypes.d.ts +129 -0
  539. package/dist/dist/editor/fieldTypes.js +2 -0
  540. package/dist/dist/editor/fieldTypes.js.map +1 -0
  541. package/dist/dist/editor/hooks/useEditorSettings.d.ts +17 -0
  542. package/dist/dist/editor/hooks/useEditorSettings.js +61 -0
  543. package/dist/dist/editor/hooks/useEditorSettings.js.map +1 -0
  544. package/dist/dist/editor/hooks/useParheliaSettings.d.ts +17 -0
  545. package/dist/dist/editor/hooks/useParheliaSettings.js +61 -0
  546. package/dist/dist/editor/hooks/useParheliaSettings.js.map +1 -0
  547. package/dist/dist/editor/media-selector/AiImageSearch.d.ts +4 -0
  548. package/dist/dist/editor/media-selector/AiImageSearch.js +164 -0
  549. package/dist/dist/editor/media-selector/AiImageSearch.js.map +1 -0
  550. package/dist/dist/editor/media-selector/AiImageSearchPrompt.d.ts +3 -0
  551. package/dist/dist/editor/media-selector/AiImageSearchPrompt.js +57 -0
  552. package/dist/dist/editor/media-selector/AiImageSearchPrompt.js.map +1 -0
  553. package/dist/dist/editor/media-selector/MediaFolderBrowser.d.ts +5 -0
  554. package/dist/dist/editor/media-selector/MediaFolderBrowser.js +182 -0
  555. package/dist/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -0
  556. package/dist/dist/editor/media-selector/MediaSelector.d.ts +9 -0
  557. package/dist/dist/editor/media-selector/MediaSelector.js +8 -0
  558. package/dist/dist/editor/media-selector/MediaSelector.js.map +1 -0
  559. package/dist/dist/editor/media-selector/Preview.d.ts +4 -0
  560. package/dist/dist/editor/media-selector/Preview.js +19 -0
  561. package/dist/dist/editor/media-selector/Preview.js.map +1 -0
  562. package/dist/dist/editor/media-selector/Thumbnails.d.ts +8 -0
  563. package/dist/dist/editor/media-selector/Thumbnails.js +10 -0
  564. package/dist/dist/editor/media-selector/Thumbnails.js.map +1 -0
  565. package/dist/dist/editor/media-selector/TreeSelector.d.ts +7 -0
  566. package/dist/dist/editor/media-selector/TreeSelector.js +183 -0
  567. package/dist/dist/editor/media-selector/TreeSelector.js.map +1 -0
  568. package/dist/dist/editor/media-selector/UploadZone.d.ts +4 -0
  569. package/dist/dist/editor/media-selector/UploadZone.js +81 -0
  570. package/dist/dist/editor/media-selector/UploadZone.js.map +1 -0
  571. package/dist/dist/editor/media-selector/index.d.ts +8 -0
  572. package/dist/dist/editor/media-selector/index.js +9 -0
  573. package/dist/dist/editor/media-selector/index.js.map +1 -0
  574. package/dist/dist/editor/menubar/ActiveUsers.d.ts +1 -0
  575. package/dist/dist/editor/menubar/ActiveUsers.js +120 -0
  576. package/dist/dist/editor/menubar/ActiveUsers.js.map +1 -0
  577. package/dist/dist/editor/menubar/ApproveAndPublish.d.ts +1 -0
  578. package/dist/dist/editor/menubar/ApproveAndPublish.js +13 -0
  579. package/dist/dist/editor/menubar/ApproveAndPublish.js.map +1 -0
  580. package/dist/dist/editor/menubar/FavoritesControls.d.ts +8 -0
  581. package/dist/dist/editor/menubar/FavoritesControls.js +217 -0
  582. package/dist/dist/editor/menubar/FavoritesControls.js.map +1 -0
  583. package/dist/dist/editor/menubar/GenericToolbar.d.ts +11 -0
  584. package/dist/dist/editor/menubar/GenericToolbar.js +10 -0
  585. package/dist/dist/editor/menubar/GenericToolbar.js.map +1 -0
  586. package/dist/dist/editor/menubar/ItemActionsMenu.d.ts +3 -0
  587. package/dist/dist/editor/menubar/ItemActionsMenu.js +23 -0
  588. package/dist/dist/editor/menubar/ItemActionsMenu.js.map +1 -0
  589. package/dist/dist/editor/menubar/ItemLanguageVersion.d.ts +1 -0
  590. package/dist/dist/editor/menubar/ItemLanguageVersion.js +54 -0
  591. package/dist/dist/editor/menubar/ItemLanguageVersion.js.map +1 -0
  592. package/dist/dist/editor/menubar/ItemToolbar.d.ts +1 -0
  593. package/dist/dist/editor/menubar/ItemToolbar.js +11 -0
  594. package/dist/dist/editor/menubar/ItemToolbar.js.map +1 -0
  595. package/dist/dist/editor/menubar/NavButtons.d.ts +1 -0
  596. package/dist/dist/editor/menubar/NavButtons.js +40 -0
  597. package/dist/dist/editor/menubar/NavButtons.js.map +1 -0
  598. package/dist/dist/editor/menubar/PageSelector.d.ts +4 -0
  599. package/dist/dist/editor/menubar/PageSelector.js +152 -0
  600. package/dist/dist/editor/menubar/PageSelector.js.map +1 -0
  601. package/dist/dist/editor/menubar/Separator.d.ts +3 -0
  602. package/dist/dist/editor/menubar/Separator.js +6 -0
  603. package/dist/dist/editor/menubar/Separator.js.map +1 -0
  604. package/dist/dist/editor/menubar/SiteInfo.d.ts +1 -0
  605. package/dist/dist/editor/menubar/SiteInfo.js +24 -0
  606. package/dist/dist/editor/menubar/SiteInfo.js.map +1 -0
  607. package/dist/dist/editor/menubar/ToolbarFactory.d.ts +2 -0
  608. package/dist/dist/editor/menubar/ToolbarFactory.js +55 -0
  609. package/dist/dist/editor/menubar/ToolbarFactory.js.map +1 -0
  610. package/dist/dist/editor/menubar/User.d.ts +4 -0
  611. package/dist/dist/editor/menubar/User.js +18 -0
  612. package/dist/dist/editor/menubar/User.js.map +1 -0
  613. package/dist/dist/editor/menubar/VersionSelector.d.ts +10 -0
  614. package/dist/dist/editor/menubar/VersionSelector.js +53 -0
  615. package/dist/dist/editor/menubar/VersionSelector.js.map +1 -0
  616. package/dist/dist/editor/menubar/WorkflowButton.d.ts +1 -0
  617. package/dist/dist/editor/menubar/WorkflowButton.js +93 -0
  618. package/dist/dist/editor/menubar/WorkflowButton.js.map +1 -0
  619. package/dist/dist/editor/menubar/toolbar-sections/CompareControls.d.ts +1 -0
  620. package/dist/dist/editor/menubar/toolbar-sections/CompareControls.js +11 -0
  621. package/dist/dist/editor/menubar/toolbar-sections/CompareControls.js.map +1 -0
  622. package/dist/dist/editor/menubar/toolbar-sections/EditControls.d.ts +7 -0
  623. package/dist/dist/editor/menubar/toolbar-sections/EditControls.js +15 -0
  624. package/dist/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -0
  625. package/dist/dist/editor/menubar/toolbar-sections/InsertControls.d.ts +1 -0
  626. package/dist/dist/editor/menubar/toolbar-sections/InsertControls.js +15 -0
  627. package/dist/dist/editor/menubar/toolbar-sections/InsertControls.js.map +1 -0
  628. package/dist/dist/editor/menubar/toolbar-sections/ReviewCommands.d.ts +1 -0
  629. package/dist/dist/editor/menubar/toolbar-sections/ReviewCommands.js +41 -0
  630. package/dist/dist/editor/menubar/toolbar-sections/ReviewCommands.js.map +1 -0
  631. package/dist/dist/editor/menubar/toolbar-sections/UtilityControls.d.ts +1 -0
  632. package/dist/dist/editor/menubar/toolbar-sections/UtilityControls.js +17 -0
  633. package/dist/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -0
  634. package/dist/dist/editor/menubar/toolbar-sections/ViewportControls.d.ts +1 -0
  635. package/dist/dist/editor/menubar/toolbar-sections/ViewportControls.js +21 -0
  636. package/dist/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -0
  637. package/dist/dist/editor/menubar/toolbar-sections/index.d.ts +6 -0
  638. package/dist/dist/editor/menubar/toolbar-sections/index.js +7 -0
  639. package/dist/dist/editor/menubar/toolbar-sections/index.js.map +1 -0
  640. package/dist/dist/editor/page-editor-chrome/CommentHighlighting.d.ts +6 -0
  641. package/dist/dist/editor/page-editor-chrome/CommentHighlighting.js +270 -0
  642. package/dist/dist/editor/page-editor-chrome/CommentHighlighting.js.map +1 -0
  643. package/dist/dist/editor/page-editor-chrome/CommentHighlightings.d.ts +4 -0
  644. package/dist/dist/editor/page-editor-chrome/CommentHighlightings.js +15 -0
  645. package/dist/dist/editor/page-editor-chrome/CommentHighlightings.js.map +1 -0
  646. package/dist/dist/editor/page-editor-chrome/FieldActionIndicator.d.ts +4 -0
  647. package/dist/dist/editor/page-editor-chrome/FieldActionIndicator.js +35 -0
  648. package/dist/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -0
  649. package/dist/dist/editor/page-editor-chrome/FieldActionIndicators.d.ts +1 -0
  650. package/dist/dist/editor/page-editor-chrome/FieldActionIndicators.js +13 -0
  651. package/dist/dist/editor/page-editor-chrome/FieldActionIndicators.js.map +1 -0
  652. package/dist/dist/editor/page-editor-chrome/FieldEditedIndicator.d.ts +8 -0
  653. package/dist/dist/editor/page-editor-chrome/FieldEditedIndicator.js +26 -0
  654. package/dist/dist/editor/page-editor-chrome/FieldEditedIndicator.js.map +1 -0
  655. package/dist/dist/editor/page-editor-chrome/FieldEditedIndicators.d.ts +6 -0
  656. package/dist/dist/editor/page-editor-chrome/FieldEditedIndicators.js +14 -0
  657. package/dist/dist/editor/page-editor-chrome/FieldEditedIndicators.js.map +1 -0
  658. package/dist/dist/editor/page-editor-chrome/FrameMenu.d.ts +7 -0
  659. package/dist/dist/editor/page-editor-chrome/FrameMenu.js +346 -0
  660. package/dist/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -0
  661. package/dist/dist/editor/page-editor-chrome/FrameMenus.d.ts +5 -0
  662. package/dist/dist/editor/page-editor-chrome/FrameMenus.js +22 -0
  663. package/dist/dist/editor/page-editor-chrome/FrameMenus.js.map +1 -0
  664. package/dist/dist/editor/page-editor-chrome/InlineEditor.d.ts +5 -0
  665. package/dist/dist/editor/page-editor-chrome/InlineEditor.js +704 -0
  666. package/dist/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -0
  667. package/dist/dist/editor/page-editor-chrome/LockedFieldIndicator.d.ts +1 -0
  668. package/dist/dist/editor/page-editor-chrome/LockedFieldIndicator.js +33 -0
  669. package/dist/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -0
  670. package/dist/dist/editor/page-editor-chrome/NoLayout.d.ts +1 -0
  671. package/dist/dist/editor/page-editor-chrome/NoLayout.js +19 -0
  672. package/dist/dist/editor/page-editor-chrome/NoLayout.js.map +1 -0
  673. package/dist/dist/editor/page-editor-chrome/PageEditorChrome.d.ts +6 -0
  674. package/dist/dist/editor/page-editor-chrome/PageEditorChrome.js +64 -0
  675. package/dist/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -0
  676. package/dist/dist/editor/page-editor-chrome/PictureEditorOverlay.d.ts +1 -0
  677. package/dist/dist/editor/page-editor-chrome/PictureEditorOverlay.js +190 -0
  678. package/dist/dist/editor/page-editor-chrome/PictureEditorOverlay.js.map +1 -0
  679. package/dist/dist/editor/page-editor-chrome/PlaceholderDropZone.d.ts +18 -0
  680. package/dist/dist/editor/page-editor-chrome/PlaceholderDropZone.js +122 -0
  681. package/dist/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -0
  682. package/dist/dist/editor/page-editor-chrome/PlaceholderDropZones.d.ts +5 -0
  683. package/dist/dist/editor/page-editor-chrome/PlaceholderDropZones.js +289 -0
  684. package/dist/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -0
  685. package/dist/dist/editor/page-editor-chrome/SuggestionHighlighting.d.ts +6 -0
  686. package/dist/dist/editor/page-editor-chrome/SuggestionHighlighting.js +224 -0
  687. package/dist/dist/editor/page-editor-chrome/SuggestionHighlighting.js.map +1 -0
  688. package/dist/dist/editor/page-editor-chrome/SuggestionHighlightings.d.ts +4 -0
  689. package/dist/dist/editor/page-editor-chrome/SuggestionHighlightings.js +16 -0
  690. package/dist/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -0
  691. package/dist/dist/editor/page-editor-chrome/useInlineAICompletion.d.ts +7 -0
  692. package/dist/dist/editor/page-editor-chrome/useInlineAICompletion.js +699 -0
  693. package/dist/dist/editor/page-editor-chrome/useInlineAICompletion.js.map +1 -0
  694. package/dist/dist/editor/page-viewer/DeviceToolbar.d.ts +6 -0
  695. package/dist/dist/editor/page-viewer/DeviceToolbar.js +21 -0
  696. package/dist/dist/editor/page-viewer/DeviceToolbar.js.map +1 -0
  697. package/dist/dist/editor/page-viewer/EditorForm.d.ts +8 -0
  698. package/dist/dist/editor/page-viewer/EditorForm.js +264 -0
  699. package/dist/dist/editor/page-viewer/EditorForm.js.map +1 -0
  700. package/dist/dist/editor/page-viewer/EditorFormPopup.d.ts +11 -0
  701. package/dist/dist/editor/page-viewer/EditorFormPopup.js +41 -0
  702. package/dist/dist/editor/page-viewer/EditorFormPopup.js.map +1 -0
  703. package/dist/dist/editor/page-viewer/MiniMap.d.ts +9 -0
  704. package/dist/dist/editor/page-viewer/MiniMap.js +234 -0
  705. package/dist/dist/editor/page-viewer/MiniMap.js.map +1 -0
  706. package/dist/dist/editor/page-viewer/PageViewer.d.ts +10 -0
  707. package/dist/dist/editor/page-viewer/PageViewer.js +67 -0
  708. package/dist/dist/editor/page-viewer/PageViewer.js.map +1 -0
  709. package/dist/dist/editor/page-viewer/PageViewerFrame.d.ts +11 -0
  710. package/dist/dist/editor/page-viewer/PageViewerFrame.js +846 -0
  711. package/dist/dist/editor/page-viewer/PageViewerFrame.js.map +1 -0
  712. package/dist/dist/editor/page-viewer/pageModelSkeletonBuilder.d.ts +3 -0
  713. package/dist/dist/editor/page-viewer/pageModelSkeletonBuilder.js +349 -0
  714. package/dist/dist/editor/page-viewer/pageModelSkeletonBuilder.js.map +1 -0
  715. package/dist/dist/editor/page-viewer/pageViewContext.d.ts +40 -0
  716. package/dist/dist/editor/page-viewer/pageViewContext.js +155 -0
  717. package/dist/dist/editor/page-viewer/pageViewContext.js.map +1 -0
  718. package/dist/dist/editor/pageModel.d.ts +223 -0
  719. package/dist/dist/editor/pageModel.js +2 -0
  720. package/dist/dist/editor/pageModel.js.map +1 -0
  721. package/dist/dist/editor/picture-shared.d.ts +16 -0
  722. package/dist/dist/editor/picture-shared.js +25 -0
  723. package/dist/dist/editor/picture-shared.js.map +1 -0
  724. package/dist/dist/editor/reviews/Comment.d.ts +8 -0
  725. package/dist/dist/editor/reviews/Comment.js +162 -0
  726. package/dist/dist/editor/reviews/Comment.js.map +1 -0
  727. package/dist/dist/editor/reviews/CommentDisplayPopover.d.ts +9 -0
  728. package/dist/dist/editor/reviews/CommentDisplayPopover.js +104 -0
  729. package/dist/dist/editor/reviews/CommentDisplayPopover.js.map +1 -0
  730. package/dist/dist/editor/reviews/CommentEditor.d.ts +20 -0
  731. package/dist/dist/editor/reviews/CommentEditor.js +57 -0
  732. package/dist/dist/editor/reviews/CommentEditor.js.map +1 -0
  733. package/dist/dist/editor/reviews/CommentPopover.d.ts +22 -0
  734. package/dist/dist/editor/reviews/CommentPopover.js +145 -0
  735. package/dist/dist/editor/reviews/CommentPopover.js.map +1 -0
  736. package/dist/dist/editor/reviews/CommentView.d.ts +21 -0
  737. package/dist/dist/editor/reviews/CommentView.js +52 -0
  738. package/dist/dist/editor/reviews/CommentView.js.map +1 -0
  739. package/dist/dist/editor/reviews/Comments.d.ts +3 -0
  740. package/dist/dist/editor/reviews/Comments.js +118 -0
  741. package/dist/dist/editor/reviews/Comments.js.map +1 -0
  742. package/dist/dist/editor/reviews/CreateReviewDialog.d.ts +9 -0
  743. package/dist/dist/editor/reviews/CreateReviewDialog.js +454 -0
  744. package/dist/dist/editor/reviews/CreateReviewDialog.js.map +1 -0
  745. package/dist/dist/editor/reviews/DecisionsMatrix.d.ts +29 -0
  746. package/dist/dist/editor/reviews/DecisionsMatrix.js +739 -0
  747. package/dist/dist/editor/reviews/DecisionsMatrix.js.map +1 -0
  748. package/dist/dist/editor/reviews/DiffView.d.ts +17 -0
  749. package/dist/dist/editor/reviews/DiffView.js +57 -0
  750. package/dist/dist/editor/reviews/DiffView.js.map +1 -0
  751. package/dist/dist/editor/reviews/EditReviewSettingsDialog.d.ts +20 -0
  752. package/dist/dist/editor/reviews/EditReviewSettingsDialog.js +208 -0
  753. package/dist/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -0
  754. package/dist/dist/editor/reviews/ItemTreeSelector.d.ts +9 -0
  755. package/dist/dist/editor/reviews/ItemTreeSelector.js +43 -0
  756. package/dist/dist/editor/reviews/ItemTreeSelector.js.map +1 -0
  757. package/dist/dist/editor/reviews/MultiReviewManager.d.ts +1 -0
  758. package/dist/dist/editor/reviews/MultiReviewManager.js +50 -0
  759. package/dist/dist/editor/reviews/MultiReviewManager.js.map +1 -0
  760. package/dist/dist/editor/reviews/PagesPanel.d.ts +21 -0
  761. package/dist/dist/editor/reviews/PagesPanel.js +124 -0
  762. package/dist/dist/editor/reviews/PagesPanel.js.map +1 -0
  763. package/dist/dist/editor/reviews/PreconfiguredReviewerSelector.d.ts +9 -0
  764. package/dist/dist/editor/reviews/PreconfiguredReviewerSelector.js +55 -0
  765. package/dist/dist/editor/reviews/PreconfiguredReviewerSelector.js.map +1 -0
  766. package/dist/dist/editor/reviews/PreviewInfo.d.ts +1 -0
  767. package/dist/dist/editor/reviews/PreviewInfo.js +12 -0
  768. package/dist/dist/editor/reviews/PreviewInfo.js.map +1 -0
  769. package/dist/dist/editor/reviews/ReviewDetail.d.ts +8 -0
  770. package/dist/dist/editor/reviews/ReviewDetail.js +189 -0
  771. package/dist/dist/editor/reviews/ReviewDetail.js.map +1 -0
  772. package/dist/dist/editor/reviews/ReviewersPanel.d.ts +14 -0
  773. package/dist/dist/editor/reviews/ReviewersPanel.js +216 -0
  774. package/dist/dist/editor/reviews/ReviewersPanel.js.map +1 -0
  775. package/dist/dist/editor/reviews/Reviews.d.ts +1 -0
  776. package/dist/dist/editor/reviews/Reviews.js +6 -0
  777. package/dist/dist/editor/reviews/Reviews.js.map +1 -0
  778. package/dist/dist/editor/reviews/ReviewsList.d.ts +11 -0
  779. package/dist/dist/editor/reviews/ReviewsList.js +134 -0
  780. package/dist/dist/editor/reviews/ReviewsList.js.map +1 -0
  781. package/dist/dist/editor/reviews/SuggestedEdit.d.ts +4 -0
  782. package/dist/dist/editor/reviews/SuggestedEdit.js +200 -0
  783. package/dist/dist/editor/reviews/SuggestedEdit.js.map +1 -0
  784. package/dist/dist/editor/reviews/SuggestionDisplayPopover.d.ts +9 -0
  785. package/dist/dist/editor/reviews/SuggestionDisplayPopover.js +204 -0
  786. package/dist/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -0
  787. package/dist/dist/editor/reviews/commentAi.d.ts +7 -0
  788. package/dist/dist/editor/reviews/commentAi.js +100 -0
  789. package/dist/dist/editor/reviews/commentAi.js.map +1 -0
  790. package/dist/dist/editor/reviews/reviewCommands.d.ts +3 -0
  791. package/dist/dist/editor/reviews/reviewCommands.js +38 -0
  792. package/dist/dist/editor/reviews/reviewCommands.js.map +1 -0
  793. package/dist/dist/editor/reviews/useMultiReview.d.ts +42 -0
  794. package/dist/dist/editor/reviews/useMultiReview.js +377 -0
  795. package/dist/dist/editor/reviews/useMultiReview.js.map +1 -0
  796. package/dist/dist/editor/reviews/useReviews.d.ts +12 -0
  797. package/dist/dist/editor/reviews/useReviews.js +43 -0
  798. package/dist/dist/editor/reviews/useReviews.js.map +1 -0
  799. package/dist/dist/editor/services/agentService.d.ts +368 -0
  800. package/dist/dist/editor/services/agentService.js +721 -0
  801. package/dist/dist/editor/services/agentService.js.map +1 -0
  802. package/dist/dist/editor/services/aiService.d.ts +111 -0
  803. package/dist/dist/editor/services/aiService.js +294 -0
  804. package/dist/dist/editor/services/aiService.js.map +1 -0
  805. package/dist/dist/editor/services/componentDesignerService.d.ts +46 -0
  806. package/dist/dist/editor/services/componentDesignerService.js +72 -0
  807. package/dist/dist/editor/services/componentDesignerService.js.map +1 -0
  808. package/dist/dist/editor/services/contentService.d.ts +79 -0
  809. package/dist/dist/editor/services/contentService.js +127 -0
  810. package/dist/dist/editor/services/contentService.js.map +1 -0
  811. package/dist/dist/editor/services/contextService.d.ts +26 -0
  812. package/dist/dist/editor/services/contextService.js +103 -0
  813. package/dist/dist/editor/services/contextService.js.map +1 -0
  814. package/dist/dist/editor/services/editService.d.ts +66 -0
  815. package/dist/dist/editor/services/editService.js +325 -0
  816. package/dist/dist/editor/services/editService.js.map +1 -0
  817. package/dist/dist/editor/services/favouritesService.d.ts +47 -0
  818. package/dist/dist/editor/services/favouritesService.js +28 -0
  819. package/dist/dist/editor/services/favouritesService.js.map +1 -0
  820. package/dist/dist/editor/services/iconService.d.ts +8 -0
  821. package/dist/dist/editor/services/iconService.js +6 -0
  822. package/dist/dist/editor/services/iconService.js.map +1 -0
  823. package/dist/dist/editor/services/indexService.d.ts +13 -0
  824. package/dist/dist/editor/services/indexService.js +45 -0
  825. package/dist/dist/editor/services/indexService.js.map +1 -0
  826. package/dist/dist/editor/services/reviewsService.d.ts +53 -0
  827. package/dist/dist/editor/services/reviewsService.js +130 -0
  828. package/dist/dist/editor/services/reviewsService.js.map +1 -0
  829. package/dist/dist/editor/services/searchService.d.ts +17 -0
  830. package/dist/dist/editor/services/searchService.js +25 -0
  831. package/dist/dist/editor/services/searchService.js.map +1 -0
  832. package/dist/dist/editor/services/serviceHelper.d.ts +10 -0
  833. package/dist/dist/editor/services/serviceHelper.js +118 -0
  834. package/dist/dist/editor/services/serviceHelper.js.map +1 -0
  835. package/dist/dist/editor/services/setupService.d.ts +30 -0
  836. package/dist/dist/editor/services/setupService.js +17 -0
  837. package/dist/dist/editor/services/setupService.js.map +1 -0
  838. package/dist/dist/editor/services/suggestedEditsService.d.ts +18 -0
  839. package/dist/dist/editor/services/suggestedEditsService.js +44 -0
  840. package/dist/dist/editor/services/suggestedEditsService.js.map +1 -0
  841. package/dist/dist/editor/services/systemService.d.ts +4 -0
  842. package/dist/dist/editor/services/systemService.js +11 -0
  843. package/dist/dist/editor/services/systemService.js.map +1 -0
  844. package/dist/dist/editor/services-server/api.d.ts +19 -0
  845. package/dist/dist/editor/services-server/api.js +111 -0
  846. package/dist/dist/editor/services-server/api.js.map +1 -0
  847. package/dist/dist/editor/services-server/graphQL.d.ts +29 -0
  848. package/dist/dist/editor/services-server/graphQL.js +53 -0
  849. package/dist/dist/editor/services-server/graphQL.js.map +1 -0
  850. package/dist/dist/editor/sidebar/Completions.d.ts +1 -0
  851. package/dist/dist/editor/sidebar/Completions.js +55 -0
  852. package/dist/dist/editor/sidebar/Completions.js.map +1 -0
  853. package/dist/dist/editor/sidebar/ComponentPalette.d.ts +1 -0
  854. package/dist/dist/editor/sidebar/ComponentPalette.js +86 -0
  855. package/dist/dist/editor/sidebar/ComponentPalette.js.map +1 -0
  856. package/dist/dist/editor/sidebar/ComponentTree.d.ts +1 -0
  857. package/dist/dist/editor/sidebar/ComponentTree.js +691 -0
  858. package/dist/dist/editor/sidebar/ComponentTree.js.map +1 -0
  859. package/dist/dist/editor/sidebar/Debug.d.ts +1 -0
  860. package/dist/dist/editor/sidebar/Debug.js +71 -0
  861. package/dist/dist/editor/sidebar/Debug.js.map +1 -0
  862. package/dist/dist/editor/sidebar/DictionaryEditor.d.ts +1 -0
  863. package/dist/dist/editor/sidebar/DictionaryEditor.js +158 -0
  864. package/dist/dist/editor/sidebar/DictionaryEditor.js.map +1 -0
  865. package/dist/dist/editor/sidebar/Divider.d.ts +6 -0
  866. package/dist/dist/editor/sidebar/Divider.js +6 -0
  867. package/dist/dist/editor/sidebar/Divider.js.map +1 -0
  868. package/dist/dist/editor/sidebar/EditHistory.d.ts +1 -0
  869. package/dist/dist/editor/sidebar/EditHistory.js +80 -0
  870. package/dist/dist/editor/sidebar/EditHistory.js.map +1 -0
  871. package/dist/dist/editor/sidebar/GraphQL.d.ts +2 -0
  872. package/dist/dist/editor/sidebar/GraphQL.js +234 -0
  873. package/dist/dist/editor/sidebar/GraphQL.js.map +1 -0
  874. package/dist/dist/editor/sidebar/Insert.d.ts +1 -0
  875. package/dist/dist/editor/sidebar/Insert.js +22 -0
  876. package/dist/dist/editor/sidebar/Insert.js.map +1 -0
  877. package/dist/dist/editor/sidebar/LeftToolbar.d.ts +1 -0
  878. package/dist/dist/editor/sidebar/LeftToolbar.js +16 -0
  879. package/dist/dist/editor/sidebar/LeftToolbar.js.map +1 -0
  880. package/dist/dist/editor/sidebar/MainContentTree.d.ts +5 -0
  881. package/dist/dist/editor/sidebar/MainContentTree.js +70 -0
  882. package/dist/dist/editor/sidebar/MainContentTree.js.map +1 -0
  883. package/dist/dist/editor/sidebar/Performance.d.ts +1 -0
  884. package/dist/dist/editor/sidebar/Performance.js +32 -0
  885. package/dist/dist/editor/sidebar/Performance.js.map +1 -0
  886. package/dist/dist/editor/sidebar/SEOInfo.d.ts +1 -0
  887. package/dist/dist/editor/sidebar/SEOInfo.js +158 -0
  888. package/dist/dist/editor/sidebar/SEOInfo.js.map +1 -0
  889. package/dist/dist/editor/sidebar/Sessions.d.ts +1 -0
  890. package/dist/dist/editor/sidebar/Sessions.js +29 -0
  891. package/dist/dist/editor/sidebar/Sessions.js.map +1 -0
  892. package/dist/dist/editor/sidebar/Sidebar.d.ts +1 -0
  893. package/dist/dist/editor/sidebar/Sidebar.js +13 -0
  894. package/dist/dist/editor/sidebar/Sidebar.js.map +1 -0
  895. package/dist/dist/editor/sidebar/SidebarView.d.ts +13 -0
  896. package/dist/dist/editor/sidebar/SidebarView.js +53 -0
  897. package/dist/dist/editor/sidebar/SidebarView.js.map +1 -0
  898. package/dist/dist/editor/sidebar/Validation.d.ts +1 -0
  899. package/dist/dist/editor/sidebar/Validation.js +51 -0
  900. package/dist/dist/editor/sidebar/Validation.js.map +1 -0
  901. package/dist/dist/editor/sidebar/ViewSelector.d.ts +4 -0
  902. package/dist/dist/editor/sidebar/ViewSelector.js +191 -0
  903. package/dist/dist/editor/sidebar/ViewSelector.js.map +1 -0
  904. package/dist/dist/editor/sidebar/Workbox.d.ts +1 -0
  905. package/dist/dist/editor/sidebar/Workbox.js +79 -0
  906. package/dist/dist/editor/sidebar/Workbox.js.map +1 -0
  907. package/dist/dist/editor/ui/CenteredMessage.d.ts +3 -0
  908. package/dist/dist/editor/ui/CenteredMessage.js +5 -0
  909. package/dist/dist/editor/ui/CenteredMessage.js.map +1 -0
  910. package/dist/dist/editor/ui/CopyMoveTargetSelectorDialog.d.ts +10 -0
  911. package/dist/dist/editor/ui/CopyMoveTargetSelectorDialog.js +38 -0
  912. package/dist/dist/editor/ui/CopyMoveTargetSelectorDialog.js.map +1 -0
  913. package/dist/dist/editor/ui/DialogButtons.d.ts +4 -0
  914. package/dist/dist/editor/ui/DialogButtons.js +6 -0
  915. package/dist/dist/editor/ui/DialogButtons.js.map +1 -0
  916. package/dist/dist/editor/ui/DragPreview.d.ts +14 -0
  917. package/dist/dist/editor/ui/DragPreview.js +33 -0
  918. package/dist/dist/editor/ui/DragPreview.js.map +1 -0
  919. package/dist/dist/editor/ui/IconSelectorDialog.d.ts +5 -0
  920. package/dist/dist/editor/ui/IconSelectorDialog.js +239 -0
  921. package/dist/dist/editor/ui/IconSelectorDialog.js.map +1 -0
  922. package/dist/dist/editor/ui/Icons.d.ts +74 -0
  923. package/dist/dist/editor/ui/Icons.js +106 -0
  924. package/dist/dist/editor/ui/Icons.js.map +1 -0
  925. package/dist/dist/editor/ui/ItemList.d.ts +16 -0
  926. package/dist/dist/editor/ui/ItemList.js +19 -0
  927. package/dist/dist/editor/ui/ItemList.js.map +1 -0
  928. package/dist/dist/editor/ui/ItemNameDialogNew.d.ts +10 -0
  929. package/dist/dist/editor/ui/ItemNameDialogNew.js +82 -0
  930. package/dist/dist/editor/ui/ItemNameDialogNew.js.map +1 -0
  931. package/dist/dist/editor/ui/ItemSearch.d.ts +25 -0
  932. package/dist/dist/editor/ui/ItemSearch.js +92 -0
  933. package/dist/dist/editor/ui/ItemSearch.js.map +1 -0
  934. package/dist/dist/editor/ui/PerfectTree.d.ts +78 -0
  935. package/dist/dist/editor/ui/PerfectTree.js +860 -0
  936. package/dist/dist/editor/ui/PerfectTree.js.map +1 -0
  937. package/dist/dist/editor/ui/Section.d.ts +4 -0
  938. package/dist/dist/editor/ui/Section.js +12 -0
  939. package/dist/dist/editor/ui/Section.js.map +1 -0
  940. package/dist/dist/editor/ui/SimpleIconButton.d.ts +14 -0
  941. package/dist/dist/editor/ui/SimpleIconButton.js +15 -0
  942. package/dist/dist/editor/ui/SimpleIconButton.js.map +1 -0
  943. package/dist/dist/editor/ui/SimpleMenu.d.ts +6 -0
  944. package/dist/dist/editor/ui/SimpleMenu.js +7 -0
  945. package/dist/dist/editor/ui/SimpleMenu.js.map +1 -0
  946. package/dist/dist/editor/ui/SimpleTable.d.ts +14 -0
  947. package/dist/dist/editor/ui/SimpleTable.js +9 -0
  948. package/dist/dist/editor/ui/SimpleTable.js.map +1 -0
  949. package/dist/dist/editor/ui/SimpleTabs.d.ts +16 -0
  950. package/dist/dist/editor/ui/SimpleTabs.js +20 -0
  951. package/dist/dist/editor/ui/SimpleTabs.js.map +1 -0
  952. package/dist/dist/editor/ui/SimpleToolbar.d.ts +3 -0
  953. package/dist/dist/editor/ui/SimpleToolbar.js +5 -0
  954. package/dist/dist/editor/ui/SimpleToolbar.js.map +1 -0
  955. package/dist/dist/editor/ui/Spinner.d.ts +4 -0
  956. package/dist/dist/editor/ui/Spinner.js +18 -0
  957. package/dist/dist/editor/ui/Spinner.js.map +1 -0
  958. package/dist/dist/editor/ui/Splitter.d.ts +22 -0
  959. package/dist/dist/editor/ui/Splitter.js +443 -0
  960. package/dist/dist/editor/ui/Splitter.js.map +1 -0
  961. package/dist/dist/editor/ui/TemplateSelectorDialog.d.ts +8 -0
  962. package/dist/dist/editor/ui/TemplateSelectorDialog.js +138 -0
  963. package/dist/dist/editor/ui/TemplateSelectorDialog.js.map +1 -0
  964. package/dist/dist/editor/ui/Toolbar.d.ts +3 -0
  965. package/dist/dist/editor/ui/Toolbar.js +5 -0
  966. package/dist/dist/editor/ui/Toolbar.js.map +1 -0
  967. package/dist/dist/editor/utils/id-helper.d.ts +1 -0
  968. package/dist/dist/editor/utils/id-helper.js +5 -0
  969. package/dist/dist/editor/utils/id-helper.js.map +1 -0
  970. package/dist/dist/editor/utils/insertOptions.d.ts +3 -0
  971. package/dist/dist/editor/utils/insertOptions.js +43 -0
  972. package/dist/dist/editor/utils/insertOptions.js.map +1 -0
  973. package/dist/dist/editor/utils/itemConverters.d.ts +3 -0
  974. package/dist/dist/editor/utils/itemConverters.js +53 -0
  975. package/dist/dist/editor/utils/itemConverters.js.map +1 -0
  976. package/dist/dist/editor/utils/itemutils.d.ts +3 -0
  977. package/dist/dist/editor/utils/itemutils.js +24 -0
  978. package/dist/dist/editor/utils/itemutils.js.map +1 -0
  979. package/dist/dist/editor/utils/jsonCleaner.d.ts +8 -0
  980. package/dist/dist/editor/utils/jsonCleaner.js +76 -0
  981. package/dist/dist/editor/utils/jsonCleaner.js.map +1 -0
  982. package/dist/dist/editor/utils/keyboardNavigation.d.ts +34 -0
  983. package/dist/dist/editor/utils/keyboardNavigation.js +237 -0
  984. package/dist/dist/editor/utils/keyboardNavigation.js.map +1 -0
  985. package/dist/dist/editor/utils/urlUtils.d.ts +9 -0
  986. package/dist/dist/editor/utils/urlUtils.js +25 -0
  987. package/dist/dist/editor/utils/urlUtils.js.map +1 -0
  988. package/dist/dist/editor/utils/useMemoDebug.d.ts +1 -0
  989. package/dist/dist/editor/utils/useMemoDebug.js +18 -0
  990. package/dist/dist/editor/utils/useMemoDebug.js.map +1 -0
  991. package/dist/dist/editor/utils.d.ts +65 -0
  992. package/dist/dist/editor/utils.js +488 -0
  993. package/dist/dist/editor/utils.js.map +1 -0
  994. package/dist/dist/editor/views/CompareView.d.ts +1 -0
  995. package/dist/dist/editor/views/CompareView.js +148 -0
  996. package/dist/dist/editor/views/CompareView.js.map +1 -0
  997. package/dist/dist/editor/views/EditView.d.ts +1 -0
  998. package/dist/dist/editor/views/EditView.js +15 -0
  999. package/dist/dist/editor/views/EditView.js.map +1 -0
  1000. package/dist/dist/editor/views/ItemEditor.d.ts +7 -0
  1001. package/dist/dist/editor/views/ItemEditor.js +29 -0
  1002. package/dist/dist/editor/views/ItemEditor.js.map +1 -0
  1003. package/dist/dist/editor/views/MediaFolderEditView.d.ts +4 -0
  1004. package/dist/dist/editor/views/MediaFolderEditView.js +40 -0
  1005. package/dist/dist/editor/views/MediaFolderEditView.js.map +1 -0
  1006. package/dist/dist/editor/views/ParheliaView.d.ts +5 -0
  1007. package/dist/dist/editor/views/ParheliaView.js +163 -0
  1008. package/dist/dist/editor/views/ParheliaView.js.map +1 -0
  1009. package/dist/dist/editor/views/SingleEditView.d.ts +9 -0
  1010. package/dist/dist/editor/views/SingleEditView.js +33 -0
  1011. package/dist/dist/editor/views/SingleEditView.js.map +1 -0
  1012. package/dist/dist/images/bg-shape-black.webp +0 -0
  1013. package/dist/dist/images/wizard-bg.png +0 -0
  1014. package/dist/dist/images/wizard-tour.png +0 -0
  1015. package/dist/dist/images/wizard.png +0 -0
  1016. package/dist/dist/index.d.ts +67 -0
  1017. package/dist/dist/index.js +57 -0
  1018. package/dist/dist/index.js.map +1 -0
  1019. package/dist/dist/lib/safelist.d.ts +1 -0
  1020. package/dist/dist/lib/safelist.js +5 -0
  1021. package/dist/dist/lib/safelist.js.map +1 -0
  1022. package/dist/dist/lib/utils.d.ts +2 -0
  1023. package/dist/dist/lib/utils.js +6 -0
  1024. package/dist/dist/lib/utils.js.map +1 -0
  1025. package/dist/dist/revision.d.ts +2 -0
  1026. package/dist/dist/revision.js +3 -0
  1027. package/dist/dist/revision.js.map +1 -0
  1028. package/dist/dist/setup/SetupWizardPage.d.ts +5 -0
  1029. package/dist/dist/setup/SetupWizardPage.js +8 -0
  1030. package/dist/dist/setup/SetupWizardPage.js.map +1 -0
  1031. package/dist/dist/setup/services/setupWizardService.d.ts +89 -0
  1032. package/dist/dist/setup/services/setupWizardService.js +92 -0
  1033. package/dist/dist/setup/services/setupWizardService.js.map +1 -0
  1034. package/dist/dist/setup/utils/modelPricing.d.ts +7 -0
  1035. package/dist/dist/setup/utils/modelPricing.js +106 -0
  1036. package/dist/dist/setup/utils/modelPricing.js.map +1 -0
  1037. package/dist/dist/setup/wizard/SetupWizard.d.ts +27 -0
  1038. package/dist/dist/setup/wizard/SetupWizard.js +92 -0
  1039. package/dist/dist/setup/wizard/SetupWizard.js.map +1 -0
  1040. package/dist/dist/setup/wizard/index.d.ts +6 -0
  1041. package/dist/dist/setup/wizard/index.js +6 -0
  1042. package/dist/dist/setup/wizard/index.js.map +1 -0
  1043. package/dist/dist/setup/wizard/steps/AgentsStep.d.ts +2 -0
  1044. package/dist/dist/setup/wizard/steps/AgentsStep.js +117 -0
  1045. package/dist/dist/setup/wizard/steps/AgentsStep.js.map +1 -0
  1046. package/dist/dist/setup/wizard/steps/EndpointsStep.d.ts +2 -0
  1047. package/dist/dist/setup/wizard/steps/EndpointsStep.js +94 -0
  1048. package/dist/dist/setup/wizard/steps/EndpointsStep.js.map +1 -0
  1049. package/dist/dist/setup/wizard/steps/ModelsStep.d.ts +2 -0
  1050. package/dist/dist/setup/wizard/steps/ModelsStep.js +287 -0
  1051. package/dist/dist/setup/wizard/steps/ModelsStep.js.map +1 -0
  1052. package/dist/dist/setup/wizard/steps/SearchStep.d.ts +2 -0
  1053. package/dist/dist/setup/wizard/steps/SearchStep.js +95 -0
  1054. package/dist/dist/setup/wizard/steps/SearchStep.js.map +1 -0
  1055. package/dist/dist/splash-screen/ModernSplashScreen.d.ts +8 -0
  1056. package/dist/dist/splash-screen/ModernSplashScreen.js +36 -0
  1057. package/dist/dist/splash-screen/ModernSplashScreen.js.map +1 -0
  1058. package/dist/dist/splash-screen/NewPage.d.ts +3 -0
  1059. package/dist/dist/splash-screen/NewPage.js +145 -0
  1060. package/dist/dist/splash-screen/NewPage.js.map +1 -0
  1061. package/dist/dist/splash-screen/OpenPage.d.ts +1 -0
  1062. package/dist/dist/splash-screen/OpenPage.js +56 -0
  1063. package/dist/dist/splash-screen/OpenPage.js.map +1 -0
  1064. package/dist/dist/splash-screen/ParheliaAssistantChat.d.ts +8 -0
  1065. package/dist/dist/splash-screen/ParheliaAssistantChat.js +169 -0
  1066. package/dist/dist/splash-screen/ParheliaAssistantChat.js.map +1 -0
  1067. package/dist/dist/splash-screen/ParheliaLogo.d.ts +5 -0
  1068. package/dist/dist/splash-screen/ParheliaLogo.js +71 -0
  1069. package/dist/dist/splash-screen/ParheliaLogo.js.map +1 -0
  1070. package/dist/dist/splash-screen/RecentAgents.d.ts +7 -0
  1071. package/dist/dist/splash-screen/RecentAgents.js +76 -0
  1072. package/dist/dist/splash-screen/RecentAgents.js.map +1 -0
  1073. package/dist/dist/splash-screen/RecentPages.d.ts +1 -0
  1074. package/dist/dist/splash-screen/RecentPages.js +59 -0
  1075. package/dist/dist/splash-screen/RecentPages.js.map +1 -0
  1076. package/dist/dist/splash-screen/SectionHeadline.d.ts +4 -0
  1077. package/dist/dist/splash-screen/SectionHeadline.js +7 -0
  1078. package/dist/dist/splash-screen/SectionHeadline.js.map +1 -0
  1079. package/dist/dist/styles.css +6035 -0
  1080. package/dist/dist/tour/Tour.d.ts +3 -0
  1081. package/dist/dist/tour/Tour.js +426 -0
  1082. package/dist/dist/tour/Tour.js.map +1 -0
  1083. package/dist/dist/tour/default-tour.d.ts +9 -0
  1084. package/dist/dist/tour/default-tour.js +302 -0
  1085. package/dist/dist/tour/default-tour.js.map +1 -0
  1086. package/dist/dist/tour/preview-tour.d.ts +2 -0
  1087. package/dist/dist/tour/preview-tour.js +93 -0
  1088. package/dist/dist/tour/preview-tour.js.map +1 -0
  1089. package/dist/dist/types.d.ts +490 -0
  1090. package/dist/dist/types.js +2 -0
  1091. package/dist/dist/types.js.map +1 -0
  1092. package/dist/editor/control-center/parhelia-setup/Overview.d.ts +1 -0
  1093. package/dist/editor/control-center/parhelia-setup/Overview.js +91 -0
  1094. package/dist/editor/control-center/parhelia-setup/Overview.js.map +1 -0
  1095. package/dist/editor/hooks/useEditorSettings.d.ts +17 -0
  1096. package/dist/editor/hooks/useEditorSettings.js +61 -0
  1097. package/dist/editor/hooks/useEditorSettings.js.map +1 -0
  1098. package/dist/editor/page-viewer/EditorFormPopup.d.ts +11 -0
  1099. package/dist/editor/page-viewer/EditorFormPopup.js +41 -0
  1100. package/dist/editor/page-viewer/EditorFormPopup.js.map +1 -0
  1101. package/dist/revision.d.ts +2 -2
  1102. package/dist/revision.js +2 -2
  1103. package/dist/revision.js.map +1 -1
  1104. package/package.json +1 -1
@@ -0,0 +1,2283 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import React, { useState, useEffect, useRef, useCallback, useSyncExternalStore, } from "react";
4
+ import { toast } from "sonner";
5
+ import { EditContextProvider, FieldsEditContextProvider, OperationsContextProvider, } from "./editContext";
6
+ import { fieldModificationStore } from "./fieldModificationStore";
7
+ import { useRouter, useSearchParams, usePathname } from "next/navigation";
8
+ import { findComponent, getComponentById } from "../componentTreeHelper";
9
+ import { getOperationsContext } from "./operations";
10
+ import { handleErrorResult } from "./helpers";
11
+ import { executeFieldAction as executeFieldServerAction, connectSocket, getEditHistory, releaseFieldLocks, validateItems, } from "../services/editService";
12
+ import { useEditorWebSocket } from "./hooks/useEditorWebSocket";
13
+ import { useSocketMessageHandler } from "./hooks/useSocketMessageHandler";
14
+ import "react-json-view-lite/dist/index.css";
15
+ import { MediaSelector, } from "../media-selector/MediaSelector";
16
+ import { getComponentCommands } from "../commands/componentCommands";
17
+ import { getLanguagesAndVersions, } from "../services/contentService";
18
+ import ConfirmationDialog from "../ConfirmationDialog";
19
+ import { getItemDescriptor } from "../utils";
20
+ import { EditContextMenu } from "../ContextMenu";
21
+ import { FieldEditorPopup } from "../FieldEditorPopup";
22
+ import { post } from "../services/serviceHelper";
23
+ import { PageViewerFrame } from "../page-viewer/PageViewerFrame";
24
+ import { useItemsRepository } from "./itemsRepository";
25
+ import { Spinner } from "../ui/Spinner";
26
+ import { cleanId } from "../utils/id-helper";
27
+ import { useDebouncedCallback } from "use-debounce";
28
+ import { useKeyboardNavigation } from "../utils/keyboardNavigation";
29
+ import { Toaster } from "../../components/ui/sonner";
30
+ import { Tour } from "../../tour/Tour";
31
+ import { usePageViewContext } from "../page-viewer/pageViewContext";
32
+ import { QuickItemSwitcher } from "../QuickItemSwitcher";
33
+ import { getComments, getAvailableCommentTags, } from "../services/reviewsService";
34
+ import { useReviews } from "../reviews/useReviews";
35
+ import uuid from "react-uuid";
36
+ import { flushSync } from "react-dom";
37
+ import { getSuggestedEdits } from "../services/suggestedEditsService";
38
+ import { requestQuota } from "../services/aiService";
39
+ import { useQuota } from "./hooks/useQuota";
40
+ import { useEditorUrlSync } from "./hooks/useEditorUrlSync";
41
+ import { useMediaQuery } from "./hooks/useMediaQuery";
42
+ import { FullscreenControls } from "./ui/FullscreenControls";
43
+ import { EditorChrome } from "./ui/EditorChrome";
44
+ import { useWorkbox } from "./hooks/useWorkbox";
45
+ import { useMediaSelector } from "./hooks/useMediaSelector";
46
+ import { useGlobalEditorKeyDown } from "./hooks/useGlobalEditorKeyDown";
47
+ export function EditorShell({ configuration, className, item: loadItemDescriptor, sessionId, userInfo, userPreferences, parheliaSettings, setUserPreferences, children, }) {
48
+ const router = useRouter();
49
+ const pathname = usePathname();
50
+ const searchParams = useSearchParams();
51
+ const [selection, setSelection] = useState([]);
52
+ const [selectedForInsertion, setSelectedForInsertion] = useState("");
53
+ const [refreshCompletedFlag, setRefreshCompletedFlag] = useState(false);
54
+ const [isRefreshing, setIsRefreshing] = useState(false);
55
+ const [dragObject, setDragObject] = useState();
56
+ // media selection handled by useMediaSelector hook
57
+ const [scrollIntoView, setScrollIntoView] = useState();
58
+ const confirmationDialogRef = useRef(null);
59
+ const contextMenuRef = useRef(null);
60
+ const editContextRef = useRef(undefined);
61
+ const [currentOverlay, setCurrentOverlay] = useState();
62
+ const [contentEditorItem, setContentEditorItem] = useState();
63
+ const [focusedField, setFocusedField] = useState();
64
+ const focusedFieldRef = useRef(undefined);
65
+ const [selectedRange, setSelectedRange] = useState();
66
+ const [validating, setValidating] = useState(false);
67
+ const [inserting, setInserting] = useState();
68
+ const [showFullscreenHint, setShowFullscreenHint] = useState(false);
69
+ // const [showPublishDialog, setShowPublishDialog] = useState(false);
70
+ const [activeFieldActions, setActiveFieldActions] = useState([]);
71
+ const [renderedFields, setRenderedFields] = useState([]);
72
+ const fieldEditorPopupRef = React.useRef(null);
73
+ const [validationResult, setValidationResult] = useState();
74
+ const [editHistory, setEditHistory] = useState([]);
75
+ const [recentEdits, setRecentEdits] = useState([]);
76
+ const addRecentEdit = useCallback((edit) => {
77
+ setRecentEdits((prevEditedFields) => {
78
+ return [
79
+ ...prevEditedFields.filter((x) => x.timestamp > Date.now() - 30000 &&
80
+ (x.fieldId !== edit.fieldId ||
81
+ x.item.id !== edit.item.id ||
82
+ x.item.language !== edit.item.language ||
83
+ x.item.version !== edit.item.version)),
84
+ edit,
85
+ ];
86
+ });
87
+ }, []);
88
+ const [activeSessions, setActiveSessions] = useState(() => {
89
+ try {
90
+ const existing = globalThis.__alpacaActiveSessions;
91
+ return Array.isArray(existing) ? existing : [];
92
+ }
93
+ catch {
94
+ return [];
95
+ }
96
+ });
97
+ // Block editing until the server acknowledges our client-info for the current item
98
+ const [isClientInfoAcknowledged, setIsClientInfoAcknowledged] = useState(false);
99
+ if (typeof window !== "undefined")
100
+ sessionStorage?.setItem("sessionId", sessionId);
101
+ const [viewName, setViewName] = useState(
102
+ // default from query string
103
+ searchParams.get("view") ??
104
+ configuration.editor.views[0]?.name ??
105
+ "splash-screen");
106
+ const [previousViewName, setPreviousViewName] = useState(undefined);
107
+ const [compareMode, setCompareMode] = useState(false);
108
+ const [compareTo, setCompareTo] = useState();
109
+ const [componentDesignerComponent, setComponentDesignerComponent] = useState();
110
+ const [componentDesignerRendering, setComponentDesignerRendering] = useState();
111
+ const [insertMode, setInsertMode] = useState(false);
112
+ const [ignoreBlur, setIgnoreBlur] = useState(false);
113
+ const [currentItemDescriptor, setCurrentItemDescriptor] = useState();
114
+ const currentItemDescriptorRef = useRef(undefined);
115
+ useEffect(() => {
116
+ currentItemDescriptorRef.current = currentItemDescriptor;
117
+ }, [currentItemDescriptor]);
118
+ const currentItemRef = useRef(undefined);
119
+ useEffect(() => {
120
+ currentItemRef.current = contentEditorItem;
121
+ }, [contentEditorItem]);
122
+ const [inlineEditingFieldElement, setInlineEditingFieldElement] = useState();
123
+ const [lockedField, setLockedField] = useState();
124
+ const [itemLanguages, setItemLanguages] = useState([]);
125
+ const [itemVersions, setItemVersions] = useState([]);
126
+ const modifiedFields = useSyncExternalStore((onStoreChange) => fieldModificationStore.subscribeAll(onStoreChange), () => fieldModificationStore.getAllFields(), () => fieldModificationStore.getAllFields());
127
+ const [comments, setComments] = useState([]);
128
+ const [suggestedEdits, setSuggestedEdits] = useState([]);
129
+ const [showSuggestedEdits, setShowSuggestedEdits] = useState(false);
130
+ const [showSuggestedEditsDiff, setShowSuggestedEditsDiff] = useState(false);
131
+ const [availableCommentTags, setAvailableCommentTags] = useState([]);
132
+ const [showComments, setShowComments] = useState(() => {
133
+ const savedShowComments = typeof window !== "undefined"
134
+ ? localStorage.getItem("editor.showComments")
135
+ : null;
136
+ return savedShowComments ? JSON.parse(savedShowComments) : true;
137
+ });
138
+ useEffect(() => {
139
+ if (typeof window !== "undefined") {
140
+ localStorage.setItem("editor.showComments", JSON.stringify(showComments));
141
+ }
142
+ }, [showComments]);
143
+ const [showResolvedComments, setShowResolvedComments] = useState(() => {
144
+ const saved = typeof window !== "undefined"
145
+ ? localStorage.getItem("editor.showResolvedComments")
146
+ : null;
147
+ return saved ? JSON.parse(saved) : false;
148
+ });
149
+ useEffect(() => {
150
+ if (typeof window !== "undefined") {
151
+ localStorage.setItem("editor.showResolvedComments", JSON.stringify(showResolvedComments));
152
+ }
153
+ }, [showResolvedComments]);
154
+ const [selectedComment, setSelectedComment] = useState();
155
+ const [browseHistory, setBrowseHistory] = useState(() => {
156
+ // Convert UserBrowseHistoryEntry[] to HistoryEntry[]
157
+ if (!userInfo.browseHistory)
158
+ return [];
159
+ return userInfo.browseHistory.map((entry) => ({
160
+ name: entry.itemName,
161
+ path: entry.itemPath,
162
+ id: entry.itemId,
163
+ version: entry.itemVersion,
164
+ language: entry.itemLanguage,
165
+ hasLayout: false, // This will need to be determined from the item
166
+ templateName: "", // This will need to be determined from the item
167
+ icon: entry.icon,
168
+ }));
169
+ });
170
+ // Navigation history for browser history (view + item combinations)
171
+ const [navigationHistory, setNavigationHistory] = useState(() => {
172
+ // Initialize from browse history with current view
173
+ if (!userInfo.browseHistory)
174
+ return [];
175
+ return userInfo.browseHistory.map((entry) => ({
176
+ viewName: searchParams.get("view") ??
177
+ configuration.editor.views[0]?.name ??
178
+ "content-tree",
179
+ item: {
180
+ id: entry.itemId,
181
+ language: entry.itemLanguage,
182
+ version: entry.itemVersion,
183
+ },
184
+ timestamp: new Date(entry.visitedAt).getTime(),
185
+ displayName: searchParams.get("view") ??
186
+ configuration.editor.views[0]?.name ??
187
+ "content-tree",
188
+ itemName: entry.itemName,
189
+ itemPath: entry.itemPath,
190
+ itemIcon: entry.icon,
191
+ }));
192
+ });
193
+ const [centerPanelView, setCenterPanelView] = useState();
194
+ const [timings, setTimings] = useState({});
195
+ const [revision, setRevision] = useState();
196
+ // moved into useWorkbox
197
+ const [isTourActive, setIsTourActive] = useState(false);
198
+ const [mode, setMode] = useState("edit");
199
+ const [statusMessage, setStatusMessage] = useState("");
200
+ const [focusFieldComponentId, setFocusFieldComponentId] = useState();
201
+ const [enableCompletions, setEnableCompletions] = useState(false);
202
+ const [showComponentNavigator, setShowComponentNavigator] = useState(userPreferences.showComponentNavigator ?? false);
203
+ const [showAgentsPanel, setShowAgentsPanel] = useState(userPreferences.showAgentsPanel ?? false);
204
+ const [activeEditorTab, setActiveEditorTab] = useState(null);
205
+ const [showLayoutComponents, setShowLayoutComponents] = useState(userPreferences.showLayoutComponents ?? false);
206
+ const { quotaInfo, setQuotaInfo, isQuotaExceeded, getQuotaWarningMessage } = useQuota({
207
+ showError: ({ summary, details }) => showErrorToast({ summary, details }),
208
+ });
209
+ const [webSocketMessages, setWebSocketMessages] = useState([]);
210
+ const [favorites, setFavorites] = useState([]);
211
+ // Quick item switcher state
212
+ const [quickSwitcherVisible, setQuickSwitcherVisible] = useState(false);
213
+ const [quickSwitcherSelectedIndex, setQuickSwitcherSelectedIndex] = useState(0);
214
+ // Track initial load to know when to sync state from URL vs URL from state
215
+ const [isInitialLoad, setIsInitialLoad] = useState(true);
216
+ // Wizard state - managed centrally instead of reading URL directly
217
+ const [currentWizardId, setCurrentWizardId] = useState(null);
218
+ // Handle initial mode setup from URL (only on initial load)
219
+ useEffect(() => {
220
+ if (!isInitialLoad)
221
+ return;
222
+ const queryMode = searchParams.get("mode");
223
+ if (queryMode) {
224
+ setMode(queryMode);
225
+ }
226
+ }, [searchParams, isInitialLoad]);
227
+ useEffect(() => {
228
+ if (mode === "suggestions") {
229
+ setViewName("comments");
230
+ }
231
+ }, [mode]);
232
+ useEffect(() => {
233
+ if (focusedField &&
234
+ selection.length > 0 &&
235
+ selection[0] !== focusedField.item.id) {
236
+ setFocusedField(undefined);
237
+ }
238
+ }, [selection]);
239
+ useEffect(() => {
240
+ focusedFieldRef.current = focusedField;
241
+ }, [focusedField]);
242
+ // Track the current page item descriptor for itemsRepository
243
+ const [currentPageItem, setCurrentPageItem] = useState();
244
+ // Create itemsRepository with current page item (will be updated when page loads)
245
+ const itemsRepository = useItemsRepository(addRecentEdit, currentPageItem);
246
+ const pageViewContext = usePageViewContext({
247
+ pageItemDescriptor: currentItemDescriptor,
248
+ itemsRepository,
249
+ configuration,
250
+ });
251
+ // Update currentPageItem when pageViewContext.page is available
252
+ useEffect(() => {
253
+ if (pageViewContext.page?.item.descriptor) {
254
+ setCurrentPageItem(pageViewContext.page.item.descriptor);
255
+ }
256
+ }, [pageViewContext.page?.item.descriptor]);
257
+ // Track which items are rendered/used by the current page for targeted refresh
258
+ const pageItemsSetRef = useRef(new Set());
259
+ const makeItemKey = useCallback((d) => `${d.id}-${d.language}-${d.version}`.toLowerCase(), []);
260
+ useEffect(() => {
261
+ const newSet = new Set();
262
+ const collect = (component) => {
263
+ if (!component)
264
+ return;
265
+ if (component.datasourceItem)
266
+ newSet.add(makeItemKey(component.datasourceItem));
267
+ component.items?.forEach((i) => newSet.add(makeItemKey(i)));
268
+ component.placeholders?.forEach((ph) => ph.components?.forEach(collect));
269
+ };
270
+ if (pageViewContext?.page) {
271
+ // Include the page item itself
272
+ const pageDescriptor = pageViewContext.page.item.descriptor;
273
+ newSet.add(makeItemKey(pageDescriptor));
274
+ collect(pageViewContext.page.rootComponent);
275
+ }
276
+ pageItemsSetRef.current = newSet;
277
+ }, [pageViewContext.page?.editRevision]);
278
+ const isItemUsedInCurrentPage = useCallback((item) => pageItemsSetRef.current.has(makeItemKey(item)), [makeItemKey]);
279
+ const socketMessageListeners = useRef(new Set());
280
+ const addSocketMessageListener = useCallback((callback) => {
281
+ socketMessageListeners.current.add(callback);
282
+ return () => socketMessageListeners.current.delete(callback);
283
+ }, []);
284
+ // Listen for batch completion notifications
285
+ useEffect(() => {
286
+ const removeListener = addSocketMessageListener((message) => {
287
+ if (message.type === "batch-completed") {
288
+ const { batchId, totalJobs, completedJobs, errorJobs } = message.payload;
289
+ let toastMessage;
290
+ if (errorJobs > 0) {
291
+ toastMessage = `Translation batch completed: ${completedJobs}/${totalJobs} successful, ${errorJobs} failed`;
292
+ }
293
+ else {
294
+ toastMessage = `Translation batch completed successfully: ${completedJobs}/${totalJobs} translations finished`;
295
+ }
296
+ // Delay toast slightly to give user time to navigate if they're switching views
297
+ setTimeout(() => {
298
+ toast(toastMessage, {
299
+ duration: 5000, // Show for 5 seconds
300
+ id: `batch-${batchId}`, // Unique ID to prevent duplicates
301
+ });
302
+ // If the user is in the translation-management view for the same batch,
303
+ // trigger a refresh so the UI reflects the final state immediately.
304
+ try {
305
+ const params = new URLSearchParams(window.location.search);
306
+ const currentView = params.get("view");
307
+ const currentBatchId = params.get("batchId") || params.get("batchid");
308
+ if (currentView === "translation-management" &&
309
+ currentBatchId === batchId) {
310
+ // Ask the server for fresh data; BatchTranslationView listens to requestRefresh via editContext
311
+ requestRefresh("immediate");
312
+ }
313
+ }
314
+ catch { }
315
+ }, 1000); // 1 second delay
316
+ }
317
+ });
318
+ return () => {
319
+ try {
320
+ removeListener();
321
+ }
322
+ catch { }
323
+ };
324
+ }, [addSocketMessageListener]);
325
+ const reviews = useReviews({
326
+ currentItemDescriptor,
327
+ addSocketMessageListener: addSocketMessageListener,
328
+ });
329
+ const validate = useDebouncedCallback(async (items) => {
330
+ setValidating(true);
331
+ const result = await validateItems(items, sessionId);
332
+ if (result.type === "success")
333
+ setValidationResult(await result.data);
334
+ setValidating(false);
335
+ }, 1000);
336
+ useEffect(() => {
337
+ setSelectedForInsertion("");
338
+ }, [selection]);
339
+ // Clear any selected insertion template when insert mode is disabled
340
+ useEffect(() => {
341
+ if (!insertMode) {
342
+ setSelectedForInsertion("");
343
+ }
344
+ }, [insertMode]);
345
+ useEffect(() => {
346
+ if (focusedField?.fieldId !== selectedRange?.fieldId) {
347
+ setSelectedRange(undefined);
348
+ }
349
+ }, [focusedField]);
350
+ const currentView = configuration.editor.views.find((x) => x.name === viewName) ??
351
+ configuration.editor.views[0];
352
+ useEffect(() => {
353
+ if (currentView?.defaultCenterPanelView) {
354
+ setCenterPanelView(currentView.defaultCenterPanelView);
355
+ }
356
+ }, [currentView]);
357
+ const sendClientInfoImmediate = useCallback(async () => {
358
+ const clientInfoMessage = {
359
+ type: "client-info",
360
+ sessionId: sessionId,
361
+ url: window.location.href,
362
+ userAgent: navigator.userAgent,
363
+ item: currentItemRef.current
364
+ ? {
365
+ ...currentItemRef.current.descriptor,
366
+ name: currentItemRef.current.name,
367
+ }
368
+ : null,
369
+ };
370
+ const url = "/parhelia/client";
371
+ await post(url, clientInfoMessage);
372
+ }, [sessionId]);
373
+ const debouncedSendClientInfo = useDebouncedCallback(() => {
374
+ void sendClientInfoImmediate();
375
+ }, 100);
376
+ const sendClientInfo = useCallback(() => {
377
+ debouncedSendClientInfo();
378
+ }, [debouncedSendClientInfo]);
379
+ const startTour = useCallback(() => {
380
+ setIsTourActive(true);
381
+ }, [setIsTourActive]);
382
+ const handleSetShowComponentNavigator = useCallback((value) => {
383
+ const newValue = typeof value === "function" ? value(showComponentNavigator) : value;
384
+ setShowComponentNavigator(newValue);
385
+ setUserPreferences({ showComponentNavigator: newValue });
386
+ }, [showComponentNavigator, setShowComponentNavigator, setUserPreferences]);
387
+ const handleSetShowAgentsPanel = useCallback((value) => {
388
+ const newValue = typeof value === "function" ? value(showAgentsPanel) : value;
389
+ setShowAgentsPanel(newValue);
390
+ setUserPreferences({ showAgentsPanel: newValue });
391
+ }, [showAgentsPanel, setShowAgentsPanel, setUserPreferences]);
392
+ const handleSetShowLayoutComponents = useCallback((value) => {
393
+ const newValue = typeof value === "function" ? value(showLayoutComponents) : value;
394
+ setShowLayoutComponents(newValue);
395
+ setUserPreferences({ showLayoutComponents: newValue });
396
+ }, [showLayoutComponents, setShowLayoutComponents, setUserPreferences]);
397
+ const toggleSidebarPin = useCallback((viewName) => {
398
+ setPinnedSidebars((prev) => {
399
+ const newPinnedSidebars = prev.includes(viewName)
400
+ ? prev.filter((name) => name !== viewName)
401
+ : [...prev, viewName];
402
+ setUserPreferences({ pinnedSidebars: newPinnedSidebars });
403
+ return newPinnedSidebars;
404
+ });
405
+ }, [setUserPreferences]);
406
+ const reorderPinnedSidebars = useCallback((newOrder) => {
407
+ setPinnedSidebars(newOrder);
408
+ setUserPreferences({ pinnedSidebars: newOrder });
409
+ }, [setUserPreferences]);
410
+ // messageHandler is defined after loadItem/loadHistory declarations to avoid temporal dead zones
411
+ const user = activeSessions.find((x) => x.sessionId === sessionId)?.user ||
412
+ userInfo.user;
413
+ // Self-heal if our session disappears (e.g., after HMR)
414
+ const missingSessionRecoveryTimerRef = useRef(null);
415
+ const missingSessionRecoveryAttemptsRef = useRef(0);
416
+ useEffect(() => {
417
+ const hasMySession = activeSessions.some((s) => s.sessionId === sessionId);
418
+ if (hasMySession) {
419
+ // Reset recovery state when we see ourselves again
420
+ if (missingSessionRecoveryTimerRef.current) {
421
+ clearTimeout(missingSessionRecoveryTimerRef.current);
422
+ missingSessionRecoveryTimerRef.current = null;
423
+ }
424
+ missingSessionRecoveryAttemptsRef.current = 0;
425
+ return;
426
+ }
427
+ // Only run one recovery timer at a time
428
+ if (missingSessionRecoveryTimerRef.current)
429
+ return;
430
+ const attempt = missingSessionRecoveryAttemptsRef.current + 1;
431
+ const delay = Math.min(250 * Math.pow(2, attempt - 1), 2000);
432
+ console.warn(`⚠️ Current session not present in active sessions. Recovery attempt ${attempt} in ${delay}ms...`);
433
+ missingSessionRecoveryTimerRef.current = setTimeout(() => {
434
+ missingSessionRecoveryTimerRef.current = null;
435
+ missingSessionRecoveryAttemptsRef.current = attempt;
436
+ if (attempt <= 3) {
437
+ sendClientInfo();
438
+ }
439
+ else {
440
+ // Force a reconnect to refresh presence after several failed nudges
441
+ try {
442
+ globalThis.editorSocket?.close(4000, "recover-presence");
443
+ }
444
+ catch { }
445
+ }
446
+ }, delay);
447
+ return () => {
448
+ if (missingSessionRecoveryTimerRef.current) {
449
+ clearTimeout(missingSessionRecoveryTimerRef.current);
450
+ missingSessionRecoveryTimerRef.current = null;
451
+ }
452
+ };
453
+ }, [activeSessions, sessionId]);
454
+ useEffect(() => {
455
+ if (typeof window === "undefined")
456
+ return;
457
+ let lastUrl = window.location.href;
458
+ const keepAliveUrl = "/parhelia/keepalive";
459
+ const interval = setInterval(() => {
460
+ fetch(keepAliveUrl + "?ts=" + Date.now()).catch((error) => console.error("Keep Alive error:", error));
461
+ }, 5 * 60 * 1000);
462
+ const handleMessage = (event) => {
463
+ if (event.data.type === "componentsSelected") {
464
+ setSelection(event.data.componentIds);
465
+ }
466
+ };
467
+ // Listen for browser navigation events (back/forward buttons)
468
+ const handlePopState = (event) => {
469
+ const newUrl = window.location.href;
470
+ if (newUrl !== lastUrl) {
471
+ lastUrl = newUrl;
472
+ // Sync URL parameters back to component state for browser navigation
473
+ const urlParams = new URLSearchParams(window.location.search);
474
+ // Handle view changes
475
+ const urlView = urlParams.get("view");
476
+ if (urlView && urlView !== viewName) {
477
+ setViewName(urlView);
478
+ }
479
+ // Handle wizard ID changes
480
+ const wizardId = urlParams.get("wizardid");
481
+ setCurrentWizardId(wizardId);
482
+ // Handle compare mode changes
483
+ const compareValue = urlParams.get("compare") === "true";
484
+ if (compareValue !== compareMode) {
485
+ setCompareMode(compareValue);
486
+ }
487
+ // Handle mode changes
488
+ const urlMode = urlParams.get("mode");
489
+ if (urlMode && urlMode !== mode) {
490
+ setMode(urlMode);
491
+ }
492
+ // Handle fullscreen changes
493
+ const isFullscreen = urlParams.get("fullscreen") === "true";
494
+ if (isFullscreen !== pageViewContext.fullscreen) {
495
+ pageViewContext.setFullscreen(isFullscreen);
496
+ }
497
+ // Handle item loading
498
+ const itemid = urlParams.get("itemid");
499
+ const language = urlParams.get("lang") ?? urlParams.get("language");
500
+ const versionParam = urlParams.get("version");
501
+ const version = versionParam ? parseInt(versionParam) : 0;
502
+ if (itemid && language) {
503
+ const itemId = cleanId(itemid);
504
+ // Only load if we have a valid itemId and it's different from current item
505
+ if (itemId &&
506
+ (currentItemDescriptorRef.current?.id !== itemId ||
507
+ currentItemDescriptorRef.current?.language !== language ||
508
+ (version &&
509
+ currentItemDescriptorRef.current?.version !== version))) {
510
+ loadItem({
511
+ id: itemId,
512
+ language: language, // TypeScript knows this is non-null due to the if check
513
+ version,
514
+ }, {
515
+ addToBrowseHistory: false, // Don't add to history since this is navigation
516
+ });
517
+ }
518
+ }
519
+ }
520
+ };
521
+ // Also track any other URL changes with a MutationObserver fallback
522
+ const checkUrlChange = () => {
523
+ const currentUrl = window.location.href;
524
+ if (currentUrl !== lastUrl) {
525
+ lastUrl = currentUrl;
526
+ }
527
+ };
528
+ const urlCheckInterval = setInterval(checkUrlChange, 100);
529
+ window.addEventListener("message", handleMessage);
530
+ window.addEventListener("popstate", handlePopState);
531
+ return () => {
532
+ window.removeEventListener("message", handleMessage);
533
+ window.removeEventListener("popstate", handlePopState);
534
+ clearInterval(interval);
535
+ clearInterval(urlCheckInterval);
536
+ };
537
+ }, []);
538
+ const isMobile = useMediaQuery("(max-width: 768px)");
539
+ const media = useMediaSelector();
540
+ useEffect(() => {
541
+ // Suppress auto-start tour when `noTour` query parameter is present
542
+ if (searchParams.get("noTour") !== null) {
543
+ return;
544
+ }
545
+ const tour = configuration.activeTour;
546
+ const key = tour === "default" ? "editor.tourShown" : "editor.tourShown." + tour;
547
+ const tourShown = localStorage.getItem(key);
548
+ if (!tourShown) {
549
+ startTour();
550
+ localStorage.setItem(key, "true");
551
+ }
552
+ }, [user]);
553
+ // WebSocket initialization is performed after messageHandler is defined
554
+ // Defer URL sync until loadItem is defined below
555
+ // Mark end of initial load phase
556
+ useEffect(() => {
557
+ if (isInitialLoad) {
558
+ // Set a small timeout to ensure all initial state setting effects have run
559
+ const timer = setTimeout(() => {
560
+ setIsInitialLoad(false);
561
+ }, 100);
562
+ return () => clearTimeout(timer);
563
+ }
564
+ }, [isInitialLoad]);
565
+ // useEffect(() => {
566
+ // if (contentEditorItem) {
567
+ // const params = new URLSearchParams(window.location.search);
568
+ // const wizardId = params.get("wizardid");
569
+ // if (wizardId && viewName !== "page-wizard") {
570
+ //
571
+ // action: "Setting page-wizard view due to wizardid parameter",
572
+ // wizardId,
573
+ // currentViewName: viewName,
574
+ // currentUrl: window.location.href,
575
+ // timestamp: new Date().toISOString(),
576
+ // });
577
+ // setViewName("page-wizard");
578
+ // }
579
+ // }
580
+ // }, [contentEditorItem, viewName, searchParams]);
581
+ useEffect(() => {
582
+ if (selection.length)
583
+ setSelectedForInsertion("");
584
+ // Does the current focused field belong to the current item?
585
+ const currentItem = selection.length > 0 ? selection[0] : pageViewContext.page?.item.id;
586
+ if (currentItem && focusedField?.item.id !== currentItem) {
587
+ setFocusedField(undefined);
588
+ }
589
+ }, [selection]);
590
+ // When navigating to a different item, clear any focused field so that
591
+ // live context doesn't keep stale field context from the previous page.
592
+ useEffect(() => {
593
+ if (!currentItemDescriptor)
594
+ return;
595
+ if (focusedField) {
596
+ setFocusedField(undefined);
597
+ }
598
+ }, [currentItemDescriptor?.id]);
599
+ const addToEditHistory = useCallback((currentEditOperation) => {
600
+ setEditHistory((history) => {
601
+ // Check if the operation was updated or needs to be added
602
+ const exists = history.some((item) => item.id === currentEditOperation.id);
603
+ return exists ? history : [currentEditOperation, ...history];
604
+ });
605
+ }, []);
606
+ useEffect(() => {
607
+ setRefreshCompletedFlag(!refreshCompletedFlag);
608
+ setInserting(undefined);
609
+ }, [currentItemDescriptor, pageViewContext.page?.item.id]);
610
+ useEffect(() => {
611
+ // When the item changes, reset acknowledgment and re-send client info
612
+ setIsClientInfoAcknowledged(false);
613
+ sendClientInfo();
614
+ }, [currentItemDescriptor]);
615
+ // Detect acknowledgment via presence of our session with matching item in active-sessions
616
+ useEffect(() => {
617
+ if (!currentItemDescriptor)
618
+ return;
619
+ try {
620
+ const me = activeSessions.find((s) => s.sessionId === sessionId);
621
+ const item = me?.item;
622
+ const acknowledged = !!item &&
623
+ item.id === contentEditorItem?.id &&
624
+ item.language === contentEditorItem?.language &&
625
+ item.version === contentEditorItem?.version;
626
+ if (acknowledged)
627
+ setIsClientInfoAcknowledged(true);
628
+ }
629
+ catch { }
630
+ }, [activeSessions, contentEditorItem, sessionId]);
631
+ const loadComments = useCallback(async () => {
632
+ if (!currentItemDescriptor)
633
+ return;
634
+ const result = await getComments(currentItemDescriptor.id, currentItemDescriptor.language, currentItemDescriptor.version);
635
+ if (handleErrorResult(result, ui, state))
636
+ return;
637
+ setComments((x) => {
638
+ const loadedComments = result.data;
639
+ const newComments = x.filter((c) => c.isNew &&
640
+ c.mainItemId === currentItemDescriptor.id &&
641
+ c.language === currentItemDescriptor.language &&
642
+ c.version === currentItemDescriptor.version);
643
+ const allComments = [...loadedComments, ...newComments];
644
+ allComments.sort((a, b) => a.position - b.position);
645
+ return allComments;
646
+ });
647
+ }, [currentItemDescriptor]);
648
+ // Assuming currentItemDescriptor, ui, state, handleErrorResult, and setSuggestedEdits
649
+ // are available in your component context.
650
+ const loadSuggestedEdits = useCallback(async () => {
651
+ if (!contentEditorItem)
652
+ return;
653
+ const result = await getSuggestedEdits(contentEditorItem.descriptor.id, contentEditorItem.descriptor.language, contentEditorItem.descriptor.version);
654
+ if (handleErrorResult(result, ui, state))
655
+ return;
656
+ setSuggestedEdits(result.data || []);
657
+ }, [contentEditorItem]);
658
+ const loadFavorites = useCallback(async () => {
659
+ try {
660
+ const { getAllFavorites } = await import("../services/favouritesService");
661
+ const result = await getAllFavorites();
662
+ if (result.data) {
663
+ setFavorites(result.data);
664
+ }
665
+ }
666
+ catch (error) {
667
+ console.error("Failed to load favorites:", error);
668
+ setFavorites([]);
669
+ }
670
+ }, []);
671
+ const page = pageViewContext.page;
672
+ useEffect(() => {
673
+ const isLoading = !!contentEditorItem &&
674
+ contentEditorItem.hasLayout &&
675
+ (!page || (page?.editRevision ?? "") != (revision ?? ""));
676
+ setIsRefreshing(isLoading && viewName === "page-editor");
677
+ if (!isLoading)
678
+ setInserting(undefined);
679
+ }, [page, viewName, revision]);
680
+ // moved below to ensure requestRefresh is declared first
681
+ const loadHistory = useDebouncedCallback(async (item) => {
682
+ const result = await getEditHistory(item);
683
+ if (handleErrorResult(result, ui, state))
684
+ return;
685
+ setEditHistory(result.data || []);
686
+ }, 200);
687
+ const refreshHistory = useCallback(async (item) => {
688
+ const result = await getEditHistory(item);
689
+ if (handleErrorResult(result, ui, state))
690
+ return;
691
+ setEditHistory(result.data || []);
692
+ }, []);
693
+ // defined below after loadItem/loadItemVersions/requestRefresh
694
+ const requestRefresh = useCallback((mode) => {
695
+ const refreshTimer = globalThis.editorRefreshTimer;
696
+ const doRefresh = () => {
697
+ const newRevision = uuid();
698
+ setRevision(newRevision);
699
+ globalThis.editorRefreshTimer = undefined;
700
+ };
701
+ if (mode === "immediate") {
702
+ doRefresh();
703
+ return;
704
+ }
705
+ if (mode === "waitForQuietPeriod" && refreshTimer) {
706
+ clearTimeout(refreshTimer);
707
+ }
708
+ if (!refreshTimer || mode === "waitForQuietPeriod") {
709
+ globalThis.editorRefreshTimer = setTimeout(() => {
710
+ doRefresh();
711
+ }, mode === "waitForQuietPeriod" ? 1200 : 700);
712
+ }
713
+ }, []);
714
+ useEffect(() => {
715
+ if (!currentItemDescriptor)
716
+ return;
717
+ loadComments();
718
+ loadSuggestedEdits();
719
+ }, [currentItemDescriptor]);
720
+ // Load available comment tags once per current item descriptor
721
+ useEffect(() => {
722
+ let cancelled = false;
723
+ const loadTags = async () => {
724
+ try {
725
+ if (!currentItemDescriptor) {
726
+ if (!cancelled)
727
+ setAvailableCommentTags([]);
728
+ return;
729
+ }
730
+ const tags = await getAvailableCommentTags(currentItemDescriptor);
731
+ if (!cancelled)
732
+ setAvailableCommentTags(tags || []);
733
+ }
734
+ catch {
735
+ if (!cancelled)
736
+ setAvailableCommentTags([]);
737
+ }
738
+ };
739
+ loadTags();
740
+ return () => {
741
+ cancelled = true;
742
+ };
743
+ }, [
744
+ currentItemDescriptor?.id,
745
+ currentItemDescriptor?.language,
746
+ currentItemDescriptor?.version,
747
+ ]);
748
+ // Load favorites on mount
749
+ useEffect(() => {
750
+ loadFavorites();
751
+ }, [loadFavorites]);
752
+ // Automatically focus the first rendered field when a new component is added
753
+ useEffect(() => {
754
+ async function setFocus() {
755
+ if (!focusFieldComponentId)
756
+ return;
757
+ const component = findComponent(focusFieldComponentId, page?.rootComponent?.placeholders ?? []);
758
+ if (component?.datasourceItem) {
759
+ const item = await itemsRepository.getItem(component.datasourceItem);
760
+ if (!item)
761
+ return;
762
+ const field = item.fields.find((f) => component.datasourceItem?.renderedFieldIds?.includes(f.id) &&
763
+ (f.type === "single-line text" ||
764
+ f.type === "multi-line text" ||
765
+ f.type === "rich text"));
766
+ if (field) {
767
+ setFocusedField(field.descriptor);
768
+ setFocusFieldComponentId(undefined);
769
+ }
770
+ }
771
+ }
772
+ if (mode === "edit")
773
+ setFocus();
774
+ }, [page]);
775
+ // Sync state to URL (only after initial load)
776
+ useEffect(() => {
777
+ if (isInitialLoad || !currentItemDescriptor)
778
+ return;
779
+ const current = new URLSearchParams(window.location.search);
780
+ if (current.get("itemid") !== currentItemDescriptor?.id) {
781
+ current.set("itemid", currentItemDescriptor.id);
782
+ }
783
+ if (current.get("lang") !== currentItemDescriptor?.language) {
784
+ current.set("lang", currentItemDescriptor.language);
785
+ }
786
+ if (current.get("version") !== currentItemDescriptor?.version.toString()) {
787
+ current.set("version", currentItemDescriptor.version.toString());
788
+ }
789
+ if (current.get("view") !== viewName) {
790
+ current.set("view", viewName);
791
+ }
792
+ if (!compareMode) {
793
+ current.delete("compare");
794
+ current.delete("compareLanguage");
795
+ current.delete("compareVersion");
796
+ current.delete("compareDevice");
797
+ }
798
+ else {
799
+ current.set("compare", "true");
800
+ }
801
+ current.set("mode", mode);
802
+ // Handle fullscreen parameter
803
+ if (pageViewContext.fullscreen) {
804
+ current.set("fullscreen", "true");
805
+ }
806
+ else {
807
+ current.delete("fullscreen");
808
+ }
809
+ // Handle wizard parameter
810
+ if (currentWizardId) {
811
+ current.set("wizardid", currentWizardId);
812
+ }
813
+ else {
814
+ current.delete("wizardid");
815
+ }
816
+ // Use the actual browser pathname (including any basePath like /parhelia)
817
+ // so we don't accidentally drop the base segment when updating the URL
818
+ const browserPathname = typeof window !== "undefined" ? window.location.pathname : pathname;
819
+ const newUrl = `${browserPathname}?${current.toString()}`;
820
+ const oldUrl = `${browserPathname}${window.location.search}`;
821
+ if (newUrl !== oldUrl) {
822
+ window.history.pushState(null, "", newUrl);
823
+ }
824
+ }, [
825
+ currentItemDescriptor,
826
+ viewName,
827
+ compareMode,
828
+ mode,
829
+ isInitialLoad,
830
+ pathname,
831
+ router,
832
+ pageViewContext.fullscreen,
833
+ currentWizardId,
834
+ ]);
835
+ useEffect(() => {
836
+ async function load() {
837
+ if (!currentItemDescriptor)
838
+ return;
839
+ const item = await itemsRepository.getItem(currentItemDescriptor);
840
+ setContentEditorItem(item);
841
+ if (!item)
842
+ return;
843
+ if (contentEditorItem?.descriptor.id === currentItemDescriptor.id &&
844
+ contentEditorItem?.descriptor.language ===
845
+ currentItemDescriptor.language &&
846
+ contentEditorItem?.descriptor.version !== item.version) {
847
+ showInfoToast({
848
+ summary: "New version!",
849
+ details: "New version of item loaded",
850
+ });
851
+ }
852
+ }
853
+ load();
854
+ }, [itemsRepository.revision]);
855
+ const addToBrowseHistory = useCallback((item) => {
856
+ const historyEntry = {
857
+ path: item.path || "unknown",
858
+ name: item.name || "unknown",
859
+ language: item.language,
860
+ templateName: item.templateName,
861
+ id: item.id,
862
+ hasLayout: item.hasLayout,
863
+ icon: item.icon,
864
+ version: item.version,
865
+ };
866
+ setBrowseHistory((history) => {
867
+ const newItem = item;
868
+ if (!newItem)
869
+ return history;
870
+ const newHistory = [
871
+ historyEntry,
872
+ ...history
873
+ .filter((x) => x.id !== newItem.id || x.language !== newItem.language)
874
+ .slice(0, 25),
875
+ ];
876
+ return newHistory;
877
+ });
878
+ }, [browseHistory, setBrowseHistory]);
879
+ // Add entry to navigation history (view + item combination)
880
+ const addNavigationEntry = useCallback((view, item) => {
881
+ const navEntry = {
882
+ viewName: view,
883
+ item: item
884
+ ? {
885
+ id: item.id,
886
+ language: item.language,
887
+ version: item.version,
888
+ }
889
+ : undefined,
890
+ timestamp: Date.now(),
891
+ displayName: view,
892
+ itemName: item?.name,
893
+ itemPath: item?.path,
894
+ itemIcon: item?.icon,
895
+ };
896
+ setNavigationHistory((history) => {
897
+ // Remove duplicates with same view + item identity (including version),
898
+ // and also handle entries with no item (both undefined)
899
+ const filtered = history.filter((entry) => {
900
+ const sameView = entry.viewName === view;
901
+ const bothNoItem = !entry.item && !item;
902
+ const sameItem = !!entry.item &&
903
+ !!item &&
904
+ entry.item.id === item.id &&
905
+ entry.item.language === item.language &&
906
+ entry.item.version === item.version;
907
+ return !(sameView && (bothNoItem || sameItem));
908
+ });
909
+ // Add new entry at the beginning and limit to 25 items
910
+ return [navEntry, ...filtered].slice(0, 25);
911
+ });
912
+ }, []);
913
+ const loadItem = useCallback(async (itemToLoad, options) => {
914
+ if (typeof itemToLoad === "string")
915
+ itemToLoad = {
916
+ id: itemToLoad,
917
+ language: contentEditorItem?.language || "en",
918
+ version: 0,
919
+ };
920
+ const item = await itemsRepository.getItem(itemToLoad);
921
+ if (!item) {
922
+ return undefined;
923
+ }
924
+ if (!options?.skipViewChange &&
925
+ ((!item.hasLayout && viewName === "page-editor") ||
926
+ viewName == "splash-screen" ||
927
+ viewName == "control-center")) {
928
+ setViewName("content-tree");
929
+ }
930
+ // ensure this is object has no additional properties
931
+ itemToLoad = getItemDescriptor(itemToLoad);
932
+ // Set state for the item (URL will be synced automatically by the state-to-URL effect)
933
+ setCurrentItemDescriptor(itemToLoad);
934
+ setContentEditorItem(item);
935
+ setSelection([]);
936
+ // Load history and add to browse history
937
+ loadHistory(itemToLoad);
938
+ if (options?.addToBrowseHistory ||
939
+ options?.addToBrowseHistory === undefined) {
940
+ addToBrowseHistory(item);
941
+ // Also add to navigation history with current view (unless skipped)
942
+ if (!options?.skipNavigationHistory) {
943
+ addNavigationEntry(viewName, item);
944
+ }
945
+ }
946
+ return item;
947
+ }, [
948
+ itemsRepository,
949
+ setContentEditorItem,
950
+ viewName,
951
+ loadHistory,
952
+ addToBrowseHistory,
953
+ addNavigationEntry,
954
+ ]);
955
+ useEditorUrlSync({
956
+ isInitialLoad,
957
+ setIsInitialLoad,
958
+ searchParams,
959
+ pathname,
960
+ setCurrentWizardId,
961
+ setViewName,
962
+ setCompareMode,
963
+ loadItem,
964
+ currentItemDescriptor,
965
+ loadItemDescriptor,
966
+ routerPush: (url) => router.push(url, { scroll: false }),
967
+ });
968
+ // initialized below after messageHandler
969
+ useEffect(() => {
970
+ if (pageViewContext.fullscreen &&
971
+ !searchParams.get("fullscreen") &&
972
+ !configuration.forceFullscreen)
973
+ setShowFullscreenHint(true);
974
+ }, [pageViewContext.fullscreen, configuration.forceFullscreen]);
975
+ const state = {
976
+ page,
977
+ configuration,
978
+ selection,
979
+ setSelection,
980
+ loadItem,
981
+ addToEditHistory,
982
+ setLockedField,
983
+ contentEditorItem,
984
+ sessionId,
985
+ requestRefresh,
986
+ lockedField,
987
+ itemsRepository,
988
+ user,
989
+ editHistory,
990
+ refreshHistory,
991
+ suggestedEdits,
992
+ setSuggestedEdits,
993
+ mode,
994
+ setFocusFieldComponentId,
995
+ setInsertMode,
996
+ };
997
+ useEffect(() => {
998
+ if (currentOverlay !== "fields")
999
+ fieldEditorPopupRef.current?.close();
1000
+ if (currentOverlay !== "context-menu")
1001
+ contextMenuRef.current?.close({});
1002
+ }, [currentOverlay]);
1003
+ useEffect(() => {
1004
+ loadItemVersions();
1005
+ }, [currentItemDescriptor]);
1006
+ const loadItemVersions = useCallback(async () => {
1007
+ if (!currentItemDescriptorRef.current) {
1008
+ setItemVersions([]);
1009
+ setItemLanguages([]);
1010
+ return;
1011
+ }
1012
+ const result = await getLanguagesAndVersions(currentItemDescriptorRef.current);
1013
+ if (!result?.data) {
1014
+ setItemVersions([]);
1015
+ setItemLanguages([]);
1016
+ showErrorToast({
1017
+ summary: "Error",
1018
+ details: "Failed to load item versions",
1019
+ });
1020
+ return;
1021
+ }
1022
+ const v = [...result.data.versions].reverse() || [];
1023
+ setItemVersions(v);
1024
+ setItemLanguages(result.data.languages);
1025
+ }, [currentItemDescriptorRef.current, setItemVersions, setItemLanguages]);
1026
+ const showErrorToast = useCallback(({ summary, details }) => {
1027
+ toast.error(details || summary || "An error occurred");
1028
+ }, []);
1029
+ const showInfoToast = useCallback(({ summary, details }) => {
1030
+ toast.info(details || summary || "Information");
1031
+ }, []);
1032
+ const onOperationExecuted = useCallback((op) => {
1033
+ // Replace the operation in edit history with the executed operation
1034
+ setEditHistory((prev) => {
1035
+ const existingOpIndex = prev.findIndex((x) => x.id === op.id);
1036
+ if (existingOpIndex >= 0) {
1037
+ const next = [...prev];
1038
+ next[existingOpIndex] = op;
1039
+ return next;
1040
+ }
1041
+ return prev;
1042
+ });
1043
+ if (contentEditorItem?.id === op.mainItem?.id &&
1044
+ contentEditorItem?.language === op.mainItem?.language &&
1045
+ contentEditorItem?.version === op.mainItem?.version) {
1046
+ setInsertMode(false);
1047
+ }
1048
+ }, [contentEditorItem, setEditHistory, setInsertMode]);
1049
+ const ui = {
1050
+ showErrorToast,
1051
+ confirmationDialogRef,
1052
+ onOperationExecuted,
1053
+ };
1054
+ // moved to useMediaSelector
1055
+ const { workboxItems } = useWorkbox({
1056
+ page,
1057
+ currentItemDescriptor,
1058
+ validate,
1059
+ });
1060
+ // WebSocket message handler and connection
1061
+ const messageHandler = useSocketMessageHandler({
1062
+ sessionId,
1063
+ setWebSocketMessages,
1064
+ setActiveSessions,
1065
+ sendClientInfo,
1066
+ itemsRepository,
1067
+ currentItemDescriptor,
1068
+ loadItem,
1069
+ loadItemVersions,
1070
+ setComments,
1071
+ setSuggestedEdits,
1072
+ setActiveFieldActions,
1073
+ setQuotaInfo,
1074
+ requestRefresh,
1075
+ currentItemRef,
1076
+ loadHistory,
1077
+ addRecentEdit,
1078
+ socketMessageListeners,
1079
+ isItemUsedInCurrentPage,
1080
+ });
1081
+ const { socketRef: socketInstanceRef } = useEditorWebSocket({
1082
+ sessionId,
1083
+ onMessage: messageHandler,
1084
+ onOpen: () => console.log("Connected!"),
1085
+ onError: (error) => console.error("WebSocket error:", error),
1086
+ connectSocket,
1087
+ requestQuota,
1088
+ sendClientInfo,
1089
+ });
1090
+ const switchView = (viewName, options) => {
1091
+ async function switchView() {
1092
+ if (currentView?.beforeClose && !options?.skipConfirmation) {
1093
+ const result = await currentView.beforeClose(editContext);
1094
+ if (!result)
1095
+ return;
1096
+ }
1097
+ // Track previous view name before switching
1098
+ setPreviousViewName(editContext.viewName);
1099
+ // Add to navigation history with current item (unless explicitly skipped)
1100
+ if (!options?.skipNavigationHistory) {
1101
+ addNavigationEntry(viewName, contentEditorItem);
1102
+ }
1103
+ if (typeof document.startViewTransition === "function") {
1104
+ document.startViewTransition(() => {
1105
+ flushSync(() => {
1106
+ setViewName(viewName);
1107
+ });
1108
+ });
1109
+ }
1110
+ else {
1111
+ setViewName(viewName);
1112
+ }
1113
+ }
1114
+ switchView();
1115
+ };
1116
+ // Listen for switch-view commands from agents via websocket
1117
+ useEffect(() => {
1118
+ const handleSwitchView = (message) => {
1119
+ if (message.type === "switch-view" && message.payload?.viewName) {
1120
+ try {
1121
+ switchView(message.payload.viewName);
1122
+ }
1123
+ catch (error) {
1124
+ console.error("Error switching view:", error);
1125
+ }
1126
+ }
1127
+ };
1128
+ const unsubscribe = addSocketMessageListener(handleSwitchView);
1129
+ return () => {
1130
+ unsubscribe();
1131
+ };
1132
+ }, [addSocketMessageListener, switchView]);
1133
+ const [dialog, setDialog] = useState(null);
1134
+ const openDialog = useCallback((Component, props) => {
1135
+ // Ensure any existing overlays (e.g., context menu) are closed before opening dialogs
1136
+ try {
1137
+ setCurrentOverlay(undefined);
1138
+ }
1139
+ catch { }
1140
+ return new Promise((resolve) => {
1141
+ const handleClose = (result) => {
1142
+ setDialog(null);
1143
+ resolve(result);
1144
+ };
1145
+ // Delay mounting one tick to let overlay closure propagate
1146
+ setTimeout(() => {
1147
+ setDialog(_jsx(Component, { ...props, onClose: handleClose }));
1148
+ }, 0);
1149
+ });
1150
+ }, [setDialog, setCurrentOverlay]);
1151
+ const executeCommand = useCallback(async ({ command, event, data, }) => {
1152
+ if (!editContextRef.current)
1153
+ return;
1154
+ const context = {
1155
+ editContext: editContextRef.current,
1156
+ pathname,
1157
+ router,
1158
+ searchParams,
1159
+ openDialog: openDialog,
1160
+ event,
1161
+ data,
1162
+ };
1163
+ const result = await command.execute(context);
1164
+ return result;
1165
+ }, [editContextRef, pathname, router, searchParams, openDialog]);
1166
+ const operationsContext = getOperationsContext(state, ui);
1167
+ const operations = operationsContext.ops;
1168
+ // Shared focused field setter with lock handling (used in both contexts)
1169
+ const setFocusedFieldWithLock = useCallback(async (field, requestLock) => {
1170
+ console.log("[setFocusedFieldWithLock] Called with:", {
1171
+ field: field
1172
+ ? {
1173
+ fieldId: field.fieldId,
1174
+ itemId: field.item?.id,
1175
+ language: field.item?.language,
1176
+ version: field.item?.version,
1177
+ }
1178
+ : undefined,
1179
+ requestLock,
1180
+ ignoreBlur,
1181
+ timestamp: new Date().toISOString(),
1182
+ });
1183
+ if (field) {
1184
+ setIgnoreBlur(true);
1185
+ setTimeout(() => {
1186
+ setIgnoreBlur(false);
1187
+ }, 20);
1188
+ setFocusedField({ ...field });
1189
+ if (requestLock) {
1190
+ console.log("[setFocusedFieldWithLock] Calling operations.ensureLock for field:", field.fieldId);
1191
+ const lockResult = (await operations.ensureLock(field)) || false;
1192
+ console.log("[setFocusedFieldWithLock] ensureLock result:", lockResult);
1193
+ return lockResult;
1194
+ }
1195
+ }
1196
+ else {
1197
+ console.log("[setFocusedFieldWithLock] Clearing focused field, ignoreBlur:", ignoreBlur);
1198
+ if (!ignoreBlur) {
1199
+ setFocusedField(undefined);
1200
+ console.log("[setFocusedFieldWithLock] Clearing lockedField state");
1201
+ setLockedField(undefined); // Clear client-side lock state
1202
+ releaseFieldLocks(sessionId);
1203
+ }
1204
+ }
1205
+ return true;
1206
+ }, [operations, ignoreBlur, sessionId]);
1207
+ // Quick switcher handlers
1208
+ const showQuickSwitcher = useCallback((show) => {
1209
+ console.log(`[QuickSwitcher] showQuickSwitcher called: show=${show}, historyLength=${navigationHistory.length}`);
1210
+ if (show && navigationHistory.length > 1) {
1211
+ setQuickSwitcherVisible(true);
1212
+ // Start with index 1 (second entry - previous entry) for quick switching
1213
+ setQuickSwitcherSelectedIndex(1);
1214
+ console.log("[QuickSwitcher] Switcher opened, selected index: 1");
1215
+ console.log("[QuickSwitcher] Navigation history:", navigationHistory.map((h, i) => `[${i}] ${h.displayName}`));
1216
+ }
1217
+ else {
1218
+ setQuickSwitcherVisible(false);
1219
+ console.log("[QuickSwitcher] Switcher closed");
1220
+ }
1221
+ }, [navigationHistory]);
1222
+ const cycleQuickSwitcher = useCallback((direction) => {
1223
+ console.log(`[QuickSwitcher] cycleQuickSwitcher: direction=${direction}, visible=${quickSwitcherVisible}`);
1224
+ if (!quickSwitcherVisible)
1225
+ return;
1226
+ const maxItems = Math.min(5, navigationHistory.length);
1227
+ setQuickSwitcherSelectedIndex((current) => {
1228
+ let newIndex = current;
1229
+ // Determine grid layout (responsive columns)
1230
+ // Matches the grid in QuickItemSwitcher: 2/3/4/5 columns
1231
+ const getColumnsForWidth = () => {
1232
+ const width = window.innerWidth;
1233
+ if (width >= 1280)
1234
+ return 5; // xl
1235
+ if (width >= 1024)
1236
+ return 4; // lg
1237
+ if (width >= 768)
1238
+ return 3; // md
1239
+ return 2; // default
1240
+ };
1241
+ const columns = getColumnsForWidth();
1242
+ switch (direction) {
1243
+ case "next":
1244
+ newIndex = (current + 1) % maxItems;
1245
+ break;
1246
+ case "prev":
1247
+ newIndex = (current - 1 + maxItems) % maxItems;
1248
+ break;
1249
+ case "down":
1250
+ newIndex = current + columns;
1251
+ if (newIndex >= maxItems) {
1252
+ // Wrap to first row
1253
+ newIndex = current % columns;
1254
+ }
1255
+ break;
1256
+ case "up":
1257
+ newIndex = current - columns;
1258
+ if (newIndex < 0) {
1259
+ // Wrap to last row
1260
+ const currentCol = current % columns;
1261
+ const rows = Math.ceil(maxItems / columns);
1262
+ newIndex = (rows - 1) * columns + currentCol;
1263
+ if (newIndex >= maxItems) {
1264
+ newIndex = maxItems - columns + currentCol;
1265
+ }
1266
+ }
1267
+ break;
1268
+ }
1269
+ console.log(`[QuickSwitcher] Cycling from index ${current} to ${newIndex} (${columns} columns)`);
1270
+ return newIndex;
1271
+ });
1272
+ }, [quickSwitcherVisible, browseHistory]);
1273
+ const handleQuickSwitcherSelect = useCallback((index) => {
1274
+ console.log(`[QuickSwitcher] Selecting entry at index ${index}`);
1275
+ const selectedEntry = navigationHistory[index];
1276
+ if (selectedEntry) {
1277
+ console.log(`[QuickSwitcher] Navigating to:`, selectedEntry);
1278
+ // First switch view
1279
+ if (selectedEntry.viewName !== viewName) {
1280
+ // Avoid inserting a duplicate navigation entry; we'll explicitly move the
1281
+ // selected one to the front below
1282
+ switchView(selectedEntry.viewName, {
1283
+ skipConfirmation: true,
1284
+ skipNavigationHistory: true,
1285
+ });
1286
+ }
1287
+ // Then load item if it exists and is different from current
1288
+ if (selectedEntry.item) {
1289
+ const isDifferentItem = !contentEditorItem ||
1290
+ contentEditorItem.id !== selectedEntry.item.id ||
1291
+ contentEditorItem.language !== selectedEntry.item.language ||
1292
+ contentEditorItem.version !== selectedEntry.item.version;
1293
+ if (isDifferentItem) {
1294
+ console.log(`[QuickSwitcher] Loading different item:`, selectedEntry.item);
1295
+ loadItem({
1296
+ id: selectedEntry.item.id,
1297
+ language: selectedEntry.item.language,
1298
+ version: selectedEntry.item.version,
1299
+ }, {
1300
+ addToBrowseHistory: false,
1301
+ skipViewChange: true,
1302
+ // Avoid inserting an extra nav entry; we move the selected one below
1303
+ skipNavigationHistory: true,
1304
+ });
1305
+ }
1306
+ else {
1307
+ console.log(`[QuickSwitcher] Same item, skipping reload`);
1308
+ }
1309
+ }
1310
+ // Move selected entry to first position in navigation history by identity
1311
+ setNavigationHistory((history) => {
1312
+ const filtered = history.filter((entry) => {
1313
+ const sameView = entry.viewName === selectedEntry.viewName;
1314
+ const bothNoItem = !entry.item && !selectedEntry.item;
1315
+ const sameItem = !!entry.item &&
1316
+ !!selectedEntry.item &&
1317
+ entry.item.id === selectedEntry.item.id &&
1318
+ entry.item.language === selectedEntry.item.language &&
1319
+ entry.item.version === selectedEntry.item.version;
1320
+ return !(sameView && (bothNoItem || sameItem));
1321
+ });
1322
+ return [selectedEntry, ...filtered].slice(0, 25);
1323
+ });
1324
+ }
1325
+ setQuickSwitcherVisible(false);
1326
+ }, [
1327
+ navigationHistory,
1328
+ loadItem,
1329
+ switchView,
1330
+ viewName,
1331
+ contentEditorItem,
1332
+ setNavigationHistory,
1333
+ ]);
1334
+ const { handleKeyDown } = useKeyboardNavigation({
1335
+ editContextRef,
1336
+ operations,
1337
+ pageViewContext,
1338
+ configuration,
1339
+ contentEditorItem,
1340
+ browseHistory,
1341
+ loadItem,
1342
+ showInfoToast,
1343
+ showErrorToast,
1344
+ executeCommand,
1345
+ showQuickSwitcher,
1346
+ cycleQuickSwitcher,
1347
+ });
1348
+ useGlobalEditorKeyDown(handleKeyDown);
1349
+ // Global keydown/keyup handler to manage quick switcher
1350
+ useEffect(() => {
1351
+ const handleKeyDown = (event) => {
1352
+ if (!quickSwitcherVisible)
1353
+ return;
1354
+ // Enter to select and close
1355
+ if (event.key === "Enter") {
1356
+ event.preventDefault();
1357
+ handleQuickSwitcherSelect(quickSwitcherSelectedIndex);
1358
+ }
1359
+ };
1360
+ const handleKeyUp = (event) => {
1361
+ // Close on Escape without selecting
1362
+ if (event.key === "Escape" && quickSwitcherVisible) {
1363
+ setQuickSwitcherVisible(false);
1364
+ }
1365
+ // Close and select when releasing Ctrl, Alt, or Meta (Win key)
1366
+ if ((event.key === "Control" ||
1367
+ event.key === "Alt" ||
1368
+ event.key === "Meta") &&
1369
+ quickSwitcherVisible) {
1370
+ // Small delay to ensure the key release is not part of the initial trigger
1371
+ setTimeout(() => {
1372
+ handleQuickSwitcherSelect(quickSwitcherSelectedIndex);
1373
+ }, 50);
1374
+ }
1375
+ };
1376
+ if (typeof window !== "undefined") {
1377
+ window.addEventListener("keydown", handleKeyDown);
1378
+ window.addEventListener("keyup", handleKeyUp);
1379
+ return () => {
1380
+ window.removeEventListener("keydown", handleKeyDown);
1381
+ window.removeEventListener("keyup", handleKeyUp);
1382
+ };
1383
+ }
1384
+ }, [
1385
+ quickSwitcherVisible,
1386
+ quickSwitcherSelectedIndex,
1387
+ handleQuickSwitcherSelect,
1388
+ ]);
1389
+ // Global ctrl+click handler for GUID detection and navigation
1390
+ useEffect(() => {
1391
+ const isGuid = (text) => {
1392
+ // Match GUID patterns with or without braces/curly brackets
1393
+ const guidPattern = /^[\{\(]?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}[\}\)]?$/;
1394
+ return guidPattern.test(text.trim());
1395
+ };
1396
+ const extractGuidFromText = (text) => {
1397
+ // Remove quotes, whitespace, and other JSON formatting characters
1398
+ const cleaned = text.replace(/["'\s]/g, "");
1399
+ if (isGuid(cleaned)) {
1400
+ return cleaned;
1401
+ }
1402
+ // Try to find GUID within the text using regex
1403
+ const guidPattern = /[\{\(]?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}[\}\)]?/;
1404
+ const match = text.match(guidPattern);
1405
+ return match ? match[0] : null;
1406
+ };
1407
+ const getTextFromElement = (element) => {
1408
+ if (!element)
1409
+ return null;
1410
+ // First, check if there's a text selection - user might have selected the GUID
1411
+ const selection = window.getSelection();
1412
+ if (selection && !selection.isCollapsed) {
1413
+ const selectedText = selection.toString();
1414
+ const guid = extractGuidFromText(selectedText);
1415
+ if (guid)
1416
+ return guid;
1417
+ }
1418
+ // Try to get text content from the element itself
1419
+ const textContent = element.textContent?.trim();
1420
+ if (textContent) {
1421
+ const guid = extractGuidFromText(textContent);
1422
+ if (guid)
1423
+ return guid;
1424
+ }
1425
+ // Check if we clicked on a text node's parent
1426
+ if (element.childNodes.length === 1) {
1427
+ const firstChild = element.childNodes[0];
1428
+ if (firstChild && firstChild.nodeType === Node.TEXT_NODE) {
1429
+ const text = firstChild.textContent?.trim();
1430
+ if (text) {
1431
+ const guid = extractGuidFromText(text);
1432
+ if (guid)
1433
+ return guid;
1434
+ }
1435
+ }
1436
+ }
1437
+ // Walk up the parent tree to find a parent that might contain a GUID
1438
+ // This helps with JSON viewers where the GUID is split across elements
1439
+ let currentElement = element;
1440
+ let depth = 0;
1441
+ while (currentElement && depth < 5) {
1442
+ const parentText = currentElement.textContent?.trim();
1443
+ if (parentText && parentText.length < 200) {
1444
+ // Avoid huge text blocks
1445
+ const guid = extractGuidFromText(parentText);
1446
+ if (guid)
1447
+ return guid;
1448
+ }
1449
+ currentElement = currentElement.parentElement;
1450
+ depth++;
1451
+ }
1452
+ // Try to find GUIDs in nearby text
1453
+ const walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT, null);
1454
+ let node;
1455
+ while ((node = walker.nextNode())) {
1456
+ const text = node.textContent?.trim();
1457
+ if (text) {
1458
+ const guid = extractGuidFromText(text);
1459
+ if (guid)
1460
+ return guid;
1461
+ }
1462
+ }
1463
+ return null;
1464
+ };
1465
+ const handleCtrlClick = async (event) => {
1466
+ // Only proceed if Ctrl (or Cmd on Mac) is pressed
1467
+ if (!event.ctrlKey && !event.metaKey)
1468
+ return;
1469
+ const target = event.target;
1470
+ const text = getTextFromElement(target);
1471
+ if (text && isGuid(text)) {
1472
+ event.preventDefault();
1473
+ event.stopPropagation();
1474
+ // Clean the GUID (remove braces/brackets)
1475
+ const cleanedGuid = cleanId(text);
1476
+ if (cleanedGuid) {
1477
+ try {
1478
+ // Try to load the item
1479
+ const item = await loadItem(cleanedGuid);
1480
+ if (item) {
1481
+ showInfoToast({
1482
+ summary: "Navigated to item",
1483
+ details: `Opened item: ${item.name}`,
1484
+ });
1485
+ }
1486
+ else {
1487
+ showErrorToast({
1488
+ summary: "Item not found",
1489
+ details: `Could not find item with ID: ${text}`,
1490
+ });
1491
+ }
1492
+ }
1493
+ catch (error) {
1494
+ console.error("Error loading item:", error);
1495
+ showErrorToast({
1496
+ summary: "Navigation error",
1497
+ details: `Failed to load item: ${text}`,
1498
+ });
1499
+ }
1500
+ }
1501
+ }
1502
+ };
1503
+ if (typeof document !== "undefined") {
1504
+ document.addEventListener("click", handleCtrlClick, true);
1505
+ return () => {
1506
+ document.removeEventListener("click", handleCtrlClick, true);
1507
+ };
1508
+ }
1509
+ }, [loadItem, showInfoToast, showErrorToast]);
1510
+ useEffect(() => {
1511
+ const handleGlobalBlur = () => {
1512
+ operations.onFieldBlur?.();
1513
+ };
1514
+ if (typeof document !== "undefined") {
1515
+ document.addEventListener("blur", handleGlobalBlur, true);
1516
+ return () => {
1517
+ document.removeEventListener("blur", handleGlobalBlur, true);
1518
+ };
1519
+ }
1520
+ }, [operations.onFieldBlur]);
1521
+ useEffect(() => {
1522
+ if (mode === "suggestions") {
1523
+ setShowSuggestedEdits(true);
1524
+ }
1525
+ else {
1526
+ setShowSuggestedEdits(false);
1527
+ }
1528
+ }, [mode]);
1529
+ const isReadOnly = !contentEditorItem ||
1530
+ !contentEditorItem.canWriteItem ||
1531
+ !contentEditorItem.canWriteLanguage ||
1532
+ !contentEditorItem.canWriteWorkflow ||
1533
+ // Block editing until server acknowledges client-info for the current item
1534
+ (currentItemDescriptor ? !isClientInfoAcknowledged : false);
1535
+ const updateUrl = useCallback((params) => {
1536
+ const url = new URL(window.location.href);
1537
+ const oldUrl = url.toString();
1538
+ Object.entries(params).forEach(([key, value]) => {
1539
+ if (value)
1540
+ url.searchParams.set(key, value);
1541
+ else
1542
+ url.searchParams.delete(key);
1543
+ });
1544
+ const newUrl = url.toString();
1545
+ router.push(newUrl, { scroll: false });
1546
+ }, [router]);
1547
+ // Calculate visible views separately to avoid circular dependency
1548
+ const allViews = configuration.editor.views
1549
+ ?.filter((x) => {
1550
+ // For this calculation, we'll pass null for editContext since we're building it
1551
+ // The visibility check will be recalculated after editContext is available
1552
+ return !x.visible && !x.hidden;
1553
+ })
1554
+ .filter((x) => !userInfo.views ||
1555
+ userInfo.views.map((view) => view.name).includes(x.name)) ?? [];
1556
+ const pinnedViews = userInfo.preferences?.pinnedViews ||
1557
+ configuration.editor.defaultPinnedViews ||
1558
+ [];
1559
+ const [pinnedSidebars, setPinnedSidebars] = useState(userInfo.preferences?.pinnedSidebars || []);
1560
+ const visibleViews = allViews.filter((view) =>
1561
+ // Always show selected view
1562
+ view.name === viewName ||
1563
+ // Show pinned views
1564
+ pinnedViews.includes(view.name));
1565
+ // Handle initial mode setup from URL (only on initial load)
1566
+ useEffect(() => {
1567
+ if (!isInitialLoad)
1568
+ return;
1569
+ const queryMode = searchParams.get("mode");
1570
+ if (queryMode) {
1571
+ setMode(queryMode);
1572
+ }
1573
+ }, [searchParams, isInitialLoad]);
1574
+ // Add this new effect for initial fullscreen setup
1575
+ useEffect(() => {
1576
+ if (!isInitialLoad)
1577
+ return;
1578
+ const isFullscreen = searchParams.get("fullscreen") === "true";
1579
+ if (isFullscreen !== pageViewContext.fullscreen) {
1580
+ pageViewContext.setFullscreen(isFullscreen);
1581
+ }
1582
+ }, [searchParams, isInitialLoad, pageViewContext]);
1583
+ // Simple registry for per-view context factories (e.g., GraphQL context)
1584
+ // Stored outside the EditContext object via ref to avoid re-renders
1585
+ if (!globalThis.__editorContextFactoriesRef) {
1586
+ globalThis.__editorContextFactoriesRef = {
1587
+ map: new Map(),
1588
+ };
1589
+ }
1590
+ const factoriesRef = globalThis.__editorContextFactoriesRef;
1591
+ const editContext = {
1592
+ operations: operationsContext.ops,
1593
+ itemsRepository,
1594
+ configuration,
1595
+ updateUrl,
1596
+ openSplashScreen: () => {
1597
+ const currentParams = new URLSearchParams(window.location.search);
1598
+ const preservedParams = new URLSearchParams();
1599
+ if (currentParams.get("fullscreen") === "true") {
1600
+ preservedParams.set("fullscreen", "true");
1601
+ }
1602
+ const queryString = preservedParams.toString();
1603
+ // Use the current Next.js pathname so this works correctly with or without
1604
+ // a configured basePath (e.g. basePath="/parhelia" in the static export).
1605
+ // Avoid hard-coding "/parhelia" here because Next will automatically
1606
+ // prepend the basePath when navigating.
1607
+ const basePath = pathname || "/";
1608
+ const newUrl = queryString ? `${basePath}?${queryString}` : basePath;
1609
+ router.push(newUrl, { scroll: false });
1610
+ },
1611
+ item: contentEditorItem || page?.item,
1612
+ itemLanguages,
1613
+ itemVersions,
1614
+ sessionId: sessionId,
1615
+ readonly: isReadOnly,
1616
+ selection,
1617
+ select: (ids) => {
1618
+ try {
1619
+ console.log("[DND][EditContext] select", ids);
1620
+ }
1621
+ catch { }
1622
+ setSelection(ids);
1623
+ },
1624
+ selectedForInsertion,
1625
+ setSelectedForInsertion,
1626
+ dragObject,
1627
+ workboxItems,
1628
+ requestRefresh,
1629
+ refreshCompletedFlag,
1630
+ openCreatePageDialog: () => {
1631
+ const current = new URLSearchParams(searchParams.toString());
1632
+ current.delete("version");
1633
+ current.delete("itemid");
1634
+ current.delete("view");
1635
+ current.set("create", "1");
1636
+ const newUrl = `${pathname}?${current.toString()}`;
1637
+ const oldUrl = `${pathname}?${searchParams.toString()}`;
1638
+ router.push(newUrl, { scroll: false });
1639
+ },
1640
+ selectMedia: media.selectMedia,
1641
+ showToast: (message) => {
1642
+ toast(message);
1643
+ },
1644
+ scrollIntoView,
1645
+ setScrollIntoView,
1646
+ focusedField,
1647
+ setFocusedField: setFocusedFieldWithLock,
1648
+ renderedFields,
1649
+ setRenderedFields,
1650
+ getComponentCommands: async (components) => {
1651
+ return await getComponentCommands(components, editContext);
1652
+ },
1653
+ dragStart: (dragObject) => {
1654
+ setDragObject(dragObject);
1655
+ },
1656
+ dragEnd: () => {
1657
+ setDragObject(undefined);
1658
+ },
1659
+ droppedInPlaceholder: async (placeholderKey, index, spotPositionElement, spotPositionAnchor, insertOption) => {
1660
+ if ((!dragObject && !insertOption) || !page)
1661
+ return;
1662
+ setDragObject(undefined);
1663
+ if (spotPositionElement && spotPositionAnchor) {
1664
+ setInserting({
1665
+ positionElement: spotPositionElement,
1666
+ positionAnchor: spotPositionAnchor,
1667
+ });
1668
+ }
1669
+ const placeholderKeyComponents = placeholderKey.split("_");
1670
+ const parentId = placeholderKeyComponents.length === 1
1671
+ ? undefined
1672
+ : placeholderKeyComponents[1];
1673
+ if (parentId)
1674
+ setSelection([parentId]);
1675
+ let op;
1676
+ if (!currentItemDescriptorRef.current)
1677
+ return;
1678
+ if (insertOption) {
1679
+ // Clear any selected component type for insertion once the component
1680
+ // has been dropped into a placeholder. This ensures that insert mode
1681
+ // can exit cleanly and the editor header updates from "Add Component"
1682
+ // to the actual component name after the operation completes.
1683
+ setSelectedForInsertion("");
1684
+ operations.addComponent(insertOption.typeId, placeholderKey, index, currentItemDescriptorRef.current);
1685
+ return;
1686
+ }
1687
+ if (!dragObject)
1688
+ return;
1689
+ if (dragObject && dragObject.type == "template") {
1690
+ operations.addComponent(dragObject.typeId, placeholderKey, index, currentItemDescriptorRef.current);
1691
+ return;
1692
+ }
1693
+ console.log("dragObject", dragObject);
1694
+ if (dragObject.type == "component" ||
1695
+ (dragObject.type == "items" && dragObject.items)) {
1696
+ const parentComponent = parentId && page ? getComponentById(parentId, page) : null;
1697
+ if (dragObject.type == "items" && dragObject.items) {
1698
+ op = {
1699
+ type: "link-component",
1700
+ mainItem: page.item.descriptor,
1701
+ parent: parentId && {
1702
+ id: parentId,
1703
+ language: page.item.descriptor.language,
1704
+ version: page.item.descriptor.version,
1705
+ name: parentComponent?.name,
1706
+ },
1707
+ placeholderKey,
1708
+ placeholderIndex: index,
1709
+ date: new Date().toISOString(),
1710
+ id: uuid(),
1711
+ linkedComponentItem: dragObject.items[0],
1712
+ description: "Link component",
1713
+ };
1714
+ console.log("op", op);
1715
+ }
1716
+ else {
1717
+ const componentIds = dragObject.components?.map((c) => c.id) ?? [];
1718
+ if (componentIds.length === 0)
1719
+ return;
1720
+ op = {
1721
+ type: "move-component",
1722
+ mainItem: page.item.descriptor,
1723
+ parent: parentId && {
1724
+ id: parentId,
1725
+ language: page.item.descriptor.language,
1726
+ version: page.item.descriptor.version,
1727
+ },
1728
+ placeholderKey,
1729
+ placeholderIndex: index,
1730
+ componentIds,
1731
+ date: new Date().toISOString(),
1732
+ id: uuid(),
1733
+ description: "Move component",
1734
+ };
1735
+ }
1736
+ }
1737
+ if (op)
1738
+ operations.executeEditOperation(op);
1739
+ },
1740
+ page,
1741
+ triggerFieldAction: async (fieldDescriptor, actionButton, parameters) => {
1742
+ const field = await itemsRepository.getField(fieldDescriptor);
1743
+ if (!field)
1744
+ return;
1745
+ const op = {
1746
+ field: fieldDescriptor,
1747
+ // actionButton,
1748
+ label: actionButton.label,
1749
+ state: "running",
1750
+ };
1751
+ const fieldItem = fieldDescriptor.item;
1752
+ if ("clientAction" in actionButton) {
1753
+ await actionButton.clientAction({
1754
+ field,
1755
+ editContext,
1756
+ //dialogContext,
1757
+ });
1758
+ }
1759
+ console.log("Field action before setActiveFieldActions");
1760
+ if (actionButton.action) {
1761
+ setActiveFieldActions((prevFieldActions) => {
1762
+ const isSameField = (x) => x.field.fieldId == fieldDescriptor.fieldId &&
1763
+ x.field.item.id == fieldItem.id &&
1764
+ x.field.item.language == fieldItem.language &&
1765
+ x.field.item.version == fieldItem.version;
1766
+ const existing = prevFieldActions.find(isSameField);
1767
+ // Preserve any existing state/message (e.g., an early websocket error)
1768
+ // to avoid overwriting it with a stale "running" state
1769
+ const mergedOp = existing
1770
+ ? {
1771
+ ...op,
1772
+ state: existing.state,
1773
+ message: existing.message,
1774
+ label: existing.label ?? op.label,
1775
+ }
1776
+ : op;
1777
+ return [...prevFieldActions.filter((x) => !isSameField(x)), mergedOp];
1778
+ });
1779
+ console.log("Field action after setActiveFieldActions");
1780
+ try {
1781
+ await executeFieldServerAction(fieldDescriptor.item, fieldDescriptor.fieldId, contentEditorItem.descriptor, actionButton.action, editContext.sessionId, selectedRange?.text || "", parameters || {}, (data) => {
1782
+ console.log("Field action progress", data);
1783
+ // Update progress message if available
1784
+ if (data?.responseText) {
1785
+ op.message = data.responseText;
1786
+ setActiveFieldActions((prevFieldActions) => [
1787
+ ...prevFieldActions,
1788
+ ]);
1789
+ }
1790
+ });
1791
+ console.log("Field action completed", op);
1792
+ itemsRepository.refreshItems([fieldDescriptor.item]);
1793
+ // Only mark as success if no websocket error has been reported
1794
+ if (op.state === "running") {
1795
+ op.state = "success";
1796
+ // Auto-dismiss successful actions after a brief delay
1797
+ setTimeout(() => {
1798
+ setActiveFieldActions((prevFieldActions) => prevFieldActions.filter((x) => !(x.field.fieldId === fieldDescriptor.fieldId &&
1799
+ x.field.item.id === fieldDescriptor.item.id &&
1800
+ x.field.item.language === fieldDescriptor.item.language &&
1801
+ x.field.item.version === fieldDescriptor.item.version &&
1802
+ x.state === "success")));
1803
+ }, 500);
1804
+ }
1805
+ requestRefresh("immediate");
1806
+ }
1807
+ catch (error) {
1808
+ console.error("Field action failed", error);
1809
+ // Mark as failed and show error message
1810
+ op.state = "error";
1811
+ op.message =
1812
+ error instanceof Error ? error.message : "Field action failed";
1813
+ // Update the field action state to show error
1814
+ setActiveFieldActions((prevFieldActions) => {
1815
+ const isSameField = (x) => x.field.fieldId == fieldDescriptor.fieldId &&
1816
+ x.field.item.id == fieldItem.id &&
1817
+ x.field.item.language == fieldItem.language &&
1818
+ x.field.item.version == fieldItem.version;
1819
+ return [...prevFieldActions.filter((x) => !isSameField(x)), op];
1820
+ });
1821
+ // Auto-dismiss error after a longer delay
1822
+ setTimeout(() => {
1823
+ setActiveFieldActions((prevFieldActions) => prevFieldActions.filter((x) => !(x.field.fieldId === fieldDescriptor.fieldId &&
1824
+ x.field.item.id === fieldDescriptor.item.id &&
1825
+ x.field.item.language === fieldDescriptor.item.language &&
1826
+ x.field.item.version === fieldDescriptor.item.version)));
1827
+ }, 3000);
1828
+ }
1829
+ }
1830
+ },
1831
+ dismissFieldAction: (fieldDescriptor) => {
1832
+ setActiveFieldActions((prevFieldActions) => prevFieldActions.filter((x) => !(x.field.fieldId === fieldDescriptor.fieldId &&
1833
+ x.field.item.id === fieldDescriptor.item.id &&
1834
+ x.field.item.language === fieldDescriptor.item.language &&
1835
+ x.field.item.version === fieldDescriptor.item.version)));
1836
+ },
1837
+ activeFieldActions,
1838
+ showContextMenu: (event, items) => {
1839
+ contextMenuRef.current?.show(event, items);
1840
+ setCurrentOverlay("context-menu");
1841
+ },
1842
+ updateContextMenu: (items) => {
1843
+ contextMenuRef.current?.update(items);
1844
+ },
1845
+ showFieldEditorPopup: (fields, sections, ev) => {
1846
+ setCurrentOverlay("fields");
1847
+ fieldEditorPopupRef.current?.show(fields, sections, ev);
1848
+ },
1849
+ inserting,
1850
+ validating,
1851
+ validationResult,
1852
+ contentEditorItem,
1853
+ loadItem,
1854
+ editHistory,
1855
+ isRefreshing,
1856
+ activeSessions,
1857
+ unlockField: async () => {
1858
+ console.log("[EditContext.unlockField] Clearing lockedField state");
1859
+ setLockedField(undefined); // Clear client-side lock state
1860
+ await releaseFieldLocks(sessionId);
1861
+ },
1862
+ isCommandDisabled: ({ command, data, }) => {
1863
+ const props = {
1864
+ editContext,
1865
+ pathname,
1866
+ router,
1867
+ searchParams,
1868
+ data,
1869
+ openDialog,
1870
+ };
1871
+ return command.disabled(props);
1872
+ },
1873
+ executeCommand,
1874
+ viewName,
1875
+ previousViewName,
1876
+ switchView,
1877
+ pinnedSidebars,
1878
+ toggleSidebarPin,
1879
+ reorderPinnedSidebars,
1880
+ compareMode,
1881
+ setCompareMode,
1882
+ view: currentView,
1883
+ visibleViews,
1884
+ pageView: pageViewContext,
1885
+ componentDesignerComponent,
1886
+ setComponentDesignerComponent,
1887
+ componentDesignerRendering,
1888
+ setComponentDesignerRendering,
1889
+ insertMode,
1890
+ setInsertMode,
1891
+ currentOverlay,
1892
+ setCurrentOverlay,
1893
+ inlineEditingFieldElement,
1894
+ setInlineEditingFieldElement,
1895
+ lockedField,
1896
+ timings,
1897
+ setTimings,
1898
+ selectedRange,
1899
+ setSelectedRange,
1900
+ confirmationDialogRef,
1901
+ confirm: (props) => {
1902
+ confirmationDialogRef.current?.confirm(props);
1903
+ },
1904
+ showMessageDialog: (props) => {
1905
+ confirmationDialogRef.current?.confirm({
1906
+ header: props.header,
1907
+ message: props.message,
1908
+ accept: () => { },
1909
+ acceptLabel: "Ok",
1910
+ });
1911
+ },
1912
+ browseHistory,
1913
+ setCenterPanelView,
1914
+ handleKeyDown,
1915
+ startTour,
1916
+ addSocketMessageListener,
1917
+ currentItemDescriptor,
1918
+ compareTo,
1919
+ setCompareTo,
1920
+ revision,
1921
+ selectedComment,
1922
+ setSelectedComment,
1923
+ comments,
1924
+ availableCommentTags,
1925
+ loadComments,
1926
+ setComments,
1927
+ showComments,
1928
+ setShowComments,
1929
+ showResolvedComments,
1930
+ setShowResolvedComments,
1931
+ addComment: async () => {
1932
+ const descriptor = contentEditorItem?.descriptor;
1933
+ if (!descriptor)
1934
+ return;
1935
+ const itemId = focusedFieldRef.current?.item.id ||
1936
+ (selection.length > 0 ? selection[0] : undefined) ||
1937
+ descriptor.id;
1938
+ if (!itemId)
1939
+ return;
1940
+ const language = descriptor.language;
1941
+ const version = descriptor.version;
1942
+ const getFieldName = async () => {
1943
+ if (!focusedFieldRef.current)
1944
+ return "";
1945
+ const field = await itemsRepository.getField(focusedFieldRef.current);
1946
+ return field?.name;
1947
+ };
1948
+ const getItemName = async () => {
1949
+ const item = await itemsRepository.getItem({
1950
+ id: itemId,
1951
+ language,
1952
+ version,
1953
+ });
1954
+ return item?.name;
1955
+ };
1956
+ const newComment = {
1957
+ id: uuid(),
1958
+ isNew: true,
1959
+ itemId,
1960
+ itemName: await getItemName(),
1961
+ fieldId: focusedFieldRef.current?.fieldId,
1962
+ fieldName: await getFieldName(),
1963
+ mainItemId: descriptor.id,
1964
+ language,
1965
+ version,
1966
+ position: 0,
1967
+ rangeStart: selectedRange?.startOffset || 0,
1968
+ rangeEnd: selectedRange?.endOffset || 0,
1969
+ author: user?.name,
1970
+ authorDisplayName: user?.fullName,
1971
+ date: new Date().toISOString(),
1972
+ };
1973
+ setComments([newComment, ...comments]);
1974
+ setSelectedComment(newComment);
1975
+ setShowComments(true);
1976
+ },
1977
+ mode,
1978
+ setMode,
1979
+ user,
1980
+ reviews,
1981
+ statusMessage,
1982
+ setStatusMessage,
1983
+ suggestedEdits,
1984
+ showSuggestedEdits,
1985
+ setShowSuggestedEdits,
1986
+ showSuggestedEditsDiff,
1987
+ setShowSuggestedEditsDiff,
1988
+ enableCompletions,
1989
+ setEnableCompletions,
1990
+ showComponentNavigator,
1991
+ setShowComponentNavigator: handleSetShowComponentNavigator,
1992
+ showAgentsPanel,
1993
+ setShowAgentsPanel: handleSetShowAgentsPanel,
1994
+ activeEditorTab,
1995
+ setActiveEditorTab,
1996
+ showLayoutComponents,
1997
+ setShowLayoutComponents: handleSetShowLayoutComponents,
1998
+ quotaInfo,
1999
+ isQuotaExceeded: isQuotaExceeded(),
2000
+ getQuotaWarningMessage,
2001
+ isMobile,
2002
+ openDialog,
2003
+ webSocketMessages,
2004
+ clearWebSocketMessages: () => setWebSocketMessages([]),
2005
+ userInfo: userInfo,
2006
+ parheliaSettings,
2007
+ userPreferences,
2008
+ setUserPreferences,
2009
+ currentWizardId,
2010
+ setCurrentWizardId,
2011
+ favorites,
2012
+ loadFavorites,
2013
+ isQuickSwitcherVisible: quickSwitcherVisible,
2014
+ // Context factory registry methods
2015
+ registerContextFactory: (name, factory) => {
2016
+ try {
2017
+ factoriesRef.map.set(name, factory);
2018
+ }
2019
+ catch { }
2020
+ },
2021
+ unregisterContextFactory: (name) => {
2022
+ try {
2023
+ factoriesRef.map.delete(name);
2024
+ }
2025
+ catch { }
2026
+ },
2027
+ getContextFactory: (name) => {
2028
+ try {
2029
+ return factoriesRef.map.get(name);
2030
+ }
2031
+ catch {
2032
+ return undefined;
2033
+ }
2034
+ },
2035
+ };
2036
+ // CRITICAL: Assign editContext to ref so keyboard handlers can access it
2037
+ useEffect(() => {
2038
+ editContextRef.current = editContext;
2039
+ }, [editContext]);
2040
+ const fieldsEditContext = {
2041
+ modifiedFields,
2042
+ recentEdits,
2043
+ clearModifiedFields: () => {
2044
+ fieldModificationStore.clear();
2045
+ },
2046
+ clearRecentEdits: () => {
2047
+ setRecentEdits([]);
2048
+ },
2049
+ addRecentEdit,
2050
+ focusedField,
2051
+ setFocusedField: setFocusedFieldWithLock,
2052
+ unlockField: async () => {
2053
+ console.log("[FieldsEditContext.unlockField] Clearing lockedField state");
2054
+ setLockedField(undefined); // Clear client-side lock state
2055
+ await releaseFieldLocks(sessionId);
2056
+ },
2057
+ inlineEditingFieldElement,
2058
+ setInlineEditingFieldElement,
2059
+ };
2060
+ // Debug: Track editContext changes
2061
+ // const prevDependencies = useRef<any[]>([]);
2062
+ // useEffect(() => {
2063
+ // // Create current dependencies array to match the useMemo dependency array
2064
+ // const currentDependencies = [
2065
+ // operations,
2066
+ // itemsRepository,
2067
+ // configuration,
2068
+ // contentEditorItem,
2069
+ // page?.item,
2070
+ // itemLanguages,
2071
+ // itemVersions,
2072
+ // sessionId,
2073
+ // isReadOnly,
2074
+ // selection,
2075
+ // selectedForInsertion,
2076
+ // dragObject,
2077
+ // requestRefresh,
2078
+ // refreshCompletedFlag,
2079
+ // searchParams,
2080
+ // pathname,
2081
+ // router,
2082
+ // selectMedia,
2083
+ // scrollIntoView,
2084
+ // focusedField,
2085
+ // renderedFields,
2086
+ // inserting,
2087
+ // page,
2088
+ // activeFieldActions,
2089
+ // editHistory,
2090
+ // isRefreshing,
2091
+ // activeSessions,
2092
+ // currentView,
2093
+ // componentDesignerComponent,
2094
+ // componentDesignerRendering,
2095
+ // insertMode,
2096
+ // currentOverlay,
2097
+ // inlineEditingFieldElement,
2098
+ // lockedField,
2099
+ // selectedRange,
2100
+ // pageViewContext,
2101
+ // browseHistory,
2102
+ // workboxItems,
2103
+ // validating,
2104
+ // setCenterPanelView,
2105
+ // handleKeyDown,
2106
+ // setTimings,
2107
+ // timings,
2108
+ // startTour,
2109
+ // viewName,
2110
+ // compareMode,
2111
+ // setCompareMode,
2112
+ // addSocketMessageListener,
2113
+ // currentItemDescriptor,
2114
+ // compareTo,
2115
+ // setCompareTo,
2116
+ // revision,
2117
+ // comments,
2118
+ // setComments,
2119
+ // selectedComment,
2120
+ // setSelectedComment,
2121
+ // loadComments,
2122
+ // mode,
2123
+ // setMode,
2124
+ // user,
2125
+ // reviews,
2126
+ // statusMessage,
2127
+ // setStatusMessage,
2128
+ // suggestedEdits,
2129
+ // setSuggestedEdits,
2130
+ // showSuggestedEdits,
2131
+ // setShowSuggestedEdits,
2132
+ // showSuggestedEditsDiff,
2133
+ // setShowSuggestedEditsDiff,
2134
+ // showRightSidebar,
2135
+ // handleSetShowRightSidebar,
2136
+ // activeEditorTab,
2137
+ // setActiveEditorTab,
2138
+ // showLayoutComponents,
2139
+ // handleSetShowLayoutComponents,
2140
+ // quotaInfo,
2141
+ // isQuotaExceeded,
2142
+ // getQuotaWarningMessage,
2143
+ // isMobile,
2144
+ // openDialog,
2145
+ // pageWizard,
2146
+ // webSocketMessages,
2147
+ // currentWizardId,
2148
+ // setCurrentWizardId,
2149
+ // favorites,
2150
+ // loadFavorites,
2151
+ // ];
2152
+ // const dependencyNames = [
2153
+ // 'operations',
2154
+ // 'itemsRepository',
2155
+ // 'configuration',
2156
+ // 'contentEditorItem',
2157
+ // 'page?.item',
2158
+ // 'itemLanguages',
2159
+ // 'itemVersions',
2160
+ // 'sessionId',
2161
+ // 'isReadOnly',
2162
+ // 'selection',
2163
+ // 'selectedForInsertion',
2164
+ // 'dragObject',
2165
+ // 'requestRefresh',
2166
+ // 'refreshCompletedFlag',
2167
+ // 'searchParams',
2168
+ // 'pathname',
2169
+ // 'router',
2170
+ // 'selectMedia',
2171
+ // 'scrollIntoView',
2172
+ // 'focusedField',
2173
+ // 'renderedFields',
2174
+ // 'inserting',
2175
+ // 'page',
2176
+ // 'activeFieldActions',
2177
+ // 'editHistory',
2178
+ // 'isRefreshing',
2179
+ // 'activeSessions',
2180
+ // 'currentView',
2181
+ // 'componentDesignerComponent',
2182
+ // 'componentDesignerRendering',
2183
+ // 'insertMode',
2184
+ // 'currentOverlay',
2185
+ // 'inlineEditingFieldElement',
2186
+ // 'lockedField',
2187
+ // 'selectedRange',
2188
+ // 'pageViewContext',
2189
+ // 'browseHistory',
2190
+ // 'workboxItems',
2191
+ // 'validating',
2192
+ // 'setCenterPanelView',
2193
+ // 'handleKeyDown',
2194
+ // 'setTimings',
2195
+ // 'timings',
2196
+ // 'startTour',
2197
+ // 'viewName',
2198
+ // 'compareMode',
2199
+ // 'setCompareMode',
2200
+ // 'addSocketMessageListener',
2201
+ // 'currentItemDescriptor',
2202
+ // 'compareTo',
2203
+ // 'setCompareTo',
2204
+ // 'revision',
2205
+ // 'comments',
2206
+ // 'setComments',
2207
+ // 'selectedComment',
2208
+ // 'setSelectedComment',
2209
+ // 'loadComments',
2210
+ // 'mode',
2211
+ // 'setMode',
2212
+ // 'user',
2213
+ // 'reviews',
2214
+ // 'statusMessage',
2215
+ // 'setStatusMessage',
2216
+ // 'suggestedEdits',
2217
+ // 'setSuggestedEdits',
2218
+ // 'showSuggestedEdits',
2219
+ // 'setShowSuggestedEdits',
2220
+ // 'showSuggestedEditsDiff',
2221
+ // 'setShowSuggestedEditsDiff',
2222
+ // 'showRightSidebar',
2223
+ // 'handleSetShowRightSidebar',
2224
+ // 'activeEditorTab',
2225
+ // 'setActiveEditorTab',
2226
+ // 'showLayoutComponents',
2227
+ // 'handleSetShowLayoutComponents',
2228
+ // 'quotaInfo',
2229
+ // 'isQuotaExceeded',
2230
+ // 'getQuotaWarningMessage',
2231
+ // 'isMobile',
2232
+ // 'openDialog',
2233
+ // 'pageWizard',
2234
+ // 'webSocketMessages',
2235
+ // 'currentWizardId',
2236
+ // 'setCurrentWizardId',
2237
+ // 'favorites',
2238
+ // 'loadFavorites',
2239
+ // ];
2240
+ // // Check which dependencies have changed
2241
+ // const changedDependencies: string[] = [];
2242
+ // currentDependencies.forEach((dep, index) => {
2243
+ // if (prevDependencies.current[index] !== dep) {
2244
+ // const depName = dependencyNames[index];
2245
+ // if (depName) {
2246
+ // changedDependencies.push(depName);
2247
+ // }
2248
+ // }
2249
+ // });
2250
+ // if (changedDependencies.length > 0) {
2251
+ // console.group('🔍 EditContext Changed');
2252
+ // console.log('Changed dependencies:', changedDependencies);
2253
+ // console.log('Total dependencies tracked:', currentDependencies.length);
2254
+ // // Log details about the changed dependencies
2255
+ // changedDependencies.forEach(depName => {
2256
+ // const index = dependencyNames.indexOf(depName);
2257
+ // const oldValue = prevDependencies.current[index];
2258
+ // const newValue = currentDependencies[index];
2259
+ // console.log(`📝 ${depName}:`, {
2260
+ // from: oldValue,
2261
+ // to: newValue,
2262
+ // changed: oldValue !== newValue
2263
+ // });
2264
+ // });
2265
+ // console.groupEnd();
2266
+ // }
2267
+ // // Store current dependencies for next comparison
2268
+ // prevDependencies.current = currentDependencies;
2269
+ // editContextRef.current = editContext;
2270
+ // }, [editContext]);
2271
+ useEffect(() => {
2272
+ fieldsEditContext.clearModifiedFields();
2273
+ }, [currentItemDescriptor]);
2274
+ if (!currentView)
2275
+ return null;
2276
+ const editorUi = pageViewContext.fullscreen ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "fixed inset-0 flex", children: [_jsx(PageViewerFrame, { compareView: compareMode, pageViewContext: pageViewContext }), _jsx(FullscreenControls, { device: pageViewContext.device, setDevice: (d) => pageViewContext.setDevice(d), canExit: !configuration.forceFullscreen, onExit: () => pageViewContext.setFullscreen(false), firstMobileDeviceName: configuration.devices[0]?.name })] }), showFullscreenHint && !configuration.forceFullscreen && (_jsx("div", { className: "fixed inset-0", onMouseMoveCapture: () => {
2277
+ setTimeout(() => {
2278
+ setShowFullscreenHint(false);
2279
+ }, 600);
2280
+ }, "data-testid": "fullscreen-hint-overlay", children: _jsx("div", { className: "fixed top-3 left-1/2 -translate-x-1/2 transform rounded-sm bg-gray-200 p-12", children: "Press Ctrl + F11 to exit fullscreen mode" }) }))] })) : (_jsxs(_Fragment, { children: [_jsx(EditorChrome, { className: className, currentView: currentView, centerPanelView: centerPanelView, editContext: editContext, showComponentNavigator: showComponentNavigator, handleSetShowComponentNavigator: handleSetShowComponentNavigator, showAgentsPanel: showAgentsPanel, handleSetShowAgentsPanel: handleSetShowAgentsPanel, viewName: viewName }), isTourActive && _jsx(Tour, { tourStopCallback: () => setIsTourActive(false) })] }));
2281
+ return (_jsx("div", { className: `editor h-full`, children: _jsx(OperationsContextProvider, { value: operationsContext.context, children: _jsx(FieldsEditContextProvider, { value: fieldsEditContext, children: _jsxs(EditContextProvider, { value: editContext, children: [editContext.isRefreshing && (_jsx("div", { className: "pointer-events-none fixed right-0 bottom-0 flex h-24 w-24 items-center justify-center text-gray-600 opacity-50 select-none", children: _jsx(Spinner, {}) })), children || editorUi, dialog, _jsx(Toaster, { position: "top-center" }), " ", _jsx(ConfirmationDialog, { ref: confirmationDialogRef }), _jsx(QuickItemSwitcher, { visible: quickSwitcherVisible, entries: navigationHistory.slice(0, 5), selectedIndex: quickSwitcherSelectedIndex, onSelect: handleQuickSwitcherSelect, onClose: () => setQuickSwitcherVisible(false) }), _jsx(EditContextMenu, { ref: contextMenuRef }), media.mediaSelectorVisible && (_jsx(MediaSelector, { language: editContext.currentItemDescriptor.language, visible: media.mediaSelectorVisible, onHide: () => media.setMediaSelectorVisible(false), onMediaSelected: media.onMediaSelect, selectedIdPath: media.selectedMediaIdPath, mode: media.mediaSelectorMode })), _jsx(FieldEditorPopup, { ref: fieldEditorPopupRef })] }) }) }) }));
2282
+ }
2283
+ //# sourceMappingURL=EditorShell.js.map