@parhelia/core 0.1.12554 → 0.1.12556

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 (575) hide show
  1. package/dist/agents-view/AgentCard.d.ts +4 -6
  2. package/dist/agents-view/AgentCard.js +24 -143
  3. package/dist/agents-view/AgentCard.js.map +1 -1
  4. package/dist/agents-view/AgentsInbox.d.ts +1 -1
  5. package/dist/agents-view/AgentsInbox.js +92 -7
  6. package/dist/agents-view/AgentsInbox.js.map +1 -1
  7. package/dist/agents-view/AgentsTitlebar.js +2 -3
  8. package/dist/agents-view/AgentsTitlebar.js.map +1 -1
  9. package/dist/agents-view/AgentsView.d.ts +7 -6
  10. package/dist/agents-view/AgentsView.js +98 -187
  11. package/dist/agents-view/AgentsView.js.map +1 -1
  12. package/dist/agents-view/AgentsWorkspaceView.d.ts +6 -2
  13. package/dist/agents-view/AgentsWorkspaceView.js +113 -266
  14. package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
  15. package/dist/agents-view/ProfileAgentsGroup.d.ts +1 -2
  16. package/dist/agents-view/ProfileAgentsGroup.js +3 -4
  17. package/dist/agents-view/ProfileAgentsGroup.js.map +1 -1
  18. package/dist/components/ActionButton.d.ts +1 -1
  19. package/dist/components/ActionButton.js.map +1 -1
  20. package/dist/components/FilterInput.d.ts +1 -1
  21. package/dist/components/FilterInput.js +1 -1
  22. package/dist/components/FilterInput.js.map +1 -1
  23. package/dist/components/ui/LanguageSelector.js +4 -2
  24. package/dist/components/ui/LanguageSelector.js.map +1 -1
  25. package/dist/components/ui/PlaceholderInput.js +3 -3
  26. package/dist/components/ui/PlaceholderInput.js.map +1 -1
  27. package/dist/components/ui/PlaceholderInputTypes.js +1 -1
  28. package/dist/components/ui/PlaceholderInputTypes.js.map +1 -1
  29. package/dist/components/ui/alert-dialog.d.ts +1 -1
  30. package/dist/components/ui/alert-dialog.js +10 -6
  31. package/dist/components/ui/alert-dialog.js.map +1 -1
  32. package/dist/components/ui/button.d.ts +4 -4
  33. package/dist/components/ui/button.js +1 -4
  34. package/dist/components/ui/button.js.map +1 -1
  35. package/dist/components/ui/context-menu.d.ts +1 -1
  36. package/dist/components/ui/context-menu.js +4 -12
  37. package/dist/components/ui/context-menu.js.map +1 -1
  38. package/dist/components/ui/copy-button.d.ts +1 -2
  39. package/dist/components/ui/copy-button.js +2 -2
  40. package/dist/components/ui/copy-button.js.map +1 -1
  41. package/dist/components/ui/dialog.d.ts +1 -1
  42. package/dist/components/ui/dialog.js +126 -21
  43. package/dist/components/ui/dialog.js.map +1 -1
  44. package/dist/components/ui/input.d.ts +1 -1
  45. package/dist/components/ui/input.js +3 -5
  46. package/dist/components/ui/input.js.map +1 -1
  47. package/dist/components/ui/paste-button.d.ts +1 -2
  48. package/dist/components/ui/paste-button.js +2 -2
  49. package/dist/components/ui/paste-button.js.map +1 -1
  50. package/dist/components/ui/popover.js +9 -1
  51. package/dist/components/ui/popover.js.map +1 -1
  52. package/dist/components/ui/select.js +1 -1
  53. package/dist/components/ui/select.js.map +1 -1
  54. package/dist/components/ui/styled-dialog-title.js +1 -1
  55. package/dist/components/ui/styled-dialog-title.js.map +1 -1
  56. package/dist/components/ui/tabs.d.ts +1 -1
  57. package/dist/components/ui/tabs.js +11 -4
  58. package/dist/components/ui/tabs.js.map +1 -1
  59. package/dist/config/config.d.ts +2 -4
  60. package/dist/config/config.js +70 -250
  61. package/dist/config/config.js.map +1 -1
  62. package/dist/config/types/workspace.d.ts +0 -6
  63. package/dist/config/types.d.ts +12 -63
  64. package/dist/config/types.js.map +1 -1
  65. package/dist/editor/ComponentInfo.d.ts +4 -0
  66. package/dist/editor/ComponentInfo.js +41 -0
  67. package/dist/editor/ComponentInfo.js.map +1 -0
  68. package/dist/editor/ConfirmationDialog.js +4 -20
  69. package/dist/editor/ConfirmationDialog.js.map +1 -1
  70. package/dist/editor/ContentTree.d.ts +1 -2
  71. package/dist/editor/ContentTree.js +32 -93
  72. package/dist/editor/ContentTree.js.map +1 -1
  73. package/dist/editor/Editor.js +22 -87
  74. package/dist/editor/Editor.js.map +1 -1
  75. package/dist/editor/FieldHistory.js +36 -84
  76. package/dist/editor/FieldHistory.js.map +1 -1
  77. package/dist/editor/FieldListField.js +9 -21
  78. package/dist/editor/FieldListField.js.map +1 -1
  79. package/dist/editor/FieldListFieldWithFallbacks.js +2 -23
  80. package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
  81. package/dist/editor/GlobalMenuBar.js +2 -29
  82. package/dist/editor/GlobalMenuBar.js.map +1 -1
  83. package/dist/editor/ImageEditor.js +2 -5
  84. package/dist/editor/ImageEditor.js.map +1 -1
  85. package/dist/editor/ItemInfo.js +1 -36
  86. package/dist/editor/ItemInfo.js.map +1 -1
  87. package/dist/editor/LinkEditorDialog.js +0 -3
  88. package/dist/editor/LinkEditorDialog.js.map +1 -1
  89. package/dist/editor/MainLayout.d.ts +2 -0
  90. package/dist/editor/MainLayout.js +8 -65
  91. package/dist/editor/MainLayout.js.map +1 -1
  92. package/dist/editor/MigrationsView.js +5 -29
  93. package/dist/editor/MigrationsView.js.map +1 -1
  94. package/dist/editor/MobileLayout.js +12 -37
  95. package/dist/editor/MobileLayout.js.map +1 -1
  96. package/dist/editor/PictureCropper.js +45 -54
  97. package/dist/editor/PictureCropper.js.map +1 -1
  98. package/dist/editor/PictureEditor.js +15 -17
  99. package/dist/editor/PictureEditor.js.map +1 -1
  100. package/dist/editor/QuickItemSwitcher.js +21 -21
  101. package/dist/editor/QuickItemSwitcher.js.map +1 -1
  102. package/dist/editor/SetupWizard.js +12 -52
  103. package/dist/editor/SetupWizard.js.map +1 -1
  104. package/dist/editor/Titlebar.js +2 -7
  105. package/dist/editor/Titlebar.js.map +1 -1
  106. package/dist/editor/ai/AgentCostDisplay.d.ts +0 -1
  107. package/dist/editor/ai/AgentCostDisplay.js +1 -1
  108. package/dist/editor/ai/AgentCostDisplay.js.map +1 -1
  109. package/dist/editor/ai/AgentDocumentList.js +14 -32
  110. package/dist/editor/ai/AgentDocumentList.js.map +1 -1
  111. package/dist/editor/ai/AgentGreeting.js +2 -3
  112. package/dist/editor/ai/AgentGreeting.js.map +1 -1
  113. package/dist/editor/ai/AgentProfileSelector.js +1 -2
  114. package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
  115. package/dist/editor/ai/AgentStatusBadge.d.ts +5 -0
  116. package/dist/editor/ai/AgentStatusBadge.js +65 -67
  117. package/dist/editor/ai/AgentStatusBadge.js.map +1 -1
  118. package/dist/editor/ai/AgentTerminal.d.ts +2 -14
  119. package/dist/editor/ai/AgentTerminal.js +483 -2377
  120. package/dist/editor/ai/AgentTerminal.js.map +1 -1
  121. package/dist/editor/ai/AgentTerminalStatusBar.d.ts +3 -8
  122. package/dist/editor/ai/AgentTerminalStatusBar.js +56 -460
  123. package/dist/editor/ai/AgentTerminalStatusBar.js.map +1 -1
  124. package/dist/editor/ai/Agents.js +113 -150
  125. package/dist/editor/ai/Agents.js.map +1 -1
  126. package/dist/editor/ai/AiResponseMessage.d.ts +1 -10
  127. package/dist/editor/ai/AiResponseMessage.js +23 -238
  128. package/dist/editor/ai/AiResponseMessage.js.map +1 -1
  129. package/dist/editor/ai/ContextInfoBar.d.ts +3 -2
  130. package/dist/editor/ai/ContextInfoBar.js +7 -64
  131. package/dist/editor/ai/ContextInfoBar.js.map +1 -1
  132. package/dist/editor/ai/GuidanceOverlay.js +11 -17
  133. package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
  134. package/dist/editor/ai/HelpTerminal.d.ts +5 -0
  135. package/dist/editor/ai/HelpTerminal.js +166 -0
  136. package/dist/editor/ai/HelpTerminal.js.map +1 -0
  137. package/dist/editor/ai/InlineAiDialog.d.ts +1 -1
  138. package/dist/editor/ai/InlineAiDialog.js +192 -514
  139. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  140. package/dist/editor/ai/InlineAiTrigger.js +12 -115
  141. package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
  142. package/dist/editor/ai/MediaImage.js +8 -40
  143. package/dist/editor/ai/MediaImage.js.map +1 -1
  144. package/dist/editor/ai/SpawnedAgentsPanel.js +12 -10
  145. package/dist/editor/ai/SpawnedAgentsPanel.js.map +1 -1
  146. package/dist/editor/ai/ToolCallDisplay.d.ts +2 -22
  147. package/dist/editor/ai/ToolCallDisplay.js +147 -518
  148. package/dist/editor/ai/ToolCallDisplay.js.map +1 -1
  149. package/dist/editor/ai/dialogs/AgentDialogHandler.d.ts +8 -1
  150. package/dist/editor/ai/dialogs/AgentDialogHandler.js +42 -379
  151. package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
  152. package/dist/editor/ai/dialogs/QuestionnaireInline.d.ts +1 -5
  153. package/dist/editor/ai/dialogs/QuestionnaireInline.js +60 -628
  154. package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
  155. package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +0 -115
  156. package/dist/editor/ai/dialogs/agentDialogTypes.js +0 -2
  157. package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
  158. package/dist/editor/ai/types.d.ts +1 -3
  159. package/dist/editor/ai/useAgentStatus.d.ts +1 -2
  160. package/dist/editor/ai/useAgentStatus.js +99 -86
  161. package/dist/editor/ai/useAgentStatus.js.map +1 -1
  162. package/dist/editor/ai/useInlineAiPosition.js +5 -45
  163. package/dist/editor/ai/useInlineAiPosition.js.map +1 -1
  164. package/dist/editor/client/AboutDialog.js +2 -4
  165. package/dist/editor/client/AboutDialog.js.map +1 -1
  166. package/dist/editor/client/EditorShell.d.ts +1 -4
  167. package/dist/editor/client/EditorShell.js +230 -730
  168. package/dist/editor/client/EditorShell.js.map +1 -1
  169. package/dist/editor/client/editContext.d.ts +19 -33
  170. package/dist/editor/client/editContext.js.map +1 -1
  171. package/dist/editor/client/helpers.js +0 -6
  172. package/dist/editor/client/helpers.js.map +1 -1
  173. package/dist/editor/client/hooks/useEditorUrlSync.js +2 -1
  174. package/dist/editor/client/hooks/useEditorUrlSync.js.map +1 -1
  175. package/dist/editor/client/hooks/useEditorWebSocket.d.ts +0 -10
  176. package/dist/editor/client/hooks/useEditorWebSocket.js +14 -209
  177. package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
  178. package/dist/editor/client/hooks/useQuota.d.ts +0 -8
  179. package/dist/editor/client/hooks/useQuota.js.map +1 -1
  180. package/dist/editor/client/hooks/useSocketMessageHandler.js +7 -68
  181. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  182. package/dist/editor/client/itemsRepository.js +6 -10
  183. package/dist/editor/client/itemsRepository.js.map +1 -1
  184. package/dist/editor/client/operations.d.ts +3 -6
  185. package/dist/editor/client/operations.js +30 -208
  186. package/dist/editor/client/operations.js.map +1 -1
  187. package/dist/editor/client/pageModelBuilder.js +31 -4
  188. package/dist/editor/client/pageModelBuilder.js.map +1 -1
  189. package/dist/editor/client/ui/DevModeIndicator.js +2 -2
  190. package/dist/editor/client/ui/DevModeIndicator.js.map +1 -1
  191. package/dist/editor/client/ui/EditorChrome.d.ts +6 -0
  192. package/dist/editor/client/ui/EditorChrome.js +72 -55
  193. package/dist/editor/client/ui/EditorChrome.js.map +1 -1
  194. package/dist/editor/client/ui/FullscreenControls.js +3 -5
  195. package/dist/editor/client/ui/FullscreenControls.js.map +1 -1
  196. package/dist/editor/commands/commands.d.ts +1 -11
  197. package/dist/editor/commands/commands.js +1 -12
  198. package/dist/editor/commands/commands.js.map +1 -1
  199. package/dist/editor/commands/componentCommands.js +55 -109
  200. package/dist/editor/commands/componentCommands.js.map +1 -1
  201. package/dist/editor/commands/customCommandConverter.d.ts +1 -8
  202. package/dist/editor/commands/customCommandConverter.js +5 -35
  203. package/dist/editor/commands/customCommandConverter.js.map +1 -1
  204. package/dist/editor/commands/handlers/agentHandler.js +1 -2
  205. package/dist/editor/commands/handlers/agentHandler.js.map +1 -1
  206. package/dist/editor/commands/itemCommands.d.ts +0 -3
  207. package/dist/editor/commands/itemCommands.js +10 -93
  208. package/dist/editor/commands/itemCommands.js.map +1 -1
  209. package/dist/editor/commands/undo.d.ts +15 -9
  210. package/dist/editor/commands/undo.js +0 -24
  211. package/dist/editor/commands/undo.js.map +1 -1
  212. package/dist/editor/context-menu/InsertMenu.js +39 -83
  213. package/dist/editor/context-menu/InsertMenu.js.map +1 -1
  214. package/dist/editor/field-types/MultiLineText.js +1 -1
  215. package/dist/editor/field-types/MultiLineText.js.map +1 -1
  216. package/dist/editor/field-types/RawEditor.js +1 -1
  217. package/dist/editor/field-types/ReactQuill.d.ts +125 -0
  218. package/dist/editor/field-types/ReactQuill.js +385 -0
  219. package/dist/editor/field-types/ReactQuill.js.map +1 -0
  220. package/dist/editor/field-types/RichTextEditor.js +5 -13
  221. package/dist/editor/field-types/RichTextEditor.js.map +1 -1
  222. package/dist/editor/field-types/RichTextEditorComponent.js +3 -37
  223. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  224. package/dist/editor/field-types/SingleLineText.js +1 -1
  225. package/dist/editor/field-types/TreeListEditor.js +2 -3
  226. package/dist/editor/field-types/TreeListEditor.js.map +1 -1
  227. package/dist/editor/field-types/richtext/components/ReactSlate.css +5 -23
  228. package/dist/editor/field-types/richtext/components/ReactSlate.d.ts +0 -2
  229. package/dist/editor/field-types/richtext/components/ReactSlate.js +4 -28
  230. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
  231. package/dist/editor/field-types/richtext/components/ToolbarButton.js +2 -4
  232. package/dist/editor/field-types/richtext/components/ToolbarButton.js.map +1 -1
  233. package/dist/editor/field-types/richtext/contextMenuFactory.d.ts +0 -13
  234. package/dist/editor/field-types/richtext/contextMenuFactory.js +24 -181
  235. package/dist/editor/field-types/richtext/contextMenuFactory.js.map +1 -1
  236. package/dist/editor/field-types/richtext/types.d.ts +0 -2
  237. package/dist/editor/field-types/richtext/types.js.map +1 -1
  238. package/dist/editor/field-types/richtext/utils/plugins.js +0 -4
  239. package/dist/editor/field-types/richtext/utils/plugins.js.map +1 -1
  240. package/dist/editor/field-types/textContextMenuFactory.js +2 -3
  241. package/dist/editor/field-types/textContextMenuFactory.js.map +1 -1
  242. package/dist/editor/media-selector/AiImageSearchPrompt.js +2 -4
  243. package/dist/editor/media-selector/AiImageSearchPrompt.js.map +1 -1
  244. package/dist/editor/media-selector/MediaFolderBrowser.js +1 -1
  245. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
  246. package/dist/editor/media-selector/MediaSelector.js +1 -7
  247. package/dist/editor/media-selector/MediaSelector.js.map +1 -1
  248. package/dist/editor/media-selector/TreeSelector.js +35 -40
  249. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  250. package/dist/editor/menubar/ActiveUsers.js +1 -1
  251. package/dist/editor/menubar/ActiveUsers.js.map +1 -1
  252. package/dist/editor/menubar/GenericToolbar.js +2 -4
  253. package/dist/editor/menubar/GenericToolbar.js.map +1 -1
  254. package/dist/editor/menubar/ItemLanguageVersion.js +2 -2
  255. package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
  256. package/dist/editor/menubar/PageSelector.js +147 -26
  257. package/dist/editor/menubar/PageSelector.js.map +1 -1
  258. package/dist/editor/menubar/Separator.js +1 -1
  259. package/dist/editor/menubar/VersionSelector.js +4 -2
  260. package/dist/editor/menubar/VersionSelector.js.map +1 -1
  261. package/dist/editor/menubar/WorkflowButton.js +12 -39
  262. package/dist/editor/menubar/WorkflowButton.js.map +1 -1
  263. package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js +38 -16
  264. package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js.map +1 -1
  265. package/dist/editor/menubar/toolbar-sections/EditControls.js +3 -3
  266. package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
  267. package/dist/editor/menubar/toolbar-sections/HelpButton.js +0 -1
  268. package/dist/editor/menubar/toolbar-sections/HelpButton.js.map +1 -1
  269. package/dist/editor/menubar/toolbar-sections/ManualBrowser.d.ts +10 -6
  270. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +220 -597
  271. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
  272. package/dist/editor/menubar/toolbar-sections/UtilityControls.js +2 -13
  273. package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
  274. package/dist/editor/page-editor-chrome/CommentHighlighting.js +1 -42
  275. package/dist/editor/page-editor-chrome/CommentHighlighting.js.map +1 -1
  276. package/dist/editor/page-editor-chrome/FrameMenu.js +1 -1
  277. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  278. package/dist/editor/page-editor-chrome/InlineEditor.js +48 -97
  279. package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
  280. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +17 -38
  281. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  282. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +11 -17
  283. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
  284. package/dist/editor/page-editor-chrome/useInlineAICompletion.js +301 -301
  285. package/dist/editor/page-editor-chrome/useInlineAICompletion.js.map +1 -1
  286. package/dist/editor/page-viewer/DeviceToolbar.js +1 -1
  287. package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -1
  288. package/dist/editor/page-viewer/EditorForm.js +11 -69
  289. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  290. package/dist/editor/page-viewer/MiniMap.d.ts +4 -2
  291. package/dist/editor/page-viewer/MiniMap.js +28 -91
  292. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  293. package/dist/editor/page-viewer/PageViewer.d.ts +1 -3
  294. package/dist/editor/page-viewer/PageViewer.js +19 -92
  295. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  296. package/dist/editor/page-viewer/PageViewerFrame.d.ts +1 -2
  297. package/dist/editor/page-viewer/PageViewerFrame.js +115 -348
  298. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  299. package/dist/editor/page-viewer/pageModelSkeletonBuilder.js +49 -114
  300. package/dist/editor/page-viewer/pageModelSkeletonBuilder.js.map +1 -1
  301. package/dist/editor/page-viewer/pageViewContext.d.ts +0 -1
  302. package/dist/editor/page-viewer/pageViewContext.js +14 -51
  303. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  304. package/dist/editor/pageModel.d.ts +1 -14
  305. package/dist/editor/reviews/Comment.js +12 -26
  306. package/dist/editor/reviews/Comment.js.map +1 -1
  307. package/dist/editor/reviews/CommentDisplayPopover.js +5 -7
  308. package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
  309. package/dist/editor/reviews/CommentView.js +4 -19
  310. package/dist/editor/reviews/CommentView.js.map +1 -1
  311. package/dist/editor/reviews/Comments.js +72 -89
  312. package/dist/editor/reviews/Comments.js.map +1 -1
  313. package/dist/editor/reviews/CreateReviewDialog.js +177 -281
  314. package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
  315. package/dist/editor/reviews/DecisionsMatrix.js +25 -96
  316. package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
  317. package/dist/editor/reviews/DiffView.js +14 -7
  318. package/dist/editor/reviews/DiffView.js.map +1 -1
  319. package/dist/editor/reviews/EditReviewSettingsDialog.js +4 -6
  320. package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
  321. package/dist/editor/reviews/MultiReviewManager.js +3 -25
  322. package/dist/editor/reviews/MultiReviewManager.js.map +1 -1
  323. package/dist/editor/reviews/PagesPanel.js +15 -31
  324. package/dist/editor/reviews/PagesPanel.js.map +1 -1
  325. package/dist/editor/reviews/PreviewInfo.js +4 -1
  326. package/dist/editor/reviews/PreviewInfo.js.map +1 -1
  327. package/dist/editor/reviews/ReviewCard.js +7 -13
  328. package/dist/editor/reviews/ReviewCard.js.map +1 -1
  329. package/dist/editor/reviews/ReviewDetail.js +2 -3
  330. package/dist/editor/reviews/ReviewDetail.js.map +1 -1
  331. package/dist/editor/reviews/ReviewsList.js +3 -7
  332. package/dist/editor/reviews/ReviewsList.js.map +1 -1
  333. package/dist/editor/reviews/SuggestedEdit.js +3 -34
  334. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  335. package/dist/editor/reviews/SuggestionDisplayPopover.js +5 -31
  336. package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
  337. package/dist/editor/reviews/commentAi.js +6 -25
  338. package/dist/editor/reviews/commentAi.js.map +1 -1
  339. package/dist/editor/reviews/reviewCommands.js +1 -4
  340. package/dist/editor/reviews/reviewCommands.js.map +1 -1
  341. package/dist/editor/reviews/useMultiReview.js +2 -2
  342. package/dist/editor/reviews/useMultiReview.js.map +1 -1
  343. package/dist/editor/reviews/useReviews.d.ts +2 -2
  344. package/dist/editor/reviews/useReviews.js +30 -12
  345. package/dist/editor/reviews/useReviews.js.map +1 -1
  346. package/dist/editor/services/agentService.d.ts +5 -229
  347. package/dist/editor/services/agentService.js +39 -292
  348. package/dist/editor/services/agentService.js.map +1 -1
  349. package/dist/editor/services/aiService.d.ts +1 -57
  350. package/dist/editor/services/aiService.js +6 -79
  351. package/dist/editor/services/aiService.js.map +1 -1
  352. package/dist/editor/services/contentService.d.ts +3 -6
  353. package/dist/editor/services/contentService.js +12 -13
  354. package/dist/editor/services/contentService.js.map +1 -1
  355. package/dist/editor/services/editService.d.ts +1 -52
  356. package/dist/editor/services/editService.js +2 -94
  357. package/dist/editor/services/editService.js.map +1 -1
  358. package/dist/editor/services/indexService.js +1 -1
  359. package/dist/editor/services/indexService.js.map +1 -1
  360. package/dist/editor/services/reviewsService.d.ts +6 -3
  361. package/dist/editor/services/reviewsService.js +11 -2
  362. package/dist/editor/services/reviewsService.js.map +1 -1
  363. package/dist/editor/services/serviceHelper.d.ts +1 -2
  364. package/dist/editor/services/serviceHelper.js +20 -112
  365. package/dist/editor/services/serviceHelper.js.map +1 -1
  366. package/dist/editor/services/systemService.d.ts +1 -2
  367. package/dist/editor/services/systemService.js +0 -3
  368. package/dist/editor/services/systemService.js.map +1 -1
  369. package/dist/editor/services-server/api.d.ts +2 -1
  370. package/dist/editor/services-server/api.js +6 -11
  371. package/dist/editor/services-server/api.js.map +1 -1
  372. package/dist/editor/services-server/graphQL.d.ts +29 -0
  373. package/dist/editor/services-server/graphQL.js +53 -0
  374. package/dist/editor/services-server/graphQL.js.map +1 -0
  375. package/dist/editor/settings/About.js +3 -317
  376. package/dist/editor/settings/About.js.map +1 -1
  377. package/dist/editor/settings/AllAgentsPanel.d.ts +5 -0
  378. package/dist/editor/settings/AllAgentsPanel.js +139 -0
  379. package/dist/editor/settings/AllAgentsPanel.js.map +1 -0
  380. package/dist/editor/settings/LatestFeedback.d.ts +1 -0
  381. package/dist/editor/settings/LatestFeedback.js +136 -0
  382. package/dist/editor/settings/LatestFeedback.js.map +1 -0
  383. package/dist/editor/settings/QuotaInfo.js +4 -210
  384. package/dist/editor/settings/QuotaInfo.js.map +1 -1
  385. package/dist/editor/settings/SettingsView.js +23 -25
  386. package/dist/editor/settings/SettingsView.js.map +1 -1
  387. package/dist/editor/settings/Setup.d.ts +1 -0
  388. package/dist/editor/settings/Setup.js +211 -0
  389. package/dist/editor/settings/Setup.js.map +1 -0
  390. package/dist/editor/settings/Status.js +6 -7
  391. package/dist/editor/settings/Status.js.map +1 -1
  392. package/dist/editor/settings/index/useIndexStatus.js +22 -20
  393. package/dist/editor/settings/index/useIndexStatus.js.map +1 -1
  394. package/dist/editor/settings/panels/AgentsPanel.d.ts +4 -0
  395. package/dist/editor/settings/panels/AgentsPanel.js +121 -95
  396. package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
  397. package/dist/editor/settings/panels/DatabasePanel.d.ts +6 -0
  398. package/dist/editor/settings/panels/DatabasePanel.js +50 -0
  399. package/dist/editor/settings/panels/DatabasePanel.js.map +1 -0
  400. package/dist/editor/settings/panels/ModelsPanel.js +108 -329
  401. package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
  402. package/dist/editor/settings/panels/ProvidersPanel.d.ts +1 -1
  403. package/dist/editor/settings/panels/ProvidersPanel.js +59 -86
  404. package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
  405. package/dist/editor/settings/panels/SearchConfigPanel.js +4 -4
  406. package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
  407. package/dist/editor/settings/panels/index.d.ts +2 -3
  408. package/dist/editor/settings/panels/index.js +2 -3
  409. package/dist/editor/settings/panels/index.js.map +1 -1
  410. package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.d.ts +2 -0
  411. package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js +195 -0
  412. package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js.map +1 -0
  413. package/dist/editor/settings/setup-steps/AiSetupStep/index.d.ts +2 -0
  414. package/dist/editor/settings/setup-steps/AiSetupStep/index.js +21 -0
  415. package/dist/editor/settings/setup-steps/AiSetupStep/index.js.map +1 -0
  416. package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.d.ts +1 -0
  417. package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js +233 -0
  418. package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js.map +1 -0
  419. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.d.ts +15 -0
  420. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js +14 -0
  421. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js.map +1 -0
  422. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.d.ts +1 -0
  423. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js +94 -0
  424. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js.map +1 -0
  425. package/dist/editor/settings/setup-steps/AiSetupStep/types.d.ts +1 -0
  426. package/dist/editor/settings/setup-steps/AiSetupStep/types.js +2 -0
  427. package/dist/editor/settings/setup-steps/AiSetupStep/types.js.map +1 -0
  428. package/dist/editor/settings/setup-steps/AiSetupStep/utils.d.ts +5 -0
  429. package/dist/editor/settings/setup-steps/AiSetupStep/utils.js +44 -0
  430. package/dist/editor/settings/setup-steps/AiSetupStep/utils.js.map +1 -0
  431. package/dist/editor/settings/setup-steps/IndexSetupStep.d.ts +2 -0
  432. package/dist/editor/settings/setup-steps/IndexSetupStep.js +36 -0
  433. package/dist/editor/settings/setup-steps/IndexSetupStep.js.map +1 -0
  434. package/dist/editor/settings/setup-steps/SettingsSetupStep.d.ts +2 -0
  435. package/dist/editor/settings/setup-steps/SettingsSetupStep.js +111 -0
  436. package/dist/editor/settings/setup-steps/SettingsSetupStep.js.map +1 -0
  437. package/dist/editor/settings/setup-steps/SetupOverview.d.ts +14 -0
  438. package/dist/editor/settings/setup-steps/SetupOverview.js +38 -0
  439. package/dist/editor/settings/setup-steps/SetupOverview.js.map +1 -0
  440. package/dist/editor/settings/status/coreStatusChecks.js +19 -124
  441. package/dist/editor/settings/status/coreStatusChecks.js.map +1 -1
  442. package/dist/editor/settings/status/useStartupChecks.d.ts +1 -3
  443. package/dist/editor/settings/status/useStartupChecks.js +5 -9
  444. package/dist/editor/settings/status/useStartupChecks.js.map +1 -1
  445. package/dist/editor/setup-wizard/steps/CompleteStep.d.ts +1 -2
  446. package/dist/editor/setup-wizard/steps/CompleteStep.js +1 -2
  447. package/dist/editor/setup-wizard/steps/CompleteStep.js.map +1 -1
  448. package/dist/editor/sidebar/ComponentPalette.js +1 -2
  449. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  450. package/dist/editor/sidebar/ComponentTree.d.ts +1 -8
  451. package/dist/editor/sidebar/ComponentTree.js +69 -216
  452. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  453. package/dist/editor/sidebar/Debug.d.ts +1 -0
  454. package/dist/editor/sidebar/Debug.js +70 -0
  455. package/dist/editor/sidebar/Debug.js.map +1 -0
  456. package/dist/editor/sidebar/EditHistory.js +46 -22
  457. package/dist/editor/sidebar/EditHistory.js.map +1 -1
  458. package/dist/editor/sidebar/Favorites.js +8 -4
  459. package/dist/editor/sidebar/Favorites.js.map +1 -1
  460. package/dist/editor/sidebar/GraphQL.d.ts +2 -0
  461. package/dist/editor/sidebar/GraphQL.js +234 -0
  462. package/dist/editor/sidebar/GraphQL.js.map +1 -0
  463. package/dist/editor/sidebar/LeftToolbar.d.ts +1 -0
  464. package/dist/editor/sidebar/LeftToolbar.js +12 -0
  465. package/dist/editor/sidebar/LeftToolbar.js.map +1 -0
  466. package/dist/editor/sidebar/MainContentTree.js +3 -4
  467. package/dist/editor/sidebar/MainContentTree.js.map +1 -1
  468. package/dist/editor/sidebar/NavigationSidebar.d.ts +4 -0
  469. package/dist/editor/sidebar/NavigationSidebar.js +254 -0
  470. package/dist/editor/sidebar/NavigationSidebar.js.map +1 -0
  471. package/dist/editor/sidebar/OperationItem.js +7 -21
  472. package/dist/editor/sidebar/OperationItem.js.map +1 -1
  473. package/dist/editor/sidebar/SidebarPanel.d.ts +1 -3
  474. package/dist/editor/sidebar/SidebarPanel.js +12 -44
  475. package/dist/editor/sidebar/SidebarPanel.js.map +1 -1
  476. package/dist/editor/sidebar/SidebarStack.d.ts +1 -2
  477. package/dist/editor/sidebar/SidebarStack.js +3 -4
  478. package/dist/editor/sidebar/SidebarStack.js.map +1 -1
  479. package/dist/editor/sidebar/Validation.js +12 -22
  480. package/dist/editor/sidebar/Validation.js.map +1 -1
  481. package/dist/editor/sidebar/Workbox.js +3 -53
  482. package/dist/editor/sidebar/Workbox.js.map +1 -1
  483. package/dist/editor/sidebar/WorkspaceRail.d.ts +1 -0
  484. package/dist/editor/sidebar/WorkspaceRail.js +167 -56
  485. package/dist/editor/sidebar/WorkspaceRail.js.map +1 -1
  486. package/dist/editor/tree-indicators/GutterColumns.d.ts +1 -3
  487. package/dist/editor/tree-indicators/GutterColumns.js +5 -26
  488. package/dist/editor/tree-indicators/GutterColumns.js.map +1 -1
  489. package/dist/editor/tree-indicators/GutterContext.d.ts +0 -4
  490. package/dist/editor/tree-indicators/GutterContext.js +0 -23
  491. package/dist/editor/tree-indicators/GutterContext.js.map +1 -1
  492. package/dist/editor/tree-indicators/GutterSelector.d.ts +5 -0
  493. package/dist/editor/tree-indicators/GutterSelector.js +91 -0
  494. package/dist/editor/tree-indicators/GutterSelector.js.map +1 -0
  495. package/dist/editor/tree-indicators/index.d.ts +1 -0
  496. package/dist/editor/tree-indicators/index.js +1 -0
  497. package/dist/editor/tree-indicators/index.js.map +1 -1
  498. package/dist/editor/tree-indicators/types.d.ts +1 -12
  499. package/dist/editor/ui/CopyMoveTargetSelectorDialog.js +1 -1
  500. package/dist/editor/ui/CopyMoveTargetSelectorDialog.js.map +1 -1
  501. package/dist/editor/ui/Icons.js +1 -1
  502. package/dist/editor/ui/Icons.js.map +1 -1
  503. package/dist/editor/ui/ItemNameDialogNew.d.ts +0 -2
  504. package/dist/editor/ui/ItemNameDialogNew.js +17 -33
  505. package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
  506. package/dist/editor/ui/ItemSearch.js +11 -7
  507. package/dist/editor/ui/ItemSearch.js.map +1 -1
  508. package/dist/editor/ui/SimpleIconButton.js +1 -1
  509. package/dist/editor/ui/SimpleIconButton.js.map +1 -1
  510. package/dist/editor/ui/SimpleTabs.d.ts +0 -1
  511. package/dist/editor/ui/SimpleTabs.js +25 -45
  512. package/dist/editor/ui/SimpleTabs.js.map +1 -1
  513. package/dist/editor/ui/Splitter.d.ts +0 -1
  514. package/dist/editor/ui/Splitter.js +86 -102
  515. package/dist/editor/ui/Splitter.js.map +1 -1
  516. package/dist/editor/ui/TemplateSelectorDialog.js +4 -4
  517. package/dist/editor/ui/TemplateSelectorDialog.js.map +1 -1
  518. package/dist/editor/ui/TreeListSelector.d.ts +1 -6
  519. package/dist/editor/ui/TreeListSelector.js +2 -2
  520. package/dist/editor/ui/TreeListSelector.js.map +1 -1
  521. package/dist/editor/utils/keyboardNavigation.d.ts +20 -6
  522. package/dist/editor/utils/keyboardNavigation.js +140 -48
  523. package/dist/editor/utils/keyboardNavigation.js.map +1 -1
  524. package/dist/editor/utils.js +9 -19
  525. package/dist/editor/utils.js.map +1 -1
  526. package/dist/editor/views/CompareView.d.ts +1 -3
  527. package/dist/editor/views/CompareView.js +5 -7
  528. package/dist/editor/views/CompareView.js.map +1 -1
  529. package/dist/editor/views/EditView.js +1 -1
  530. package/dist/editor/views/EditView.js.map +1 -1
  531. package/dist/editor/views/EditorSlot.js +34 -27
  532. package/dist/editor/views/EditorSlot.js.map +1 -1
  533. package/dist/editor/views/ItemEditor.js +3 -7
  534. package/dist/editor/views/ItemEditor.js.map +1 -1
  535. package/dist/editor/views/MediaFolderEditView.js +1 -1
  536. package/dist/editor/views/MediaFolderEditView.js.map +1 -1
  537. package/dist/editor/views/ParheliaView.js +6 -5
  538. package/dist/editor/views/ParheliaView.js.map +1 -1
  539. package/dist/editor/views/SingleEditView.d.ts +1 -2
  540. package/dist/editor/views/SingleEditView.js +8 -10
  541. package/dist/editor/views/SingleEditView.js.map +1 -1
  542. package/dist/editor/views/editorSlotContext.js +6 -35
  543. package/dist/editor/views/editorSlotContext.js.map +1 -1
  544. package/dist/index.d.ts +2 -16
  545. package/dist/index.js +0 -11
  546. package/dist/index.js.map +1 -1
  547. package/dist/revision.d.ts +2 -2
  548. package/dist/revision.js +2 -2
  549. package/dist/setup/services/setupWizardService.d.ts +13 -40
  550. package/dist/setup/services/setupWizardService.js +17 -32
  551. package/dist/setup/services/setupWizardService.js.map +1 -1
  552. package/dist/setup/wizard/steps/AddModelDialog.js +3 -12
  553. package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -1
  554. package/dist/setup/wizard/steps/ImportModelDialog.js +22 -39
  555. package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
  556. package/dist/splash-screen/ModernSplashScreen.js +32 -112
  557. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  558. package/dist/splash-screen/NewPage.js +50 -33
  559. package/dist/splash-screen/NewPage.js.map +1 -1
  560. package/dist/splash-screen/OpenPage.js +6 -2
  561. package/dist/splash-screen/OpenPage.js.map +1 -1
  562. package/dist/splash-screen/ParheliaAssistantChat.js +29 -12
  563. package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
  564. package/dist/splash-screen/ParheliaLogo.js +37 -87
  565. package/dist/splash-screen/ParheliaLogo.js.map +1 -1
  566. package/dist/splash-screen/RecentPages.js +3 -3
  567. package/dist/splash-screen/RecentPages.js.map +1 -1
  568. package/dist/tour/Tour.d.ts +1 -2
  569. package/dist/tour/Tour.js +75 -256
  570. package/dist/tour/Tour.js.map +1 -1
  571. package/dist/tour/default-tour.js +96 -222
  572. package/dist/tour/default-tour.js.map +1 -1
  573. package/dist/types.d.ts +29 -63
  574. package/package.json +15 -19
  575. package/styles.css +10 -14
