@parhelia/core 0.3.12771 → 0.3.12788

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 (574) hide show
  1. package/dist/agents-view/AgentCard.js +1 -5
  2. package/dist/agents-view/AgentCard.js.map +1 -1
  3. package/dist/agents-view/AgentsView.js +1 -1
  4. package/dist/agents-view/AgentsView.js.map +1 -1
  5. package/dist/components/ActionButton.d.ts +7 -0
  6. package/dist/components/ActionButton.js +2 -2
  7. package/dist/components/ActionButton.js.map +1 -1
  8. package/dist/components/MarkdownDisplay.js +1 -1
  9. package/dist/components/ui/CardConnector.js +1 -1
  10. package/dist/components/ui/LanguageSelectionGrid.js +1 -1
  11. package/dist/components/ui/LanguageSelector.js +3 -3
  12. package/dist/components/ui/LanguageSelector.js.map +1 -1
  13. package/dist/components/ui/PlaceholderItemSelector.js +1 -1
  14. package/dist/components/ui/alert.d.ts +1 -1
  15. package/dist/components/ui/button.d.ts +2 -2
  16. package/dist/components/ui/card.js +1 -1
  17. package/dist/components/ui/close-button.d.ts +1 -1
  18. package/dist/components/ui/context-menu.js +1 -1
  19. package/dist/components/ui/copy-button.js +1 -1
  20. package/dist/components/ui/delete-button.d.ts +1 -1
  21. package/dist/components/ui/paste-button.js +1 -1
  22. package/dist/components/ui/popover.d.ts +1 -0
  23. package/dist/components/ui/popover.js +16 -7
  24. package/dist/components/ui/popover.js.map +1 -1
  25. package/dist/components/ui/sonner.js +1 -1
  26. package/dist/components/ui/upload-button.js +1 -1
  27. package/dist/config/config.js +18 -4
  28. package/dist/config/config.js.map +1 -1
  29. package/dist/editor/ConcurrentUserLimitDialog.js +1 -1
  30. package/dist/editor/ContentTree.d.ts +12 -1
  31. package/dist/editor/ContentTree.js +20 -3
  32. package/dist/editor/ContentTree.js.map +1 -1
  33. package/dist/editor/FieldActionsOverlay.js.map +1 -1
  34. package/dist/editor/FieldHistory.d.ts +15 -1
  35. package/dist/editor/FieldHistory.js +85 -52
  36. package/dist/editor/FieldHistory.js.map +1 -1
  37. package/dist/editor/FieldList.js +5 -2
  38. package/dist/editor/FieldList.js.map +1 -1
  39. package/dist/editor/FieldListField.js +7 -2
  40. package/dist/editor/FieldListField.js.map +1 -1
  41. package/dist/editor/FieldListFieldWithFallbacks.js +1 -1
  42. package/dist/editor/GlobalMenuBar.js +1 -1
  43. package/dist/editor/ItemInfo.js +2 -2
  44. package/dist/editor/ItemInfo.js.map +1 -1
  45. package/dist/editor/LinkEditorDialog.js +1 -1
  46. package/dist/editor/MigrationsView.js +1 -1
  47. package/dist/editor/PictureCropper.js +1 -1
  48. package/dist/editor/PictureCropper.js.map +1 -1
  49. package/dist/editor/SetupWizard.js.map +1 -1
  50. package/dist/editor/WorkspaceTitleSwitcher.js +1 -1
  51. package/dist/editor/ai/AgentImageCopyButton.d.ts +6 -0
  52. package/dist/editor/ai/AgentImageCopyButton.js +93 -0
  53. package/dist/editor/ai/AgentImageCopyButton.js.map +1 -0
  54. package/dist/editor/ai/AgentSharingSection.js +1 -1
  55. package/dist/editor/ai/Agents.d.ts +2 -2
  56. package/dist/editor/ai/Agents.js +2 -10
  57. package/dist/editor/ai/Agents.js.map +1 -1
  58. package/dist/editor/ai/GuidanceOverlay.js +1 -1
  59. package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
  60. package/dist/editor/ai/InlineAiDialog.js +1 -1
  61. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  62. package/dist/editor/ai/InlineAiTrigger.js +1 -1
  63. package/dist/editor/ai/MediaImage.js +2 -1
  64. package/dist/editor/ai/MediaImage.js.map +1 -1
  65. package/dist/editor/ai/agentActivitySummary.js.map +1 -1
  66. package/dist/editor/ai/agentMessageHelpers.js.map +1 -1
  67. package/dist/editor/ai/dialogs/AgentDialogHandler.js +103 -6
  68. package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
  69. package/dist/editor/ai/dialogs/QuestionnaireInline.js +1 -1
  70. package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +21 -0
  71. package/dist/editor/ai/dialogs/agentDialogTypes.js +3 -1
  72. package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
  73. package/dist/editor/ai/dialogs/offscreenPageCapture.d.ts +14 -1
  74. package/dist/editor/ai/dialogs/offscreenPageCapture.js +95 -27
  75. package/dist/editor/ai/dialogs/offscreenPageCapture.js.map +1 -1
  76. package/dist/editor/ai/terminal/agentCost.d.ts +1 -0
  77. package/dist/editor/ai/terminal/agentCost.js +10 -3
  78. package/dist/editor/ai/terminal/agentCost.js.map +1 -1
  79. package/dist/editor/ai/terminal/agentSessionSelectors.js.map +1 -1
  80. package/dist/editor/ai/terminal/agentSessionState.js +4 -1
  81. package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
  82. package/dist/editor/ai/terminal/components/AgentCostDisplay.d.ts +1 -1
  83. package/dist/editor/ai/terminal/components/AgentCostDisplay.js +3 -3
  84. package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
  85. package/dist/editor/ai/terminal/components/AgentDocumentList.js +2 -2
  86. package/dist/editor/ai/terminal/components/AgentDocumentList.js.map +1 -1
  87. package/dist/editor/ai/terminal/components/AgentFullPromptControls.js +1 -1
  88. package/dist/editor/ai/terminal/components/AgentMemoryPanel.d.ts +22 -5
  89. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js +102 -19
  90. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js.map +1 -1
  91. package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js +1 -1
  92. package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js +1 -1
  93. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +8 -3
  94. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
  95. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +46 -6
  96. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
  97. package/dist/editor/ai/terminal/components/AgentRunStatusBanners.js +1 -1
  98. package/dist/editor/ai/terminal/components/AgentSettingsContent.js +1 -1
  99. package/dist/editor/ai/terminal/components/AgentTerminalContextChrome.d.ts +1 -0
  100. package/dist/editor/ai/terminal/components/AgentTerminalContextChrome.js.map +1 -1
  101. package/dist/editor/ai/terminal/components/AgentTerminalContextPanels.js +1 -1
  102. package/dist/editor/ai/terminal/components/AgentTerminalContextPanels.js.map +1 -1
  103. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +1 -1
  104. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js +1 -1
  105. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +1 -1
  106. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
  107. package/dist/editor/ai/terminal/components/AgentTerminalView.d.ts +1 -1
  108. package/dist/editor/ai/terminal/components/AgentTerminalView.js +1 -1
  109. package/dist/editor/ai/terminal/components/AiResponseMessage.js +1 -1
  110. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  111. package/dist/editor/ai/terminal/components/ContextInfoBar.d.ts +2 -1
  112. package/dist/editor/ai/terminal/components/ContextInfoBar.js +2 -2
  113. package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
  114. package/dist/editor/ai/terminal/components/EditOperationsPanel.js +1 -1
  115. package/dist/editor/ai/terminal/components/QuestionnaireRecap.d.ts +2 -2
  116. package/dist/editor/ai/terminal/components/ToolCallDisplay.js +3 -2
  117. package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
  118. package/dist/editor/ai/terminal/components/UserMessage.js +1 -1
  119. package/dist/editor/ai/terminal/useAgentContextDisplayNames.d.ts +2 -0
  120. package/dist/editor/ai/terminal/useAgentContextDisplayNames.js +73 -29
  121. package/dist/editor/ai/terminal/useAgentContextDisplayNames.js.map +1 -1
  122. package/dist/editor/ai/terminal/useAgentEditorContextPipeline.d.ts +1 -0
  123. package/dist/editor/ai/terminal/useAgentInlineDialogPipeline.d.ts +1 -1
  124. package/dist/editor/ai/terminal/useAgentLoader.js +5 -2
  125. package/dist/editor/ai/terminal/useAgentLoader.js.map +1 -1
  126. package/dist/editor/ai/terminal/useAgentPromptComposerSurface.d.ts +2 -2
  127. package/dist/editor/ai/terminal/useAgentPromptQueueSocketHandler.d.ts +2 -0
  128. package/dist/editor/ai/terminal/useAgentPromptQueueSocketHandler.js +5 -3
  129. package/dist/editor/ai/terminal/useAgentPromptQueueSocketHandler.js.map +1 -1
  130. package/dist/editor/ai/terminal/useAgentRunMessagePipeline.d.ts +4 -4
  131. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js +3 -0
  132. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js.map +1 -1
  133. package/dist/editor/ai/terminal/useAgentSettingsPanel.d.ts +31 -31
  134. package/dist/editor/ai/terminal/useAgentSettleCompletedRun.js.map +1 -1
  135. package/dist/editor/ai/terminal/useAgentStopCommand.js +4 -0
  136. package/dist/editor/ai/terminal/useAgentStopCommand.js.map +1 -1
  137. package/dist/editor/ai/terminal/useAgentStreamPipeline.js +1 -0
  138. package/dist/editor/ai/terminal/useAgentStreamPipeline.js.map +1 -1
  139. package/dist/editor/ai/terminal/useAgentTerminalChrome.d.ts +1 -0
  140. package/dist/editor/ai/terminal/useAgentTerminalChrome.js +2 -2
  141. package/dist/editor/ai/terminal/useAgentTerminalChrome.js.map +1 -1
  142. package/dist/editor/ai/terminal/useAgentTerminalController.js +3 -1
  143. package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
  144. package/dist/editor/ai/useAgentPanes.js.map +1 -1
  145. package/dist/editor/ai/useAgentStatus.js.map +1 -1
  146. package/dist/editor/ai/useInlineAiPosition.js.map +1 -1
  147. package/dist/editor/ai-image-editor/AiImageEditorDialog.js +42 -23
  148. package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
  149. package/dist/editor/bridge/BridgeClient.js +6 -6
  150. package/dist/editor/bridge/BridgeClient.js.map +1 -1
  151. package/dist/editor/bridge/protocol.d.ts +26 -0
  152. package/dist/editor/bridge/protocol.js +1 -1
  153. package/dist/editor/bridge/protocol.js.map +1 -1
  154. package/dist/editor/client/AboutDialog.js +1 -1
  155. package/dist/editor/client/EditorShell.js +125 -90
  156. package/dist/editor/client/EditorShell.js.map +1 -1
  157. package/dist/editor/client/SessionExpiredOverlay.js +1 -1
  158. package/dist/editor/client/SessionExpiredOverlay.js.map +1 -1
  159. package/dist/editor/client/editContext.d.ts +26 -3
  160. package/dist/editor/client/editContext.js.map +1 -1
  161. package/dist/editor/client/fieldModificationStore.js +0 -21
  162. package/dist/editor/client/fieldModificationStore.js.map +1 -1
  163. package/dist/editor/client/hooks/useClientInfoRegistration.d.ts +13 -0
  164. package/dist/editor/client/hooks/useClientInfoRegistration.js +38 -0
  165. package/dist/editor/client/hooks/useClientInfoRegistration.js.map +1 -0
  166. package/dist/editor/client/itemsRepository.js +1 -34
  167. package/dist/editor/client/itemsRepository.js.map +1 -1
  168. package/dist/editor/client/operations.d.ts +4 -2
  169. package/dist/editor/client/operations.js +89 -65
  170. package/dist/editor/client/operations.js.map +1 -1
  171. package/dist/editor/client/pageModelBuilder.js +7 -1
  172. package/dist/editor/client/pageModelBuilder.js.map +1 -1
  173. package/dist/editor/client/ui/EditorChrome.d.ts +1 -0
  174. package/dist/editor/client/ui/EditorChrome.js +7 -2
  175. package/dist/editor/client/ui/EditorChrome.js.map +1 -1
  176. package/dist/editor/client/ui/FullscreenControls.d.ts +3 -0
  177. package/dist/editor/client/ui/FullscreenControls.js +7 -12
  178. package/dist/editor/client/ui/FullscreenControls.js.map +1 -1
  179. package/dist/editor/client/undoTargetResolution.d.ts +28 -0
  180. package/dist/editor/client/undoTargetResolution.js +69 -0
  181. package/dist/editor/client/undoTargetResolution.js.map +1 -0
  182. package/dist/editor/commands/componentCommands.js +2 -2
  183. package/dist/editor/commands/componentCommands.js.map +1 -1
  184. package/dist/editor/commands/customCommandConverter.js.map +1 -1
  185. package/dist/editor/commands/itemCommands.js +19 -2
  186. package/dist/editor/commands/itemCommands.js.map +1 -1
  187. package/dist/editor/componentTreeHelper.js +13 -7
  188. package/dist/editor/componentTreeHelper.js.map +1 -1
  189. package/dist/editor/content-tree/IndicatorSettings.js +1 -1
  190. package/dist/editor/content-tree/TreeOptions.js +1 -1
  191. package/dist/editor/context-menu/InsertMenu.js +1 -1
  192. package/dist/editor/editor-warnings/NoLanguageWriteAccess.js +1 -1
  193. package/dist/editor/field-types/AttachmentEditor.js +7 -0
  194. package/dist/editor/field-types/AttachmentEditor.js.map +1 -1
  195. package/dist/editor/field-types/LinkFieldEditor.js +1 -1
  196. package/dist/editor/field-types/PictureFieldEditor.js +21 -21
  197. package/dist/editor/field-types/PictureFieldEditor.js.map +1 -1
  198. package/dist/editor/field-types/RichTextEditor.js +1 -1
  199. package/dist/editor/field-types/RichTextEditorComponent.js +6 -0
  200. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  201. package/dist/editor/field-types/SingleLineText.js +0 -34
  202. package/dist/editor/field-types/SingleLineText.js.map +1 -1
  203. package/dist/editor/field-types/richtext/bridgeRichTextProfile.d.ts +1 -1
  204. package/dist/editor/field-types/richtext/components/EditorDropdown.js +1 -1
  205. package/dist/editor/field-types/richtext/components/ReactSlate.js +1 -1
  206. package/dist/editor/field-types/richtext/components/SimpleDropdown.js +1 -1
  207. package/dist/editor/field-types/richtext/components/SimpleToolbar.js +1 -1
  208. package/dist/editor/field-types/richtext/hooks/useRichTextProfile.js.map +1 -1
  209. package/dist/editor/field-types/richtext/utils/conversion.js +2 -4
  210. package/dist/editor/field-types/richtext/utils/conversion.js.map +1 -1
  211. package/dist/editor/field-types/richtext/utils/plugins.d.ts +1 -0
  212. package/dist/editor/field-types/richtext/utils/plugins.js +12 -0
  213. package/dist/editor/field-types/richtext/utils/plugins.js.map +1 -1
  214. package/dist/editor/field-types/richtext/utils/profileMapper.js.map +1 -1
  215. package/dist/editor/field-types/useFormFieldCaretPresence.js.map +1 -1
  216. package/dist/editor/fieldValueDiagnostics.js.map +1 -1
  217. package/dist/editor/insertOptionCompatibility.d.ts +7 -0
  218. package/dist/editor/insertOptionCompatibility.js +15 -0
  219. package/dist/editor/insertOptionCompatibility.js.map +1 -0
  220. package/dist/editor/media-selector/MediaFolderBrowser.js +26 -4
  221. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
  222. package/dist/editor/media-selector/Preview.js +6 -11
  223. package/dist/editor/media-selector/Preview.js.map +1 -1
  224. package/dist/editor/media-selector/Thumbnails.js +31 -3
  225. package/dist/editor/media-selector/Thumbnails.js.map +1 -1
  226. package/dist/editor/media-selector/TreeSelector.js +53 -6
  227. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  228. package/dist/editor/media-selector/UploadZone.d.ts +1 -2
  229. package/dist/editor/media-selector/UploadZone.js +3 -4
  230. package/dist/editor/media-selector/UploadZone.js.map +1 -1
  231. package/dist/editor/media-selector/mediaItemDrag.d.ts +28 -0
  232. package/dist/editor/media-selector/mediaItemDrag.js +42 -0
  233. package/dist/editor/media-selector/mediaItemDrag.js.map +1 -0
  234. package/dist/editor/menubar/ActiveUsers.js +6 -3
  235. package/dist/editor/menubar/ActiveUsers.js.map +1 -1
  236. package/dist/editor/menubar/GenericToolbar.js +1 -1
  237. package/dist/editor/menubar/GenericToolbar.js.map +1 -1
  238. package/dist/editor/menubar/ItemActionsMenu.js +1 -1
  239. package/dist/editor/menubar/ItemLanguageVersion.js +1 -1
  240. package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
  241. package/dist/editor/menubar/OperationsIndicator.js +1 -1
  242. package/dist/editor/menubar/PageSelector.d.ts +2 -1
  243. package/dist/editor/menubar/PageSelector.js +14 -4
  244. package/dist/editor/menubar/PageSelector.js.map +1 -1
  245. package/dist/editor/menubar/VersionPreviewCard.js +1 -1
  246. package/dist/editor/menubar/VersionSelector.js +1 -1
  247. package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js +1 -1
  248. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.d.ts +3 -1
  249. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js +6 -7
  250. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js.map +1 -1
  251. package/dist/editor/menubar/toolbar-sections/EditControls.js +5 -5
  252. package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
  253. package/dist/editor/menubar/toolbar-sections/InsertControls.js +1 -1
  254. package/dist/editor/menubar/toolbar-sections/InsertControls.js.map +1 -1
  255. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +14 -4
  256. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
  257. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.d.ts +1 -0
  258. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js +14 -0
  259. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js.map +1 -0
  260. package/dist/editor/menubar/toolbar-sections/RefreshPageControl.d.ts +7 -0
  261. package/dist/editor/menubar/toolbar-sections/RefreshPageControl.js +44 -0
  262. package/dist/editor/menubar/toolbar-sections/RefreshPageControl.js.map +1 -0
  263. package/dist/editor/menubar/toolbar-sections/ReviewCommands.js +1 -1
  264. package/dist/editor/menubar/toolbar-sections/UtilityControls.js +1 -1
  265. package/dist/editor/menubar/toolbar-sections/ViewportControls.d.ts +7 -0
  266. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +16 -8
  267. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  268. package/dist/editor/menubar/toolbar-sections/index.d.ts +1 -0
  269. package/dist/editor/menubar/toolbar-sections/index.js +1 -0
  270. package/dist/editor/menubar/toolbar-sections/index.js.map +1 -1
  271. package/dist/editor/notifications/NotificationCenter.js +1 -1
  272. package/dist/editor/notifications/WatchButton.js +1 -1
  273. package/dist/editor/notifications/notificationListState.d.ts +1 -1
  274. package/dist/editor/notifications/notificationRoutes.js.map +1 -1
  275. package/dist/editor/notifications/useNotifications.d.ts +1 -1
  276. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +6 -3
  277. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
  278. package/dist/editor/page-editor-chrome/CommentHighlightings.js +1 -1
  279. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js +51 -23
  280. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js.map +1 -1
  281. package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js +1 -1
  282. package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.js.map +1 -1
  283. package/dist/editor/page-editor-chrome/FieldActionIndicators.js +1 -1
  284. package/dist/editor/page-editor-chrome/FieldEditedIndicators.js +1 -1
  285. package/dist/editor/page-editor-chrome/FrameMenu.js +1 -1
  286. package/dist/editor/page-editor-chrome/FrameMenus.js +1 -1
  287. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.d.ts +58 -0
  288. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js +709 -0
  289. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js.map +1 -0
  290. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +12 -2
  291. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -1
  292. package/dist/editor/page-editor-chrome/PageEditorChrome.js +7 -2
  293. package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
  294. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +57 -10
  295. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js.map +1 -1
  296. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +1 -8
  297. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  298. package/dist/editor/page-editor-chrome/PlaceholderDropZones.d.ts +1 -0
  299. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +10 -3
  300. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
  301. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +5 -2
  302. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
  303. package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.js +7 -2
  304. package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.js.map +1 -1
  305. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.d.ts +5 -2
  306. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js +153 -51
  307. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js.map +1 -1
  308. package/dist/editor/page-editor-chrome/componentDragObject.d.ts +5 -4
  309. package/dist/editor/page-editor-chrome/componentDragObject.js +8 -8
  310. package/dist/editor/page-editor-chrome/componentDragObject.js.map +1 -1
  311. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
  312. package/dist/editor/page-editor-chrome/overlay/geometry.d.ts +7 -0
  313. package/dist/editor/page-editor-chrome/overlay/geometry.js +35 -17
  314. package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
  315. package/dist/editor/page-editor-chrome/overlay/placeholderZones.js +4 -9
  316. package/dist/editor/page-editor-chrome/overlay/placeholderZones.js.map +1 -1
  317. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +18 -70
  318. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
  319. package/dist/editor/page-viewer/MiniMap.js +1 -1
  320. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  321. package/dist/editor/page-viewer/MinimapDropTargets.js +1 -1
  322. package/dist/editor/page-viewer/PageViewer.js +5 -3
  323. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  324. package/dist/editor/page-viewer/PageViewerFrame.js +256 -125
  325. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  326. package/dist/editor/page-viewer/bridgeFieldPatch.js +0 -45
  327. package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
  328. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.d.ts +12 -0
  329. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js +27 -0
  330. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js.map +1 -1
  331. package/dist/editor/page-viewer/fullscreenPagePath.d.ts +1 -0
  332. package/dist/editor/page-viewer/fullscreenPagePath.js +11 -0
  333. package/dist/editor/page-viewer/fullscreenPagePath.js.map +1 -0
  334. package/dist/editor/page-viewer/internalLinkNavigation.d.ts +9 -0
  335. package/dist/editor/page-viewer/internalLinkNavigation.js +104 -0
  336. package/dist/editor/page-viewer/internalLinkNavigation.js.map +1 -0
  337. package/dist/editor/page-viewer/pageViewContext.d.ts +3 -1
  338. package/dist/editor/page-viewer/pageViewContext.js +14 -10
  339. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  340. package/dist/editor/page-viewer/parentBridgeInjection.d.ts +6 -1
  341. package/dist/editor/page-viewer/parentBridgeInjection.js +117 -24
  342. package/dist/editor/page-viewer/parentBridgeInjection.js.map +1 -1
  343. package/dist/editor/page-viewer/renderUrl.d.ts +1 -1
  344. package/dist/editor/personalization/ConditionTreeEditor.js +1 -1
  345. package/dist/editor/personalization/ConditionTreeEditor.js.map +1 -1
  346. package/dist/editor/personalization/PersonalizationPanel.js +1 -1
  347. package/dist/editor/personalization/TreeItemPicker.js +7 -1
  348. package/dist/editor/personalization/TreeItemPicker.js.map +1 -1
  349. package/dist/editor/personalization/utils.js.map +1 -1
  350. package/dist/editor/reviews/CommentEditor.js +1 -1
  351. package/dist/editor/reviews/CommentEditor.js.map +1 -1
  352. package/dist/editor/reviews/CommentView.js +1 -1
  353. package/dist/editor/reviews/Comments.js +5 -20
  354. package/dist/editor/reviews/Comments.js.map +1 -1
  355. package/dist/editor/reviews/CreateReviewDialog.js +1 -1
  356. package/dist/editor/reviews/DecisionsMatrix.js +1 -1
  357. package/dist/editor/reviews/EditReviewSettingsDialog.js +1 -1
  358. package/dist/editor/reviews/FeedbackFilters.d.ts +16 -0
  359. package/dist/editor/reviews/FeedbackFilters.js +45 -0
  360. package/dist/editor/reviews/FeedbackFilters.js.map +1 -0
  361. package/dist/editor/reviews/FeedbackModeIntro.js +2 -2
  362. package/dist/editor/reviews/FeedbackModeIntro.js.map +1 -1
  363. package/dist/editor/reviews/MentionText.js +1 -1
  364. package/dist/editor/reviews/ReviewCard.js +1 -1
  365. package/dist/editor/reviews/ReviewDetail.js +5 -1
  366. package/dist/editor/reviews/ReviewDetail.js.map +1 -1
  367. package/dist/editor/reviews/ReviewItemsPanel.js +74 -11
  368. package/dist/editor/reviews/ReviewItemsPanel.js.map +1 -1
  369. package/dist/editor/reviews/SecretPhraseInput.js +1 -1
  370. package/dist/editor/reviews/suggestedEditState.js.map +1 -1
  371. package/dist/editor/reviews/useMultiReview.js +45 -17
  372. package/dist/editor/reviews/useMultiReview.js.map +1 -1
  373. package/dist/editor/reviews/useReviews.js +24 -5
  374. package/dist/editor/reviews/useReviews.js.map +1 -1
  375. package/dist/editor/services/agentService.d.ts +91 -10
  376. package/dist/editor/services/agentService.js +100 -27
  377. package/dist/editor/services/agentService.js.map +1 -1
  378. package/dist/editor/services/aiService.js.map +1 -1
  379. package/dist/editor/services/contentService.d.ts +3 -1
  380. package/dist/editor/services/contentService.js +8 -0
  381. package/dist/editor/services/contentService.js.map +1 -1
  382. package/dist/editor/services/contextService.js.map +1 -1
  383. package/dist/editor/services/editService.js.map +1 -1
  384. package/dist/editor/services/favouritesService.d.ts +0 -7
  385. package/dist/editor/services/favouritesService.js +0 -7
  386. package/dist/editor/services/favouritesService.js.map +1 -1
  387. package/dist/editor/services/indexService.d.ts +3 -1
  388. package/dist/editor/services/indexService.js +8 -0
  389. package/dist/editor/services/indexService.js.map +1 -1
  390. package/dist/editor/services/localStorageService.js.map +1 -1
  391. package/dist/editor/services/reviewsService.js.map +1 -1
  392. package/dist/editor/services/serviceHelper.d.ts +3 -0
  393. package/dist/editor/services/serviceHelper.js +51 -1
  394. package/dist/editor/services/serviceHelper.js.map +1 -1
  395. package/dist/editor/services/suggestedEditsService.js.map +1 -1
  396. package/dist/editor/services/systemService.d.ts +10 -0
  397. package/dist/editor/services/systemService.js +3 -0
  398. package/dist/editor/services/systemService.js.map +1 -1
  399. package/dist/editor/services/textCompletionService.js +5 -0
  400. package/dist/editor/services/textCompletionService.js.map +1 -1
  401. package/dist/editor/settings/About.js +2 -4
  402. package/dist/editor/settings/About.js.map +1 -1
  403. package/dist/editor/settings/IndexOverview.js +3 -2
  404. package/dist/editor/settings/IndexOverview.js.map +1 -1
  405. package/dist/editor/settings/SettingsBreadcrumb.js +1 -1
  406. package/dist/editor/settings/SettingsView.js +1 -1
  407. package/dist/editor/settings/StatusSummary.js +1 -1
  408. package/dist/editor/settings/index/IndexGenerationsSection.d.ts +8 -0
  409. package/dist/editor/settings/index/IndexGenerationsSection.js +93 -0
  410. package/dist/editor/settings/index/IndexGenerationsSection.js.map +1 -0
  411. package/dist/editor/settings/panels/AgentProfileConfigPanel.js +1 -1
  412. package/dist/editor/settings/panels/AgentsPanel.js +1 -1
  413. package/dist/editor/settings/panels/CreateAgentProfileDialog.js +1 -1
  414. package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js +1 -1
  415. package/dist/editor/settings/panels/CreateMcpServerDialog.js +1 -1
  416. package/dist/editor/settings/panels/JavaScriptToolsPanel.js +1 -1
  417. package/dist/editor/settings/panels/MemoriesPanel.d.ts +16 -0
  418. package/dist/editor/settings/panels/MemoriesPanel.js +291 -0
  419. package/dist/editor/settings/panels/MemoriesPanel.js.map +1 -0
  420. package/dist/editor/settings/panels/MemoryEntryDialog.d.ts +45 -0
  421. package/dist/editor/settings/panels/MemoryEntryDialog.js +167 -0
  422. package/dist/editor/settings/panels/MemoryEntryDialog.js.map +1 -0
  423. package/dist/editor/settings/panels/ModelsPanel.js +1 -1
  424. package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
  425. package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js +1 -1
  426. package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js.map +1 -1
  427. package/dist/editor/settings/panels/ProjectTemplatesPanel.js +1 -1
  428. package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
  429. package/dist/editor/settings/panels/ProvidersPanel.js +1 -1
  430. package/dist/editor/settings/panels/RenderingHostsPanel.d.ts +2 -0
  431. package/dist/editor/settings/panels/RenderingHostsPanel.js +63 -0
  432. package/dist/editor/settings/panels/RenderingHostsPanel.js.map +1 -0
  433. package/dist/editor/settings/panels/SearchConfigPanel.js +6 -4
  434. package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
  435. package/dist/editor/settings/panels/StatusPanel.js +1 -1
  436. package/dist/editor/settings/panels/index.d.ts +2 -0
  437. package/dist/editor/settings/panels/index.js +2 -0
  438. package/dist/editor/settings/panels/index.js.map +1 -1
  439. package/dist/editor/setup-wizard/steps/CompleteStep.js +1 -1
  440. package/dist/editor/setup-wizard/steps/CreateSettingsStep.js +1 -1
  441. package/dist/editor/setup-wizard/steps/LicenseActivationStep.js +1 -1
  442. package/dist/editor/setup-wizard/steps/LicenseEmailStep.js +1 -1
  443. package/dist/editor/setup-wizard/steps/ModelSelectionStep.js +1 -1
  444. package/dist/editor/setup-wizard/steps/ProviderStep.js +1 -1
  445. package/dist/editor/sidebar/ComponentPalette.js +4 -4
  446. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  447. package/dist/editor/sidebar/ComponentTree.js +206 -113
  448. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  449. package/dist/editor/sidebar/ContentTreePanel.d.ts +2 -2
  450. package/dist/editor/sidebar/DictionaryEditor.js +1 -1
  451. package/dist/editor/sidebar/EditHistory.js +1 -1
  452. package/dist/editor/sidebar/Favorites.js.map +1 -1
  453. package/dist/editor/sidebar/NavigationPanelItem.js +1 -1
  454. package/dist/editor/sidebar/OperationItem.js +1 -1
  455. package/dist/editor/sidebar/Sessions.js +20 -9
  456. package/dist/editor/sidebar/Sessions.js.map +1 -1
  457. package/dist/editor/sidebar/Workbox.d.ts +8 -0
  458. package/dist/editor/sidebar/Workbox.js +94 -12
  459. package/dist/editor/sidebar/Workbox.js.map +1 -1
  460. package/dist/editor/sidebar/WorkboxFilters.d.ts +11 -0
  461. package/dist/editor/sidebar/WorkboxFilters.js +61 -0
  462. package/dist/editor/sidebar/WorkboxFilters.js.map +1 -0
  463. package/dist/editor/sidebar/WorkspaceRail.js +1 -1
  464. package/dist/editor/sidebar/useSharedComponentPublishState.js.map +1 -1
  465. package/dist/editor/template-wizard/TemplateBuilderDialog.js +1 -1
  466. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +1 -1
  467. package/dist/editor/tree-indicators/GutterColumns.js +1 -1
  468. package/dist/editor/tree-indicators/GutterContext.js +2 -2
  469. package/dist/editor/tree-indicators/GutterContext.js.map +1 -1
  470. package/dist/editor/ui/DragPreview.js.map +1 -1
  471. package/dist/editor/ui/ItemCollectionEditor.js +1 -1
  472. package/dist/editor/ui/ItemNameDialogNew.d.ts +11 -0
  473. package/dist/editor/ui/ItemNameDialogNew.js +12 -7
  474. package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
  475. package/dist/editor/ui/ItemSearch.js +1 -1
  476. package/dist/editor/ui/PerfectTree.d.ts +5 -1
  477. package/dist/editor/ui/PerfectTree.js +7 -5
  478. package/dist/editor/ui/PerfectTree.js.map +1 -1
  479. package/dist/editor/ui/PublishDialog.js +1 -1
  480. package/dist/editor/ui/PublishItemDialog.js +1 -1
  481. package/dist/editor/ui/PublishRestrictionsDialog.js +2 -2
  482. package/dist/editor/ui/PublishRestrictionsDialog.js.map +1 -1
  483. package/dist/editor/ui/RemoveComponentsConfirmMessage.js +1 -1
  484. package/dist/editor/ui/SimpleIconButton.d.ts +1 -1
  485. package/dist/editor/ui/SimpleTable.d.ts +5 -1
  486. package/dist/editor/ui/SimpleTable.js +5 -1
  487. package/dist/editor/ui/SimpleTable.js.map +1 -1
  488. package/dist/editor/ui/Spinner.js +1 -1
  489. package/dist/editor/ui/Spinner.js.map +1 -1
  490. package/dist/editor/ui/WorkboxItemsTable.js +49 -20
  491. package/dist/editor/ui/WorkboxItemsTable.js.map +1 -1
  492. package/dist/editor/utils/selectionContext.js.map +1 -1
  493. package/dist/editor/utils/sitecoreDate.js +8 -2
  494. package/dist/editor/utils/sitecoreDate.js.map +1 -1
  495. package/dist/editor/version-diff/versionDiffGeometryKeys.d.ts +10 -0
  496. package/dist/editor/version-diff/versionDiffGeometryKeys.js +16 -0
  497. package/dist/editor/version-diff/versionDiffGeometryKeys.js.map +1 -0
  498. package/dist/editor/version-diff/versionDiffHighlightStyles.d.ts +6 -0
  499. package/dist/editor/version-diff/versionDiffHighlightStyles.js +6 -0
  500. package/dist/editor/version-diff/versionDiffHighlightStyles.js.map +1 -1
  501. package/dist/editor/version-diff/versionDiffTargets.d.ts +40 -1
  502. package/dist/editor/version-diff/versionDiffTargets.js +176 -15
  503. package/dist/editor/version-diff/versionDiffTargets.js.map +1 -1
  504. package/dist/editor/views/ItemEditor.js +1 -1
  505. package/dist/editor/views/ItemEditorPane.js +1 -1
  506. package/dist/editor/views/ItemEditorPane.js.map +1 -1
  507. package/dist/editor/views/SingleEditView.js +1 -1
  508. package/dist/lib/pointerDrag.js.map +1 -1
  509. package/dist/lib/safelist.js +1 -1
  510. package/dist/licensing/FeatureGate.d.ts +1 -1
  511. package/dist/licensing/LicenseContext.js.map +1 -1
  512. package/dist/licensing/LicenseOverlay.js +1 -1
  513. package/dist/logging/consolePrefix.js.map +1 -1
  514. package/dist/revision.d.ts +2 -2
  515. package/dist/revision.js +2 -2
  516. package/dist/revision.js.map +1 -1
  517. package/dist/setup/services/setupWizardService.d.ts +3 -56
  518. package/dist/setup/services/setupWizardService.js +0 -43
  519. package/dist/setup/services/setupWizardService.js.map +1 -1
  520. package/dist/setup/wizard/steps/ImportModelDialog.js +1 -1
  521. package/dist/splash-screen/NewPage.js +1 -1
  522. package/dist/splash-screen/RecentPages.js +1 -1
  523. package/dist/task-board/TaskBoardWorkspace.js +5 -0
  524. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  525. package/dist/task-board/components/ItemCollectionEditorDialog.js +1 -1
  526. package/dist/task-board/components/ProjectDashboard.js +1 -1
  527. package/dist/task-board/components/ProjectGoalsPanel.js +1 -1
  528. package/dist/task-board/components/ProjectSettingsDialog.js +1 -1
  529. package/dist/task-board/components/TaskBoardBreadcrumb.js +1 -1
  530. package/dist/task-board/components/TaskBoardProjectListSidebar.js +1 -1
  531. package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
  532. package/dist/task-board/components/TaskBoardTitlebar.js +1 -1
  533. package/dist/task-board/components/TaskDetailPanel.js +1 -1
  534. package/dist/task-board/components/TaskReviewActions.js +1 -1
  535. package/dist/task-board/components/TaskRow.js +1 -1
  536. package/dist/task-board/components/TaskboardPersistentLogPanel.js +1 -1
  537. package/dist/task-board/components/WizardCommunicationCenter.js +1 -1
  538. package/dist/task-board/components/WizardTask.js +1 -1
  539. package/dist/task-board/components/WizardTaskDetailsPanel.js +1 -1
  540. package/dist/task-board/services/goalService.d.ts +1 -14
  541. package/dist/task-board/services/goalService.js +0 -10
  542. package/dist/task-board/services/goalService.js.map +1 -1
  543. package/dist/task-board/services/taskService.d.ts +0 -11
  544. package/dist/task-board/services/taskService.js +0 -3
  545. package/dist/task-board/services/taskService.js.map +1 -1
  546. package/dist/task-board/views/DependencyGraphView.d.ts +13 -0
  547. package/dist/task-board/views/DependencyGraphView.js +62 -11
  548. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  549. package/dist/task-board/views/ListView.js +1 -1
  550. package/dist/tour/Tour.js +1 -1
  551. package/dist/tour/Tour.js.map +1 -1
  552. package/dist/tour/default-tour.js +1 -1
  553. package/dist/tour/preview-tour.js +1 -1
  554. package/dist/types.d.ts +33 -9
  555. package/package.json +5 -4
  556. package/styles.css +4 -4
  557. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.d.ts +0 -5
  558. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js +0 -12
  559. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js.map +0 -1
  560. package/dist/editor/ai/terminal/components/AgentThinkingDots.d.ts +0 -5
  561. package/dist/editor/ai/terminal/components/AgentThinkingDots.js +0 -9
  562. package/dist/editor/ai/terminal/components/AgentThinkingDots.js.map +0 -1
  563. package/dist/editor/reviews/CommentsAndFeedback.d.ts +0 -8
  564. package/dist/editor/reviews/CommentsAndFeedback.js +0 -17
  565. package/dist/editor/reviews/CommentsAndFeedback.js.map +0 -1
  566. package/dist/editor/reviews/CreateReviewDetailsStep.d.ts +0 -53
  567. package/dist/editor/reviews/CreateReviewDetailsStep.js +0 -77
  568. package/dist/editor/reviews/CreateReviewDetailsStep.js.map +0 -1
  569. package/dist/splash-screen/ParheliaAssistantChat.d.ts +0 -8
  570. package/dist/splash-screen/ParheliaAssistantChat.js +0 -507
  571. package/dist/splash-screen/ParheliaAssistantChat.js.map +0 -1
  572. package/dist/splash-screen/SplashScreenAgentContext.d.ts +0 -28
  573. package/dist/splash-screen/SplashScreenAgentContext.js +0 -51
  574. package/dist/splash-screen/SplashScreenAgentContext.js.map +0 -1
