@parhelia/core 0.4.12800 → 0.4.12818

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 (495) hide show
  1. package/dist/agents-view/AgentsWorkspaceView.d.ts +2 -0
  2. package/dist/agents-view/AgentsWorkspaceView.js +12 -3
  3. package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
  4. package/dist/components/WorkspaceHomeView.d.ts +14 -3
  5. package/dist/components/WorkspaceHomeView.js +7 -4
  6. package/dist/components/WorkspaceHomeView.js.map +1 -1
  7. package/dist/components/ui/dialog.d.ts +7 -1
  8. package/dist/components/ui/dialog.js +6 -3
  9. package/dist/components/ui/dialog.js.map +1 -1
  10. package/dist/components/ui/popover.d.ts +8 -0
  11. package/dist/components/ui/popover.js +40 -6
  12. package/dist/components/ui/popover.js.map +1 -1
  13. package/dist/components/ui/tooltip.d.ts +2 -2
  14. package/dist/components/ui/tooltip.js +9 -4
  15. package/dist/components/ui/tooltip.js.map +1 -1
  16. package/dist/config/config.js +2 -2
  17. package/dist/config/config.js.map +1 -1
  18. package/dist/editor/ConfirmationDialog.d.ts +1 -0
  19. package/dist/editor/ConfirmationDialog.js +9 -2
  20. package/dist/editor/ConfirmationDialog.js.map +1 -1
  21. package/dist/editor/ContentTree.d.ts +9 -1
  22. package/dist/editor/ContentTree.js +50 -23
  23. package/dist/editor/ContentTree.js.map +1 -1
  24. package/dist/editor/FieldList.js +41 -4
  25. package/dist/editor/FieldList.js.map +1 -1
  26. package/dist/editor/FieldListField.js +156 -123
  27. package/dist/editor/FieldListField.js.map +1 -1
  28. package/dist/editor/LinkEditorDialog.d.ts +3 -0
  29. package/dist/editor/LinkEditorDialog.js +9 -4
  30. package/dist/editor/LinkEditorDialog.js.map +1 -1
  31. package/dist/editor/MainLayout.js +9 -2
  32. package/dist/editor/MainLayout.js.map +1 -1
  33. package/dist/editor/SetupWizard.js +1 -1
  34. package/dist/editor/SetupWizard.js.map +1 -1
  35. package/dist/editor/UsedBy.d.ts +2 -0
  36. package/dist/editor/UsedBy.js +50 -10
  37. package/dist/editor/UsedBy.js.map +1 -1
  38. package/dist/editor/agent-changes/agentChangeTargets.d.ts +58 -0
  39. package/dist/editor/agent-changes/agentChangeTargets.js +174 -0
  40. package/dist/editor/agent-changes/agentChangeTargets.js.map +1 -0
  41. package/dist/editor/agent-changes/agentChangeTextHighlight.d.ts +57 -0
  42. package/dist/editor/agent-changes/agentChangeTextHighlight.js +109 -0
  43. package/dist/editor/agent-changes/agentChangeTextHighlight.js.map +1 -0
  44. package/dist/editor/ai/AgentImagePreview.d.ts +13 -0
  45. package/dist/editor/ai/AgentImagePreview.js +41 -0
  46. package/dist/editor/ai/AgentImagePreview.js.map +1 -0
  47. package/dist/editor/ai/ContentInspectorPopover.d.ts +2 -1
  48. package/dist/editor/ai/ContentInspectorPopover.js +3 -3
  49. package/dist/editor/ai/ContentInspectorPopover.js.map +1 -1
  50. package/dist/editor/ai/MediaImage.js +2 -1
  51. package/dist/editor/ai/MediaImage.js.map +1 -1
  52. package/dist/editor/ai/activityRowNavigation.d.ts +28 -0
  53. package/dist/editor/ai/activityRowNavigation.js +53 -0
  54. package/dist/editor/ai/activityRowNavigation.js.map +1 -0
  55. package/dist/editor/ai/agentMessageGrouping.d.ts +1 -1
  56. package/dist/editor/ai/agentMessageGrouping.js +2 -13
  57. package/dist/editor/ai/agentMessageGrouping.js.map +1 -1
  58. package/dist/editor/ai/agentMessageHelpers.js +21 -1
  59. package/dist/editor/ai/agentMessageHelpers.js.map +1 -1
  60. package/dist/editor/ai/terminal/agentSessionSelectors.js +0 -4
  61. package/dist/editor/ai/terminal/agentSessionSelectors.js.map +1 -1
  62. package/dist/editor/ai/terminal/agentSessionState.d.ts +0 -2
  63. package/dist/editor/ai/terminal/agentSessionState.js +8 -12
  64. package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
  65. package/dist/editor/ai/terminal/agentTurnTiming.d.ts +2 -0
  66. package/dist/editor/ai/terminal/agentTurnTiming.js +26 -1
  67. package/dist/editor/ai/terminal/agentTurnTiming.js.map +1 -1
  68. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.d.ts +3 -1
  69. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js +48 -6
  70. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js.map +1 -1
  71. package/dist/editor/ai/terminal/components/AgentBanners.d.ts +2 -1
  72. package/dist/editor/ai/terminal/components/AgentBanners.js +3 -2
  73. package/dist/editor/ai/terminal/components/AgentBanners.js.map +1 -1
  74. package/dist/editor/ai/terminal/components/AgentCostDisplay.js +6 -5
  75. package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
  76. package/dist/editor/ai/terminal/components/AgentDocumentList.js +20 -10
  77. package/dist/editor/ai/terminal/components/AgentDocumentList.js.map +1 -1
  78. package/dist/editor/ai/terminal/components/AgentGreeting.js +1 -1
  79. package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
  80. package/dist/editor/ai/terminal/components/AgentMemoryPanel.d.ts +2 -1
  81. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js +12 -9
  82. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js.map +1 -1
  83. package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.d.ts +9 -0
  84. package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.js +75 -0
  85. package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.js.map +1 -0
  86. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.d.ts +1 -1
  87. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +3 -71
  88. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
  89. package/dist/editor/ai/terminal/components/AgentRunStatusBanners.d.ts +2 -1
  90. package/dist/editor/ai/terminal/components/AgentRunStatusBanners.js +2 -2
  91. package/dist/editor/ai/terminal/components/AgentRunStatusBanners.js.map +1 -1
  92. package/dist/editor/ai/terminal/components/AgentSettingsContent.js +2 -1
  93. package/dist/editor/ai/terminal/components/AgentSettingsContent.js.map +1 -1
  94. package/dist/editor/ai/terminal/components/AgentSettingsSections.d.ts +1 -0
  95. package/dist/editor/ai/terminal/components/AgentSettingsSections.js +1 -1
  96. package/dist/editor/ai/terminal/components/AgentSettingsSections.js.map +1 -1
  97. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.d.ts +2 -1
  98. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.js +2 -2
  99. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.js.map +1 -1
  100. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.d.ts +2 -1
  101. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +9 -3
  102. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
  103. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.d.ts +2 -1
  104. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js +2 -6
  105. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js.map +1 -1
  106. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.d.ts +2 -1
  107. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js +8 -2
  108. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js.map +1 -1
  109. package/dist/editor/ai/terminal/components/AgentTerminalView.js +1 -1
  110. package/dist/editor/ai/terminal/components/AgentTerminalView.js.map +1 -1
  111. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.d.ts +6 -1
  112. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.js +5 -3
  113. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.js.map +1 -1
  114. package/dist/editor/ai/terminal/components/AiResponseMessage.d.ts +2 -1
  115. package/dist/editor/ai/terminal/components/AiResponseMessage.js +12 -9
  116. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  117. package/dist/editor/ai/terminal/components/ContextInfoBar.js +1 -1
  118. package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
  119. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.d.ts +3 -0
  120. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js +47 -0
  121. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js.map +1 -0
  122. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js +15 -4
  123. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js.map +1 -1
  124. package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +2 -1
  125. package/dist/editor/ai/terminal/components/ToolCallDisplay.js +22 -54
  126. package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
  127. package/dist/editor/ai/terminal/components/UserMessage.d.ts +6 -0
  128. package/dist/editor/ai/terminal/components/UserMessage.js +17 -4
  129. package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
  130. package/dist/editor/ai/terminal/components/agentThinkingStyles.d.ts +5 -0
  131. package/dist/editor/ai/terminal/components/agentThinkingStyles.js +5 -0
  132. package/dist/editor/ai/terminal/components/agentThinkingStyles.js.map +1 -1
  133. package/dist/editor/ai/terminal/components/toolCallContentRenderers.d.ts +2 -0
  134. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js +6 -0
  135. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js.map +1 -1
  136. package/dist/editor/ai/terminal/components/toolCallResultJson.d.ts +1 -0
  137. package/dist/editor/ai/terminal/components/toolCallResultJson.js +46 -0
  138. package/dist/editor/ai/terminal/components/toolCallResultJson.js.map +1 -0
  139. package/dist/editor/ai/terminal/types.d.ts +2 -0
  140. package/dist/editor/ai/terminal/useAgentDraftInitializer.d.ts +2 -0
  141. package/dist/editor/ai/terminal/useAgentDraftInitializer.js +51 -14
  142. package/dist/editor/ai/terminal/useAgentDraftInitializer.js.map +1 -1
  143. package/dist/editor/ai/terminal/useAgentLoadPipeline.d.ts +2 -0
  144. package/dist/editor/ai/terminal/useAgentLoadPipeline.js +3 -1
  145. package/dist/editor/ai/terminal/useAgentLoadPipeline.js.map +1 -1
  146. package/dist/editor/ai/terminal/useAgentProviderWait.d.ts +18 -0
  147. package/dist/editor/ai/terminal/useAgentProviderWait.js +23 -0
  148. package/dist/editor/ai/terminal/useAgentProviderWait.js.map +1 -0
  149. package/dist/editor/ai/terminal/useAgentRunCompletionSocketHandler.d.ts +1 -1
  150. package/dist/editor/ai/terminal/useAgentRunCompletionSocketHandler.js +3 -3
  151. package/dist/editor/ai/terminal/useAgentRunCompletionSocketHandler.js.map +1 -1
  152. package/dist/editor/ai/terminal/useAgentRunDeltaRouter.d.ts +2 -2
  153. package/dist/editor/ai/terminal/useAgentRunDeltaRouter.js +5 -5
  154. package/dist/editor/ai/terminal/useAgentRunDeltaRouter.js.map +1 -1
  155. package/dist/editor/ai/terminal/useAgentRunDeltaSocketHandler.js +14 -10
  156. package/dist/editor/ai/terminal/useAgentRunDeltaSocketHandler.js.map +1 -1
  157. package/dist/editor/ai/terminal/useAgentRunMessagePipeline.d.ts +6 -7
  158. package/dist/editor/ai/terminal/useAgentRunMessagePipeline.js +5 -5
  159. package/dist/editor/ai/terminal/useAgentRunMessagePipeline.js.map +1 -1
  160. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.d.ts +1 -1
  161. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js +23 -16
  162. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js.map +1 -1
  163. package/dist/editor/ai/terminal/useAgentSession.d.ts +0 -2
  164. package/dist/editor/ai/terminal/useAgentSession.js +8 -15
  165. package/dist/editor/ai/terminal/useAgentSession.js.map +1 -1
  166. package/dist/editor/ai/terminal/useAgentSessionFacade.d.ts +1 -0
  167. package/dist/editor/ai/terminal/useAgentSessionFacade.js +2 -0
  168. package/dist/editor/ai/terminal/useAgentSessionFacade.js.map +1 -1
  169. package/dist/editor/ai/terminal/useAgentSettleCompletedRun.d.ts +1 -1
  170. package/dist/editor/ai/terminal/useAgentSettleCompletedRun.js +3 -3
  171. package/dist/editor/ai/terminal/useAgentSettleCompletedRun.js.map +1 -1
  172. package/dist/editor/ai/terminal/useAgentStreamPipeline.d.ts +2 -2
  173. package/dist/editor/ai/terminal/useAgentStreamPipeline.js +5 -5
  174. package/dist/editor/ai/terminal/useAgentStreamPipeline.js.map +1 -1
  175. package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.d.ts +0 -1
  176. package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.js +3 -12
  177. package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.js.map +1 -1
  178. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +18 -5
  179. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
  180. package/dist/editor/ai/terminal/useAgentSubmitResponseHandler.js +6 -1
  181. package/dist/editor/ai/terminal/useAgentSubmitResponseHandler.js.map +1 -1
  182. package/dist/editor/ai/terminal/useAgentTerminalController.js +9 -10
  183. package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
  184. package/dist/editor/ai/terminal/useAgentTerminalViewProps.d.ts +1 -1
  185. package/dist/editor/ai/terminal/useAgentTerminalViewProps.js.map +1 -1
  186. package/dist/editor/ai-image-editor/AiImageEditorDialog.js +1 -1
  187. package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
  188. package/dist/editor/bridge/bridgeKeys.d.ts +5 -0
  189. package/dist/editor/bridge/bridgeKeys.js +8 -0
  190. package/dist/editor/bridge/bridgeKeys.js.map +1 -0
  191. package/dist/editor/bridge/linkDownload.d.ts +3 -0
  192. package/dist/editor/bridge/linkDownload.js +52 -0
  193. package/dist/editor/bridge/linkDownload.js.map +1 -0
  194. package/dist/editor/bridge/protocol.d.ts +34 -0
  195. package/dist/editor/bridge/protocol.js +3 -1
  196. package/dist/editor/bridge/protocol.js.map +1 -1
  197. package/dist/editor/client/EditorShell.js +30 -21
  198. package/dist/editor/client/EditorShell.js.map +1 -1
  199. package/dist/editor/client/OperationDialogContent.d.ts +10 -3
  200. package/dist/editor/client/OperationDialogContent.js +27 -4
  201. package/dist/editor/client/OperationDialogContent.js.map +1 -1
  202. package/dist/editor/client/agentLoadItemPolicy.d.ts +22 -0
  203. package/dist/editor/client/agentLoadItemPolicy.js +60 -0
  204. package/dist/editor/client/agentLoadItemPolicy.js.map +1 -0
  205. package/dist/editor/client/editContext.d.ts +16 -0
  206. package/dist/editor/client/editContext.js.map +1 -1
  207. package/dist/editor/client/hooks/useSocketMessageHandler.d.ts +5 -0
  208. package/dist/editor/client/hooks/useSocketMessageHandler.js +53 -13
  209. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  210. package/dist/editor/client/itemsRepository.js +26 -7
  211. package/dist/editor/client/itemsRepository.js.map +1 -1
  212. package/dist/editor/client/localUserEditActivity.d.ts +3 -0
  213. package/dist/editor/client/localUserEditActivity.js +12 -0
  214. package/dist/editor/client/localUserEditActivity.js.map +1 -0
  215. package/dist/editor/client/operations.js +26 -13
  216. package/dist/editor/client/operations.js.map +1 -1
  217. package/dist/editor/commands/undo.js +8 -2
  218. package/dist/editor/commands/undo.js.map +1 -1
  219. package/dist/editor/componentVisualMode.d.ts +14 -0
  220. package/dist/editor/componentVisualMode.js +43 -0
  221. package/dist/editor/componentVisualMode.js.map +1 -0
  222. package/dist/editor/field-types/ImageFieldEditor.js +1 -1
  223. package/dist/editor/field-types/ImageFieldEditor.js.map +1 -1
  224. package/dist/editor/field-types/MultiLineText.js +29 -46
  225. package/dist/editor/field-types/MultiLineText.js.map +1 -1
  226. package/dist/editor/field-types/PictureFieldEditor.js +1 -1
  227. package/dist/editor/field-types/PictureFieldEditor.js.map +1 -1
  228. package/dist/editor/field-types/RichTextEditorComponent.js +9 -2
  229. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  230. package/dist/editor/field-types/SingleLineText.js +28 -79
  231. package/dist/editor/field-types/SingleLineText.js.map +1 -1
  232. package/dist/editor/field-types/richtext/components/ReactSlate.js +59 -8
  233. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
  234. package/dist/editor/field-types/richtext/components/SimpleToolbarButton.js +4 -1
  235. package/dist/editor/field-types/richtext/components/SimpleToolbarButton.js.map +1 -1
  236. package/dist/editor/field-types/richtext/components/ToolbarButton.js +4 -1
  237. package/dist/editor/field-types/richtext/components/ToolbarButton.js.map +1 -1
  238. package/dist/editor/field-types/richtext/types.d.ts +7 -0
  239. package/dist/editor/field-types/richtext/types.js.map +1 -1
  240. package/dist/editor/field-types/richtext/utils/changeHighlight.d.ts +18 -0
  241. package/dist/editor/field-types/richtext/utils/changeHighlight.js +57 -0
  242. package/dist/editor/field-types/richtext/utils/changeHighlight.js.map +1 -0
  243. package/dist/editor/field-types/useFormFieldCaretPresence.d.ts +11 -0
  244. package/dist/editor/field-types/useFormFieldCaretPresence.js +32 -16
  245. package/dist/editor/field-types/useFormFieldCaretPresence.js.map +1 -1
  246. package/dist/editor/field-types/useFormFieldSelectionRange.d.ts +36 -0
  247. package/dist/editor/field-types/useFormFieldSelectionRange.js +123 -0
  248. package/dist/editor/field-types/useFormFieldSelectionRange.js.map +1 -0
  249. package/dist/editor/field-types/useTextCompletion.js +13 -3
  250. package/dist/editor/field-types/useTextCompletion.js.map +1 -1
  251. package/dist/editor/media-selector/AiImageSearchPrompt.d.ts +2 -1
  252. package/dist/editor/media-selector/AiImageSearchPrompt.js +2 -2
  253. package/dist/editor/media-selector/AiImageSearchPrompt.js.map +1 -1
  254. package/dist/editor/media-selector/Thumbnails.d.ts +2 -1
  255. package/dist/editor/media-selector/Thumbnails.js +2 -2
  256. package/dist/editor/media-selector/Thumbnails.js.map +1 -1
  257. package/dist/editor/media-selector/TreeSelector.js +142 -42
  258. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  259. package/dist/editor/media-selector/UploadZone.d.ts +6 -1
  260. package/dist/editor/media-selector/UploadZone.js +10 -7
  261. package/dist/editor/media-selector/UploadZone.js.map +1 -1
  262. package/dist/editor/media-selector/mediaFileType.d.ts +2 -0
  263. package/dist/editor/media-selector/mediaFileType.js +37 -0
  264. package/dist/editor/media-selector/mediaFileType.js.map +1 -1
  265. package/dist/editor/menubar/GenericToolbar.d.ts +2 -1
  266. package/dist/editor/menubar/GenericToolbar.js +2 -2
  267. package/dist/editor/menubar/GenericToolbar.js.map +1 -1
  268. package/dist/editor/menubar/ToolbarFactory.js +1 -1
  269. package/dist/editor/menubar/ToolbarFactory.js.map +1 -1
  270. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js +10 -3
  271. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js.map +1 -1
  272. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +6 -1
  273. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  274. package/dist/editor/notifications/WatchButton.js +11 -4
  275. package/dist/editor/notifications/WatchButton.js.map +1 -1
  276. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.d.ts +20 -0
  277. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js +31 -0
  278. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js.map +1 -0
  279. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +2 -2
  280. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
  281. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.d.ts +33 -0
  282. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js +290 -0
  283. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js.map +1 -0
  284. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js +27 -10
  285. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js.map +1 -1
  286. package/dist/editor/page-editor-chrome/InsertComponentMenu.d.ts +6 -1
  287. package/dist/editor/page-editor-chrome/InsertComponentMenu.js +53 -6
  288. package/dist/editor/page-editor-chrome/InsertComponentMenu.js.map +1 -1
  289. package/dist/editor/page-editor-chrome/PageEditorChrome.js +2 -1
  290. package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
  291. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +14 -2
  292. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  293. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +59 -13
  294. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
  295. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.d.ts +1 -1
  296. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js +6 -271
  297. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js.map +1 -1
  298. package/dist/editor/page-editor-chrome/diffRulerSegments.d.ts +18 -0
  299. package/dist/editor/page-editor-chrome/diffRulerSegments.js +37 -0
  300. package/dist/editor/page-editor-chrome/diffRulerSegments.js.map +1 -0
  301. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js +15 -2
  302. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
  303. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +2 -0
  304. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +58 -5
  305. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
  306. package/dist/editor/page-viewer/DeviceToolbar.js +53 -10
  307. package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -1
  308. package/dist/editor/page-viewer/MiniMap.js +22 -24
  309. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  310. package/dist/editor/page-viewer/PageViewerFrame.js +204 -27
  311. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  312. package/dist/editor/page-viewer/bridgeFieldPatch.js +1 -0
  313. package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
  314. package/dist/editor/page-viewer/compareFrameWidth.d.ts +8 -0
  315. package/dist/editor/page-viewer/compareFrameWidth.js +25 -0
  316. package/dist/editor/page-viewer/compareFrameWidth.js.map +1 -0
  317. package/dist/editor/page-viewer/pageViewContext.d.ts +2 -1
  318. package/dist/editor/page-viewer/pageViewContext.js +10 -4
  319. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  320. package/dist/editor/pageModel.d.ts +2 -0
  321. package/dist/editor/reviews/Comment.js +13 -12
  322. package/dist/editor/reviews/Comment.js.map +1 -1
  323. package/dist/editor/reviews/CommentDisplayPopover.js +25 -29
  324. package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
  325. package/dist/editor/reviews/CommentEditor.js +47 -13
  326. package/dist/editor/reviews/CommentEditor.js.map +1 -1
  327. package/dist/editor/reviews/CommentQuote.d.ts +4 -0
  328. package/dist/editor/reviews/CommentQuote.js +30 -0
  329. package/dist/editor/reviews/CommentQuote.js.map +1 -0
  330. package/dist/editor/reviews/CommentThreadAgentLink.d.ts +23 -0
  331. package/dist/editor/reviews/CommentThreadAgentLink.js +37 -0
  332. package/dist/editor/reviews/CommentThreadAgentLink.js.map +1 -0
  333. package/dist/editor/reviews/CommentView.d.ts +2 -3
  334. package/dist/editor/reviews/CommentView.js +17 -14
  335. package/dist/editor/reviews/CommentView.js.map +1 -1
  336. package/dist/editor/reviews/Comments.js +14 -5
  337. package/dist/editor/reviews/Comments.js.map +1 -1
  338. package/dist/editor/reviews/MentionText.d.ts +5 -1
  339. package/dist/editor/reviews/MentionText.js +23 -0
  340. package/dist/editor/reviews/MentionText.js.map +1 -1
  341. package/dist/editor/reviews/ReviewCard.js +14 -8
  342. package/dist/editor/reviews/ReviewCard.js.map +1 -1
  343. package/dist/editor/reviews/ReviewersPanel.js +7 -2
  344. package/dist/editor/reviews/ReviewersPanel.js.map +1 -1
  345. package/dist/editor/reviews/SuggestedEdit.js +75 -15
  346. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  347. package/dist/editor/reviews/SuggestionCommentThread.js +5 -4
  348. package/dist/editor/reviews/SuggestionCommentThread.js.map +1 -1
  349. package/dist/editor/reviews/commentAi.d.ts +27 -3
  350. package/dist/editor/reviews/commentAi.js +109 -28
  351. package/dist/editor/reviews/commentAi.js.map +1 -1
  352. package/dist/editor/reviews/commentImages.d.ts +49 -0
  353. package/dist/editor/reviews/commentImages.js +164 -0
  354. package/dist/editor/reviews/commentImages.js.map +1 -0
  355. package/dist/editor/reviews/feedbackAvatar.js +11 -5
  356. package/dist/editor/reviews/feedbackAvatar.js.map +1 -1
  357. package/dist/editor/reviews/feedbackCommentRules.d.ts +1 -1
  358. package/dist/editor/reviews/feedbackCommentRules.js +3 -9
  359. package/dist/editor/reviews/feedbackCommentRules.js.map +1 -1
  360. package/dist/editor/reviews/feedbackSelection.d.ts +13 -0
  361. package/dist/editor/reviews/feedbackSelection.js +37 -0
  362. package/dist/editor/reviews/feedbackSelection.js.map +1 -1
  363. package/dist/editor/reviews/suggestionDisplayValue.d.ts +24 -2
  364. package/dist/editor/reviews/suggestionDisplayValue.js +28 -4
  365. package/dist/editor/reviews/suggestionDisplayValue.js.map +1 -1
  366. package/dist/editor/reviews/useCommentImagePaste.d.ts +45 -0
  367. package/dist/editor/reviews/useCommentImagePaste.js +149 -0
  368. package/dist/editor/reviews/useCommentImagePaste.js.map +1 -0
  369. package/dist/editor/services/agentErrorMessage.js +5 -1
  370. package/dist/editor/services/agentErrorMessage.js.map +1 -1
  371. package/dist/editor/services/agentService.d.ts +12 -0
  372. package/dist/editor/services/agentService.js.map +1 -1
  373. package/dist/editor/services/contentService.d.ts +2 -0
  374. package/dist/editor/services/contentService.js.map +1 -1
  375. package/dist/editor/services/editService.d.ts +17 -2
  376. package/dist/editor/services/editService.js +7 -2
  377. package/dist/editor/services/editService.js.map +1 -1
  378. package/dist/editor/services/searchService.d.ts +2 -1
  379. package/dist/editor/services/searchService.js +2 -1
  380. package/dist/editor/services/searchService.js.map +1 -1
  381. package/dist/editor/services/userResolution.js +6 -5
  382. package/dist/editor/services/userResolution.js.map +1 -1
  383. package/dist/editor/sidebar/ComponentPalette.js +12 -4
  384. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  385. package/dist/editor/sidebar/ComponentTree.js +38 -22
  386. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  387. package/dist/editor/sidebar/EditHistory.js +2 -2
  388. package/dist/editor/sidebar/EditHistory.js.map +1 -1
  389. package/dist/editor/sidebar/MainContentTree.js +1 -1
  390. package/dist/editor/sidebar/MainContentTree.js.map +1 -1
  391. package/dist/editor/sidebar/MorePanelsButton.js +2 -2
  392. package/dist/editor/sidebar/MorePanelsButton.js.map +1 -1
  393. package/dist/editor/sidebar/NavigationPanelMenuItem.js +2 -2
  394. package/dist/editor/sidebar/NavigationPanelMenuItem.js.map +1 -1
  395. package/dist/editor/sidebar/Validation.js +38 -44
  396. package/dist/editor/sidebar/Validation.js.map +1 -1
  397. package/dist/editor/sidebar/liveComponentThumbnails.d.ts +62 -0
  398. package/dist/editor/sidebar/liveComponentThumbnails.js +215 -0
  399. package/dist/editor/sidebar/liveComponentThumbnails.js.map +1 -0
  400. package/dist/editor/ui/ItemCollectionEditor.d.ts +17 -1
  401. package/dist/editor/ui/ItemCollectionEditor.js +17 -5
  402. package/dist/editor/ui/ItemCollectionEditor.js.map +1 -1
  403. package/dist/editor/ui/ItemList.d.ts +5 -0
  404. package/dist/editor/ui/ItemList.js +10 -2
  405. package/dist/editor/ui/ItemList.js.map +1 -1
  406. package/dist/editor/ui/ItemSearch.d.ts +7 -0
  407. package/dist/editor/ui/ItemSearch.js +14 -6
  408. package/dist/editor/ui/ItemSearch.js.map +1 -1
  409. package/dist/editor/ui/PublishDialog.js +3 -2
  410. package/dist/editor/ui/PublishDialog.js.map +1 -1
  411. package/dist/editor/ui/SimpleTabs.js +58 -3
  412. package/dist/editor/ui/SimpleTabs.js.map +1 -1
  413. package/dist/editor/ui/Splitter.d.ts +15 -0
  414. package/dist/editor/ui/Splitter.js +77 -100
  415. package/dist/editor/ui/Splitter.js.map +1 -1
  416. package/dist/editor/ui/TreeListSelector.d.ts +15 -1
  417. package/dist/editor/ui/TreeListSelector.js +2 -2
  418. package/dist/editor/ui/TreeListSelector.js.map +1 -1
  419. package/dist/editor/ui/WorkboxItemsTable.d.ts +6 -1
  420. package/dist/editor/ui/WorkboxItemsTable.js +44 -48
  421. package/dist/editor/ui/WorkboxItemsTable.js.map +1 -1
  422. package/dist/editor/ui/publishReadiness.d.ts +13 -0
  423. package/dist/editor/ui/publishReadiness.js +56 -0
  424. package/dist/editor/ui/publishReadiness.js.map +1 -1
  425. package/dist/editor/validation/ValidationIssuesPopover.d.ts +39 -0
  426. package/dist/editor/validation/ValidationIssuesPopover.js +51 -0
  427. package/dist/editor/validation/ValidationIssuesPopover.js.map +1 -0
  428. package/dist/editor/validation/navigateToValidationIssue.d.ts +13 -0
  429. package/dist/editor/validation/navigateToValidationIssue.js +43 -0
  430. package/dist/editor/validation/navigateToValidationIssue.js.map +1 -0
  431. package/dist/editor/validation/validationFixAgent.d.ts +26 -0
  432. package/dist/editor/validation/validationFixAgent.js +124 -0
  433. package/dist/editor/validation/validationFixAgent.js.map +1 -0
  434. package/dist/editor/validation/validationSeverity.d.ts +15 -0
  435. package/dist/editor/validation/validationSeverity.js +47 -0
  436. package/dist/editor/validation/validationSeverity.js.map +1 -0
  437. package/dist/editor/version-diff/versionDiffGeometryKeys.d.ts +10 -4
  438. package/dist/editor/version-diff/versionDiffGeometryKeys.js +21 -7
  439. package/dist/editor/version-diff/versionDiffGeometryKeys.js.map +1 -1
  440. package/dist/editor/version-diff/versionDiffTargets.d.ts +6 -1
  441. package/dist/editor/version-diff/versionDiffTargets.js +5 -5
  442. package/dist/editor/version-diff/versionDiffTargets.js.map +1 -1
  443. package/dist/editor/views/editorSlotContext.d.ts +4 -0
  444. package/dist/editor/views/editorSlotContext.js +37 -1
  445. package/dist/editor/views/editorSlotContext.js.map +1 -1
  446. package/dist/revision.d.ts +2 -2
  447. package/dist/revision.js +2 -2
  448. package/dist/splash-screen/ModernSplashScreen.js +6 -5
  449. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  450. package/dist/splash-screen/RecentPages.js +33 -18
  451. package/dist/splash-screen/RecentPages.js.map +1 -1
  452. package/dist/task-board/TaskBoardWorkspace.js +65 -49
  453. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  454. package/dist/task-board/components/CommentsList.js +11 -11
  455. package/dist/task-board/components/CommentsList.js.map +1 -1
  456. package/dist/task-board/components/GoalDataView.d.ts +32 -1
  457. package/dist/task-board/components/GoalDataView.js +105 -42
  458. package/dist/task-board/components/GoalDataView.js.map +1 -1
  459. package/dist/task-board/components/ProjectDashboard.d.ts +2 -18
  460. package/dist/task-board/components/ProjectDashboard.js +2 -206
  461. package/dist/task-board/components/ProjectDashboard.js.map +1 -1
  462. package/dist/task-board/components/ProjectGoalsPanel.js +115 -10
  463. package/dist/task-board/components/ProjectGoalsPanel.js.map +1 -1
  464. package/dist/task-board/components/ProjectProgressIndicator.d.ts +8 -0
  465. package/dist/task-board/components/ProjectProgressIndicator.js +17 -0
  466. package/dist/task-board/components/ProjectProgressIndicator.js.map +1 -0
  467. package/dist/task-board/components/TaskBoardHomeView.d.ts +11 -0
  468. package/dist/task-board/components/TaskBoardHomeView.js +40 -2
  469. package/dist/task-board/components/TaskBoardHomeView.js.map +1 -1
  470. package/dist/task-board/components/TaskBoardProjectListSidebar.js +2 -11
  471. package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
  472. package/dist/task-board/components/TaskDetailPanel.js +62 -23
  473. package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
  474. package/dist/task-board/components/commentAuthor.d.ts +14 -0
  475. package/dist/task-board/components/commentAuthor.js +25 -0
  476. package/dist/task-board/components/commentAuthor.js.map +1 -0
  477. package/dist/task-board/taskBoardNavStore.d.ts +6 -0
  478. package/dist/task-board/taskBoardNavStore.js +36 -1
  479. package/dist/task-board/taskBoardNavStore.js.map +1 -1
  480. package/dist/task-board/types.d.ts +4 -0
  481. package/dist/task-board/utils/projectDashboardModel.d.ts +68 -0
  482. package/dist/task-board/utils/projectDashboardModel.js +355 -0
  483. package/dist/task-board/utils/projectDashboardModel.js.map +1 -0
  484. package/dist/task-board/views/DependencyGraphView.d.ts +7 -1
  485. package/dist/task-board/views/DependencyGraphView.js +58 -19
  486. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  487. package/dist/task-board/views/ProjectDashboardView.d.ts +28 -0
  488. package/dist/task-board/views/ProjectDashboardView.js +316 -0
  489. package/dist/task-board/views/ProjectDashboardView.js.map +1 -0
  490. package/dist/tour/Tour.js +21 -2
  491. package/dist/tour/Tour.js.map +1 -1
  492. package/dist/types.d.ts +11 -0
  493. package/images/Parhelia-Onboarding-Beach.jpg +0 -0
  494. package/package.json +1 -1
  495. package/images/Parhelia-Onboarding-BG.jpg +0 -0