@@ -4,17 +4,15 @@ import { MiniMap } from "./MiniMap";
4
4
  import { useEditContext, useEditContextRef, useFieldsEditContext, useFieldsEditContextRef, } from "../client/editContext";
5
5
  import { useDebouncedCallback, useThrottledCallback } from "use-debounce";
6
6
  import { PageEditorChrome } from "../page-editor-chrome/PageEditorChrome";
7
- import { useViewportChangeSignal } from "./pageViewContext";
8
7
  import morphdom from "morphdom";
9
8
  import uuid from "react-uuid";
10
9
  import { cn } from "../../lib/utils";
11
- import { findComponentRect, findFieldElement, findNearestEditableComponentId, findParentWithAttribute, getAbsolutePosition, getFieldDescriptorFromElement, findClosestFieldElement, extractItemIdFromItemUri, } from "../utils";
10
+ import { findComponentRect, findFieldElement, findNearestEditableComponentId, findParentWithAttribute, getAbsolutePosition, getFieldDescriptorFromElement, findClosestFieldElement, } from "../utils";
12
11
  import { extractDOMSelectionContext } from "../utils/selectionContext";
13
- import { cleanId } from "../utils/id-helper";
14
12
  import { getAllComponentInstances, getComponentById, } from "../componentTreeHelper";
