@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.
- package/dist/agents-view/AgentCard.js +7 -9
- package/dist/agents-view/AgentCard.js.map +1 -1
- package/dist/agents-view/AgentGalleryView.js +4 -4
- package/dist/agents-view/AgentGalleryView.js.map +1 -1
- package/dist/agents-view/AgentProfileIcon.js +1 -8
- package/dist/agents-view/AgentProfileIcon.js.map +1 -1
- package/dist/agents-view/AgentsWorkspaceView.js +2 -2
- package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
- package/dist/agents-view/RenameAgentDialog.js +1 -1
- package/dist/agents-view/RenameAgentDialog.js.map +1 -1
- package/dist/components/MarkdownViewerPopover.js +3 -3
- package/dist/components/MarkdownViewerPopover.js.map +1 -1
- package/dist/components/WorkspaceHomeView.js +1 -1
- package/dist/components/WorkspaceHomeView.js.map +1 -1
- package/dist/components/ui/LanguageSelector.js +1 -1
- package/dist/components/ui/LanguageSelector.js.map +1 -1
- package/dist/components/ui/PlaceholderInput.js +1 -1
- package/dist/components/ui/PlaceholderItemSelector.js +1 -1
- package/dist/components/ui/PlaceholderItemSelector.js.map +1 -1
- package/dist/components/ui/UserPicker.js +2 -2
- package/dist/components/ui/UserPicker.js.map +1 -1
- package/dist/components/ui/accordion.js +1 -1
- package/dist/components/ui/accordion.js.map +1 -1
- package/dist/components/ui/breadcrumb.js +2 -2
- package/dist/components/ui/breadcrumb.js.map +1 -1
- package/dist/components/ui/calendar.js +3 -3
- package/dist/components/ui/calendar.js.map +1 -1
- package/dist/components/ui/card.js +2 -2
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/checkbox.js +1 -1
- package/dist/components/ui/checkbox.js.map +1 -1
- package/dist/components/ui/context-menu.js +3 -3
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/delete-icon.js +1 -1
- package/dist/components/ui/delete-icon.js.map +1 -1
- package/dist/components/ui/dropdown-menu.js +4 -4
- package/dist/components/ui/dropdown-menu.js.map +1 -1
- package/dist/components/ui/mention-textarea.js +2 -2
- package/dist/components/ui/mention-textarea.js.map +1 -1
- package/dist/components/ui/multi-switch-button.js +1 -1
- package/dist/components/ui/multi-switch-button.js.map +1 -1
- package/dist/components/ui/upload-button.js +1 -1
- package/dist/components/ui/upload-button.js.map +1 -1
- package/dist/config/config.js +29 -18
- package/dist/config/config.js.map +1 -1
- package/dist/editor/AdminRequiredView.js +1 -1
- package/dist/editor/AdminRequiredView.js.map +1 -1
- package/dist/editor/ConcurrentUserLimitDialog.d.ts +2 -1
- package/dist/editor/ConcurrentUserLimitDialog.js +26 -11
- package/dist/editor/ConcurrentUserLimitDialog.js.map +1 -1
- package/dist/editor/ConfirmationDialog.js +1 -1
- package/dist/editor/ContentTree.js +2 -2
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/ContextMenu.js +36 -6
- package/dist/editor/ContextMenu.js.map +1 -1
- package/dist/editor/DeleteItemsWarning.js +2 -2
- package/dist/editor/DeleteItemsWarning.js.map +1 -1
- package/dist/editor/Editor.js +49 -4
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/EditorWarning.js +1 -1
- package/dist/editor/EditorWarning.js.map +1 -1
- package/dist/editor/FieldActionsOverlay.js +1 -1
- package/dist/editor/FieldActionsOverlay.js.map +1 -1
- package/dist/editor/FieldHistory.js +7 -7
- package/dist/editor/FieldHistory.js.map +1 -1
- package/dist/editor/FieldList.js +45 -4
- package/dist/editor/FieldList.js.map +1 -1
- package/dist/editor/FieldListField.js +5 -3
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/FieldListFieldWithFallbacks.js +1 -1
- package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
- package/dist/editor/MainLayout.js +3 -6
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/MigrationsView.js +6 -6
- package/dist/editor/MigrationsView.js.map +1 -1
- package/dist/editor/PictureCropper.js +2 -2
- package/dist/editor/PictureCropper.js.map +1 -1
- package/dist/editor/SetupWizard.js +1 -1
- package/dist/editor/SetupWizard.js.map +1 -1
- package/dist/editor/UsedBy.js +2 -2
- package/dist/editor/UsedBy.js.map +1 -1
- package/dist/editor/WorkspaceTitleSwitcher.js +3 -3
- package/dist/editor/WorkspaceTitleSwitcher.js.map +1 -1
- package/dist/editor/ai/AgentProfileSelector.js +4 -4
- package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
- package/dist/editor/ai/AgentSharingSection.js +6 -6
- package/dist/editor/ai/AgentSharingSection.js.map +1 -1
- package/dist/editor/ai/Agents.js +3 -3
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/ContentInspectorPopover.js +2 -2
- package/dist/editor/ai/ContentInspectorPopover.js.map +1 -1
- package/dist/editor/ai/GuidanceOverlay.js +1 -1
- package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
- package/dist/editor/ai/HeartbeatDiagnosticsPanel.js +5 -19
- package/dist/editor/ai/HeartbeatDiagnosticsPanel.js.map +1 -1
- package/dist/editor/ai/InlineAiDialog.d.ts +13 -0
- package/dist/editor/ai/InlineAiDialog.js +52 -14
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/InlineAiTrigger.js +1 -1
- package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
- package/dist/editor/ai/bridgeInlineTextReplace.d.ts +16 -0
- package/dist/editor/ai/bridgeInlineTextReplace.js +31 -0
- package/dist/editor/ai/bridgeInlineTextReplace.js.map +1 -0
- package/dist/editor/ai/dialogs/ComponentTypeSelectorInline.js +2 -2
- package/dist/editor/ai/dialogs/ComponentTypeSelectorInline.js.map +1 -1
- package/dist/editor/ai/dialogs/QuestionnaireInline.js +3 -3
- package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
- package/dist/editor/ai/inlineAiTextEditLabels.d.ts +1 -1
- package/dist/editor/ai/inlineAiTextEditLabels.js +1 -1
- package/dist/editor/ai/terminal/components/ActivitySummaryCell.js +4 -4
- package/dist/editor/ai/terminal/components/ActivitySummaryCell.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js +7 -7
- package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentContextItemPicker.js +1 -1
- package/dist/editor/ai/terminal/components/AgentContextItemPicker.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentDocumentList.js +3 -3
- package/dist/editor/ai/terminal/components/AgentDocumentList.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js +1 -1
- package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentGreeting.js +2 -2
- package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentMemoryPanel.js +2 -2
- package/dist/editor/ai/terminal/components/AgentMemoryPanel.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentModeSelector.js +2 -2
- package/dist/editor/ai/terminal/components/AgentModeSelector.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentParentLink.js +1 -1
- package/dist/editor/ai/terminal/components/AgentParentLink.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentProjectProgress.js +1 -1
- package/dist/editor/ai/terminal/components/AgentProjectProgress.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +5 -5
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentReadOnlyNotice.js +1 -1
- package/dist/editor/ai/terminal/components/AgentReadOnlyNotice.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentSettingsPopover.js +1 -1
- package/dist/editor/ai/terminal/components/AgentSettingsPopover.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentSettingsSections.js +4 -2
- package/dist/editor/ai/terminal/components/AgentSettingsSections.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js +2 -2
- package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentSuggestionBanner.js +1 -1
- package/dist/editor/ai/terminal/components/AgentSuggestionBanner.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +3 -3
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/terminal/components/AiResponseMessage.js +11 -14
- package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/ApprovalCard.js +3 -4
- package/dist/editor/ai/terminal/components/ApprovalCard.js.map +1 -1
- package/dist/editor/ai/terminal/components/ContextInfoBar.js +1 -1
- package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
- package/dist/editor/ai/terminal/components/EditOperationsPanel.js +2 -2
- package/dist/editor/ai/terminal/components/EditOperationsPanel.js.map +1 -1
- package/dist/editor/ai/terminal/components/HeartbeatMessage.js +1 -1
- package/dist/editor/ai/terminal/components/HeartbeatMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/QuestionnaireRecap.js +2 -2
- package/dist/editor/ai/terminal/components/QuestionnaireRecap.js.map +1 -1
- package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js +4 -4
- package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js.map +1 -1
- package/dist/editor/ai/terminal/components/TodoListPanel.js +4 -4
- package/dist/editor/ai/terminal/components/TodoListPanel.js.map +1 -1
- package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +9 -0
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js +63 -22
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai/terminal/components/UserMessage.js +10 -6
- package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTextareaDropHandlers.js +35 -7
- package/dist/editor/ai/terminal/useAgentTextareaDropHandlers.js.map +1 -1
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js +5 -5
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
- package/dist/editor/ai-image-editor/AiImageResultOverlay.js +1 -1
- package/dist/editor/bridge/protocol.d.ts +12 -0
- package/dist/editor/bridge/protocol.js +1 -1
- package/dist/editor/bridge/protocol.js.map +1 -1
- package/dist/editor/client/AboutDialog.js +1 -1
- package/dist/editor/client/AboutDialog.js.map +1 -1
- package/dist/editor/client/EditorShell.js +103 -51
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/agentTerminalFocus.d.ts +1 -1
- package/dist/editor/client/agentTerminalFocus.js +1 -1
- package/dist/editor/client/agentTerminalFocus.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +4 -1
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/editHistoryReconciliation.d.ts +10 -0
- package/dist/editor/client/editHistoryReconciliation.js +25 -0
- package/dist/editor/client/editHistoryReconciliation.js.map +1 -0
- package/dist/editor/client/errorToast.js +1 -1
- package/dist/editor/client/errorToast.js.map +1 -1
- package/dist/editor/client/hooks/useEditorWebSocket.d.ts +4 -3
- package/dist/editor/client/hooks/useEditorWebSocket.js +265 -64
- package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.d.ts +1 -0
- package/dist/editor/client/hooks/useSocketMessageHandler.js +44 -11
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/operations.d.ts +1 -1
- package/dist/editor/client/operations.js +123 -77
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/pageModelBuilder.js +11 -6
- package/dist/editor/client/pageModelBuilder.js.map +1 -1
- package/dist/editor/client/sessionIdClaim.d.ts +22 -0
- package/dist/editor/client/sessionIdClaim.js +77 -0
- package/dist/editor/client/sessionIdClaim.js.map +1 -0
- package/dist/editor/client/sidebarAvailability.d.ts +9 -0
- package/dist/editor/client/sidebarAvailability.js +29 -0
- package/dist/editor/client/sidebarAvailability.js.map +1 -0
- package/dist/editor/client/suggestedEditFieldQueue.d.ts +2 -0
- package/dist/editor/client/suggestedEditFieldQueue.js +16 -0
- package/dist/editor/client/suggestedEditFieldQueue.js.map +1 -0
- package/dist/editor/client/ui/FullscreenControls.js +1 -1
- package/dist/editor/client/ui/FullscreenControls.js.map +1 -1
- package/dist/editor/client/waitForEditOperationTerminal.d.ts +2 -0
- package/dist/editor/client/waitForEditOperationTerminal.js +73 -9
- package/dist/editor/client/waitForEditOperationTerminal.js.map +1 -1
- package/dist/editor/commands/componentCommands.js +17 -15
- package/dist/editor/commands/componentCommands.js.map +1 -1
- package/dist/editor/commands/deleteVersionCommand.js +1 -1
- package/dist/editor/commands/deleteVersionCommand.js.map +1 -1
- package/dist/editor/commands/itemCommands.js +64 -9
- package/dist/editor/commands/itemCommands.js.map +1 -1
- package/dist/editor/commands/placeholderCommands.js +1 -1
- package/dist/editor/commands/placeholderCommands.js.map +1 -1
- package/dist/editor/content-tree/IndicatorSettings.js +2 -2
- package/dist/editor/content-tree/TreeSettingsMenu.js +1 -1
- package/dist/editor/content-tree/TreeSettingsMenu.js.map +1 -1
- package/dist/editor/context-menu/InsertMenu.js +1 -1
- package/dist/editor/context-menu/InsertMenu.js.map +1 -1
- package/dist/editor/editor-warnings/FinalWorkflowStateReadOnly.js +1 -1
- package/dist/editor/editor-warnings/FinalWorkflowStateReadOnly.js.map +1 -1
- package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js +1 -1
- package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js.map +1 -1
- package/dist/editor/editor-warnings/NoWriteAccess.js +3 -1
- package/dist/editor/editor-warnings/NoWriteAccess.js.map +1 -1
- package/dist/editor/field-types/AttachmentEditor.js +1 -1
- package/dist/editor/field-types/AttachmentEditor.js.map +1 -1
- package/dist/editor/field-types/CheckboxEditor.js +1 -1
- package/dist/editor/field-types/CheckboxEditor.js.map +1 -1
- package/dist/editor/field-types/DateFieldEditor.js +2 -2
- package/dist/editor/field-types/DateFieldEditor.js.map +1 -1
- package/dist/editor/field-types/DateTimeFieldEditor.js +1 -1
- package/dist/editor/field-types/DateTimeFieldEditor.js.map +1 -1
- package/dist/editor/field-types/TreeListEditor.d.ts +3 -1
- package/dist/editor/field-types/TreeListEditor.js +5 -5
- package/dist/editor/field-types/TreeListEditor.js.map +1 -1
- package/dist/editor/field-types/richtext/components/ReactSlate.js +15 -2
- package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
- package/dist/editor/field-types/richtext/richTextToolbarIcons.js +14 -14
- package/dist/editor/field-types/richtext/richTextToolbarIcons.js.map +1 -1
- package/dist/editor/field-types/textContextMenuFactory.js +1 -1
- package/dist/editor/field-types/textContextMenuFactory.js.map +1 -1
- package/dist/editor/itemContextMenu.js +1 -1
- package/dist/editor/itemContextMenu.js.map +1 -1
- package/dist/editor/media-selector/AiImageSearchPrompt.js +1 -1
- package/dist/editor/media-selector/AiImageSearchPrompt.js.map +1 -1
- package/dist/editor/media-selector/MediaFolderBrowser.js +5 -5
- package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
- package/dist/editor/media-selector/MediaSelector.js +1 -1
- package/dist/editor/media-selector/MediaSelector.js.map +1 -1
- package/dist/editor/media-selector/Preview.js +1 -1
- package/dist/editor/media-selector/Preview.js.map +1 -1
- package/dist/editor/media-selector/Thumbnails.js +4 -4
- package/dist/editor/media-selector/Thumbnails.js.map +1 -1
- package/dist/editor/media-selector/TreeSelector.js +3 -3
- package/dist/editor/media-selector/TreeSelector.js.map +1 -1
- package/dist/editor/media-selector/UploadZone.js +1 -1
- package/dist/editor/media-selector/UploadZone.js.map +1 -1
- package/dist/editor/menubar/ActiveUsers.js +17 -15
- package/dist/editor/menubar/ActiveUsers.js.map +1 -1
- package/dist/editor/menubar/FavoritesControls.js +3 -3
- package/dist/editor/menubar/FavoritesControls.js.map +1 -1
- package/dist/editor/menubar/ItemLanguageVersion.js +7 -3
- package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
- package/dist/editor/menubar/OpenInNewTabButton.d.ts +1 -1
- package/dist/editor/menubar/OpenInNewTabButton.js +2 -2
- package/dist/editor/menubar/OpenInNewTabButton.js.map +1 -1
- package/dist/editor/menubar/OperationsIndicator.js +3 -3
- package/dist/editor/menubar/OperationsIndicator.js.map +1 -1
- package/dist/editor/menubar/ToolbarFactory.js +2 -7
- package/dist/editor/menubar/ToolbarFactory.js.map +1 -1
- package/dist/editor/menubar/VersionSelector.js +15 -14
- package/dist/editor/menubar/VersionSelector.js.map +1 -1
- package/dist/editor/menubar/WorkflowButton.js +5 -5
- package/dist/editor/menubar/WorkflowButton.js.map +1 -1
- package/dist/editor/menubar/activeUserSessions.d.ts +9 -0
- package/dist/editor/menubar/activeUserSessions.js +30 -0
- package/dist/editor/menubar/activeUserSessions.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/CompareControls.js +1 -1
- package/dist/editor/menubar/toolbar-sections/CompareControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/FullscreenControl.js +1 -1
- package/dist/editor/menubar/toolbar-sections/FullscreenControl.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +12 -12
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js +1 -1
- package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/UtilityControls.d.ts +1 -3
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js +3 -4
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js +3 -2
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
- package/dist/editor/notifications/NotificationCenter.js +23 -5
- package/dist/editor/notifications/NotificationCenter.js.map +1 -1
- package/dist/editor/notifications/NotificationItem.js +3 -3
- package/dist/editor/notifications/NotificationItem.js.map +1 -1
- package/dist/editor/notifications/WatchButton.js +8 -8
- package/dist/editor/notifications/WatchButton.js.map +1 -1
- package/dist/editor/notifications/watchEventOptions.js +2 -2
- package/dist/editor/notifications/watchEventOptions.js.map +1 -1
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +2 -2
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/DragInsertionOverlay.js +5 -5
- package/dist/editor/page-editor-chrome/DragInsertionOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js +2 -2
- package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js.map +1 -1
- package/dist/editor/page-editor-chrome/FieldActionIndicator.js +1 -1
- package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js +2 -2
- package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +119 -27
- package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
- package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.d.ts +6 -0
- package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.js +23 -0
- package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/geometry.d.ts +8 -1
- package/dist/editor/page-editor-chrome/overlay/geometry.js +30 -0
- package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +16 -13
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +75 -35
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
- package/dist/editor/page-viewer/EditorForm.js +7 -2
- package/dist/editor/page-viewer/EditorForm.js.map +1 -1
- package/dist/editor/page-viewer/MiniMap.d.ts +2 -1
- package/dist/editor/page-viewer/MiniMap.js +98 -12
- package/dist/editor/page-viewer/MiniMap.js.map +1 -1
- package/dist/editor/page-viewer/PageViewer.js +2 -2
- package/dist/editor/page-viewer/PageViewerFrame.js +248 -115
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/bridgeFieldPatch.d.ts +34 -1
- package/dist/editor/page-viewer/bridgeFieldPatch.js +69 -1
- package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
- package/dist/editor/page-viewer/bridgeInlineEditSession.d.ts +49 -0
- package/dist/editor/page-viewer/bridgeInlineEditSession.js +189 -0
- package/dist/editor/page-viewer/bridgeInlineEditSession.js.map +1 -0
- package/dist/editor/personalization/ActionList.js +1 -1
- package/dist/editor/personalization/ActionList.js.map +1 -1
- package/dist/editor/personalization/ConditionTreeEditor.js +1 -1
- package/dist/editor/personalization/ConditionTreeEditor.js.map +1 -1
- package/dist/editor/personalization/PersonalizationPanel.js +98 -34
- package/dist/editor/personalization/PersonalizationPanel.js.map +1 -1
- package/dist/editor/personalization/RuleElementPicker.js +1 -1
- package/dist/editor/personalization/RuleElementPicker.js.map +1 -1
- package/dist/editor/personalization/RuleList.js +3 -3
- package/dist/editor/personalization/RuleList.js.map +1 -1
- package/dist/editor/personalization/TreeItemPicker.js +3 -3
- package/dist/editor/personalization/TreeItemPicker.js.map +1 -1
- package/dist/editor/reviews/CommentDisplayPopover.js +2 -2
- package/dist/editor/reviews/CommentEditor.js +3 -2
- package/dist/editor/reviews/CommentEditor.js.map +1 -1
- package/dist/editor/reviews/CommentPopover.js +5 -3
- package/dist/editor/reviews/CommentPopover.js.map +1 -1
- package/dist/editor/reviews/CommentView.js +8 -8
- package/dist/editor/reviews/CommentView.js.map +1 -1
- package/dist/editor/reviews/Comments.js +4 -4
- package/dist/editor/reviews/Comments.js.map +1 -1
- package/dist/editor/reviews/CreateReviewConfirmStep.js +1 -1
- package/dist/editor/reviews/CreateReviewConfirmStep.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js +4 -5
- package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
- package/dist/editor/reviews/CreateReviewReviewersStep.js +1 -1
- package/dist/editor/reviews/CreateReviewReviewersStep.js.map +1 -1
- package/dist/editor/reviews/CreateReviewSettingsStep.js +2 -1
- package/dist/editor/reviews/CreateReviewSettingsStep.js.map +1 -1
- package/dist/editor/reviews/CreateReviewSuccessStep.js +1 -1
- package/dist/editor/reviews/CreateReviewSuccessStep.js.map +1 -1
- package/dist/editor/reviews/DecisionsMatrix.js +13 -13
- package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
- package/dist/editor/reviews/EditReviewSettingsDialog.d.ts +1 -1
- package/dist/editor/reviews/EditReviewSettingsDialog.js +28 -63
- package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
- package/dist/editor/reviews/FeedbackModeIntro.js +3 -3
- package/dist/editor/reviews/FeedbackModeIntro.js.map +1 -1
- package/dist/editor/reviews/LatestFeedback.js +3 -3
- package/dist/editor/reviews/LatestFeedback.js.map +1 -1
- package/dist/editor/reviews/MultiReviewManager.js +0 -1
- package/dist/editor/reviews/MultiReviewManager.js.map +1 -1
- package/dist/editor/reviews/PreconfiguredReviewerSelector.js +1 -1
- package/dist/editor/reviews/PreconfiguredReviewerSelector.js.map +1 -1
- package/dist/editor/reviews/ReviewCard.d.ts +1 -4
- package/dist/editor/reviews/ReviewCard.js +28 -7
- package/dist/editor/reviews/ReviewCard.js.map +1 -1
- package/dist/editor/reviews/ReviewDetail.js +39 -35
- package/dist/editor/reviews/ReviewDetail.js.map +1 -1
- package/dist/editor/reviews/ReviewItemsPanel.d.ts +1 -3
- package/dist/editor/reviews/ReviewItemsPanel.js +20 -56
- package/dist/editor/reviews/ReviewItemsPanel.js.map +1 -1
- package/dist/editor/reviews/ReviewersPanel.js +3 -3
- package/dist/editor/reviews/ReviewersPanel.js.map +1 -1
- package/dist/editor/reviews/ReviewsList.js +9 -74
- package/dist/editor/reviews/ReviewsList.js.map +1 -1
- package/dist/editor/reviews/SecretPhraseInput.d.ts +8 -0
- package/dist/editor/reviews/SecretPhraseInput.js +9 -0
- package/dist/editor/reviews/SecretPhraseInput.js.map +1 -0
- package/dist/editor/reviews/SuggestedEdit.js +36 -70
- package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
- package/dist/editor/reviews/SuggestionDisplayPopover.js +77 -58
- package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/applySuggestedEditActions.d.ts +21 -0
- package/dist/editor/reviews/applySuggestedEditActions.js +242 -0
- package/dist/editor/reviews/applySuggestedEditActions.js.map +1 -0
- package/dist/editor/reviews/feedbackScrollTarget.js +3 -2
- package/dist/editor/reviews/feedbackScrollTarget.js.map +1 -1
- package/dist/editor/reviews/reviewListPresentation.d.ts +2 -0
- package/dist/editor/reviews/reviewListPresentation.js +11 -0
- package/dist/editor/reviews/reviewListPresentation.js.map +1 -1
- package/dist/editor/reviews/suggestedEditState.js +12 -1
- package/dist/editor/reviews/suggestedEditState.js.map +1 -1
- package/dist/editor/reviews/suggestionDisplayValue.d.ts +38 -1
- package/dist/editor/reviews/suggestionDisplayValue.js +99 -21
- package/dist/editor/reviews/suggestionDisplayValue.js.map +1 -1
- package/dist/editor/reviews/suggestionPatch.d.ts +10 -0
- package/dist/editor/reviews/suggestionPatch.js +17 -0
- package/dist/editor/reviews/suggestionPatch.js.map +1 -0
- package/dist/editor/reviews/useMultiReview.d.ts +1 -2
- package/dist/editor/reviews/useMultiReview.js +74 -65
- package/dist/editor/reviews/useMultiReview.js.map +1 -1
- package/dist/editor/services/contentService.d.ts +1 -9
- package/dist/editor/services/contentService.js +4 -1
- package/dist/editor/services/contentService.js.map +1 -1
- package/dist/editor/services/editService.d.ts +1 -0
- package/dist/editor/services/editService.js +12 -19
- package/dist/editor/services/editService.js.map +1 -1
- package/dist/editor/services/reviewsService.d.ts +1 -9
- package/dist/editor/services/reviewsService.js +1 -9
- package/dist/editor/services/reviewsService.js.map +1 -1
- package/dist/editor/services/suggestedEditsService.d.ts +17 -5
- package/dist/editor/services/suggestedEditsService.js +23 -5
- package/dist/editor/services/suggestedEditsService.js.map +1 -1
- package/dist/editor/services/systemService.d.ts +1 -2
- package/dist/editor/services/systemService.js +0 -3
- package/dist/editor/services/systemService.js.map +1 -1
- package/dist/editor/settings/About.js +6 -6
- package/dist/editor/settings/About.js.map +1 -1
- package/dist/editor/settings/IndexOverview.js +1 -1
- package/dist/editor/settings/IndexOverview.js.map +1 -1
- package/dist/editor/settings/QuotaInfo.js +5 -5
- package/dist/editor/settings/QuotaInfo.js.map +1 -1
- package/dist/editor/settings/SettingsBreadcrumb.js +1 -1
- package/dist/editor/settings/SettingsBreadcrumb.js.map +1 -1
- package/dist/editor/settings/SettingsView.js +3 -2
- package/dist/editor/settings/SettingsView.js.map +1 -1
- package/dist/editor/settings/StatusSummary.js +6 -6
- package/dist/editor/settings/StatusSummary.js.map +1 -1
- package/dist/editor/settings/index/EmbeddingProviderInfo.js +2 -2
- package/dist/editor/settings/index/EmbeddingProviderInfo.js.map +1 -1
- package/dist/editor/settings/index/QueueErrorsDisplay.d.ts +1 -1
- package/dist/editor/settings/index/QueueErrorsDisplay.js +7 -3
- package/dist/editor/settings/index/QueueErrorsDisplay.js.map +1 -1
- package/dist/editor/settings/index/embeddingErrors.d.ts +7 -0
- package/dist/editor/settings/index/embeddingErrors.js +105 -0
- package/dist/editor/settings/index/embeddingErrors.js.map +1 -0
- package/dist/editor/settings/index/types.d.ts +1 -0
- package/dist/editor/settings/index/useIndexStatus.js +2 -2
- package/dist/editor/settings/index/useIndexStatus.js.map +1 -1
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js +6 -6
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/AgentToolsPanel.js +3 -3
- package/dist/editor/settings/panels/AgentToolsPanel.js.map +1 -1
- package/dist/editor/settings/panels/AgentsPanel.js +2 -2
- package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ClusterInstancesPanel.js +3 -3
- package/dist/editor/settings/panels/ClusterInstancesPanel.js.map +1 -1
- package/dist/editor/settings/panels/CreateAgentProfileDialog.js +1 -1
- package/dist/editor/settings/panels/CreateAgentProfileDialog.js.map +1 -1
- package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js +1 -1
- package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js.map +1 -1
- package/dist/editor/settings/panels/CreateMcpServerDialog.js +1 -1
- package/dist/editor/settings/panels/CreateMcpServerDialog.js.map +1 -1
- package/dist/editor/settings/panels/FieldTypeSerializersPanel.js +2 -2
- package/dist/editor/settings/panels/FieldTypeSerializersPanel.js.map +1 -1
- package/dist/editor/settings/panels/GroupedFieldConfigPanel.js +1 -1
- package/dist/editor/settings/panels/GroupedFieldConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/ItemConfigPanel.js +1 -1
- package/dist/editor/settings/panels/ItemConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js +1 -1
- package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js.map +1 -1
- package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js +5 -5
- package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/JavaScriptToolsPanel.js +5 -5
- package/dist/editor/settings/panels/JavaScriptToolsPanel.js.map +1 -1
- package/dist/editor/settings/panels/McpToolsPanel.js +3 -3
- package/dist/editor/settings/panels/McpToolsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ModelConfigPanel.js +6 -6
- package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/ModelsPanel.js +4 -4
- package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
- package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js +16 -13
- package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js.map +1 -1
- package/dist/editor/settings/panels/PersistentLogsPanel.js +1 -1
- package/dist/editor/settings/panels/PersistentLogsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +2 -3
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplateSelector.js +1 -1
- package/dist/editor/settings/panels/ProjectTemplateSelector.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplateSelectorList.js +1 -1
- package/dist/editor/settings/panels/ProjectTemplateSelectorList.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js +13 -13
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProviderConfigPanel.js +3 -3
- package/dist/editor/settings/panels/ProviderConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProvidersPanel.js +1 -1
- package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
- package/dist/editor/settings/panels/SearchConfigPanel.js +3 -3
- package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/StatusPanel.js +5 -5
- package/dist/editor/settings/panels/StatusPanel.js.map +1 -1
- package/dist/editor/settings/panels/SystemSettingsPanel.js +1 -1
- package/dist/editor/settings/panels/SystemSettingsPanel.js.map +1 -1
- package/dist/editor/settings/panels/UserPreferencesPanel.js +1 -1
- package/dist/editor/settings/panels/UserPreferencesPanel.js.map +1 -1
- package/dist/editor/setup-wizard/SetupStepError.js +1 -1
- package/dist/editor/setup-wizard/SetupStepError.js.map +1 -1
- package/dist/editor/setup-wizard/SetupStepLayout.js +1 -1
- package/dist/editor/setup-wizard/SetupStepLayout.js.map +1 -1
- package/dist/editor/setup-wizard/steps/CompleteStep.js +2 -2
- package/dist/editor/setup-wizard/steps/CompleteStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/CreateSettingsStep.js +1 -1
- package/dist/editor/setup-wizard/steps/CreateSettingsStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/LicenseActivationStep.js +1 -1
- package/dist/editor/setup-wizard/steps/LicenseActivationStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/LicenseEmailStep.js +1 -1
- package/dist/editor/setup-wizard/steps/LicenseEmailStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/ModelSelectionStep.js +6 -12
- package/dist/editor/setup-wizard/steps/ModelSelectionStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/ProviderStep.js +6 -6
- package/dist/editor/setup-wizard/steps/ProviderStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/WelcomeStep.js +1 -1
- package/dist/editor/sidebar/Completions.js +1 -1
- package/dist/editor/sidebar/Completions.js.map +1 -1
- package/dist/editor/sidebar/ComponentPalette.js +1 -1
- package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
- package/dist/editor/sidebar/ComponentTree.js +11 -11
- package/dist/editor/sidebar/ComponentTree.js.map +1 -1
- package/dist/editor/sidebar/DictionaryEditor.js +48 -23
- package/dist/editor/sidebar/DictionaryEditor.js.map +1 -1
- package/dist/editor/sidebar/Favorites.js +5 -5
- package/dist/editor/sidebar/Favorites.js.map +1 -1
- package/dist/editor/sidebar/NavigationPanelItem.js +1 -1
- package/dist/editor/sidebar/NavigationPanelItem.js.map +1 -1
- package/dist/editor/sidebar/OperationItem.js +4 -4
- package/dist/editor/sidebar/OperationItem.js.map +1 -1
- package/dist/editor/sidebar/Sessions.js +14 -7
- package/dist/editor/sidebar/Sessions.js.map +1 -1
- package/dist/editor/sidebar/SidebarPanel.js +7 -5
- package/dist/editor/sidebar/SidebarPanel.js.map +1 -1
- package/dist/editor/sidebar/TimelineView.js +1 -1
- package/dist/editor/sidebar/TimelineView.js.map +1 -1
- package/dist/editor/sidebar/Validation.js +1 -1
- package/dist/editor/sidebar/Validation.js.map +1 -1
- package/dist/editor/sidebar/Workbox.js +1 -1
- package/dist/editor/sidebar/Workbox.js.map +1 -1
- package/dist/editor/template-wizard/TemplateBuilderDialog.js +1 -1
- package/dist/editor/template-wizard/TemplateBuilderDialog.js.map +1 -1
- package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +10 -10
- package/dist/editor/template-wizard/TemplateStructureInlineEditor.js.map +1 -1
- package/dist/editor/tree-indicators/GutterColumns.js +2 -2
- package/dist/editor/ui/ComponentThumbnailDialog.js +1 -1
- package/dist/editor/ui/ComponentThumbnailDialog.js.map +1 -1
- package/dist/editor/ui/IconSelectorDialog.js +1 -1
- package/dist/editor/ui/IconSelectorDialog.js.map +1 -1
- package/dist/editor/ui/Icons.d.ts +1 -1
- package/dist/editor/ui/Icons.js +7 -7
- package/dist/editor/ui/Icons.js.map +1 -1
- package/dist/editor/ui/ItemList.js +1 -1
- package/dist/editor/ui/ItemList.js.map +1 -1
- package/dist/editor/ui/PerfectTree.js +2 -2
- package/dist/editor/ui/PerfectTree.js.map +1 -1
- package/dist/editor/ui/PublishDialog.js +1 -1
- package/dist/editor/ui/PublishDialog.js.map +1 -1
- package/dist/editor/ui/PublishItemDialog.js +2 -2
- package/dist/editor/ui/PublishItemDialog.js.map +1 -1
- package/dist/editor/ui/PublishRestrictionsDialog.js +20 -11
- package/dist/editor/ui/PublishRestrictionsDialog.js.map +1 -1
- package/dist/editor/ui/Section.js +2 -2
- package/dist/editor/ui/Section.js.map +1 -1
- package/dist/editor/ui/SharedFolderSelectorDialog.js +17 -3
- package/dist/editor/ui/SharedFolderSelectorDialog.js.map +1 -1
- package/dist/editor/ui/SimpleTable.d.ts +3 -1
- package/dist/editor/ui/SimpleTable.js +3 -3
- package/dist/editor/ui/SimpleTable.js.map +1 -1
- package/dist/editor/ui/Spinner.js +1 -1
- package/dist/editor/ui/Spinner.js.map +1 -1
- package/dist/editor/ui/Splitter.js +3 -7
- package/dist/editor/ui/Splitter.js.map +1 -1
- package/dist/editor/ui/TemplateSelectorDialog.js +2 -2
- package/dist/editor/ui/TemplateSelectorDialog.js.map +1 -1
- package/dist/editor/ui/WorkboxItemsTable.js +2 -2
- package/dist/editor/ui/WorkboxItemsTable.js.map +1 -1
- package/dist/editor/utils.js +6 -0
- package/dist/editor/utils.js.map +1 -1
- package/dist/editor/version-diff/versionDiffTargets.js +2 -1
- package/dist/editor/version-diff/versionDiffTargets.js.map +1 -1
- package/dist/editor/views/EditorSlot.js +1 -1
- package/dist/editor/views/EditorSlot.js.map +1 -1
- package/dist/editor/views/ItemEditor.js +2 -2
- package/dist/editor/views/ItemEditor.js.map +1 -1
- package/dist/editor/views/SingleEditView.js +2 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/licensing/EmailEntry.js +1 -1
- package/dist/licensing/EmailEntry.js.map +1 -1
- package/dist/licensing/FeatureGate.js +1 -1
- package/dist/licensing/LicenseActivationForm.js +1 -1
- package/dist/licensing/LicenseActivationForm.js.map +1 -1
- package/dist/licensing/LicenseCodeEntry.js +1 -1
- package/dist/licensing/LicenseCodeEntry.js.map +1 -1
- package/dist/licensing/LicenseOverlay.js +2 -2
- package/dist/licensing/LicenseOverlay.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/services/setupWizardService.js +4 -1
- package/dist/setup/services/setupWizardService.js.map +1 -1
- package/dist/setup/wizard/steps/AddModelDialog.js +1 -1
- package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -1
- package/dist/setup/wizard/steps/ImportModelDialog.js +3 -3
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
- package/dist/splash-screen/ModernSplashScreen.d.ts +1 -1
- package/dist/splash-screen/ModernSplashScreen.js +11 -11
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/splash-screen/NewPage.js +3 -3
- package/dist/splash-screen/NewPage.js.map +1 -1
- package/dist/splash-screen/OpenPage.js +1 -1
- package/dist/splash-screen/OpenPage.js.map +1 -1
- package/dist/splash-screen/ParheliaAssistantChat.js +7 -7
- package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
- package/dist/splash-screen/RecentPages.js +1 -1
- package/dist/splash-screen/RecentPages.js.map +1 -1
- package/dist/task-board/TaskBoardWorkspace.js +1 -1
- package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
- package/dist/task-board/components/CommentsList.js +4 -4
- package/dist/task-board/components/CommentsList.js.map +1 -1
- package/dist/task-board/components/FinishedProjectCard.js +1 -1
- package/dist/task-board/components/FinishedProjectCard.js.map +1 -1
- package/dist/task-board/components/ItemCollectionEditorDialog.js +1 -1
- package/dist/task-board/components/ItemCollectionEditorDialog.js.map +1 -1
- package/dist/task-board/components/ItemCollectionPicker.js +1 -1
- package/dist/task-board/components/ItemCollectionPicker.js.map +1 -1
- package/dist/task-board/components/ProjectBudgetBanner.js +1 -1
- package/dist/task-board/components/ProjectBudgetBanner.js.map +1 -1
- package/dist/task-board/components/ProjectDashboard.js +4 -4
- package/dist/task-board/components/ProjectDashboard.js.map +1 -1
- package/dist/task-board/components/ProjectGoalsPanel.js +17 -13
- package/dist/task-board/components/ProjectGoalsPanel.js.map +1 -1
- package/dist/task-board/components/ProjectListContent.js +5 -5
- package/dist/task-board/components/ProjectListContent.js.map +1 -1
- package/dist/task-board/components/ProjectOverviewContent.js +4 -4
- package/dist/task-board/components/ProjectOverviewContent.js.map +1 -1
- package/dist/task-board/components/ProjectPropertiesPanel.js +5 -5
- package/dist/task-board/components/ProjectPropertiesPanel.js.map +1 -1
- package/dist/task-board/components/ProjectSettingsDialog.js +3 -3
- package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -1
- package/dist/task-board/components/TaskAgentPanel.js +4 -4
- package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
- package/dist/task-board/components/TaskAssigneePicker.js +4 -4
- package/dist/task-board/components/TaskAssigneePicker.js.map +1 -1
- package/dist/task-board/components/TaskAttachmentDropZone.js +3 -3
- package/dist/task-board/components/TaskAttachmentDropZone.js.map +1 -1
- package/dist/task-board/components/TaskAttachmentsSection.js +1 -1
- package/dist/task-board/components/TaskAttachmentsSection.js.map +1 -1
- package/dist/task-board/components/TaskBoardMyTasksSidebar.js +1 -1
- package/dist/task-board/components/TaskBoardMyTasksSidebar.js.map +1 -1
- package/dist/task-board/components/TaskBoardProjectListSidebar.js +4 -4
- package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
- package/dist/task-board/components/TaskBoardProjectSelector.js +1 -1
- package/dist/task-board/components/TaskBoardProjectSelector.js.map +1 -1
- package/dist/task-board/components/TaskBoardTitlebar.js +1 -1
- package/dist/task-board/components/TaskBoardTitlebar.js.map +1 -1
- package/dist/task-board/components/TaskCard.js +1 -1
- package/dist/task-board/components/TaskCard.js.map +1 -1
- package/dist/task-board/components/TaskDetailPanel.js +6 -6
- package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
- package/dist/task-board/components/TaskReviewActions.js +6 -6
- package/dist/task-board/components/TaskReviewActions.js.map +1 -1
- package/dist/task-board/components/TaskRow.js +1 -1
- package/dist/task-board/components/TaskRow.js.map +1 -1
- package/dist/task-board/components/TaskboardPersistentLogPanel.js +3 -3
- package/dist/task-board/components/TaskboardPersistentLogPanel.js.map +1 -1
- package/dist/task-board/components/WizardCommunicationCards.js +3 -3
- package/dist/task-board/components/WizardCommunicationCards.js.map +1 -1
- package/dist/task-board/components/WizardCommunicationCenter.js +1 -1
- package/dist/task-board/components/WizardCommunicationCenter.js.map +1 -1
- package/dist/task-board/components/WizardTaskDetailsPanel.js +3 -3
- package/dist/task-board/components/WizardTaskDetailsPanel.js.map +1 -1
- package/dist/task-board/views/DependencyGraphView.js +8 -8
- package/dist/task-board/views/DependencyGraphView.js.map +1 -1
- package/dist/task-board/views/WizardView.js +4 -4
- package/dist/task-board/views/WizardView.js.map +1 -1
- package/dist/tour/default-tour.js +17 -17
- package/dist/tour/default-tour.js.map +1 -1
- package/dist/tour/preview-tour.js +6 -6
- package/dist/tour/preview-tour.js.map +1 -1
- package/dist/types.d.ts +13 -5
- package/package.json +1 -1
- 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 = `${
|
|
83
|
-
|
|
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 =
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
874
|
+
const operationWasRemoved = isMissingEditOperationResult(result);
|
|
875
|
+
if (!operationWasRemoved) {
|
|
876
|
+
handleResult(result, { refresh: "immediate" });
|
|
877
|
+
}
|
|
856
878
|
if (result.type === "success") {
|
|
857
|
-
for (const
|
|
858
|
-
recentlyUndoneIds.current.add(
|
|
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
|
-
//
|
|
896
|
-
//
|
|
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
|
-
|
|
1209
|
+
const operationWasRemoved = isMissingEditOperationResult(result);
|
|
1210
|
+
if (!operationWasRemoved) {
|
|
1211
|
+
handleResult(result, { refresh: "immediate" });
|
|
1212
|
+
}
|
|
1190
1213
|
if (result.type === "success") {
|
|
1191
|
-
|
|
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
|
|
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 =
|
|
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 || "",
|