@parhelia/core 0.3.12763 → 0.3.12768

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 (712) hide show
  1. package/dist/agents-view/AgentCard.js +7 -9
  2. package/dist/agents-view/AgentCard.js.map +1 -1
  3. package/dist/agents-view/AgentGalleryView.js +4 -4
  4. package/dist/agents-view/AgentGalleryView.js.map +1 -1
  5. package/dist/agents-view/AgentProfileIcon.js +1 -8
  6. package/dist/agents-view/AgentProfileIcon.js.map +1 -1
  7. package/dist/agents-view/AgentsWorkspaceView.js +2 -2
  8. package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
  9. package/dist/agents-view/RenameAgentDialog.js +1 -1
  10. package/dist/agents-view/RenameAgentDialog.js.map +1 -1
  11. package/dist/components/MarkdownViewerPopover.js +3 -3
  12. package/dist/components/MarkdownViewerPopover.js.map +1 -1
  13. package/dist/components/WorkspaceHomeView.js +1 -1
  14. package/dist/components/WorkspaceHomeView.js.map +1 -1
  15. package/dist/components/ui/LanguageSelector.js +1 -1
  16. package/dist/components/ui/LanguageSelector.js.map +1 -1
  17. package/dist/components/ui/PlaceholderInput.js +1 -1
  18. package/dist/components/ui/PlaceholderItemSelector.js +1 -1
  19. package/dist/components/ui/PlaceholderItemSelector.js.map +1 -1
  20. package/dist/components/ui/UserPicker.js +2 -2
  21. package/dist/components/ui/UserPicker.js.map +1 -1
  22. package/dist/components/ui/accordion.js +1 -1
  23. package/dist/components/ui/accordion.js.map +1 -1
  24. package/dist/components/ui/breadcrumb.js +2 -2
  25. package/dist/components/ui/breadcrumb.js.map +1 -1
  26. package/dist/components/ui/calendar.js +3 -3
  27. package/dist/components/ui/calendar.js.map +1 -1
  28. package/dist/components/ui/card.js +2 -2
  29. package/dist/components/ui/card.js.map +1 -1
  30. package/dist/components/ui/checkbox.js +1 -1
  31. package/dist/components/ui/checkbox.js.map +1 -1
  32. package/dist/components/ui/context-menu.js +3 -3
  33. package/dist/components/ui/context-menu.js.map +1 -1
  34. package/dist/components/ui/delete-icon.js +1 -1
  35. package/dist/components/ui/delete-icon.js.map +1 -1
  36. package/dist/components/ui/dropdown-menu.js +4 -4
  37. package/dist/components/ui/dropdown-menu.js.map +1 -1
  38. package/dist/components/ui/mention-textarea.js +2 -2
  39. package/dist/components/ui/mention-textarea.js.map +1 -1
  40. package/dist/components/ui/multi-switch-button.js +1 -1
  41. package/dist/components/ui/multi-switch-button.js.map +1 -1
  42. package/dist/components/ui/upload-button.js +1 -1
  43. package/dist/components/ui/upload-button.js.map +1 -1
  44. package/dist/config/config.js +29 -18
  45. package/dist/config/config.js.map +1 -1
  46. package/dist/editor/AdminRequiredView.js +1 -1
  47. package/dist/editor/AdminRequiredView.js.map +1 -1
  48. package/dist/editor/ConcurrentUserLimitDialog.d.ts +2 -1
  49. package/dist/editor/ConcurrentUserLimitDialog.js +26 -11
  50. package/dist/editor/ConcurrentUserLimitDialog.js.map +1 -1
  51. package/dist/editor/ConfirmationDialog.js +1 -1
  52. package/dist/editor/ContentTree.js +2 -2
  53. package/dist/editor/ContentTree.js.map +1 -1
  54. package/dist/editor/ContextMenu.js +36 -6
  55. package/dist/editor/ContextMenu.js.map +1 -1
  56. package/dist/editor/DeleteItemsWarning.js +2 -2
  57. package/dist/editor/DeleteItemsWarning.js.map +1 -1
  58. package/dist/editor/Editor.js +49 -4
  59. package/dist/editor/Editor.js.map +1 -1
  60. package/dist/editor/EditorWarning.js +1 -1
  61. package/dist/editor/EditorWarning.js.map +1 -1
  62. package/dist/editor/FieldActionsOverlay.js +1 -1
  63. package/dist/editor/FieldActionsOverlay.js.map +1 -1
  64. package/dist/editor/FieldHistory.js +7 -7
  65. package/dist/editor/FieldHistory.js.map +1 -1
  66. package/dist/editor/FieldList.js +45 -4
  67. package/dist/editor/FieldList.js.map +1 -1
  68. package/dist/editor/FieldListField.js +5 -3
  69. package/dist/editor/FieldListField.js.map +1 -1
  70. package/dist/editor/FieldListFieldWithFallbacks.js +1 -1
  71. package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
  72. package/dist/editor/MainLayout.js +3 -6
  73. package/dist/editor/MainLayout.js.map +1 -1
  74. package/dist/editor/MigrationsView.js +6 -6
  75. package/dist/editor/MigrationsView.js.map +1 -1
  76. package/dist/editor/PictureCropper.js +2 -2
  77. package/dist/editor/PictureCropper.js.map +1 -1
  78. package/dist/editor/SetupWizard.js +1 -1
  79. package/dist/editor/SetupWizard.js.map +1 -1
  80. package/dist/editor/UsedBy.js +2 -2
  81. package/dist/editor/UsedBy.js.map +1 -1
  82. package/dist/editor/WorkspaceTitleSwitcher.js +3 -3
  83. package/dist/editor/WorkspaceTitleSwitcher.js.map +1 -1
  84. package/dist/editor/ai/AgentProfileSelector.js +4 -4
  85. package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
  86. package/dist/editor/ai/AgentSharingSection.js +6 -6
  87. package/dist/editor/ai/AgentSharingSection.js.map +1 -1
  88. package/dist/editor/ai/Agents.js +3 -3
  89. package/dist/editor/ai/Agents.js.map +1 -1
  90. package/dist/editor/ai/ContentInspectorPopover.js +2 -2
  91. package/dist/editor/ai/ContentInspectorPopover.js.map +1 -1
  92. package/dist/editor/ai/GuidanceOverlay.js +1 -1
  93. package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
  94. package/dist/editor/ai/HeartbeatDiagnosticsPanel.js +5 -19
  95. package/dist/editor/ai/HeartbeatDiagnosticsPanel.js.map +1 -1
  96. package/dist/editor/ai/InlineAiDialog.d.ts +13 -0
  97. package/dist/editor/ai/InlineAiDialog.js +52 -14
  98. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  99. package/dist/editor/ai/InlineAiTrigger.js +1 -1
  100. package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
  101. package/dist/editor/ai/bridgeInlineTextReplace.d.ts +16 -0
  102. package/dist/editor/ai/bridgeInlineTextReplace.js +31 -0
  103. package/dist/editor/ai/bridgeInlineTextReplace.js.map +1 -0
  104. package/dist/editor/ai/dialogs/ComponentTypeSelectorInline.js +2 -2
  105. package/dist/editor/ai/dialogs/ComponentTypeSelectorInline.js.map +1 -1
  106. package/dist/editor/ai/dialogs/QuestionnaireInline.js +3 -3
  107. package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
  108. package/dist/editor/ai/inlineAiTextEditLabels.d.ts +1 -1
  109. package/dist/editor/ai/inlineAiTextEditLabels.js +1 -1
  110. package/dist/editor/ai/terminal/components/ActivitySummaryCell.js +4 -4
  111. package/dist/editor/ai/terminal/components/ActivitySummaryCell.js.map +1 -1
  112. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js +7 -7
  113. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js.map +1 -1
  114. package/dist/editor/ai/terminal/components/AgentContextItemPicker.js +1 -1
  115. package/dist/editor/ai/terminal/components/AgentContextItemPicker.js.map +1 -1
  116. package/dist/editor/ai/terminal/components/AgentDocumentList.js +3 -3
  117. package/dist/editor/ai/terminal/components/AgentDocumentList.js.map +1 -1
  118. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js +1 -1
  119. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js.map +1 -1
  120. package/dist/editor/ai/terminal/components/AgentGreeting.js +2 -2
  121. package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
  122. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js +2 -2
  123. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js.map +1 -1
  124. package/dist/editor/ai/terminal/components/AgentModeSelector.js +2 -2
  125. package/dist/editor/ai/terminal/components/AgentModeSelector.js.map +1 -1
  126. package/dist/editor/ai/terminal/components/AgentParentLink.js +1 -1
  127. package/dist/editor/ai/terminal/components/AgentParentLink.js.map +1 -1
  128. package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js +1 -1
  129. package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js.map +1 -1
  130. package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js +1 -1
  131. package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js.map +1 -1
  132. package/dist/editor/ai/terminal/components/AgentProjectProgress.js +1 -1
  133. package/dist/editor/ai/terminal/components/AgentProjectProgress.js.map +1 -1
  134. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +1 -1
  135. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
  136. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +1 -1
  137. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
  138. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +5 -5
  139. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
  140. package/dist/editor/ai/terminal/components/AgentReadOnlyNotice.js +1 -1
  141. package/dist/editor/ai/terminal/components/AgentReadOnlyNotice.js.map +1 -1
  142. package/dist/editor/ai/terminal/components/AgentSettingsPopover.js +1 -1
  143. package/dist/editor/ai/terminal/components/AgentSettingsPopover.js.map +1 -1
  144. package/dist/editor/ai/terminal/components/AgentSettingsSections.js +4 -2
  145. package/dist/editor/ai/terminal/components/AgentSettingsSections.js.map +1 -1
  146. package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js +2 -2
  147. package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js.map +1 -1
  148. package/dist/editor/ai/terminal/components/AgentSuggestionBanner.js +1 -1
  149. package/dist/editor/ai/terminal/components/AgentSuggestionBanner.js.map +1 -1
  150. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +1 -1
  151. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
  152. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +3 -3
  153. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
  154. package/dist/editor/ai/terminal/components/AiResponseMessage.js +11 -14
  155. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  156. package/dist/editor/ai/terminal/components/ApprovalCard.js +3 -4
  157. package/dist/editor/ai/terminal/components/ApprovalCard.js.map +1 -1
  158. package/dist/editor/ai/terminal/components/ContextInfoBar.js +1 -1
  159. package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
  160. package/dist/editor/ai/terminal/components/EditOperationsPanel.js +2 -2
  161. package/dist/editor/ai/terminal/components/EditOperationsPanel.js.map +1 -1
  162. package/dist/editor/ai/terminal/components/HeartbeatMessage.js +1 -1
  163. package/dist/editor/ai/terminal/components/HeartbeatMessage.js.map +1 -1
  164. package/dist/editor/ai/terminal/components/QuestionnaireRecap.js +2 -2
  165. package/dist/editor/ai/terminal/components/QuestionnaireRecap.js.map +1 -1
  166. package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js +4 -4
  167. package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js.map +1 -1
  168. package/dist/editor/ai/terminal/components/TodoListPanel.js +4 -4
  169. package/dist/editor/ai/terminal/components/TodoListPanel.js.map +1 -1
  170. package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +9 -0
  171. package/dist/editor/ai/terminal/components/ToolCallDisplay.js +63 -22
  172. package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
  173. package/dist/editor/ai/terminal/components/UserMessage.js +10 -6
  174. package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
  175. package/dist/editor/ai/terminal/useAgentTextareaDropHandlers.js +35 -7
  176. package/dist/editor/ai/terminal/useAgentTextareaDropHandlers.js.map +1 -1
  177. package/dist/editor/ai-image-editor/AiImageEditorDialog.js +5 -5
  178. package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
  179. package/dist/editor/ai-image-editor/AiImageResultOverlay.js +1 -1
  180. package/dist/editor/bridge/protocol.d.ts +12 -0
  181. package/dist/editor/bridge/protocol.js +1 -1
  182. package/dist/editor/bridge/protocol.js.map +1 -1
  183. package/dist/editor/client/AboutDialog.js +1 -1
  184. package/dist/editor/client/AboutDialog.js.map +1 -1
  185. package/dist/editor/client/EditorShell.js +103 -51
  186. package/dist/editor/client/EditorShell.js.map +1 -1
  187. package/dist/editor/client/agentTerminalFocus.d.ts +1 -1
  188. package/dist/editor/client/agentTerminalFocus.js +1 -1
  189. package/dist/editor/client/agentTerminalFocus.js.map +1 -1
  190. package/dist/editor/client/editContext.d.ts +4 -1
  191. package/dist/editor/client/editContext.js.map +1 -1
  192. package/dist/editor/client/editHistoryReconciliation.d.ts +10 -0
  193. package/dist/editor/client/editHistoryReconciliation.js +25 -0
  194. package/dist/editor/client/editHistoryReconciliation.js.map +1 -0
  195. package/dist/editor/client/errorToast.js +1 -1
  196. package/dist/editor/client/errorToast.js.map +1 -1
  197. package/dist/editor/client/hooks/useEditorWebSocket.d.ts +4 -3
  198. package/dist/editor/client/hooks/useEditorWebSocket.js +265 -64
  199. package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
  200. package/dist/editor/client/hooks/useSocketMessageHandler.d.ts +1 -0
  201. package/dist/editor/client/hooks/useSocketMessageHandler.js +44 -11
  202. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  203. package/dist/editor/client/operations.d.ts +1 -1
  204. package/dist/editor/client/operations.js +123 -77
  205. package/dist/editor/client/operations.js.map +1 -1
  206. package/dist/editor/client/pageModelBuilder.js +11 -6
  207. package/dist/editor/client/pageModelBuilder.js.map +1 -1
  208. package/dist/editor/client/sessionIdClaim.d.ts +22 -0
  209. package/dist/editor/client/sessionIdClaim.js +77 -0
  210. package/dist/editor/client/sessionIdClaim.js.map +1 -0
  211. package/dist/editor/client/sidebarAvailability.d.ts +9 -0
  212. package/dist/editor/client/sidebarAvailability.js +29 -0
  213. package/dist/editor/client/sidebarAvailability.js.map +1 -0
  214. package/dist/editor/client/suggestedEditFieldQueue.d.ts +2 -0
  215. package/dist/editor/client/suggestedEditFieldQueue.js +16 -0
  216. package/dist/editor/client/suggestedEditFieldQueue.js.map +1 -0
  217. package/dist/editor/client/ui/FullscreenControls.js +1 -1
  218. package/dist/editor/client/ui/FullscreenControls.js.map +1 -1
  219. package/dist/editor/client/waitForEditOperationTerminal.d.ts +2 -0
  220. package/dist/editor/client/waitForEditOperationTerminal.js +73 -9
  221. package/dist/editor/client/waitForEditOperationTerminal.js.map +1 -1
  222. package/dist/editor/commands/componentCommands.js +17 -15
  223. package/dist/editor/commands/componentCommands.js.map +1 -1
  224. package/dist/editor/commands/deleteVersionCommand.js +1 -1
  225. package/dist/editor/commands/deleteVersionCommand.js.map +1 -1
  226. package/dist/editor/commands/itemCommands.js +64 -9
  227. package/dist/editor/commands/itemCommands.js.map +1 -1
  228. package/dist/editor/commands/placeholderCommands.js +1 -1
  229. package/dist/editor/commands/placeholderCommands.js.map +1 -1
  230. package/dist/editor/content-tree/IndicatorSettings.js +2 -2
  231. package/dist/editor/content-tree/TreeSettingsMenu.js +1 -1
  232. package/dist/editor/content-tree/TreeSettingsMenu.js.map +1 -1
  233. package/dist/editor/context-menu/InsertMenu.js +1 -1
  234. package/dist/editor/context-menu/InsertMenu.js.map +1 -1
  235. package/dist/editor/editor-warnings/FinalWorkflowStateReadOnly.js +1 -1
  236. package/dist/editor/editor-warnings/FinalWorkflowStateReadOnly.js.map +1 -1
  237. package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js +1 -1
  238. package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js.map +1 -1
  239. package/dist/editor/editor-warnings/NoWriteAccess.js +3 -1
  240. package/dist/editor/editor-warnings/NoWriteAccess.js.map +1 -1
  241. package/dist/editor/field-types/AttachmentEditor.js +1 -1
  242. package/dist/editor/field-types/AttachmentEditor.js.map +1 -1
  243. package/dist/editor/field-types/CheckboxEditor.js +1 -1
  244. package/dist/editor/field-types/CheckboxEditor.js.map +1 -1
  245. package/dist/editor/field-types/DateFieldEditor.js +2 -2
  246. package/dist/editor/field-types/DateFieldEditor.js.map +1 -1
  247. package/dist/editor/field-types/DateTimeFieldEditor.js +1 -1
  248. package/dist/editor/field-types/DateTimeFieldEditor.js.map +1 -1
  249. package/dist/editor/field-types/TreeListEditor.d.ts +3 -1
  250. package/dist/editor/field-types/TreeListEditor.js +5 -5
  251. package/dist/editor/field-types/TreeListEditor.js.map +1 -1
  252. package/dist/editor/field-types/richtext/components/ReactSlate.js +15 -2
  253. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
  254. package/dist/editor/field-types/richtext/richTextToolbarIcons.js +14 -14
  255. package/dist/editor/field-types/richtext/richTextToolbarIcons.js.map +1 -1
  256. package/dist/editor/field-types/textContextMenuFactory.js +1 -1
  257. package/dist/editor/field-types/textContextMenuFactory.js.map +1 -1
  258. package/dist/editor/itemContextMenu.js +1 -1
  259. package/dist/editor/itemContextMenu.js.map +1 -1
  260. package/dist/editor/media-selector/AiImageSearchPrompt.js +1 -1
  261. package/dist/editor/media-selector/AiImageSearchPrompt.js.map +1 -1
  262. package/dist/editor/media-selector/MediaFolderBrowser.js +5 -5
  263. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
  264. package/dist/editor/media-selector/MediaSelector.js +1 -1
  265. package/dist/editor/media-selector/MediaSelector.js.map +1 -1
  266. package/dist/editor/media-selector/Preview.js +1 -1
  267. package/dist/editor/media-selector/Preview.js.map +1 -1
  268. package/dist/editor/media-selector/Thumbnails.js +4 -4
  269. package/dist/editor/media-selector/Thumbnails.js.map +1 -1
  270. package/dist/editor/media-selector/TreeSelector.js +3 -3
  271. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  272. package/dist/editor/media-selector/UploadZone.js +1 -1
  273. package/dist/editor/media-selector/UploadZone.js.map +1 -1
  274. package/dist/editor/menubar/ActiveUsers.js +17 -15
  275. package/dist/editor/menubar/ActiveUsers.js.map +1 -1
  276. package/dist/editor/menubar/FavoritesControls.js +3 -3
  277. package/dist/editor/menubar/FavoritesControls.js.map +1 -1
  278. package/dist/editor/menubar/ItemLanguageVersion.js +7 -3
  279. package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
  280. package/dist/editor/menubar/OpenInNewTabButton.d.ts +1 -1
  281. package/dist/editor/menubar/OpenInNewTabButton.js +2 -2
  282. package/dist/editor/menubar/OpenInNewTabButton.js.map +1 -1
  283. package/dist/editor/menubar/OperationsIndicator.js +3 -3
  284. package/dist/editor/menubar/OperationsIndicator.js.map +1 -1
  285. package/dist/editor/menubar/ToolbarFactory.js +2 -7
  286. package/dist/editor/menubar/ToolbarFactory.js.map +1 -1
  287. package/dist/editor/menubar/VersionSelector.js +15 -14
  288. package/dist/editor/menubar/VersionSelector.js.map +1 -1
  289. package/dist/editor/menubar/WorkflowButton.js +5 -5
  290. package/dist/editor/menubar/WorkflowButton.js.map +1 -1
  291. package/dist/editor/menubar/activeUserSessions.d.ts +9 -0
  292. package/dist/editor/menubar/activeUserSessions.js +30 -0
  293. package/dist/editor/menubar/activeUserSessions.js.map +1 -0
  294. package/dist/editor/menubar/toolbar-sections/CompareControls.js +1 -1
  295. package/dist/editor/menubar/toolbar-sections/CompareControls.js.map +1 -1
  296. package/dist/editor/menubar/toolbar-sections/FullscreenControl.js +1 -1
  297. package/dist/editor/menubar/toolbar-sections/FullscreenControl.js.map +1 -1
  298. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +12 -12
  299. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
  300. package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js +1 -1
  301. package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js.map +1 -1
  302. package/dist/editor/menubar/toolbar-sections/UtilityControls.d.ts +1 -3
  303. package/dist/editor/menubar/toolbar-sections/UtilityControls.js +3 -4
  304. package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
  305. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +3 -2
  306. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  307. package/dist/editor/notifications/NotificationCenter.js +23 -5
  308. package/dist/editor/notifications/NotificationCenter.js.map +1 -1
  309. package/dist/editor/notifications/NotificationItem.js +3 -3
  310. package/dist/editor/notifications/NotificationItem.js.map +1 -1
  311. package/dist/editor/notifications/WatchButton.js +8 -8
  312. package/dist/editor/notifications/WatchButton.js.map +1 -1
  313. package/dist/editor/notifications/watchEventOptions.js +2 -2
  314. package/dist/editor/notifications/watchEventOptions.js.map +1 -1
  315. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +2 -2
  316. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
  317. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js +5 -5
  318. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js.map +1 -1
  319. package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js +2 -2
  320. package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js.map +1 -1
  321. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +1 -1
  322. package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
  323. package/dist/editor/page-editor-chrome/FrameMenu.js +2 -2
  324. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  325. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +1 -1
  326. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  327. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +119 -27
  328. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
  329. package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.d.ts +6 -0
  330. package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.js +23 -0
  331. package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.js.map +1 -0
  332. package/dist/editor/page-editor-chrome/overlay/geometry.d.ts +8 -1
  333. package/dist/editor/page-editor-chrome/overlay/geometry.js +30 -0
  334. package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
  335. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +16 -13
  336. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +75 -35
  337. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
  338. package/dist/editor/page-viewer/EditorForm.js +7 -2
  339. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  340. package/dist/editor/page-viewer/MiniMap.d.ts +2 -1
  341. package/dist/editor/page-viewer/MiniMap.js +98 -12
  342. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  343. package/dist/editor/page-viewer/PageViewer.js +2 -2
  344. package/dist/editor/page-viewer/PageViewerFrame.js +248 -115
  345. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  346. package/dist/editor/page-viewer/bridgeFieldPatch.d.ts +34 -1
  347. package/dist/editor/page-viewer/bridgeFieldPatch.js +69 -1
  348. package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
  349. package/dist/editor/page-viewer/bridgeInlineEditSession.d.ts +49 -0
  350. package/dist/editor/page-viewer/bridgeInlineEditSession.js +189 -0
  351. package/dist/editor/page-viewer/bridgeInlineEditSession.js.map +1 -0
  352. package/dist/editor/personalization/ActionList.js +1 -1
  353. package/dist/editor/personalization/ActionList.js.map +1 -1
  354. package/dist/editor/personalization/ConditionTreeEditor.js +1 -1
  355. package/dist/editor/personalization/ConditionTreeEditor.js.map +1 -1
  356. package/dist/editor/personalization/PersonalizationPanel.js +98 -34
  357. package/dist/editor/personalization/PersonalizationPanel.js.map +1 -1
  358. package/dist/editor/personalization/RuleElementPicker.js +1 -1
  359. package/dist/editor/personalization/RuleElementPicker.js.map +1 -1
  360. package/dist/editor/personalization/RuleList.js +3 -3
  361. package/dist/editor/personalization/RuleList.js.map +1 -1
  362. package/dist/editor/personalization/TreeItemPicker.js +3 -3
  363. package/dist/editor/personalization/TreeItemPicker.js.map +1 -1
  364. package/dist/editor/reviews/CommentDisplayPopover.js +2 -2
  365. package/dist/editor/reviews/CommentEditor.js +3 -2
  366. package/dist/editor/reviews/CommentEditor.js.map +1 -1
  367. package/dist/editor/reviews/CommentPopover.js +5 -3
  368. package/dist/editor/reviews/CommentPopover.js.map +1 -1
  369. package/dist/editor/reviews/CommentView.js +8 -8
  370. package/dist/editor/reviews/CommentView.js.map +1 -1
  371. package/dist/editor/reviews/Comments.js +4 -4
  372. package/dist/editor/reviews/Comments.js.map +1 -1
  373. package/dist/editor/reviews/CreateReviewConfirmStep.js +1 -1
  374. package/dist/editor/reviews/CreateReviewConfirmStep.js.map +1 -1
  375. package/dist/editor/reviews/CreateReviewDialog.js +4 -5
  376. package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
  377. package/dist/editor/reviews/CreateReviewReviewersStep.js +1 -1
  378. package/dist/editor/reviews/CreateReviewReviewersStep.js.map +1 -1
  379. package/dist/editor/reviews/CreateReviewSettingsStep.js +2 -1
  380. package/dist/editor/reviews/CreateReviewSettingsStep.js.map +1 -1
  381. package/dist/editor/reviews/CreateReviewSuccessStep.js +1 -1
  382. package/dist/editor/reviews/CreateReviewSuccessStep.js.map +1 -1
  383. package/dist/editor/reviews/DecisionsMatrix.js +13 -13
  384. package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
  385. package/dist/editor/reviews/EditReviewSettingsDialog.d.ts +1 -1
  386. package/dist/editor/reviews/EditReviewSettingsDialog.js +28 -63
  387. package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
  388. package/dist/editor/reviews/FeedbackModeIntro.js +3 -3
  389. package/dist/editor/reviews/FeedbackModeIntro.js.map +1 -1
  390. package/dist/editor/reviews/LatestFeedback.js +3 -3
  391. package/dist/editor/reviews/LatestFeedback.js.map +1 -1
  392. package/dist/editor/reviews/MultiReviewManager.js +0 -1
  393. package/dist/editor/reviews/MultiReviewManager.js.map +1 -1
  394. package/dist/editor/reviews/PreconfiguredReviewerSelector.js +1 -1
  395. package/dist/editor/reviews/PreconfiguredReviewerSelector.js.map +1 -1
  396. package/dist/editor/reviews/ReviewCard.d.ts +1 -4
  397. package/dist/editor/reviews/ReviewCard.js +28 -7
  398. package/dist/editor/reviews/ReviewCard.js.map +1 -1
  399. package/dist/editor/reviews/ReviewDetail.js +39 -35
  400. package/dist/editor/reviews/ReviewDetail.js.map +1 -1
  401. package/dist/editor/reviews/ReviewItemsPanel.d.ts +1 -3
  402. package/dist/editor/reviews/ReviewItemsPanel.js +20 -56
  403. package/dist/editor/reviews/ReviewItemsPanel.js.map +1 -1
  404. package/dist/editor/reviews/ReviewersPanel.js +3 -3
  405. package/dist/editor/reviews/ReviewersPanel.js.map +1 -1
  406. package/dist/editor/reviews/ReviewsList.js +9 -74
  407. package/dist/editor/reviews/ReviewsList.js.map +1 -1
  408. package/dist/editor/reviews/SecretPhraseInput.d.ts +8 -0
  409. package/dist/editor/reviews/SecretPhraseInput.js +9 -0
  410. package/dist/editor/reviews/SecretPhraseInput.js.map +1 -0
  411. package/dist/editor/reviews/SuggestedEdit.js +36 -70
  412. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  413. package/dist/editor/reviews/SuggestionDisplayPopover.js +77 -58
  414. package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
  415. package/dist/editor/reviews/applySuggestedEditActions.d.ts +21 -0
  416. package/dist/editor/reviews/applySuggestedEditActions.js +242 -0
  417. package/dist/editor/reviews/applySuggestedEditActions.js.map +1 -0
  418. package/dist/editor/reviews/feedbackScrollTarget.js +3 -2
  419. package/dist/editor/reviews/feedbackScrollTarget.js.map +1 -1
  420. package/dist/editor/reviews/reviewListPresentation.d.ts +2 -0
  421. package/dist/editor/reviews/reviewListPresentation.js +11 -0
  422. package/dist/editor/reviews/reviewListPresentation.js.map +1 -1
  423. package/dist/editor/reviews/suggestedEditState.js +12 -1
  424. package/dist/editor/reviews/suggestedEditState.js.map +1 -1
  425. package/dist/editor/reviews/suggestionDisplayValue.d.ts +38 -1
  426. package/dist/editor/reviews/suggestionDisplayValue.js +99 -21
  427. package/dist/editor/reviews/suggestionDisplayValue.js.map +1 -1
  428. package/dist/editor/reviews/suggestionPatch.d.ts +10 -0
  429. package/dist/editor/reviews/suggestionPatch.js +17 -0
  430. package/dist/editor/reviews/suggestionPatch.js.map +1 -0
  431. package/dist/editor/reviews/useMultiReview.d.ts +1 -2
  432. package/dist/editor/reviews/useMultiReview.js +74 -65
  433. package/dist/editor/reviews/useMultiReview.js.map +1 -1
  434. package/dist/editor/services/contentService.d.ts +1 -9
  435. package/dist/editor/services/contentService.js +4 -1
  436. package/dist/editor/services/contentService.js.map +1 -1
  437. package/dist/editor/services/editService.d.ts +1 -0
  438. package/dist/editor/services/editService.js +12 -19
  439. package/dist/editor/services/editService.js.map +1 -1
  440. package/dist/editor/services/reviewsService.d.ts +1 -9
  441. package/dist/editor/services/reviewsService.js +1 -9
  442. package/dist/editor/services/reviewsService.js.map +1 -1
  443. package/dist/editor/services/suggestedEditsService.d.ts +17 -5
  444. package/dist/editor/services/suggestedEditsService.js +23 -5
  445. package/dist/editor/services/suggestedEditsService.js.map +1 -1
  446. package/dist/editor/services/systemService.d.ts +1 -2
  447. package/dist/editor/services/systemService.js +0 -3
  448. package/dist/editor/services/systemService.js.map +1 -1
  449. package/dist/editor/settings/About.js +6 -6
  450. package/dist/editor/settings/About.js.map +1 -1
  451. package/dist/editor/settings/IndexOverview.js +1 -1
  452. package/dist/editor/settings/IndexOverview.js.map +1 -1
  453. package/dist/editor/settings/QuotaInfo.js +5 -5
  454. package/dist/editor/settings/QuotaInfo.js.map +1 -1
  455. package/dist/editor/settings/SettingsBreadcrumb.js +1 -1
  456. package/dist/editor/settings/SettingsBreadcrumb.js.map +1 -1
  457. package/dist/editor/settings/SettingsView.js +3 -2
  458. package/dist/editor/settings/SettingsView.js.map +1 -1
  459. package/dist/editor/settings/StatusSummary.js +6 -6
  460. package/dist/editor/settings/StatusSummary.js.map +1 -1
  461. package/dist/editor/settings/index/EmbeddingProviderInfo.js +2 -2
  462. package/dist/editor/settings/index/EmbeddingProviderInfo.js.map +1 -1
  463. package/dist/editor/settings/index/QueueErrorsDisplay.d.ts +1 -1
  464. package/dist/editor/settings/index/QueueErrorsDisplay.js +7 -3
  465. package/dist/editor/settings/index/QueueErrorsDisplay.js.map +1 -1
  466. package/dist/editor/settings/index/embeddingErrors.d.ts +7 -0
  467. package/dist/editor/settings/index/embeddingErrors.js +105 -0
  468. package/dist/editor/settings/index/embeddingErrors.js.map +1 -0
  469. package/dist/editor/settings/index/types.d.ts +1 -0
  470. package/dist/editor/settings/index/useIndexStatus.js +2 -2
  471. package/dist/editor/settings/index/useIndexStatus.js.map +1 -1
  472. package/dist/editor/settings/panels/AgentProfileConfigPanel.js +6 -6
  473. package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -1
  474. package/dist/editor/settings/panels/AgentToolsPanel.js +3 -3
  475. package/dist/editor/settings/panels/AgentToolsPanel.js.map +1 -1
  476. package/dist/editor/settings/panels/AgentsPanel.js +2 -2
  477. package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
  478. package/dist/editor/settings/panels/ClusterInstancesPanel.js +3 -3
  479. package/dist/editor/settings/panels/ClusterInstancesPanel.js.map +1 -1
  480. package/dist/editor/settings/panels/CreateAgentProfileDialog.js +1 -1
  481. package/dist/editor/settings/panels/CreateAgentProfileDialog.js.map +1 -1
  482. package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js +1 -1
  483. package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js.map +1 -1
  484. package/dist/editor/settings/panels/CreateMcpServerDialog.js +1 -1
  485. package/dist/editor/settings/panels/CreateMcpServerDialog.js.map +1 -1
  486. package/dist/editor/settings/panels/FieldTypeSerializersPanel.js +2 -2
  487. package/dist/editor/settings/panels/FieldTypeSerializersPanel.js.map +1 -1
  488. package/dist/editor/settings/panels/GroupedFieldConfigPanel.js +1 -1
  489. package/dist/editor/settings/panels/GroupedFieldConfigPanel.js.map +1 -1
  490. package/dist/editor/settings/panels/ItemConfigPanel.js +1 -1
  491. package/dist/editor/settings/panels/ItemConfigPanel.js.map +1 -1
  492. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js +1 -1
  493. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js.map +1 -1
  494. package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js +5 -5
  495. package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js.map +1 -1
  496. package/dist/editor/settings/panels/JavaScriptToolsPanel.js +5 -5
  497. package/dist/editor/settings/panels/JavaScriptToolsPanel.js.map +1 -1
  498. package/dist/editor/settings/panels/McpToolsPanel.js +3 -3
  499. package/dist/editor/settings/panels/McpToolsPanel.js.map +1 -1
  500. package/dist/editor/settings/panels/ModelConfigPanel.js +6 -6
  501. package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -1
  502. package/dist/editor/settings/panels/ModelsPanel.js +4 -4
  503. package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
  504. package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js +16 -13
  505. package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js.map +1 -1
  506. package/dist/editor/settings/panels/PersistentLogsPanel.js +1 -1
  507. package/dist/editor/settings/panels/PersistentLogsPanel.js.map +1 -1
  508. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +2 -3
  509. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -1
  510. package/dist/editor/settings/panels/ProjectTemplateSelector.js +1 -1
  511. package/dist/editor/settings/panels/ProjectTemplateSelector.js.map +1 -1
  512. package/dist/editor/settings/panels/ProjectTemplateSelectorList.js +1 -1
  513. package/dist/editor/settings/panels/ProjectTemplateSelectorList.js.map +1 -1
  514. package/dist/editor/settings/panels/ProjectTemplatesPanel.js +13 -13
  515. package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
  516. package/dist/editor/settings/panels/ProviderConfigPanel.js +3 -3
  517. package/dist/editor/settings/panels/ProviderConfigPanel.js.map +1 -1
  518. package/dist/editor/settings/panels/ProvidersPanel.js +1 -1
  519. package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
  520. package/dist/editor/settings/panels/SearchConfigPanel.js +3 -3
  521. package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
  522. package/dist/editor/settings/panels/StatusPanel.js +5 -5
  523. package/dist/editor/settings/panels/StatusPanel.js.map +1 -1
  524. package/dist/editor/settings/panels/SystemSettingsPanel.js +1 -1
  525. package/dist/editor/settings/panels/SystemSettingsPanel.js.map +1 -1
  526. package/dist/editor/settings/panels/UserPreferencesPanel.js +1 -1
  527. package/dist/editor/settings/panels/UserPreferencesPanel.js.map +1 -1
  528. package/dist/editor/setup-wizard/SetupStepError.js +1 -1
  529. package/dist/editor/setup-wizard/SetupStepError.js.map +1 -1
  530. package/dist/editor/setup-wizard/SetupStepLayout.js +1 -1
  531. package/dist/editor/setup-wizard/SetupStepLayout.js.map +1 -1
  532. package/dist/editor/setup-wizard/steps/CompleteStep.js +2 -2
  533. package/dist/editor/setup-wizard/steps/CompleteStep.js.map +1 -1
  534. package/dist/editor/setup-wizard/steps/CreateSettingsStep.js +1 -1
  535. package/dist/editor/setup-wizard/steps/CreateSettingsStep.js.map +1 -1
  536. package/dist/editor/setup-wizard/steps/LicenseActivationStep.js +1 -1
  537. package/dist/editor/setup-wizard/steps/LicenseActivationStep.js.map +1 -1
  538. package/dist/editor/setup-wizard/steps/LicenseEmailStep.js +1 -1
  539. package/dist/editor/setup-wizard/steps/LicenseEmailStep.js.map +1 -1
  540. package/dist/editor/setup-wizard/steps/ModelSelectionStep.js +6 -12
  541. package/dist/editor/setup-wizard/steps/ModelSelectionStep.js.map +1 -1
  542. package/dist/editor/setup-wizard/steps/ProviderStep.js +6 -6
  543. package/dist/editor/setup-wizard/steps/ProviderStep.js.map +1 -1
  544. package/dist/editor/setup-wizard/steps/WelcomeStep.js +1 -1
  545. package/dist/editor/sidebar/Completions.js +1 -1
  546. package/dist/editor/sidebar/Completions.js.map +1 -1
  547. package/dist/editor/sidebar/ComponentPalette.js +1 -1
  548. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  549. package/dist/editor/sidebar/ComponentTree.js +11 -11
  550. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  551. package/dist/editor/sidebar/DictionaryEditor.js +48 -23
  552. package/dist/editor/sidebar/DictionaryEditor.js.map +1 -1
  553. package/dist/editor/sidebar/Favorites.js +5 -5
  554. package/dist/editor/sidebar/Favorites.js.map +1 -1
  555. package/dist/editor/sidebar/NavigationPanelItem.js +1 -1
  556. package/dist/editor/sidebar/NavigationPanelItem.js.map +1 -1
  557. package/dist/editor/sidebar/OperationItem.js +4 -4
  558. package/dist/editor/sidebar/OperationItem.js.map +1 -1
  559. package/dist/editor/sidebar/Sessions.js +14 -7
  560. package/dist/editor/sidebar/Sessions.js.map +1 -1
  561. package/dist/editor/sidebar/SidebarPanel.js +7 -5
  562. package/dist/editor/sidebar/SidebarPanel.js.map +1 -1
  563. package/dist/editor/sidebar/TimelineView.js +1 -1
  564. package/dist/editor/sidebar/TimelineView.js.map +1 -1
  565. package/dist/editor/sidebar/Validation.js +1 -1
  566. package/dist/editor/sidebar/Validation.js.map +1 -1
  567. package/dist/editor/sidebar/Workbox.js +1 -1
  568. package/dist/editor/sidebar/Workbox.js.map +1 -1
  569. package/dist/editor/template-wizard/TemplateBuilderDialog.js +1 -1
  570. package/dist/editor/template-wizard/TemplateBuilderDialog.js.map +1 -1
  571. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +10 -10
  572. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js.map +1 -1
  573. package/dist/editor/tree-indicators/GutterColumns.js +2 -2
  574. package/dist/editor/ui/ComponentThumbnailDialog.js +1 -1
  575. package/dist/editor/ui/ComponentThumbnailDialog.js.map +1 -1
  576. package/dist/editor/ui/IconSelectorDialog.js +1 -1
  577. package/dist/editor/ui/IconSelectorDialog.js.map +1 -1
  578. package/dist/editor/ui/Icons.d.ts +1 -1
  579. package/dist/editor/ui/Icons.js +7 -7
  580. package/dist/editor/ui/Icons.js.map +1 -1
  581. package/dist/editor/ui/ItemList.js +1 -1
  582. package/dist/editor/ui/ItemList.js.map +1 -1
  583. package/dist/editor/ui/PerfectTree.js +2 -2
  584. package/dist/editor/ui/PerfectTree.js.map +1 -1
  585. package/dist/editor/ui/PublishDialog.js +1 -1
  586. package/dist/editor/ui/PublishDialog.js.map +1 -1
  587. package/dist/editor/ui/PublishItemDialog.js +2 -2
  588. package/dist/editor/ui/PublishItemDialog.js.map +1 -1
  589. package/dist/editor/ui/PublishRestrictionsDialog.js +20 -11
  590. package/dist/editor/ui/PublishRestrictionsDialog.js.map +1 -1
  591. package/dist/editor/ui/Section.js +2 -2
  592. package/dist/editor/ui/Section.js.map +1 -1
  593. package/dist/editor/ui/SharedFolderSelectorDialog.js +17 -3
  594. package/dist/editor/ui/SharedFolderSelectorDialog.js.map +1 -1
  595. package/dist/editor/ui/SimpleTable.d.ts +3 -1
  596. package/dist/editor/ui/SimpleTable.js +3 -3
  597. package/dist/editor/ui/SimpleTable.js.map +1 -1
  598. package/dist/editor/ui/Spinner.js +1 -1
  599. package/dist/editor/ui/Spinner.js.map +1 -1
  600. package/dist/editor/ui/Splitter.js +3 -7
  601. package/dist/editor/ui/Splitter.js.map +1 -1
  602. package/dist/editor/ui/TemplateSelectorDialog.js +2 -2
  603. package/dist/editor/ui/TemplateSelectorDialog.js.map +1 -1
  604. package/dist/editor/ui/WorkboxItemsTable.js +2 -2
  605. package/dist/editor/ui/WorkboxItemsTable.js.map +1 -1
  606. package/dist/editor/utils.js +6 -0
  607. package/dist/editor/utils.js.map +1 -1
  608. package/dist/editor/version-diff/versionDiffTargets.js +2 -1
  609. package/dist/editor/version-diff/versionDiffTargets.js.map +1 -1
  610. package/dist/editor/views/EditorSlot.js +1 -1
  611. package/dist/editor/views/EditorSlot.js.map +1 -1
  612. package/dist/editor/views/ItemEditor.js +2 -2
  613. package/dist/editor/views/ItemEditor.js.map +1 -1
  614. package/dist/editor/views/SingleEditView.js +2 -2
  615. package/dist/index.d.ts +0 -1
  616. package/dist/index.js +0 -1
  617. package/dist/index.js.map +1 -1
  618. package/dist/licensing/EmailEntry.js +1 -1
  619. package/dist/licensing/EmailEntry.js.map +1 -1
  620. package/dist/licensing/FeatureGate.js +1 -1
  621. package/dist/licensing/LicenseActivationForm.js +1 -1
  622. package/dist/licensing/LicenseActivationForm.js.map +1 -1
  623. package/dist/licensing/LicenseCodeEntry.js +1 -1
  624. package/dist/licensing/LicenseCodeEntry.js.map +1 -1
  625. package/dist/licensing/LicenseOverlay.js +2 -2
  626. package/dist/licensing/LicenseOverlay.js.map +1 -1
  627. package/dist/revision.d.ts +2 -2
  628. package/dist/revision.js +2 -2
  629. package/dist/setup/services/setupWizardService.js +4 -1
  630. package/dist/setup/services/setupWizardService.js.map +1 -1
  631. package/dist/setup/wizard/steps/AddModelDialog.js +1 -1
  632. package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -1
  633. package/dist/setup/wizard/steps/ImportModelDialog.js +3 -3
  634. package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
  635. package/dist/splash-screen/ModernSplashScreen.d.ts +1 -1
  636. package/dist/splash-screen/ModernSplashScreen.js +11 -11
  637. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  638. package/dist/splash-screen/NewPage.js +3 -3
  639. package/dist/splash-screen/NewPage.js.map +1 -1
  640. package/dist/splash-screen/OpenPage.js +1 -1
  641. package/dist/splash-screen/OpenPage.js.map +1 -1
  642. package/dist/splash-screen/ParheliaAssistantChat.js +7 -7
  643. package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
  644. package/dist/splash-screen/RecentPages.js +1 -1
  645. package/dist/splash-screen/RecentPages.js.map +1 -1
  646. package/dist/task-board/TaskBoardWorkspace.js +1 -1
  647. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  648. package/dist/task-board/components/CommentsList.js +4 -4
  649. package/dist/task-board/components/CommentsList.js.map +1 -1
  650. package/dist/task-board/components/FinishedProjectCard.js +1 -1
  651. package/dist/task-board/components/FinishedProjectCard.js.map +1 -1
  652. package/dist/task-board/components/ItemCollectionEditorDialog.js +1 -1
  653. package/dist/task-board/components/ItemCollectionEditorDialog.js.map +1 -1
  654. package/dist/task-board/components/ItemCollectionPicker.js +1 -1
  655. package/dist/task-board/components/ItemCollectionPicker.js.map +1 -1
  656. package/dist/task-board/components/ProjectBudgetBanner.js +1 -1
  657. package/dist/task-board/components/ProjectBudgetBanner.js.map +1 -1
  658. package/dist/task-board/components/ProjectDashboard.js +4 -4
  659. package/dist/task-board/components/ProjectDashboard.js.map +1 -1
  660. package/dist/task-board/components/ProjectGoalsPanel.js +17 -13
  661. package/dist/task-board/components/ProjectGoalsPanel.js.map +1 -1
  662. package/dist/task-board/components/ProjectListContent.js +5 -5
  663. package/dist/task-board/components/ProjectListContent.js.map +1 -1
  664. package/dist/task-board/components/ProjectOverviewContent.js +4 -4
  665. package/dist/task-board/components/ProjectOverviewContent.js.map +1 -1
  666. package/dist/task-board/components/ProjectPropertiesPanel.js +5 -5
  667. package/dist/task-board/components/ProjectPropertiesPanel.js.map +1 -1
  668. package/dist/task-board/components/ProjectSettingsDialog.js +3 -3
  669. package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -1
  670. package/dist/task-board/components/TaskAgentPanel.js +4 -4
  671. package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
  672. package/dist/task-board/components/TaskAssigneePicker.js +4 -4
  673. package/dist/task-board/components/TaskAssigneePicker.js.map +1 -1
  674. package/dist/task-board/components/TaskAttachmentDropZone.js +3 -3
  675. package/dist/task-board/components/TaskAttachmentDropZone.js.map +1 -1
  676. package/dist/task-board/components/TaskAttachmentsSection.js +1 -1
  677. package/dist/task-board/components/TaskAttachmentsSection.js.map +1 -1
  678. package/dist/task-board/components/TaskBoardMyTasksSidebar.js +1 -1
  679. package/dist/task-board/components/TaskBoardMyTasksSidebar.js.map +1 -1
  680. package/dist/task-board/components/TaskBoardProjectListSidebar.js +4 -4
  681. package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
  682. package/dist/task-board/components/TaskBoardProjectSelector.js +1 -1
  683. package/dist/task-board/components/TaskBoardProjectSelector.js.map +1 -1
  684. package/dist/task-board/components/TaskBoardTitlebar.js +1 -1
  685. package/dist/task-board/components/TaskBoardTitlebar.js.map +1 -1
  686. package/dist/task-board/components/TaskCard.js +1 -1
  687. package/dist/task-board/components/TaskCard.js.map +1 -1
  688. package/dist/task-board/components/TaskDetailPanel.js +6 -6
  689. package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
  690. package/dist/task-board/components/TaskReviewActions.js +6 -6
  691. package/dist/task-board/components/TaskReviewActions.js.map +1 -1
  692. package/dist/task-board/components/TaskRow.js +1 -1
  693. package/dist/task-board/components/TaskRow.js.map +1 -1
  694. package/dist/task-board/components/TaskboardPersistentLogPanel.js +3 -3
  695. package/dist/task-board/components/TaskboardPersistentLogPanel.js.map +1 -1
  696. package/dist/task-board/components/WizardCommunicationCards.js +3 -3
  697. package/dist/task-board/components/WizardCommunicationCards.js.map +1 -1
  698. package/dist/task-board/components/WizardCommunicationCenter.js +1 -1
  699. package/dist/task-board/components/WizardCommunicationCenter.js.map +1 -1
  700. package/dist/task-board/components/WizardTaskDetailsPanel.js +3 -3
  701. package/dist/task-board/components/WizardTaskDetailsPanel.js.map +1 -1
  702. package/dist/task-board/views/DependencyGraphView.js +8 -8
  703. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  704. package/dist/task-board/views/WizardView.js +4 -4
  705. package/dist/task-board/views/WizardView.js.map +1 -1
  706. package/dist/tour/default-tour.js +17 -17
  707. package/dist/tour/default-tour.js.map +1 -1
  708. package/dist/tour/preview-tour.js +6 -6
  709. package/dist/tour/preview-tour.js.map +1 -1
  710. package/dist/types.d.ts +13 -5
  711. package/package.json +1 -1
  712. package/styles.css +25 -2