15
13
  import { buildComponentContextMenuItems } from "../ContextMenu";
16
14
  import { loadFieldButtons } from "../services/editService";
17
- import { usePathname } from "../client/navigation";
15
+ import { usePathname } from "next/navigation";
18
16
  import { EditorWarnings } from "../EditorWarnings";
19
17
  import { FieldActionsOverlay, } from "../FieldActionsOverlay";
20
18
  import { NoLayout } from "../page-editor-chrome/NoLayout";
@@ -22,10 +20,9 @@ import { Spinner } from "../ui/Spinner";
22
20
  import { DeviceToolbar } from "./DeviceToolbar";
23
21
  import { buildPageModelSkeleton } from "./pageModelSkeletonBuilder";
24
22
  const EDITOR_CSS_STYLE_ID = "parhelia-editor-css";
25
- export function PageViewerFrame({ compareView, pageViewContext, className, slotCloseButton, }) {
23
+ export function PageViewerFrame({ compareView, pageViewContext, className, }) {
26
24
  const editContext = useEditContext();
27
25
  const fieldsContext = useFieldsEditContext();
28
- useViewportChangeSignal();
29
26
  const pathname = usePathname();
30
27
  const pageViewContextRef = useRef(undefined);
31
28
  if (!editContext || !pageViewContext)
@@ -38,7 +35,6 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
38
35
  const iframeRef = useRef(null);
39
36
  const currentLoadRef = useRef(null);
40
37
  const rebindIframeInteractionsRef = useRef(null);
41
- const prevModeRef = useRef(editContext.mode);
42
38
  const [showSpinner, setShowSpinner] = useState(false);
43
39
  const [scroll, setScroll] = useState(0);
44
40
  const [showMiniMap, setShowMiniMap] = useState(false);
@@ -108,11 +104,6 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
108
104
  leading: true,
109
105
  trailing: true,
110
106
  });