@@ -1,5 +1,5 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback, useEffect, useLayoutEffect, useRef, useState, } from "react";
2
+ import { useCallback, useEffect, useLayoutEffect, useRef, useState, useSyncExternalStore, } from "react";
3
3
  import { BRIDGE_DOM_UPDATED_EVENT, MiniMap } from "./MiniMap";
4
4
  import { resolveMiniMapVisibility, } from "./minimapVisibility";
5
5
  import { useCanvasSelection, useEditContext, useEditContextRef, useFieldsEditContext, useFieldsEditContextRef, } from "../client/editContext";
@@ -33,7 +33,7 @@ import { toSitecoreDate } from "../utils/sitecoreDate";
33
33
  import { pickVersionAtDate } from "../utils/versionAtDate";
34
34
  import { BridgeClient } from "../bridge/BridgeClient";
35
35
  import { beginPerfTrace, isPerfTraceActive, isPerfTraceEnabled, perfTraceStep, } from "../perfTrace";
36
- import { getPendingFieldSuggestions, getSuggestionSelectionKey, getSuggestionDisplayValue, } from "../reviews/suggestionDisplayValue";
36
+ import { getBaselineFieldValue, getPendingFieldSuggestions, getSuggestionPreviewScope, getSuggestionSelectionKey, getSuggestionDisplayValue, previewScopeCoversField, } from "../reviews/suggestionDisplayValue";
37
37
  import { bridgeItemDescriptorMatchesItem, bridgeStructureTargetsChangedItem, } from "./bridgeItemChangeTarget";