@@ -4,6 +4,7 @@ import { executeEditOperation, executeRedo, executeUndo, executeWorkflowCommand,
4
4
  import { DeleteItemsWarning } from "../DeleteItemsWarning";
5
5
  import React, { useCallback, useMemo, useRef, useState, } from "react";
6
6
  import { handleErrorResult } from "./helpers";
7
+ import { isMissingEditOperationResult } from "./editHistoryReconciliation";
7
8
  import { useDebouncedCallback } from "use-debounce";
8
9
  import { createOrUpdateSuggestedEdit, deleteSuggestedEdit, } from "../services/suggestedEditsService";
9
10
  import { hasSuggestionContentChange, shouldRemoveNoOpSuggestion, } from "../reviews/suggestionContentChange";
@@ -14,10 +15,10 @@ import { isWorkflowMetadataField } from "../workflowFields";
14
15
  import { ExternalChangesWarningContent, TreeOperationConfirmContent, UndoDifferentItemContent, } from "./OperationDialogContent";
15
16
  import { isSuggestedEditRemoved, markSuggestedEditRemoved, upsertSuggestedEdit, } from "../reviews/suggestedEditState";
16
17
  import { logFieldValueDiagnostic, summarizeFieldDescriptor, summarizeFieldValue, } from "../fieldValueDiagnostics";
18
+ import { getSuggestedEditItemLanguage, getSuggestedEditItemVersion, getSuggestionFieldIdentityKey, } from "../reviews/suggestionDisplayValue";
19
+ import { enqueueSuggestedEditFieldTask, waitForSuggestedEditFieldTasks, } from "./suggestedEditFieldQueue";
17
20
  /** When true, the delete dialog shows "permanently delete (bypass recycle bin)". */
18
21
  const ENABLE_HARD_DELETE_IN_DELETE_DIALOG = false;
19
- // Track pending suggested edit save requests to prevent race conditions
20
- const pendingSuggestedEditSaves = new Map();
21
22
  // Track pending suggested edits to prevent creating duplicates before server response
22
23
  const pendingSuggestedEdits = new Map();
23
24
  const SUGGESTED_EDIT_SAVE_DEBOUNCE_MS = 500;
@@ -79,28 +80,23 @@ function fieldsMatchForLock(left, right) {
79
80
  // Helper function to clean up pending operations for a deleted suggested edit
80
81
  export function cleanupPendingSuggestedEditOperations(suggestedEdit, user) {
81
82
  const userKey = user?.name || "unknown";
82
- const pendingFieldKey = `${suggestedEdit.itemId}:${suggestedEdit.mainItemLanguage}:${suggestedEdit.mainItemVersion}:${suggestedEdit.fieldId}:${userKey}`;
83
- const saveKey = `${suggestedEdit.itemId}:${suggestedEdit.mainItemLanguage}:${suggestedEdit.mainItemVersion}:${suggestedEdit.fieldId}`;
83
+ const pendingFieldKey = `${getSuggestionFieldIdentityKey({
84
+ itemId: suggestedEdit.itemId,
85
+ language: getSuggestedEditItemLanguage(suggestedEdit),
86
+ version: getSuggestedEditItemVersion(suggestedEdit),
87
+ fieldId: suggestedEdit.fieldId,
88
+ })}:${userKey}`;
84
89
  // Remove from pending operations
85
90
  pendingSuggestedEdits.delete(pendingFieldKey);
86
- pendingSuggestedEditSaves.delete(saveKey);
87
91
  }
88
92
  export async function waitForPendingSuggestedEditSave(suggestedEdit) {
89
- const saveKey = `${suggestedEdit.itemId}:${suggestedEdit.mainItemLanguage}:${suggestedEdit.mainItemVersion}:${suggestedEdit.fieldId}`;
90
- const pendingSave = pendingSuggestedEditSaves.get(saveKey);
91
- if (!pendingSave)
92
- return;
93
- try {
94
- await pendingSave;
95
- }
96
- catch (error) {
97
- console.warn("Pending suggested edit save failed before apply:", error);
98
- }
99
- finally {
100
- if (pendingSuggestedEditSaves.get(saveKey) === pendingSave) {
101
- pendingSuggestedEditSaves.delete(saveKey);
102
- }
103
- }
93
+ const saveKey = getSuggestionFieldIdentityKey({
94
+ itemId: suggestedEdit.itemId,
95
+ language: getSuggestedEditItemLanguage(suggestedEdit),
96
+ version: getSuggestedEditItemVersion(suggestedEdit),
97
+ fieldId: suggestedEdit.fieldId,
98
+ });
99
+ await waitForSuggestedEditFieldTasks(saveKey);
104
100
  }
105
101
  export function getOperationsContext(state, ui) {
106
102
  const [editOperationExecuted, setEditOperationExecuted] = useState();
@@ -286,10 +282,10 @@ export function getOperationsContext(state, ui) {
286
282
  throw new Error("Failed to update personalization rules");
287
283
  }
288
284
  }, [executeOp]);
289
- const updateRenderingRules = useCallback(async (componentId, rules) => {
290
- const pageItem = stateRef.current.page?.item?.descriptor;
285
+ const updateRenderingRules = useCallback(async (componentId, rules, targetPageItem) => {
286
+ const pageItem = targetPageItem ?? stateRef.current.page?.item?.descriptor;
291
287
  if (!pageItem) {
292
- return;
288
+ throw new Error("Cannot update personalization without a page item");
293
289
  }
294
290
  const op = {
295
291
  type: "update-rendering-rules",
@@ -302,7 +298,10 @@ export function getOperationsContext(state, ui) {
302
298
  };
303
299
  // waitForQuietPeriod debounces the iframe refresh so rapid auto-saves
304
300
  // (typing in a parameter input) don't make the page flicker on every keystroke.
305
- await executeOp(op, { refresh: "waitForQuietPeriod" });
301
+ const result = await executeOp(op, { refresh: "waitForQuietPeriod" });
302
+ if (result.executionStatus === "failed") {
303
+ throw new Error("Failed to update personalization rules");
304
+ }
306
305
  }, [executeOp]);
307
306
  const handleResult = (result, options) => {
308
307
  if (handleErrorResult(result, ui, stateRef.current)) {
@@ -480,6 +479,9 @@ export function getOperationsContext(state, ui) {
480
479
  }, [itemsRepository, executeOp]);
481
480
  const lastEditField = useRef(undefined);
482
481
  const pendingFieldSaves = useRef(new Map());
482
+ const fieldEditGeneration = useRef(0);
483
+ const completedFieldSaveGeneration = useRef(0);
484
+ const latestSavedFieldEditOperationId = useRef(undefined);
483
485
  const getFieldSaveKey = (field) => {
484
486
  const database = field.item.database || "master";
485
487
  return `${field.item.id}:${field.item.language}:${field.item.version}:${database}:${field.fieldId}`.toLowerCase();
@@ -524,10 +526,17 @@ export function getOperationsContext(state, ui) {
524
526
  originatingSlotId,
525
527
  undoing: undoing.current,
526
528
  });
529
+ fieldEditGeneration.current += 1;
527
530
  if (effectiveMode === "suggestions" &&
528
531
  (stateRef.current.page || stateRef.current.currentItemDescriptor)) {
529
532
  // Create a unique key for this field to track pending saves
530
- const fieldKey = `${field.item.id}:${field.item.language}:${field.item.version}:${field.fieldId}`;
533
+ const fieldKey = getSuggestionFieldIdentityKey({
534
+ itemId: field.item.id,
535
+ language: field.item.language,
536
+ version: field.item.version,
537
+ fieldId: field.fieldId,
538
+ });
539
+ const pendingFieldKey = `${fieldKey}:${stateRef.current.user?.name || "unknown"}`;
531
540
  const op = await getOrMergeSuggestedEditOp(field, rawValue, value, {
532
541
  page: stateRef.current.page,
533
542
  currentItemDescriptor: stateRef.current.currentItemDescriptor,
@@ -550,26 +559,12 @@ export function getOperationsContext(state, ui) {
550
559
  });
551
560
  // Keep local suggestion state in step with typing immediately, then
552
561
  // serialize persistence behind any in-flight save for this field.
553
- const existingPromise = pendingSuggestedEditSaves.get(fieldKey);
554
- if (existingPromise) {
555
- try {
556
- await existingPromise;
557
- }
558
- catch (error) {
559
- // Continue processing even if the previous save failed
560
- console.warn("Previous suggested edit save failed:", error);
561
- }
562
- // Clean up any stale entries that may not have been properly removed
563
- if (pendingSuggestedEditSaves.get(fieldKey) === existingPromise) {
564
- pendingSuggestedEditSaves.delete(fieldKey);
565
- }
566
- }
567
562
  // Create and track the save promise. useDebouncedCallback can return
568
563
  // undefined before the trailing call runs, so this path uses a real
569
564
  // promise that resolves after the delayed save completes.
570
565
  const saveSnapshot = { ...op };
571
566
  const expectedNewValue = saveSnapshot.newValue;
572
- const savePromise = createDelayedSuggestedEditSave(saveSnapshot)
567
+ const savePromise = enqueueSuggestedEditFieldTask(fieldKey, () => createDelayedSuggestedEditSave(saveSnapshot))
573
568
  .then((result) => {
574
569
  // Update the suggested edits state with the result from the server
575
570
  if (result.type === "success" && result.data) {
@@ -589,6 +584,18 @@ export function getOperationsContext(state, ui) {
589
584
  source: "save-ack",
590
585
  }));
591
586
  }
587
+ else if (result.type === "conflict") {
588
+ if (result.suggestion) {
589
+ stateRef.current.setSuggestedEdits((current) => upsertSuggestedEdit(current, result.suggestion, {
590
+ source: "save-ack",
591
+ }));
592
+ if (result.suggestion.status !== "pending" &&
593
+ pendingSuggestedEdits.get(pendingFieldKey)?.id ===
594
+ result.suggestion.id) {
595
+ pendingSuggestedEdits.delete(pendingFieldKey);
596
+ }
597
+ }
598
+ }
592
599
  else if (result.type === "error" ||
593
600
  result.type === "unauthorized") {
594
601
  // Show error toast for failed suggested edit save — unless the
@@ -605,20 +612,14 @@ export function getOperationsContext(state, ui) {
605
612
  return result;
606
613
  })
607
614
  .finally(() => {
608
- // Remove from pending saves when complete
609
- if (pendingSuggestedEditSaves.get(fieldKey) === savePromise) {
610
- pendingSuggestedEditSaves.delete(fieldKey);
611
- }
612
615
  // Also remove from pending edits once this exact value is
613
616
  // persisted. If the user typed again, keep the newer draft.
614
- const pendingFieldKey = `${field.item.id}:${field.item.language}:${field.item.version}:${field.fieldId}:${stateRef.current.user?.name || "unknown"}`;
615
617
  const pendingEdit = pendingSuggestedEdits.get(pendingFieldKey);
616
618
  if (pendingEdit?.id === saveSnapshot.id &&
617
619
  pendingEdit.newValue === saveSnapshot.newValue) {
618
620
  pendingSuggestedEdits.delete(pendingFieldKey);
619
621
  }
620
622
  });
621
- pendingSuggestedEditSaves.set(fieldKey, savePromise);
622
623
  await savePromise;
623
624
  }
624
625
  logFieldValueDiagnostic("operations", "suggestions edit complete", {
@@ -747,6 +748,10 @@ export function getOperationsContext(state, ui) {
747
748
  isWorkflowMetadataField(op.fieldId, op.fieldName)) {
748
749
  refreshWorkboxAfterWorkflowChange();
749
750
  }
751
+ if (result.executionStatus !== "failed") {
752
+ latestSavedFieldEditOperationId.current = op.id;
753
+ completedFieldSaveGeneration.current += 1;
754
+ }
750
755
  itemsRepository.onFieldSaved(field, val, saveSequence || 0, fieldModificationStore);
751
756
  }
752
757
  catch (error) {
@@ -784,6 +789,20 @@ export function getOperationsContext(state, ui) {
784
789
  fieldModificationStore,
785
790
  }));
786
791
  }, stateRef.current.configuration.debounceFieldEditsInterval * 2, { trailing: true });
792
+ const flushPendingFieldEdits = useCallback(async () => {
793
+ const completedGenerationBeforeFlush = completedFieldSaveGeneration.current;
794
+ const hadPendingDebouncedEdit = executeEditFieldDebounced.isPending();
795
+ if (hadPendingDebouncedEdit) {
796
+ await executeEditFieldDebounced.flush();
797
+ }
798
+ const inFlightSaves = Array.from(pendingFieldSaves.current.values());
799
+ if (inFlightSaves.length > 0) {
800
+ await Promise.allSettled(inFlightSaves);
801
+ }
802
+ return completedFieldSaveGeneration.current > completedGenerationBeforeFlush
803
+ ? latestSavedFieldEditOperationId.current
804
+ : undefined;
805
+ }, [executeEditFieldDebounced]);
787
806
  // Note: We intentionally keep a single save debounce window here.
788
807
  async function getEditOP(field, rawValue, value) {
789
808
  const item = await itemsRepository.getItem(field.item);
@@ -852,10 +871,14 @@ export function getOperationsContext(state, ui) {
852
871
  const result = await executeUndo(stateRef.current.sessionId, ops.map((x) => x.id));
853
872
  // Update state only AFTER API call completes - no optimistic update
854
873
  // This ensures the UI only changes when the operation truly completes
855
- handleResult(result, { refresh: "immediate" });
874
+ const operationWasRemoved = isMissingEditOperationResult(result);
875
+ if (!operationWasRemoved) {
876
+ handleResult(result, { refresh: "immediate" });
877
+ }
856
878
  if (result.type === "success") {
857
- for (const op of ops) {
858
- recentlyUndoneIds.current.add(op.id);
879
+ for (const executedOp of result.data) {
880
+ recentlyUndoneIds.current.add(executedOp.id);
881
+ recentlyRedoneIds.current.delete(executedOp.id);
859
882
  }
860
883
  // Check if any operations are executing in background (long-running undo)
861
884
  const executingOps = result.data.filter((x) => x.executionStatus === "executing");
@@ -892,18 +915,11 @@ export function getOperationsContext(state, ui) {
892
915
  .flat()
893
916
  .filter((x) => x != null);
894
917
  await itemsRepository.refreshItems(itemsToRefresh);
895
- // NOTE: We no longer call requestRefresh here because handleResult (line 716) already
896
- // triggers an immediate refresh. Calling it again caused duplicate/flooding refreshes
897
- // which overwhelmed the iframe's requestRefresh and caused race conditions.
898
- // The handleResult refresh combined with itemsRepository.refreshItems above is sufficient.
918
+ // handleResult already triggers the single immediate page refresh.
919
+ // Avoid a second request here, which can flood a busy rendering host.
899
920
  return true;
900
921
  }
901
922
  else {
902
- ui.showErrorToast({
903
- summary: result.summary,
904
- details: result.details,
905
- rawDetails: result.rawDetails,
906
- });
907
923
  // Refresh history so toolbar state matches server (fixes inconsistent UI under load)
908
924
  stateRef.current.refreshHistory?.(stateRef.current.historyMode, stateRef.current.showOnlyMyChanges);
909
925
  return false;
@@ -953,6 +969,10 @@ export function getOperationsContext(state, ui) {
953
969
  }
954
970
  undoing.current = true;
955
971
  try {
972
+ const pendingFieldOperationId = await flushPendingFieldEdits();
973
+ if (pendingFieldOperationId) {
974
+ operationId = pendingFieldOperationId;
975
+ }
956
976
  const currentItem = stateRef.current.item?.descriptor;
957
977
  const filterBySession = stateRef.current.showOnlyMyChanges;
958
978
  const historyMode = stateRef.current.historyMode;
@@ -1181,14 +1201,20 @@ export function getOperationsContext(state, ui) {
1181
1201
  undoing.current = false;
1182
1202
  console.log("undoing flag reset");
1183
1203
  }
1184
- }, [ui, executeUndoOperation]);
1204
+ }, [ui, executeUndoOperation, flushPendingFieldEdits]);
1185
1205
  const executeRedoOperation = useCallback(async (op) => {
1186
1206
  const result = await executeRedo(stateRef.current.sessionId, op.id);
1187
1207
  // NOTE: We no longer update editHistory here. The single source of truth is EditorShell,
1188
1208
  // which merges server responses + websocket updates while enforcing scope filtering.
1189
- handleResult(result, { refresh: "immediate" });
1209
+ const operationWasRemoved = isMissingEditOperationResult(result);
1210
+ if (!operationWasRemoved) {
1211
+ handleResult(result, { refresh: "immediate" });
1212
+ }
1190
1213
  if (result.type === "success") {
1191
- recentlyRedoneIds.current.add(op.id);
1214
+ for (const executedOp of result.data) {
1215
+ recentlyRedoneIds.current.add(executedOp.id);
1216
+ recentlyUndoneIds.current.delete(executedOp.id);
1217
+ }
1192
1218
  // Check if the operation is executing in background (long-running redo)
1193
1219
  const executingOps = result.data.filter((x) => x.executionStatus === "executing");
1194
1220
  if (executingOps.length > 0) {
@@ -1217,11 +1243,6 @@ export function getOperationsContext(state, ui) {
1217
1243
  return true;
1218
1244
  }
1219
1245
  else {
1220
- ui.showErrorToast({
1221
- summary: result.summary,
1222
- details: result.details,
1223
- rawDetails: result.rawDetails,
1224
- });
1225
1246
  stateRef.current.refreshHistory?.(stateRef.current.historyMode, stateRef.current.showOnlyMyChanges);
1226
1247
  return false;
1227
1248
  }
@@ -1237,6 +1258,7 @@ export function getOperationsContext(state, ui) {
1237
1258
  }
1238
1259
  undoing.current = true;
1239
1260
  try {
1261
+ await flushPendingFieldEdits();
1240
1262
  const currentItem = stateRef.current.item?.descriptor;
1241
1263
  if (!currentItem)
1242
1264
  return false;
@@ -1410,7 +1432,7 @@ export function getOperationsContext(state, ui) {
1410
1432
  // Always reset the flag
1411
1433
  undoing.current = false;
1412
1434
  }
1413
- }, [ui, itemsRepository, executeRedoOperation]);
1435
+ }, [ui, itemsRepository, executeRedoOperation, flushPendingFieldEdits]);
1414
1436
  const deleteItems = useCallback(async (items, options) => {
1415
1437
  if (items.length === 0)
1416
1438
  return;
@@ -1689,10 +1711,23 @@ export function getOperationsContext(state, ui) {
1689
1711
  return result;
1690
1712
  }, [executeOp]);
1691
1713
  const onFieldBlur = useCallback(() => {
1714
+ const editGenerationAtBlur = fieldEditGeneration.current;
1715
+ const pendingSave = executeEditFieldDebounced.isPending()
1716
+ ? executeEditFieldDebounced.flush()
1717
+ : undefined;
1718
+ if (pendingSave) {
1719
+ void Promise.resolve(pendingSave).finally(() => {
1720
+ // Preserve a newer edit that started while the blurred field was saving.
1721
+ if (fieldEditGeneration.current === editGenerationAtBlur) {
1722
+ lastOp.current = undefined;
1723
+ }
1724
+ });
1725
+ return;
1726
+ }
1692
1727
  // Reset the last operation to force creation of a new operation
1693
- // when the user returns to edit any field after losing focus
1728
+ // when the user returns to edit any field after losing focus.
1694
1729
  lastOp.current = undefined;
1695
- }, []);
1730
+ }, [executeEditFieldDebounced]);
1696
1731
  // Extract state values to avoid object reference changes
1697
1732
  const mode = stateRef.current.mode;
1698
1733
  const page = stateRef.current.page;
@@ -1810,18 +1845,12 @@ function removeSuggestedEditFromState(edit, state, keys) {
1810
1845
  // removal is settling (e.g. an edit queued behind the in-flight save) would
1811
1846
  // otherwise fire after an early release and resurrect the suggestion.
1812
1847
  markSuggestedEditRemoved(edit.id);
1813
- // The saves map is keyed by the field's own item descriptor (which can have
1814
- // a different version/language than the page the suggestion is stored
1815
- // under), so the caller passes the exact keys it used.
1816
- const pendingSave = pendingSuggestedEditSaves.get(keys.saveKey);
1817
1848
  pendingSuggestedEdits.delete(keys.pendingFieldKey);
1818
1849
  cleanupPendingSuggestedEditOperations(edit, state.user);
1819
1850
  state.setSuggestedEdits((current) => current.filter((candidate) => candidate.id !== edit.id));
1820
1851
  // Delete on the server only after any in-flight save settles, otherwise the
1821
1852
  // delete can race ahead of a pending create and the suggestion comes back.
1822
- void Promise.resolve(pendingSave)
1823
- .catch(() => undefined)
1824
- .then(() => deleteSuggestedEdit(edit))
1853
+ void enqueueSuggestedEditFieldTask(keys.saveKey, () => deleteSuggestedEdit(edit))
1825
1854
  .then((result) => {
1826
1855
  if (result.type !== "success") {
1827
1856
  console.warn("Failed to delete no-op suggestion:", result.summary, result.details);
@@ -1856,7 +1885,12 @@ async function getOrMergeSuggestedEditOp(field, rawValue, value, state) {
1856
1885
  // key format as editField (the field's own item descriptor — NOT the
1857
1886
  // suggestion's mainItem fields, which hold the page's language/version and
1858
1887
  // diverge for datasource items).
1859
- const saveKey = `${field.item.id}:${field.item.language}:${field.item.version}:${field.fieldId}`;
1888
+ const saveKey = getSuggestionFieldIdentityKey({
1889
+ itemId: field.item.id,
1890
+ language: field.item.language,
1891
+ version: field.item.version,
1892
+ fieldId: field.fieldId,
1893
+ });
1860
1894
  const fieldKey = `${saveKey}:${state.user?.name || "unknown"}`;
1861
1895
  const shouldRemoveAsNoOp = (edit, nextValue) =>
1862
1896
  // Comments load asynchronously; deleting on the strength of a not-yet-
@@ -1888,6 +1922,8 @@ async function getOrMergeSuggestedEditOp(field, rawValue, value, state) {
1888
1922
  // Update the pending edit instead of creating a new one.
1889
1923
  const updatedEdit = {
1890
1924
  ...pendingEdit,
1925
+ itemLanguage: field.item.language,
1926
+ itemVersion: field.item.version,
1891
1927
  newValue: nextValue,
1892
1928
  updated: new Date().toISOString(),
1893
1929
  updatedBy: state.user?.name || "unknown",
@@ -1899,6 +1935,9 @@ async function getOrMergeSuggestedEditOp(field, rawValue, value, state) {
1899
1935
  const matchingSuggestions = state.suggestedEdits.filter((edit) => edit.mainItemId === pageDescriptor.id &&
1900
1936
  edit.mainItemLanguage === pageDescriptor.language &&
1901
1937
  edit.itemId === item.id &&
1938
+ getSuggestedEditItemLanguage(edit) === field.item.language &&
1939
+ (getSuggestedEditItemVersion(edit) === 0 ||
1940
+ getSuggestedEditItemVersion(edit) === field.item.version) &&
1902
1941
  edit.fieldId === field.fieldId);
1903
1942
  // Attempt to find an existing suggested edit by the same user for this field.
1904
1943
  // Tombstoned ids are skipped: the state snapshot can still contain a
@@ -1908,6 +1947,9 @@ async function getOrMergeSuggestedEditOp(field, rawValue, value, state) {
1908
1947
  edit.mainItemLanguage === pageDescriptor.language &&
1909
1948
  edit.mainItemVersion === pageDescriptor.version &&
1910
1949
  edit.itemId === item.id &&
1950
+ getSuggestedEditItemLanguage(edit) === field.item.language &&
1951
+ (getSuggestedEditItemVersion(edit) === 0 ||
1952
+ getSuggestedEditItemVersion(edit) === field.item.version) &&
1911
1953
  edit.fieldId === field.fieldId &&
1912
1954
  edit.author === (state.user?.name || "unknown") &&
1913
1955
  edit.status === "pending" && // or any status that indicates it's open for further editing.
@@ -1924,6 +1966,8 @@ async function getOrMergeSuggestedEditOp(field, rawValue, value, state) {
1924
1966
  // Update the existing suggestion.
1925
1967
  const updatedEdit = {
1926
1968
  ...existing,
1969
+ itemLanguage: field.item.language,
1970
+ itemVersion: field.item.version,
1927
1971
  newValue: nextValue,
1928
1972
  updated: new Date().toISOString(),
1929
1973
  updatedBy: state.user?.name || "unknown",
@@ -1944,6 +1988,8 @@ async function getOrMergeSuggestedEditOp(field, rawValue, value, state) {
1944
1988
  mainItemLanguage: pageDescriptor.language,
1945
1989
  mainItemVersion: pageDescriptor.version,
1946
1990
  itemId: item.id,
1991
+ itemLanguage: field.item.language,
1992
+ itemVersion: field.item.version,
1947
1993
  fieldId: field.fieldId,
1948
1994
  oldValue: fieldItem.rawValue || "",
1949
1995
  newValue: newVal || "",