111
- const requestPageModelBuild = (doc) => {
112
- if (!doc)
113
- return;
114
- buildPageModelThrottled(doc, editContextRef, pageViewContextRef);
115
- };
116
107
  const [iframeSrc, setIframeSrc] = useState();
117
108
  const editorCssGuardRef = useRef({ doc: null, observer: null, editMode: true });
118
109
  const ensureEditorCssGuard = (doc, editMode) => {
@@ -179,16 +170,11 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
179
170
  editorCssGuardRef.current.doc = null;
180
171
  };
181
172
  }, []);
182
- // If the editor mode flips (edit/preview), re-apply CSS and disable inline editing in the iframe.
173
+ // If the editor mode flips (edit/preview), re-apply CSS in the current iframe doc.
183
174
  useEffect(() => {
184
175
  const doc = iframeRef.current?.contentDocument;
185
- const isPreview = editContext.mode === "preview";
186
176
  if (doc)
187
- ensureEditorCssGuard(doc, !isPreview);
188
- if (isPreview) {
189
- editContextRef.current?.setSelectedRange(undefined);
190
- fieldsContextRef.current?.setInlineEditingFieldElement(undefined);
191
- }
177
+ ensureEditorCssGuard(doc, editContext.mode !== "preview");
192
178
  }, [editContext.mode]);