38
38
  import { buildBridgeFieldPatchPayload, buildBridgeFieldPatchSignature, buildRemoteCaretFieldPatches, getBridgeFieldPatchValue, hasRemoteCaretDraftForField, isBridgePatchableTextField, isSuggestionPreviewPatchSignature, } from "./bridgeFieldPatch";
39
39
  import { bridgeSelectionMatchesInteraction, resolveBridgeTextCompletionInput, } from "./bridgeTextCompletion";
@@ -47,10 +47,14 @@ import { projectParentPointerToHost, resolveParentBridgePointerRelease, } from "
47
47
  import { getTextCompletion, normalizeTextCompletion, } from "../services/textCompletionService";
48
48
  import { resolvePageAndSiteByPath } from "../services/contentService";
49
49
  import { areInternalLinkItemIdsEqual, extractInternalLinkPath, extractInternalLinkTargetItemId, isSamePageFragmentHref, shouldOpenInternalLinkInNewSlot, } from "./internalLinkNavigation";
50
+ import { downloadLink } from "../bridge/linkDownload";
50
51
  const ZOOM_MIN = 0.25;
51
52
  const ZOOM_MAX = 2;
52
53
  const ZOOM_STEP = 0.25;
53
54
  const ZOOM_TRANSITION_MS = 300;