@@ -14,6 +14,7 @@ import { copyItemsNeedsTerminalCompletion, normalizeOpId, waitForEditOperationTe
14
14
  import { isWorkflowMetadataField } from "../workflowFields";
15
15
  import { ExternalChangesWarningContent, TreeOperationConfirmContent, UndoDifferentItemContent, } from "./OperationDialogContent";
16
16
  import { isSuggestedEditRemoved, markSuggestedEditRemoved, upsertSuggestedEdit, } from "../reviews/suggestedEditState";
17
+ import { preferLatestLocalUndoTarget } from "./undoTargetResolution";
17
18
  import { logFieldValueDiagnostic, summarizeFieldDescriptor, summarizeFieldValue, } from "../fieldValueDiagnostics";
18
19
  import { getSuggestedEditItemLanguage, getSuggestedEditItemVersion, getSuggestionFieldIdentityKey, } from "../reviews/suggestionDisplayValue";
19
20
  import { enqueueSuggestedEditFieldTask, waitForSuggestedEditFieldTasks, } from "./suggestedEditFieldQueue";
@@ -21,9 +22,10 @@ import { enqueueSuggestedEditFieldTask, waitForSuggestedEditFieldTasks, } from "
21
22
  const ENABLE_HARD_DELETE_IN_DELETE_DIALOG = false;
22
23
  // Track pending suggested edits to prevent creating duplicates before server response
23
24
  const pendingSuggestedEdits = new Map();
25
+ const persistedSuggestedEditVersions = new Map();
24
26
  const SUGGESTED_EDIT_SAVE_DEBOUNCE_MS = 500;
25
27
  const FIELD_LOCK_REQUEST_TIMEOUT_MS = 10_000;
26
- function createDelayedSuggestedEditSave(suggestedEdit) {
28
+ function createDelayedSuggestedEditSave(suggestedEdit, expectedUpdated) {
27
29
  return new Promise((resolve, reject) => {
28
30
  globalThis.setTimeout(() => {
29
31
  if (isSuggestedEditRemoved(suggestedEdit.id)) {
@@ -32,7 +34,23 @@ function createDelayedSuggestedEditSave(suggestedEdit) {
32
34
  resolve({ type: "ignored" });
33
35
  return;
34
36
  }
35
- createOrUpdateSuggestedEdit(suggestedEdit).then(resolve, reject);
37
+ const save = async () => {
38
+ const result = await createOrUpdateSuggestedEdit(suggestedEdit, {
39
+ expectedUpdated,
40
+ });
41
+ if (!expectedUpdated &&
42
+ result.type === "conflict" &&
43
+ result.summary ===
44
+ "expectedUpdated is required when updating a suggestion." &&
45
+ result.suggestion?.id === suggestedEdit.id &&
46
+ result.suggestion.updated) {
47
+ return createOrUpdateSuggestedEdit(suggestedEdit, {
48
+ expectedUpdated: result.suggestion.updated,
49
+ });
50
+ }
51
+ return result;
52
+ };
53
+ save().then(resolve, reject);
36
54
  }, SUGGESTED_EDIT_SAVE_DEBOUNCE_MS);
37
55
  });
38
56
  }
@@ -80,14 +98,18 @@ function fieldsMatchForLock(left, right) {
80
98
  // Helper function to clean up pending operations for a deleted suggested edit
81
99
  export function cleanupPendingSuggestedEditOperations(suggestedEdit, user) {
82
100
  const userKey = user?.name || "unknown";
83
- const pendingFieldKey = `${getSuggestionFieldIdentityKey({
101
+ const saveKey = getSuggestionFieldIdentityKey({
84
102
  itemId: suggestedEdit.itemId,
85
103
  language: getSuggestedEditItemLanguage(suggestedEdit),
86
104
  version: getSuggestedEditItemVersion(suggestedEdit),
87
105
  fieldId: suggestedEdit.fieldId,
88
- })}:${userKey}`;
106
+ });
107
+ const pendingFieldKey = `${saveKey}:${userKey}`;
89
108
  // Remove from pending operations
90
109
  pendingSuggestedEdits.delete(pendingFieldKey);
110
+ if (persistedSuggestedEditVersions.get(saveKey)?.id === suggestedEdit.id) {
111
+ persistedSuggestedEditVersions.delete(saveKey);
112
+ }
91
113
  }
92
114
  export async function waitForPendingSuggestedEditSave(suggestedEdit) {
93
115
  const saveKey = getSuggestionFieldIdentityKey({
@@ -103,6 +125,13 @@ export function getOperationsContext(state, ui) {
103
125
  const [executingEditOperations, setExecutingEditOperations] = useState([]);
104
126
  const lastOp = useRef(undefined);
105
127
  const undoing = useRef(false);
128
+ // The most recent locally executed operation the server confirmed as
129
+ // undoable. The toolbar resolves its undo target from date-sorted history
130
+ // state, which can lag behind a just-completed save (inline-typing saves
131
+ // commit asynchronously and reach the history via save-ack/websocket
132
+ // merges); this snapshot lets the undo gesture target the operation the
133
+ // user actually created last instead of a stale history top.
134
+ const latestLocalUndoableOp = useRef(undefined);
106
135
  // Track operation IDs that were successfully undone/redone but whose React state update
107
136
  // hasn't been rendered yet. Cleared on each render (when stateRef.current is up-to-date).
108
137
  const recentlyUndoneIds = useRef(new Set());
@@ -156,7 +185,6 @@ export function getOperationsContext(state, ui) {
156
185
  const executeOp = useCallback(async (op, options = {
157
186
  refresh: "immediate",
158
187
  }) => {
159
- console.log("Executing op", op);
160
188
  const removedComponentIds = getRemovedComponentIds(op);
161
189
  let keepRemovingIndicatorsUntilSocketCompletion = false;
162
190
  if (removedComponentIds.length > 0) {
@@ -178,6 +206,12 @@ export function getOperationsContext(state, ui) {
178
206
  //stateRef.current.addToEditHistory(result.data as EditOperation);
179
207
  const returnedOp = result.data;
180
208
  setEditOperationExecuted(returnedOp);
209
+ if (returnedOp.canUndo &&
210
+ !returnedOp.undone &&
211
+ returnedOp.executionStatus !== "executing" &&
212
+ returnedOp.executionStatus !== "failed") {
213
+ latestLocalUndoableOp.current = returnedOp;
214
+ }
181
215
  keepRemovingIndicatorsUntilSocketCompletion =
182
216
  returnedOp.executionStatus === "executing";
183
217
  // Only remove from executing operations if it's not a long-running operation
@@ -516,16 +550,6 @@ export function getOperationsContext(state, ui) {
516
550
  }, []);
517
551
  const editField = useCallback(async ({ field, value, rawValue, forceMode, refresh = "immediate", originatingSlotId, }) => {
518
552
  const effectiveMode = forceMode ?? stateRef.current.mode;
519
- logFieldValueDiagnostic("operations", "editField requested", {
520
- field: summarizeFieldDescriptor(field),
521
- value: summarizeFieldValue(value),
522
- rawValue: summarizeFieldValue(rawValue),
523
- forceMode,
524
- effectiveMode,
525
- refresh,
526
- originatingSlotId,
527
- undoing: undoing.current,
528
- });
529
553
  fieldEditGeneration.current += 1;
530
554
  if (effectiveMode === "suggestions" &&
531
555
  (stateRef.current.page || stateRef.current.currentItemDescriptor)) {
@@ -564,11 +588,29 @@ export function getOperationsContext(state, ui) {
564
588
  // promise that resolves after the delayed save completes.
565
589
  const saveSnapshot = { ...op };
566
590
  const expectedNewValue = saveSnapshot.newValue;
567
- const savePromise = enqueueSuggestedEditFieldTask(fieldKey, () => createDelayedSuggestedEditSave(saveSnapshot))
591
+ const savePromise = enqueueSuggestedEditFieldTask(fieldKey, () => {
592
+ // Input handlers may prepare several snapshots before React state
593
+ // receives the first save acknowledgement. Read the durable
594
+ // server-issued version at execution time so every queued save is
595
+ // based on the immediately preceding one.
596
+ const persistedVersion = persistedSuggestedEditVersions.get(fieldKey);
597
+ const snapshotForSave = persistedVersion?.id === saveSnapshot.id
598
+ ? { ...saveSnapshot, updated: persistedVersion.updated }
599
+ : saveSnapshot;
600
+ return createDelayedSuggestedEditSave(snapshotForSave, persistedVersion?.id === saveSnapshot.id
601
+ ? persistedVersion.updated
602
+ : undefined);
603
+ })
568
604
  .then((result) => {
569
605
  // Update the suggested edits state with the result from the server
570
606
  if (result.type === "success" && result.data) {
571
607
  const updatedEdit = result.data;
608
+ if (updatedEdit.updated) {
609
+ persistedSuggestedEditVersions.set(fieldKey, {
610
+ id: updatedEdit.id,
611
+ updated: updatedEdit.updated,
612
+ });
613
+ }
572
614
  if (isSuggestedEditRemoved(updatedEdit.id)) {
573
615
  // Reverted to a no-op while this save was in flight; make sure
574
616
  // it stays gone on the server and do not re-add it locally.
@@ -586,6 +628,12 @@ export function getOperationsContext(state, ui) {
586
628
  }
587
629
  else if (result.type === "conflict") {
588
630
  if (result.suggestion) {
631
+ if (result.suggestion.updated) {
632
+ persistedSuggestedEditVersions.set(fieldKey, {
633
+ id: result.suggestion.id,
634
+ updated: result.suggestion.updated,
635
+ });
636
+ }
589
637
  stateRef.current.setSuggestedEdits((current) => upsertSuggestedEdit(current, result.suggestion, {
590
638
  source: "save-ack",
591
639
  }));
@@ -635,15 +683,6 @@ export function getOperationsContext(state, ui) {
635
683
  ai: false,
636
684
  agentId: undefined,
637
685
  }, true, value, rawValue, fieldModificationStore);
638
- logFieldValueDiagnostic("operations", "local field value updated", {
639
- field: summarizeFieldDescriptor(field),
640
- value: summarizeFieldValue(value),
641
- rawValue: summarizeFieldValue(rawValue),
642
- saveSequence,
643
- refresh,
644
- originatingSlotId,
645
- hasFieldModificationStore: !!fieldModificationStore,
646
- });
647
686
  if (refresh === "immediate") {
648
687
  logFieldValueDiagnostic("operations", "saving immediately", {
649
688
  field: summarizeFieldDescriptor(field),
@@ -663,21 +702,10 @@ export function getOperationsContext(state, ui) {
663
702
  lastEditField.current?.item?.language !== field.item?.language ||
664
703
  lastEditField.current?.item?.version !== field.item?.version;
665
704
  if (isNewField) {
666
- logFieldValueDiagnostic("operations", "flushing previous field debounce", {
667
- previousField: summarizeFieldDescriptor(lastEditField.current),
668
- nextField: summarizeFieldDescriptor(field),
669
- });
670
705
  executeEditFieldDebounced.flush();
671
706
  }
672
707
  lastEditField.current = field;
673
708
  // Fix: Pass the saveSequence to avoid calling updateFieldValue twice
674
- logFieldValueDiagnostic("operations", "queueing debounced save", {
675
- field: summarizeFieldDescriptor(field),
676
- value: summarizeFieldValue(value),
677
- rawValue: summarizeFieldValue(rawValue),
678
- refresh,
679
- saveSequence,
680
- });
681
709
  return executeEditFieldDebounced({
682
710
  field,
683
711
  value,
@@ -696,15 +724,6 @@ export function getOperationsContext(state, ui) {
696
724
  const val = rawValue !== undefined ? rawValue : value;
697
725
  if (val === undefined)
698
726
  return;
699
- logFieldValueDiagnostic("operations", "editFieldImmediate start", {
700
- field: summarizeFieldDescriptor(field),
701
- value: summarizeFieldValue(value),
702
- rawValue: summarizeFieldValue(rawValue),
703
- persistedValue: summarizeFieldValue(val),
704
- refresh,
705
- saveSequence,
706
- hasFieldModificationStore: !!fieldModificationStore,
707
- });
708
727
  const op = await getEditOP(field, rawValue, value);
709
728
  // Fix: Handle getEditOP returning undefined (item/field not found)
710
729
  // Clear dirty state so the field doesn't get stuck in "saving" state
@@ -721,14 +740,6 @@ export function getOperationsContext(state, ui) {
721
740
  }
722
741
  try {
723
742
  const result = await executeOp(op, { refresh });
724
- logFieldValueDiagnostic("operations", "editFieldImmediate result", {
725
- field: summarizeFieldDescriptor(field),
726
- opId: op.id,
727
- executionStatus: result?.executionStatus,
728
- refresh,
729
- saveSequence,
730
- persistedValue: summarizeFieldValue(val),
731
- });
732
743
  // Fix: Check if the operation actually succeeded
733
744
  // If result is undefined/null, the operation likely failed
734
745
  if (!result) {
@@ -772,14 +783,6 @@ export function getOperationsContext(state, ui) {
772
783
  // Fix: Use the saveSequence passed from editField instead of calling
773
784
  // updateFieldValue again. This prevents the race condition where the
774
785
  // field gets marked dirty twice with different sequences.
775
- logFieldValueDiagnostic("operations", "debounced save executing", {
776
- field: summarizeFieldDescriptor(field),
777
- value: summarizeFieldValue(value),
778
- rawValue: summarizeFieldValue(rawValue),
779
- refresh,
780
- saveSequence,
781
- hasFieldModificationStore: !!fieldModificationStore,
782
- });
783
786
  return enqueueFieldSave(field, () => editFieldImmediate({
784
787
  field,
785
788
  value,
@@ -879,6 +882,9 @@ export function getOperationsContext(state, ui) {
879
882
  for (const executedOp of result.data) {
880
883
  recentlyUndoneIds.current.add(executedOp.id);
881
884
  recentlyRedoneIds.current.delete(executedOp.id);
885
+ if (latestLocalUndoableOp.current?.id === executedOp.id) {
886
+ latestLocalUndoableOp.current = undefined;
887
+ }
882
888
  }
883
889
  // Check if any operations are executing in background (long-running undo)
884
890
  const executingOps = result.data.filter((x) => x.executionStatus === "executing");
@@ -973,6 +979,20 @@ export function getOperationsContext(state, ui) {
973
979
  if (pendingFieldOperationId) {
974
980
  operationId = pendingFieldOperationId;
975
981
  }
982
+ else {
983
+ // The toolbar/keyboard gesture resolves its target from history
984
+ // state that may not include a save that just completed. Prefer the
985
+ // most recent locally executed undoable operation over a stale
986
+ // target (a genuinely newer target from another tab/user wins).
987
+ operationId = preferLatestLocalUndoTarget({
988
+ requestedOperationId: operationId,
989
+ latestLocalOperation: latestLocalUndoableOp.current,
990
+ editHistory: stateRef.current.editHistory,
991
+ recentlyUndoneIds: recentlyUndoneIds.current,
992
+ historyMode: stateRef.current.historyMode,
993
+ currentItem: stateRef.current.item?.descriptor,
994
+ });
995
+ }
976
996
  const currentItem = stateRef.current.item?.descriptor;
977
997
  const filterBySession = stateRef.current.showOnlyMyChanges;
978
998
  const historyMode = stateRef.current.historyMode;
@@ -1214,6 +1234,10 @@ export function getOperationsContext(state, ui) {
1214
1234
  for (const executedOp of result.data) {
1215
1235
  recentlyRedoneIds.current.add(executedOp.id);
1216
1236
  recentlyUndoneIds.current.delete(executedOp.id);
1237
+ // A redone operation is the newest undoable operation again.
1238
+ if (executedOp.canUndo && !executedOp.undone) {
1239
+ latestLocalUndoableOp.current = executedOp;
1240
+ }
1217
1241
  }
1218
1242
  // Check if the operation is executing in background (long-running redo)
1219
1243
  const executingOps = result.data.filter((x) => x.executionStatus === "executing");
@@ -1545,7 +1569,8 @@ export function getOperationsContext(state, ui) {
1545
1569
  id: uuid(),
1546
1570
  title: `Moving ${items.length} item(s)...`,
1547
1571
  };
1548
- await executeOp(op);
1572
+ const result = await executeOp(op);
1573
+ return result?.executionStatus !== "failed";
1549
1574
  }, [executeOp]);
1550
1575
  const createItem = useCallback(async (parent, templateId, name) => {
1551
1576
  const op = {
@@ -1663,7 +1688,7 @@ export function getOperationsContext(state, ui) {
1663
1688
  }
1664
1689
  return [];
1665
1690
  }, [executeOp]);
1666
- const duplicateItem = useCallback(async (item, target, name) => {
1691
+ const duplicateItem = useCallback(async (item, target, name, options) => {
1667
1692
  // Use generic edit endpoint for long-running operation support
1668
1693
  // Duplicate is a copy to the same parent, positioned after the original
1669
1694
  const op = {
@@ -1676,6 +1701,7 @@ export function getOperationsContext(state, ui) {
1676
1701
  id: uuid(),
1677
1702
  title: `Duplicating item...`,
1678
1703
  name, // Pass the user-provided name to the backend
1704
+ copyChildren: options?.copyChildren ?? true,
1679
1705
  };
1680
1706
  let copyResult = (await executeOp(op));
1681
1707
  if (copyItemsNeedsTerminalCompletion(copyResult)) {
@@ -1925,7 +1951,6 @@ async function getOrMergeSuggestedEditOp(field, rawValue, value, state) {
1925
1951
  itemLanguage: field.item.language,
1926
1952
  itemVersion: field.item.version,
1927
1953
  newValue: nextValue,
1928
- updated: new Date().toISOString(),
1929
1954
  updatedBy: state.user?.name || "unknown",
1930
1955
  };
1931
1956
  pendingSuggestedEdits.set(fieldKey, updatedEdit);
@@ -1969,7 +1994,6 @@ async function getOrMergeSuggestedEditOp(field, rawValue, value, state) {
1969
1994
  itemLanguage: field.item.language,
1970
1995
  itemVersion: field.item.version,
1971
1996
  newValue: nextValue,
1972
- updated: new Date().toISOString(),
1973
1997
  updatedBy: state.user?.name || "unknown",
1974
1998
  };
1975
1999
  state.setSuggestedEdits((current) => upsertSuggestedEdit(current, updatedEdit, { source: "local" }));