193
179
  useEffect(() => {
194
180
  if (!pageItemDescriptor ||
@@ -198,12 +184,6 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
198
184
  const urlPath = editContext.mode === "preview"
199
185
  ? pageViewContext.previewUrl
200
186
  : pageViewContext.editUrl;
201
- const prevMode = prevModeRef.current;
202
- prevModeRef.current = editContext.mode;
203
- const modeOnlyChange = prevMode !== editContext.mode &&
204
- prevMode !== "preview" &&
205
- editContext.mode !== "preview";
206
- const savedScrollY = iframeRef.current?.contentWindow?.scrollY ?? 0;
207
187
  const renderUrl = new URL(urlPath, window.location.origin);
208
188
  const editRev = uuid();
209
189
  renderUrl.searchParams.set("edit_rev", editRev);
@@ -224,10 +204,6 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
224
204
  const runIntegrationRefresh = (refreshFn, message) => {
225
205
  console.log(message);
226
206
  refreshFn(renderUrl.toString());
227
- const doc = iframeRef.current?.contentDocument;
228
- if (doc) {
229
- requestPageModelBuild(doc);
230
- }
231
207
  // The integration refresh path may replace/normalize <head> during hydration,
232
208
  // which can remove our injected style. Re-ensure a few times post-refresh.
233
209
  const ensureLater = (delay) => {
@@ -242,21 +218,6 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
242
218
  ensureLater(100);
243
219
  ensureLater(500);
244
220
  ensureLater(1200);
245
- if (modeOnlyChange && savedScrollY > 0) {
246
- const restoreScroll = (delay) => {
247
- setTimeout(() => {
248
- const win = iframeRef.current?.contentWindow;
249
- if (win && win.scrollY === 0) {
250
- win.scrollTo(0, savedScrollY);
251
- }
252
- }, delay);
253
- };
254
- restoreScroll(50);
255
- restoreScroll(200);
256
- restoreScroll(500);
257
- restoreScroll(1000);
258
- restoreScroll(2000);
259
- }
260
221
  };
261
222
  const runFallbackRefresh = () => {
262
223
  setShowSpinner(true);
@@ -414,7 +375,7 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
414
375
  injectSXAScripts(iframeRef.current);
415
376
  }, 1000);
416
377
  try {
417
- requestPageModelBuild(doc);
378
+ buildPageModelThrottled(doc, editContextRef, pageViewContextRef);
418
379
  }
419
380
  catch (buildErr) { }
420
381
  }
@@ -470,110 +431,95 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
470
431
  }, []);