55
+ // useSyncExternalStore fallbacks for frames rendered without a slot context.
56
+ const subscribeToNothing = () => () => { };
57
+ const getUndefined = () => undefined;
54
58
  const BRIDGE_INLINE_EDIT_RELEASE_EVENT = "parhelia:bridge-inline-edit-release";
55
59
  const INLINE_AI_CLOSE_EVENT = "inline-ai-close";
56
60
  const BRIDGE_INLINE_LINK_OPEN_EVENT = "bridge-inline-link-open";
@@ -932,7 +936,7 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
932
936
  bridgeTextCompletionAbortRef.current?.abort();
933
937
  };
934
938
  }, []);
935
- const { beginInlineEdit: beginBridgeInlineEdit, clearInlineDedupe: clearBridgeInlineDedupe, endFieldFocus: endBridgeFieldFocus, flushPendingFieldValueChanges: flushPendingBridgeFieldValueChanges, handleFieldValueChanged: handleBridgeFieldValueChanged, handleInlineEditEnded: handleBridgeInlineEditEnded, supersedeInlineEdit: supersedeBridgeInlineEdit, } = useBridgeInlineEditing({
939
+ const { beginInlineEdit: beginBridgeInlineEdit, clearInlineDedupe: clearBridgeInlineDedupe, endFieldFocus: endBridgeFieldFocus, flushPendingFieldValueChanges: flushPendingBridgeFieldValueChanges, handleFieldValueChanged: handleBridgeFieldValueChanged, handleInlineEditEnded: handleBridgeInlineEditEnded, supersedeInlineEdit: supersedeBridgeInlineEdit, supersedeFieldEdits: supersedeBridgeFieldEdits, } = useBridgeInlineEditing({
936
940
  pageViewContextRef,
937
941
  inlineEditSession: bridgeInlineEditSession,
938
942
  blockIframeBlurUntil,
@@ -940,9 +944,80 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
940
944
  sendCancelInlineEdit,
941
945
  sendApplyFieldPatch: sendApplyFieldPatchCommand,
942
946
  });
947
+ // Outside suggestions mode a selected suggestion card previews its text on
948
+ // the canvas. An inline edit must start from the real field value, or the
949
+ // previewed suggestion would silently become part of a direct edit. Drop
950
+ // the selection and put the baseline back before the host begins editing.
951
+ const restoreSelectedSuggestionPreview = useCallback(async (elementKey) => {
952
+ const editor = editContextRef.current;
953
+ if (!editor || editor.mode === "suggestions")
954
+ return;
955
+ const previewScope = getSuggestionPreviewScope({
956
+ editorMode: editor.mode,
957
+ selectedSuggestion: editor.selectedSuggestedEdit,
958
+ showSelectedOnPage: editor.showSelectedSuggestionOnPage,
959
+ });
960
+ if (!previewScope.onlySuggestionId)
961
+ return;
962
+ const structureField = pageViewContextRef.current?.bridgeStructure?.fields.find((candidate) => candidate.elementKey === elementKey);
963
+ if (!structureField)
964
+ return;
965
+ const fallbackItem = pageViewContextRef.current?.pageItemDescriptor ??
966
+ pageViewContextRef.current?.page?.item?.descriptor;
967
+ const bridgeItem = structureField.item;
968
+ const itemDescriptor = {
969
+ id: bridgeItem?.id ?? fallbackItem?.id,
970
+ language: bridgeItem?.language ?? fallbackItem?.language,
971
+ version: typeof bridgeItem?.version === "number"
972
+ ? bridgeItem.version
973
+ : fallbackItem?.version,
974
+ };
975
+ if (!itemDescriptor.id ||
976
+ !itemDescriptor.language ||
977
+ typeof itemDescriptor.version !== "number") {
978
+ return;
979
+ }
980
+ const loadedItem = await editor.itemsRepository.getItem(itemDescriptor);
981
+ const field = loadedItem?.fields.find((candidate) => fieldIdentifierMatches(candidate, structureField.fieldId));
982
+ if (!field)
983
+ return;
984
+ const suggestionField = {
985
+ fieldId: field.id || structureField.fieldId,
986
+ itemId: itemDescriptor.id,
987
+ language: itemDescriptor.language,
988
+ version: itemDescriptor.version,
989
+ pageItemId: pageViewContextRef.current?.pageItemDescriptor?.id,
990
+ pageItemLanguage: pageViewContextRef.current?.pageItemDescriptor?.language,
991
+ pageItemVersion: pageViewContextRef.current?.pageItemDescriptor?.version,
992
+ };
993
+ if (!previewScopeCoversField(previewScope, editor.suggestedEdits, suggestionField)) {
994
+ return;
995
+ }
996
+ editor.setSelectedSuggestedEdit(undefined);
997
+ const patch = buildBridgeFieldPatchPayload({
998
+ field,
999
+ structureField,
1000
+ display: {
1001
+ source: "real",
1002
+ value: getBaselineFieldValue({
1003
+ repositoryValue: getBridgeFieldPatchValue(field),
1004
+ modifiedFields: fieldsContextRef.current?.modifiedFields,
1005
+ field: suggestionField,
1006
+ }),
1007
+ },
1008
+ activeInlineEdit: activeBridgeInlineEditRef.current,
1009
+ });
1010
+ if (!patch)
1011
+ return;
1012
+ // Record the signature so the display effect treats the field as
1013
+ // restored instead of sending a duplicate patch into the edit session.
1014
+ bridgePatchSignatureRef.current.set(`${patch.elementKey}:${patch.fieldId}`, buildBridgeFieldPatchSignature(patch, structureField.textContent));
1015
+ sendApplyFieldPatchCommand(patch);
1016
+ }, [editContextRef, fieldsContextRef, sendApplyFieldPatchCommand]);
943
1017
  const beginTrackedBridgeInlineEdit = useCallback(async (interaction) => {
944
1018
  if (!interaction.elementKey || !interaction.fieldId)
945
1019
  return false;
1020
+ await restoreSelectedSuggestionPreview(interaction.elementKey);
946
1021
  const interactionItem = interaction.item?.id &&
947
1022
  interaction.item.language &&
948
1023
  typeof interaction.item.version === "number"
@@ -972,6 +1047,7 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
972
1047
  bridgeInlineEditSession,
973
1048
  editContext.mode,
974
1049
  editContextRef,
1050
+ restoreSelectedSuggestionPreview,
975
1051
  ]);
976
1052
  const endTrackedBridgeFieldFocus = useCallback(() => {
977
1053
  clearActiveBridgeInlineEdit();
@@ -1032,7 +1108,11 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
1032
1108
  .detail;
1033
1109
  const field = detail?.field;
1034
1110
  const activeEdit = activeBridgeInlineEditRef.current;
1035
- if (!field || !activeEdit)
1111
+ if (!field)
1112
+ return;
1113
+ // Ended sessions can still have a field change awaiting its lock.
1114
+ supersedeBridgeFieldEdits(field);
1115
+ if (!activeEdit)
1036
1116
  return;
1037
1117
  if (!bridgeKeysMatch(activeEdit.fieldId, field.fieldId))
1038
1118
  return;
@@ -1054,7 +1134,7 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
1054
1134
  return () => {
1055
1135
  window.removeEventListener(BRIDGE_INLINE_EDIT_RELEASE_EVENT, handleBridgeInlineEditRelease);
1056
1136
  };
1057
- }, [supersedeBridgeInlineEdit]);
1137
+ }, [supersedeBridgeInlineEdit, supersedeBridgeFieldEdits]);
1058
1138
  useEffect(() => {
1059
1139
  return editContext.registerModeChangeParticipant({
1060
1140
  captureBeforeModeChange: () => commitActiveBridgeInlineEdit(),
@@ -1092,7 +1172,12 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
1092
1172
  flushPendingBridgeFieldValueChanges,
1093
1173
  ]);
1094
1174
  const getBridgePatchDisplayValue = useCallback(({ field, structureField, itemDescriptor, preferRepositoryValue, }) => {
1095
- const showSuggestions = editContext.mode === "suggestions";
1175
+ const previewScope = getSuggestionPreviewScope({
1176
+ editorMode: editContext.mode,
1177
+ selectedSuggestion: editContext.selectedSuggestedEdit,
1178
+ showSelectedOnPage: editContext.showSelectedSuggestionOnPage,
1179
+ });
1180
+ const showSuggestions = previewScope.mode === "suggestions";
1096
1181
  const repositoryValue = getBridgeFieldPatchValue(field);
1097
1182
  const selectionKey = getSuggestionSelectionKey({
1098
1183
  itemId: itemDescriptor.id,
@@ -1114,7 +1199,8 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
1114
1199
  pageItemLanguage: pageViewContext.pageItemDescriptor?.language,
1115
1200
  pageItemVersion: pageViewContext.pageItemDescriptor?.version,
1116
1201
  },
1117
- mode: showSuggestions ? "suggestions" : "baseline",
1202
+ mode: previewScope.mode,
1203
+ onlySuggestionId: previewScope.onlySuggestionId,
1118
1204
  selectedVariantId: editContext.suggestionVariantSelection[selectionKey],
1119
1205
  });
1120
1206
  const result = {
@@ -1126,6 +1212,8 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
1126
1212
  return result;
1127
1213
  }, [
1128
1214
  editContext.mode,
1215
+ editContext.selectedSuggestedEdit,
1216
+ editContext.showSelectedSuggestionOnPage,
1129
1217
  editContext.suggestedEdits,
1130
1218
  editContext.suggestionVariantSelection,
1131
1219
  fieldsContext?.modifiedFields,
@@ -1790,6 +1878,17 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
1790
1878
  const editor = editContextRef.current;
1791
1879
  if (!editor)
1792
1880
  return;
1881
+ if (interaction.kind === "click" &&
1882
+ editor.mode === "preview" &&
1883
+ interaction.link?.download !== undefined) {
1884
+ try {
1885
+ await downloadLink(interaction.link.resolvedHref ?? interaction.link.href, interaction.link.download);
1886
+ }
1887
+ catch {
1888
+ editor.showToast("The linked file could not be downloaded.");
1889
+ }
1890
+ return;
1891
+ }
1793
1892
  // In preview mode the bridge suppresses the canvas's native link
1794
1893
  // navigation (the proxied iframe cannot follow root-relative hrefs), so
1795
1894
  // a plain click on an internal link navigates the editor to the linked
@@ -2381,7 +2480,8 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
2381
2480
  const currentGeometry = pageViewContext.bridgeGeometry;
2382
2481
  const viewportChanged = !currentGeometry ||
2383
2482
  currentGeometry.viewport.width !== event.payload.viewport.width ||
2384
- currentGeometry.viewport.height !== event.payload.viewport.height ||
2483
+ currentGeometry.viewport.height !==
2484
+ event.payload.viewport.height ||
2385
2485
  currentGeometry.devicePixelRatio !==
2386
2486
  event.payload.devicePixelRatio;
2387
2487
  if (!viewportChanged)
@@ -2843,7 +2943,23 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
2843
2943
  const field = loadedItem.fields.find((candidate) => fieldIdentifierMatches(candidate, structureField.fieldId));
2844
2944
  if (!field)
2845
2945
  continue;
2846
- const showSuggestions = editContext.mode === "suggestions";
2946
+ const suggestionField = {
2947
+ fieldId: field.id || structureField.fieldId,
2948
+ itemId: itemDescriptor.id,
2949
+ language: itemDescriptor.language,
2950
+ version: itemDescriptor.version,
2951
+ pageItemId: pageViewContextRef.current?.pageItemDescriptor?.id,
2952
+ pageItemLanguage: pageViewContextRef.current?.pageItemDescriptor?.language,
2953
+ pageItemVersion: pageViewContextRef.current?.pageItemDescriptor?.version,
2954
+ };
2955
+ // Suggestions mode previews every field with pending suggestions. A
2956
+ // selected suggestion card outside that mode previews only its own
2957
+ // field; every other field falls through to the restore logic below.
2958
+ const showSuggestions = previewScopeCoversField(getSuggestionPreviewScope({
2959
+ editorMode: editContext.mode,
2960
+ selectedSuggestion: editContext.selectedSuggestedEdit,
2961
+ showSelectedOnPage: editContext.showSelectedSuggestionOnPage,
2962
+ }), editContext.suggestedEdits, suggestionField);
2847
2963
  const dirtyModifiedField = findModifiedBridgeField({
2848
2964
  modifiedFields: fieldsContext?.modifiedFields,
2849
2965
  structureField,
@@ -2858,15 +2974,7 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
2858
2974
  // need an explicit restore patch back to the baseline value.
2859
2975
  const needsSuggestionRestore = !showSuggestions &&
2860
2976
  (isSuggestionPreviewPatchSignature(bridgePatchSignatureRef.current.get(`${structureField.elementKey}:${structureField.fieldId}`)) ||
2861
- getPendingFieldSuggestions(editContext.suggestedEdits, {
2862
- fieldId: field.id || structureField.fieldId,
2863
- itemId: itemDescriptor.id,
2864
- language: itemDescriptor.language,
2865
- version: itemDescriptor.version,
2866
- pageItemId: pageViewContextRef.current?.pageItemDescriptor?.id,
2867
- pageItemLanguage: pageViewContextRef.current?.pageItemDescriptor?.language,
2868
- pageItemVersion: pageViewContextRef.current?.pageItemDescriptor?.version,
2869
- }).length > 0);
2977
+ getPendingFieldSuggestions(editContext.suggestedEdits, suggestionField).length > 0);
2870
2978
  if (!showSuggestions &&
2871
2979
  !dirtyModifiedField &&
2872
2980
  !needsSuggestionRestore) {
@@ -2895,6 +3003,8 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
2895
3003
  editContext.itemsRepository,
2896
3004
  editContext.itemsRepository.revision,
2897
3005
  editContext.mode,
3006
+ editContext.selectedSuggestedEdit,
3007
+ editContext.showSelectedSuggestionOnPage,
2898
3008
  editContext.suggestedEdits,
2899
3009
  fieldsContext?.modifiedFields,
2900
3010
  bridgeDomRevision,
@@ -2957,6 +3067,18 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
2957
3067
  timeoutMs: 15_000,
2958
3068
  });
2959
3069
  };
3070
+ const requestBridgePageSnapshot = (payload) => {
3071
+ const bridge = bridgeClientRef.current;
3072
+ if (!bridge) {
3073
+ return Promise.reject(new Error("The Parhelia bridge is not connected to the host."));
3074
+ }
3075
+ // A whole-page raster of a long page can take a while; the host itself
3076
+ // gives each renderer 10s before falling back.
3077
+ return bridge.requestCommand("capturePageSnapshot", payload, "pageSnapshotResult", {
3078
+ requestId: payload.requestId,
3079
+ timeoutMs: 30_000,
3080
+ });
3081
+ };
2960
3082
  const requestBridgeCancelPointerDrag = () => {
2961
3083
  return (bridgeClientRef.current?.sendCommand("cancelPointerDrag", {}) ?? false);
2962
3084
  };
@@ -2967,6 +3089,7 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
2967
3089
  pageViewContext.requestBridgeCaptureSnapshot = requestBridgeCaptureSnapshot;
2968
3090
  pageViewContext.requestBridgeComponentSnapshot =
2969
3091
  requestBridgeComponentSnapshot;
3092
+ pageViewContext.requestBridgePageSnapshot = requestBridgePageSnapshot;
2970
3093
  pageViewContext.requestBridgeCancelPointerDrag =
2971
3094
  requestBridgeCancelPointerDrag;
2972
3095
  return () => {
@@ -2987,6 +3110,9 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
2987
3110
  requestBridgeComponentSnapshot) {
2988
3111
  pageViewContext.requestBridgeComponentSnapshot = undefined;
2989
3112
  }
3113
+ if (pageViewContext.requestBridgePageSnapshot === requestBridgePageSnapshot) {
3114
+ pageViewContext.requestBridgePageSnapshot = undefined;
3115
+ }
2990
3116
  if (pageViewContext.requestBridgeCancelPointerDrag ===
2991
3117
  requestBridgeCancelPointerDrag) {
2992
3118
  pageViewContext.requestBridgeCancelPointerDrag = undefined;
@@ -3386,16 +3512,20 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
3386
3512
  requestState.signature = signature;
3387
3513
  requestState.requestedTextRangeGeometry = false;
3388
3514
  }
3389
- const exactBounds = findScrollIntoViewDocumentBounds(activePageViewContext.bridgeGeometry, scrollTarget, { includeTextRangeFallback: false });
3390
- let bounds = exactBounds;
3391
- if (!bounds &&
3392
- isTextRangeScrollTarget(scrollTarget) &&
3515
+ // Text-range rectangles are viewport-relative snapshots. After the user
3516
+ // scrolls, a rectangle left over from the previous selection can still
3517
+ // have the right key while pointing at the old viewport position. Refresh
3518
+ // it for every explicit request, including a click on the already-selected
3519
+ // comment, before deciding whether the range is visible.
3520
+ if (isTextRangeScrollTarget(scrollTarget) &&
3393
3521
  !requestState.requestedTextRangeGeometry) {
3394
3522
  requestState.requestedTextRangeGeometry = true;
3395
3523
  if (requestScrollTargetGeometry(activePageViewContext, scrollTarget)) {
3396
3524
  return;
3397
3525
  }
3398
3526
  }
3527
+ const exactBounds = findScrollIntoViewDocumentBounds(activePageViewContext.bridgeGeometry, scrollTarget, { includeTextRangeFallback: false });
3528
+ let bounds = exactBounds;
3399
3529
  bounds ??= findScrollIntoViewDocumentBounds(activePageViewContext.bridgeGeometry, scrollTarget, { includeTextRangeFallback: true });
3400
3530
  if (bounds) {
3401
3531
  scrollBridgeBoundsIntoView(activePageViewContext, bounds, latestBridgeScrollRef.current);
@@ -3587,6 +3717,48 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
3587
3717
  editContext.showMinimap &&
3588
3718
  !editContext.isMobile &&
3589
3719
  editContext.parheliaSettings?.showMinimap !== false;
3720
+ // Compare view: both panes render their page iframe at one shared width so
3721
+ // the two versions reflow identically (see compareFrameWidth.ts). This pane
3722
+ // reports the width its iframe could take — the container's content box
3723
+ // minus the minimap column when that is showing — and renders at the
3724
+ // narrower of both panes' reports.
3725
+ const frameContainerRef = useRef(null);
3726
+ const inCompareMode = !!slotContext?.compareMode;
3727
+ const compareFrameView = compareView
3728
+ ? "compare"
3729
+ : "primary";
3730
+ const miniMapColumnWidth = editContext.configuration.outline.width || 100;
3731
+ const reportCompareFrameWidth = slotContext?.reportCompareFrameWidth;
3732
+ const miniMapReservedWidth = shouldRenderMiniMap ? miniMapColumnWidth : 0;
3733
+ useLayoutEffect(() => {
3734
+ if (!inCompareMode || !reportCompareFrameWidth)
3735
+ return;
3736
+ const container = frameContainerRef.current;
3737
+ if (!container || typeof ResizeObserver === "undefined")
3738
+ return;
3739
+ const report = () => {
3740
+ const style = window.getComputedStyle(container);
3741
+ const padding = (parseFloat(style.paddingLeft) || 0) +
3742
+ (parseFloat(style.paddingRight) || 0);
3743
+ const available = container.clientWidth - padding - miniMapReservedWidth;
3744
+ reportCompareFrameWidth(compareFrameView, available > 0 ? available : undefined);
3745
+ };
3746
+ report();
3747
+ const observer = new ResizeObserver(report);
3748
+ observer.observe(container);
3749
+ return () => observer.disconnect();
3750
+ }, [
3751
+ inCompareMode,
3752
+ reportCompareFrameWidth,
3753
+ compareFrameView,
3754
+ miniMapReservedWidth,
3755
+ ]);
3756
+ // Withdraw this pane's report only on unmount, so a minimap toggle or a
3757
+ // resize does not briefly drop the other pane back to full width.
3758
+ useEffect(() => {
3759
+ return () => reportCompareFrameWidth?.(compareFrameView, undefined);
3760
+ }, [reportCompareFrameWidth, compareFrameView]);
3761
+ const sharedCompareFrameWidth = useSyncExternalStore(slotContext?.subscribeCompareFrameWidth ?? subscribeToNothing, slotContext?.getCompareFrameWidth ?? getUndefined, getUndefined);
3590
3762
  if (pageViewContext.page?.item && !pageViewContext.page?.item.hasLayout) {
3591
3763
  return _jsx(NoLayout, {});
3592
3764
  }
@@ -3595,13 +3767,18 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
3595
3767
  const deviceHeight = pageViewContext.device === "desktop" || !pageViewContext.deviceHeight
3596
3768
  ? "100%"
3597
3769
  : pageViewContext.deviceHeight || 640;
3770
+ const compareFrameWidth = inCompareMode ? sharedCompareFrameWidth : undefined;
3598
3771
  const deviceWidth = isResponsiveDevice
3599
- ? "100%"
3600
- : (pageViewContext.deviceWidth || 640) +
3601
- editContext.configuration.outline.width +
3602
- "px";
3772
+ ? compareFrameWidth !== undefined
3773
+ ? compareFrameWidth + miniMapReservedWidth + "px"
3774
+ : "100%"
3775
+ : inCompareMode
3776
+ ? (pageViewContext.deviceWidth || 640) + miniMapReservedWidth + "px"
3777
+ : (pageViewContext.deviceWidth || 640) +
3778
+ editContext.configuration.outline.width +
3779
+ "px";
3603
3780
  const showSuggestionsCursor = !isBridgeInlineEditing && editContext.mode === "suggestions";
3604
- 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.fullscreen && (_jsxs("div", { className: "border-neutral-grey-15 relative z-40 grid h-11 w-full shrink-0 grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center border-b bg-white px-3 shadow-sm", "data-testid": "fullscreen-page-title-bar", children: [_jsx("div", { className: "w-full min-w-0 pr-3 text-left", children: _jsx(PageSelector, { itemDescriptor: pageViewContext.page?.item, variant: "fullscreen" }) }), _jsx("div", { className: "justify-self-center", children: _jsx(FullscreenControls, { device: pageViewContext.device, setDevice: (device) => pageViewContext.setDevice(device), zoom: pageViewContext.zoom, setZoom: pageViewContext.setZoom, canExit: !editContext.configuration.forceFullscreen, onExit: () => editContext.setFullscreen(false) }) }), _jsx("div", { "aria-hidden": "true" })] })), pageViewContext.device !== "desktop" && (_jsx(DeviceToolbar, { pageViewContext: pageViewContext, configuration: editContext.configuration })), _jsxs("div", { className: "relative flex min-h-0 flex-1 transition-[width] duration-300 ease-in-out select-none motion-reduce:transition-none", "data-testid": "page-viewer-viewport", style: {
3781
+ return (_jsxs("div", { ref: frameContainerRef, 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.fullscreen && (_jsxs("div", { className: "border-neutral-grey-15 relative z-40 grid h-11 w-full shrink-0 grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center border-b bg-white px-3 shadow-sm", "data-testid": "fullscreen-page-title-bar", children: [_jsx("div", { className: "w-full min-w-0 pr-3 text-left", children: _jsx(PageSelector, { itemDescriptor: pageViewContext.page?.item, variant: "fullscreen" }) }), _jsx("div", { className: "justify-self-center", children: _jsx(FullscreenControls, { device: pageViewContext.device, setDevice: (device) => pageViewContext.setDevice(device), zoom: pageViewContext.zoom, setZoom: pageViewContext.setZoom, canExit: !editContext.configuration.forceFullscreen, onExit: () => editContext.setFullscreen(false) }) }), _jsx("div", { "aria-hidden": "true" })] })), pageViewContext.device !== "desktop" && (_jsx(DeviceToolbar, { pageViewContext: pageViewContext, configuration: editContext.configuration })), _jsxs("div", { className: "relative flex min-h-0 flex-1 transition-[width] duration-300 ease-in-out select-none motion-reduce:transition-none", "data-testid": "page-viewer-viewport", style: {
3605
3782
  width: deviceWidth,
3606
3783
  }, children: [_jsxs("div", { className: "relative h-full w-full overflow-visible", onMouseLeave: () => {
3607
3784
  if (pageViewContext.bridgeInteraction?.kind === "hover") {