471
432
  const selecionChangeHandler = useDebouncedCallback(() => {
472
433
  const sel = iframeRef.current?.contentDocument?.getSelection();
473
- const isInlineAiUiFocused = () => {
474
- const activeEl = document.activeElement;
475
- return !!(activeEl?.closest(".agent-inline-dialog") ||
476
- activeEl?.closest(".agent-inline-trigger") ||
477
- activeEl?.closest('[role="dialog"]'));
478
- };
479
- if (!sel || sel.rangeCount === 0) {
480
- if (!isInlineAiUiFocused()) {
481
- editContextRef.current?.setSelectedRange(undefined);
482
- }
483
- return;
484
- }
485
- // Preserve the last non-collapsed selection while the inline AI UI takes focus.
486
- // This avoids losing context when users click the trigger or dialog.
487
- if (sel.isCollapsed && isInlineAiUiFocused()) {
488
- return;
489
- }
490
- // Find the field element containing the selection/caret
491
- const fieldElement = findClosestFieldElement(sel.anchorNode);
492
- if (!fieldElement) {
493
- if (!isInlineAiUiFocused()) {
494
- editContextRef.current?.setSelectedRange(undefined);
495
- }
496
- return;
497
- }
498
- const fieldId = fieldElement.getAttribute("data-fieldid");
499
- if (!fieldId)
500
- return;
501
- const range = sel.getRangeAt(0);
502
- // Guard: if layout components are hidden, do not set focus for fields of layout components
503
- if (editContextRef.current?.showLayoutComponents === false &&
504
- pageViewContextRef.current?.page) {
505
- const ownerId = fieldElement.getAttribute("data-itemid") || "";
506
- const owner = getComponentById(ownerId, pageViewContextRef.current.page);
507
- if (owner?.layoutId)
434
+ if (sel && sel.rangeCount > 0) {
435
+ // Only process selections that have text.
436
+ // Collapsed selections (carets) should not overwrite a previous AI selection context.
437
+ if (sel.isCollapsed)
508
438
  return;
509
- }
510
- // Compute the global offsets relative to the field element.
511
- const globalStartOffset = getGlobalTextOffset(fieldElement, range.startContainer, range.startOffset);
512
- const globalEndOffset = getGlobalTextOffset(fieldElement, range.endContainer, range.endOffset);
513
- const selectedText = range.toString();
514
- // Extract plain text context from the DOM
515
- const { contextBefore, contextAfter } = extractDOMSelectionContext(fieldElement, globalStartOffset, globalEndOffset);
516
- // Clone the range for the replaceText callback (ranges can become invalid after DOM changes)
517
- const rangeClone = range.cloneRange();
518
- const itemId = fieldElement.getAttribute("data-itemid") || "";
519
- const language = fieldElement.getAttribute("data-language") || "";
520
- const versionStr = fieldElement.getAttribute("data-version");
521
- const version = versionStr ? parseInt(versionStr, 10) : 0;
522
- editContextRef.current?.setSelectedRange({
523
- itemId,
524
- fieldId: fieldId,
525
- language,
526
- version,
527
- startOffset: globalStartOffset,
528
- endOffset: globalEndOffset,
529
- text: selectedText,
530
- contextBefore,
531
- contextAfter,
532
- // Create a callback that uses DOM Range API to replace text in contenteditable
533
- replaceText: (newText) => {
534
- try {
535
- // Delete the selected content (no-op for collapsed ranges)
536
- rangeClone.deleteContents();
537
- // Insert the new text - use the correct document from the range containers
538
- const doc = rangeClone.startContainer.ownerDocument || document;
539
- const textNode = doc.createTextNode(newText);
540
- rangeClone.insertNode(textNode);
541
- // Collapse the range to the end of the inserted text
542
- rangeClone.setStartAfter(textNode);
543
- rangeClone.collapse(true);
544
- // Update the selection
545
- const iframeSel = iframeRef.current?.contentDocument?.getSelection();
546
- if (iframeSel) {
547
- iframeSel.removeAllRanges();
548
- iframeSel.addRange(rangeClone);
439
+ // Find the field element containing the selection
440
+ const fieldElement = findClosestFieldElement(sel.anchorNode);
441
+ if (!fieldElement)
442
+ return;
443
+ const fieldId = fieldElement.getAttribute("data-fieldid");
444
+ if (!fieldId)
445
+ return;
446
+ const range = sel.getRangeAt(0);
447
+ // Guard: if layout components are hidden, do not set focus for fields of layout components
448
+ if (editContextRef.current?.showLayoutComponents === false &&
449
+ pageViewContextRef.current?.page) {
450
+ const ownerId = fieldElement.getAttribute("data-itemid") || "";
451
+ const owner = getComponentById(ownerId, pageViewContextRef.current.page);
452
+ if (owner?.layoutId)
453
+ return;
454
+ }
455
+ // Compute the global offsets relative to the field element.
456
+ const globalStartOffset = getGlobalTextOffset(fieldElement, range.startContainer, range.startOffset);
457
+ const globalEndOffset = getGlobalTextOffset(fieldElement, range.endContainer, range.endOffset);
458
+ const selectedText = range.toString();
459
+ // Extract plain text context from the DOM
460
+ const { contextBefore, contextAfter } = extractDOMSelectionContext(fieldElement, globalStartOffset, globalEndOffset);
461
+ // Clone the range for the replaceText callback (ranges can become invalid after DOM changes)
462
+ const rangeClone = range.cloneRange();
463
+ const itemId = fieldElement.getAttribute("data-itemid") || "";
464
+ const language = fieldElement.getAttribute("data-language") || "";
465
+ const versionStr = fieldElement.getAttribute("data-version");
466
+ const version = versionStr ? parseInt(versionStr, 10) : 0;
467
+ editContextRef.current?.setSelectedRange({
468
+ itemId,
469
+ fieldId: fieldId,
470
+ language,
471
+ version,
472
+ startOffset: globalStartOffset,
473
+ endOffset: globalEndOffset,
474
+ text: selectedText,
475
+ contextBefore,
476
+ contextAfter,
477
+ // Create a callback that uses DOM Range API to replace text in contenteditable
478
+ replaceText: (newText) => {
479
+ try {
480
+ // Delete the selected content
481
+ rangeClone.deleteContents();
482
+ // Insert the new text - use the correct document from the range containers
483
+ const doc = rangeClone.startContainer.ownerDocument || document;
484
+ const textNode = doc.createTextNode(newText);
485
+ rangeClone.insertNode(textNode);
486
+ // Collapse the range to the end of the inserted text
487
+ rangeClone.setStartAfter(textNode);
488
+ rangeClone.collapse(true);
489
+ // Update the selection
490
+ const iframeSel = iframeRef.current?.contentDocument?.getSelection();
491
+ if (iframeSel) {
492
+ iframeSel.removeAllRanges();
493
+ iframeSel.addRange(rangeClone);
494
+ }
495
+ // Explicitly save the field value since the MutationObserver may not be active
496
+ // when text is selected without entering inline edit mode
497
+ const isRichText = fieldElement?.getAttribute("data-is-richtext") === "true";
498
+ const valueToSave = isRichText
499
+ ? fieldElement?.innerHTML
500
+ : fieldElement?.innerText;
501
+ if (fieldId &&
502
+ itemId &&
503
+ language &&
504
+ version &&
505
+ editContextRef.current) {
506
+ editContextRef.current.operations.editField({
507
+ field: {
508
+ fieldId,
509
+ fieldName: fieldElement?.getAttribute("data-fieldname") || undefined,
510
+ item: { id: itemId, language, version },
511
+ },
512
+ refresh: "none",
513
+ value: valueToSave,
514
+ });
515
+ }
549
516
  }
550
- // Explicitly save the field value since the MutationObserver may not be active
551
- // when text is selected without entering inline edit mode
552
- const isRichText = fieldElement?.getAttribute("data-is-richtext") === "true";
553
- const valueToSave = isRichText
554
- ? fieldElement?.innerHTML
555
- : fieldElement?.innerText;
556
- if (fieldId &&
557
- itemId &&
558
- language &&
559
- version &&
560
- editContextRef.current) {
561
- editContextRef.current.operations.editField({
562
- field: {
563
- fieldId,
564
- fieldName: fieldElement?.getAttribute("data-fieldname") || undefined,
565
- item: { id: itemId, language, version },
566
- },
567
- refresh: "none",
568
- value: valueToSave,
569
- });
517
+ catch (error) {
518
+ console.error("[PageViewerFrame] Failed to replace text:", error);
570
519
  }
571
- }
572
- catch (error) {
573
- console.error("[PageViewerFrame] Failed to replace text:", error);
574
- }
575
- },
576
- });
520
+ },
521
+ });
522
+ }
577
523
  }, 300);
578
524
  useEffect(() => {
579
525
  const iframe = iframeRef.current;
@@ -585,7 +531,6 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
585
531
  let mutationObserver = null;
586
532
  const handleIframeMouseDown = async (event) => {
587
533
  const target = event.target;
588
- const targetElement = target;
589
534
  if (editContextRef.current?.isRefreshing && showSpinner)
590
535
  return;
591
536
  // Activate the editor slot this iframe belongs to
@@ -597,21 +542,10 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
597
542
  // Skip selection changes on right-click (button 2) - let context menu handler deal with it
598
543
  if (event.button === 2)
599
544
  return;
600
- const fieldElement = targetElement
601
- ? findParentWithAttribute(targetElement, "data-fieldid")
602
- : null;
545
+ let componentId = findNearestEditableComponentId(target);
603
546
  const pageForSelection = pageViewContextRef.current?.page;
604
- const fieldDescriptor = fieldElement?.hasAttribute("data-itemid")
605
- ? getFieldDescriptorFromElement(fieldElement)
606
- : undefined;
607
- const componentIdFromField = fieldDescriptor && targetElement && pageForSelection
608
- ? resolveComponentIdForFieldTarget(fieldDescriptor, targetElement, pageForSelection)
609
- : undefined;
610
- const rawComponentId = componentIdFromField ??
611
- (targetElement ? findNearestEditableComponentId(targetElement) : undefined);
612
- let componentId = rawComponentId;
613
- if (!componentIdFromField && componentId && pageForSelection) {
614
- componentId = resolveComponentIdForTarget(componentId, targetElement, pageForSelection);
547
+ if (componentId && pageForSelection) {
548
+ componentId = resolveComponentIdForTarget(componentId, target, pageForSelection);
615
549
  }
616
550
  // Layout components can still be selected even when showLayoutComponents is false
617
551
  // They will be displayed in read-only mode
@@ -694,6 +628,7 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
694
628
  ((editContextRef.current?.mode === "edit" &&
695
629
  pageViewContextRef.current?.page?.item.canWriteItem) ||
696
630
  editContextRef.current?.mode === "suggestions")) {
631
+ const fieldElement = findParentWithAttribute(target, "data-fieldid");
697
632
  if (fieldElement?.hasAttribute("data-itemid")) {
698
633
  // Guard: if layout components are hidden, do not allow editing fields of layout components
699
634
  if (editContextRef.current?.showLayoutComponents === false &&
@@ -706,7 +641,7 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
706
641
  }
707
642
  blockBlurEventRef.current = Date.now() + 500;
708
643
  const shouldRequestLock = editContextRef.current?.mode !== "suggestions";
709
- const hasLock = (await fieldsContextRef.current?.setFocusedField(fieldDescriptor, shouldRequestLock)) ?? false;
644
+ const hasLock = (await fieldsContextRef.current?.setFocusedField(getFieldDescriptorFromElement(fieldElement), shouldRequestLock)) ?? false;
710
645
  if (hasLock &&
711
646
  fieldsContextRef.current?.inlineEditingFieldElement !== fieldElement) {
712
647
  fieldsContextRef.current?.setInlineEditingFieldElement(fieldElement);
@@ -772,16 +707,12 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
772
707
  const isDialog = activeEl?.closest(".agent-inline-dialog") ||
773
708
  activeEl?.closest('[role="dialog"]');
774
709
  const isTrigger = activeEl?.closest(".agent-inline-trigger");
775
- // If focus moved to dialog/trigger (e.g. inline AI), don't force a blur boundary yet.
776
- if (!isDialog && !isTrigger) {
777
- // Always mark a field blur operation boundary so consecutive edits do not
778
- // collapse into a single undo step when a selection range is still present.
710
+ // If focus moved to dialog or trigger, OR if we still have a selection, don't clear.
711
+ if (!isDialog &&
712
+ !isTrigger &&
713
+ !editContextRef.current?.selectedRange) {
714
+ fieldsContextRef.current?.setInlineEditingFieldElement(undefined);
779
715
  editContextRef.current?.operations.onFieldBlur?.();
780
- // Keep selection-related state intact, but clear inline editing element
781
- // when there is no active selectedRange.
782
- if (!editContextRef.current?.selectedRange) {
783
- fieldsContextRef.current?.setInlineEditingFieldElement(undefined);
784
- }
785
716
  }
786
717
  }, 100);
787
718
  }
@@ -837,7 +768,7 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
837
768
  "getAttribute" in x.target &&
838
769
  x.target.getAttribute("data-fieldid") &&
839
770
  x.target.getAttribute("data-itemid")))) {
840
- requestPageModelBuild(iframeDocument);
771
+ buildPageModelThrottled(iframeDocument, editContextRef, pageViewContextRef);
841
772
  }
842
773
  });
843
774
  mutationObserver.observe(iframeDocument, {
@@ -846,126 +777,19 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
846
777
  characterData: false, // observe text changes
847
778
  //attributes: true, // observe attribute changes (like style or class)
848
779
  });
849
- requestPageModelBuild(iframeDocument);
850
- };
851
- const parsePositiveInt = (value) => {
852
- if (!value)
853
- return undefined;
854
- const parsed = parseInt(value, 10);
855
- return Number.isFinite(parsed) ? parsed : undefined;
856
- };
857
- const resolveLinkedItemDescriptor = (anchor, clickedElement) => {
858
- const href = anchor.getAttribute("href") || anchor.href;
859
- let hrefUrl;
860
- try {
861
- hrefUrl = new URL(anchor.href, iframe.contentWindow?.location?.href || window.location.href);
862
- }
863
- catch {
864
- return undefined;
865
- }
866
- const attributeContainer = clickedElement?.closest("[data-itemid],[data-language],[data-version],[sc_item],[sc_itemid],[sc_lang]") || anchor;
867
- // Parse Sitecore RTE format first: ~/link.aspx?_id=GUID&_z=z (target item, not the containing component)
868
- let itemIdRaw;
869
- if (href.includes("~/link.aspx?_id=") ||
870
- href.includes("link.aspx?_id=")) {
871
- const idFromUrl = hrefUrl.searchParams.get("_id");
872
- if (idFromUrl) {
873
- // Convert compact GUID (AD973E51E8454BD2B333859375FBBA24) to standard format with dashes
874
- itemIdRaw = idFromUrl
875
- .replace(/^(\w{8})(\w{4})(\w{4})(\w{4})(\w{12})$/i, "$1-$2-$3-$4-$5")
876
- .toLowerCase();
877
- }
878
- }
879
- if (!itemIdRaw) {
880
- itemIdRaw =
881
- hrefUrl.searchParams.get("sc_itemid") ??
882
- hrefUrl.searchParams.get("itemid") ??
883
- anchor.getAttribute("data-itemid") ??
884
- anchor.getAttribute("sc_itemid") ??
885
- attributeContainer?.getAttribute("data-itemid") ??
886
- attributeContainer?.getAttribute("sc_itemid") ??
887
- (anchor.getAttribute("sc_item")
888
- ? extractItemIdFromItemUri(anchor.getAttribute("sc_item"))
889
- : undefined) ??
890
- (attributeContainer?.getAttribute("sc_item")
891
- ? extractItemIdFromItemUri(attributeContainer.getAttribute("sc_item"))
892
- : undefined);
893
- }
894
- const itemId = cleanId(itemIdRaw);
895
- if (!itemId)
896
- return undefined;
897
- const language = hrefUrl.searchParams.get("sc_lang") ??
898
- hrefUrl.searchParams.get("lang") ??
899
- hrefUrl.searchParams.get("language") ??
900
- anchor.getAttribute("data-language") ??
901
- anchor.getAttribute("sc_lang") ??
902
- attributeContainer?.getAttribute("data-language") ??
903
- attributeContainer?.getAttribute("sc_lang") ??
904
- editContextRef.current?.currentItemDescriptor?.language ??
905
- editContextRef.current?.item?.language;
906
- if (!language)
907
- return undefined;
908
- const version = parsePositiveInt(hrefUrl.searchParams.get("sc_version")) ??
909
- parsePositiveInt(hrefUrl.searchParams.get("version")) ??
910
- parsePositiveInt(anchor.getAttribute("data-version")) ??
911
- parsePositiveInt(attributeContainer?.getAttribute("data-version")) ??
912
- editContextRef.current?.currentItemDescriptor?.version ??
913
- editContextRef.current?.item?.version ??
914
- 0;
915
- return {
916
- id: itemId,
917
- language,
918
- version,
919
- };
780
+ buildPageModelThrottled(iframeDocument, editContextRef, pageViewContextRef);
920
781
  };
921
782
  const handleIframeClick = async (event) => {
922
783
  const target = event.target;
923
- if (!target)
924
- return;
925
- const anchor = target.tagName.toLowerCase() === "a"
926
- ? target
927
- : target.closest("a");
928
- if (!anchor)
929
- return;
930
- const href = anchor.getAttribute("href") || anchor.href;
931
- if (!href || href.startsWith("#") || href.startsWith("javascript:")) {
932
- return;
933
- }
934
- const mode = editContextRef.current?.mode;
935
- const isPreviewOrSuggestions = mode === "preview" || mode === "suggestions";
936
- if (isPreviewOrSuggestions) {
937
- let hrefUrl;
938
- try {
939
- hrefUrl = new URL(anchor.href, iframe.contentWindow?.location?.href || window.location.href);
940
- }
941
- catch {
942
- return;
943
- }
944
- const iframeOrigin = iframe.contentWindow?.location?.origin;
945
- const isInternalLink = hrefUrl.origin === window.location.origin ||
946
- (iframeOrigin ? hrefUrl.origin === iframeOrigin : false);
947
- if (!isInternalLink) {
784
+ // Check if the click target is a link (anchor tag)
785
+ const anchor = target.tagName.toLowerCase() === "a" ? target : target.closest("a");
786
+ if (anchor) {
787
+ const href = anchor.href;
788
+ // Block only navigation links, allow anchor links and javascript links
789
+ if (href && !href.startsWith("#") && !href.startsWith("javascript:")) {
948
790
  event.preventDefault();
949
- event.stopPropagation();
950
- window.open(hrefUrl.toString(), "_blank", "noopener,noreferrer");
951
- return;
952
791
  }
953
- if (isInternalLink) {
954
- const linkedItem = resolveLinkedItemDescriptor(anchor, target);
955
- if (linkedItem) {
956
- event.preventDefault();
957
- event.stopPropagation();
958
- await editContextRef.current?.loadItem(linkedItem, {
959
- openInNewSlot: event.altKey,
960
- });
961
- return;
962
- }
963
- }
964
- // If this link cannot be resolved to an item, allow browser behavior.
965
- return;
966
792
  }
967
- // In edit mode, keep navigation inside iframe disabled.
968
- event.preventDefault();
969
793
  };
970
794
  const handleContextMenu = async (event) => {
971
795
  if (editContextRef.current?.isRefreshing && showSpinner)
@@ -1158,7 +982,9 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
1158
982
  const deviceHeight = pageViewContext.device === "desktop" || !pageViewContext.deviceHeight
1159
983
  ? "100%"
1160
984
  : pageViewContext.deviceHeight || 640;
1161
- return (_jsxs("div", { className: cn("relative flex h-full w-full flex-col items-center select-none", className, editContext.showAgentsPanel && !editContext.currentWizardId && "pr-0"), children: [!pageViewContext.fullscreen && (_jsx(EditorWarnings, { item: pageViewContext.page?.item })), slotCloseButton && (_jsx("div", { className: "absolute top-3 right-3 z-50", children: slotCloseButton })), pageViewContext.device !== "desktop" && (_jsx(DeviceToolbar, { pageViewContext: pageViewContext, configuration: editContext.configuration })), _jsxs("div", { className: "relative flex flex-1 select-none", "data-testid": "page-viewer-viewport", style: {
985
+ return (_jsxs("div", { className: cn("relative flex h-full w-full flex-col items-center select-none", className, (editContext.showComponentNavigator ||
986
+ (editContext.showAgentsPanel && !editContext.currentWizardId)) &&
987
+ "pr-0"), children: [!pageViewContext.fullscreen && (_jsx(EditorWarnings, { item: pageViewContext.page?.item })), pageViewContext.device !== "desktop" && (_jsx(DeviceToolbar, { pageViewContext: pageViewContext, configuration: editContext.configuration })), _jsxs("div", { className: "relative flex flex-1 select-none", "data-testid": "page-viewer-viewport", style: {
1162
988
  width: pageViewContext.device === "desktop" ||
1163
989
  pageViewContext.device === "Responsive"
1164
990
  ? "100%"
@@ -1174,32 +1000,15 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
1174
1000
  setTimeout(() => {
1175
1001
  injectSXAScripts(iframeRef.current);
1176
1002
  }, 1000);
1177
- requestPageModelBuild(doc);
1003
+ buildPageModelThrottled(doc, editContextRef, pageViewContextRef);
1178
1004
  }
1179
1005
  } }), iframeRef.current && (_jsx(PageEditorChrome, { iframe: iframeRef.current, compareView: compareView, pageViewContext: pageViewContext })), pageViewContext.deviceHeight && pageViewContext.device && (_jsx("div", { className: "bg-gray-4 relative z-40 h-full w-full" }))] }), !pageViewContext.fullscreen &&
1180
1006
  showMiniMap &&
1181
1007
  editContext.showMinimap &&
1182
- !editContext.isMobile &&
1183
- editContext.parheliaSettings?.showMinimap !== false && (_jsx(MiniMap, { scroll: scroll, mainViewIframeRef: iframeRef, pageViewContext: pageViewContext, deviceHeight: pageViewContext.device === "Desktop"
1008
+ editContext.parheliaSettings?.showMinimap !== false && (_jsx(MiniMap, { compareView: compareView, scroll: scroll, mainViewIframeRef: iframeRef, pageViewContext: pageViewContext, deviceHeight: pageViewContext.device === "Desktop"
1184
1009
  ? undefined
1185
1010
  : pageViewContext.deviceHeight })), showSpinner && (_jsxs(_Fragment, { children: [_jsx("div", { className: "bg-gray-4/50 absolute top-0 left-0 h-full w-full" }), _jsx("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 transform", children: _jsx(Spinner, {}) })] }))] }), _jsx(FieldActionsOverlay, { ref: fieldActionsOverlay, generatorButtons: contextMenuFieldButtons, onActionClick: handleActionClick, onParameterizedActionExecute: handleParameterizedActionExecute, currentOverlay: editContext?.currentOverlay, fieldId: contextMenuField?.fieldId || "", setCurrentOverlay: editContext?.setCurrentOverlay || (() => { }), preSelectedAction: preSelectedAction, iframe: iframeRef.current })] }));
1186
1011
  }
1187
- /**
1188
- * In preview mode, disable editing in the iframe: set contentEditable=false on all
1189
- * editable elements and blur the active element so the caret is removed and typing does nothing.
1190
- */
1191
- function disableEditingInIframeDocument(doc) {
1192
- if (!doc || !doc.body)
1193
- return;
1194
- const editable = doc.querySelectorAll("[contenteditable='true'], [contenteditable='']");
1195
- editable.forEach((el) => {
1196
- el.contentEditable = "false";
1197
- });
1198
- const active = doc.activeElement;
1199
- if (active?.isContentEditable) {
1200
- active.blur();
1201
- }
1202
- }
1203
1012
  function injectEditorCSS(iframeDocument, editMode) {
1204
1013
  if (!iframeDocument)
1205
1014
  return;
@@ -1236,9 +1045,6 @@ function injectEditorCSS(iframeDocument, editMode) {
1236
1045
  if (iframeDocument && iframeDocument.head) {
1237
1046
  iframeDocument.head.appendChild(style);
1238
1047
  }
1239
- if (!editMode) {
1240
- disableEditingInIframeDocument(iframeDocument);
1241
- }
1242
1048
  }
1243
1049
  function resolveComponentIdForTarget(rawId, target, page) {
1244
1050
  const direct = getComponentById(rawId, page);
@@ -1255,45 +1061,6 @@ function resolveComponentIdForTarget(rawId, target, page) {
1255
1061
  getElementDepth(a.firstDOMElement || null));
1256
1062
  return containing[0].id;
1257
1063
  }
1258
- function resolveComponentIdForFieldTarget(field, target, page) {
1259
- const matches = findComponentsRenderingField(field, page);
1260
- const containingMatches = matches.filter((component) => isTargetInsideComponent(target, component));
1261
- const rankedMatches = (containingMatches.length > 0
1262
- ? containingMatches
1263
- : matches).sort((a, b) => getElementDepth(b.firstDOMElement || null) -
1264
- getElementDepth(a.firstDOMElement || null));
1265
- return rankedMatches[0]?.id;
1266
- }
1267
- function findComponentsRenderingField(field, page) {
1268
- if (!page?.rootComponent)
1269
- return [];
1270
- const matches = [];
1271
- const visit = (component) => {
1272
- if (componentRendersField(component, field)) {
1273
- matches.push(component);
1274
- }
1275
- for (const placeholder of component.placeholders || []) {
1276
- for (const child of placeholder.components || []) {
1277
- visit(child);
1278
- }
1279
- }
1280
- };
1281
- visit(page.rootComponent);
1282
- return matches;
1283
- }
1284
- function componentRendersField(component, field) {
1285
- const renderedItems = [
1286
- component.datasourceItem,
1287
- ...component.items.filter((item) => !component.datasourceItem ||
1288
- !(item.id === component.datasourceItem.id &&
1289
- item.language === component.datasourceItem.language &&
1290
- item.version === component.datasourceItem.version)),
1291
- ].filter(Boolean);
1292
- return renderedItems.some((item) => item.id === field.item.id &&
1293
- item.language === field.item.language &&
1294
- item.version === field.item.version &&
1295
- item.renderedFieldIds.includes(field.fieldId));
1296
- }
1297
1064
  function isTargetInsideComponent(target, component) {
1298
1065
  const start = component.firstDOMElement;
1299
1066
  const end = component.lastDOMElement || component.firstDOMElement;