@parhelia/core 0.1.12556 → 0.1.12560
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.d.ts +6 -4
- package/dist/agents-view/AgentCard.js +143 -24
- package/dist/agents-view/AgentCard.js.map +1 -1
- package/dist/agents-view/AgentsInbox.d.ts +1 -1
- package/dist/agents-view/AgentsInbox.js +7 -92
- package/dist/agents-view/AgentsInbox.js.map +1 -1
- package/dist/agents-view/AgentsTitlebar.js +3 -2
- package/dist/agents-view/AgentsTitlebar.js.map +1 -1
- package/dist/agents-view/AgentsView.d.ts +6 -7
- package/dist/agents-view/AgentsView.js +187 -98
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/agents-view/AgentsWorkspaceView.d.ts +2 -6
- package/dist/agents-view/AgentsWorkspaceView.js +266 -113
- package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
- package/dist/agents-view/ProfileAgentsGroup.d.ts +2 -1
- package/dist/agents-view/ProfileAgentsGroup.js +4 -3
- package/dist/agents-view/ProfileAgentsGroup.js.map +1 -1
- package/dist/components/ActionButton.d.ts +1 -1
- package/dist/components/ActionButton.js.map +1 -1
- package/dist/components/FilterInput.d.ts +1 -1
- package/dist/components/FilterInput.js +1 -1
- package/dist/components/FilterInput.js.map +1 -1
- package/dist/components/ui/LanguageSelector.js +2 -4
- package/dist/components/ui/LanguageSelector.js.map +1 -1
- package/dist/components/ui/PlaceholderInput.js +3 -3
- package/dist/components/ui/PlaceholderInput.js.map +1 -1
- package/dist/components/ui/PlaceholderInputTypes.js +1 -1
- package/dist/components/ui/PlaceholderInputTypes.js.map +1 -1
- package/dist/components/ui/alert-dialog.d.ts +1 -1
- package/dist/components/ui/alert-dialog.js +6 -10
- package/dist/components/ui/alert-dialog.js.map +1 -1
- package/dist/components/ui/button.d.ts +4 -4
- package/dist/components/ui/button.js +4 -1
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/context-menu.d.ts +1 -1
- package/dist/components/ui/context-menu.js +12 -4
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/copy-button.d.ts +2 -1
- package/dist/components/ui/copy-button.js +2 -2
- package/dist/components/ui/copy-button.js.map +1 -1
- package/dist/components/ui/dialog.d.ts +1 -1
- package/dist/components/ui/dialog.js +21 -126
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/components/ui/input.d.ts +1 -1
- package/dist/components/ui/input.js +5 -3
- package/dist/components/ui/input.js.map +1 -1
- package/dist/components/ui/paste-button.d.ts +2 -1
- package/dist/components/ui/paste-button.js +2 -2
- package/dist/components/ui/paste-button.js.map +1 -1
- package/dist/components/ui/popover.js +1 -9
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/select.js +1 -1
- package/dist/components/ui/select.js.map +1 -1
- package/dist/components/ui/styled-dialog-title.js +1 -1
- package/dist/components/ui/styled-dialog-title.js.map +1 -1
- package/dist/components/ui/tabs.d.ts +1 -1
- package/dist/components/ui/tabs.js +4 -11
- package/dist/components/ui/tabs.js.map +1 -1
- package/dist/config/config.d.ts +4 -2
- package/dist/config/config.js +250 -70
- package/dist/config/config.js.map +1 -1
- package/dist/config/notificationRoutes.js +14 -0
- package/dist/config/notificationRoutes.js.map +1 -1
- package/dist/config/types/workspace.d.ts +6 -0
- package/dist/config/types.d.ts +63 -12
- package/dist/config/types.js.map +1 -1
- package/dist/editor/ConfirmationDialog.js +20 -4
- package/dist/editor/ConfirmationDialog.js.map +1 -1
- package/dist/editor/ContentTree.d.ts +2 -1
- package/dist/editor/ContentTree.js +93 -32
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/Editor.js +87 -22
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/FieldHistory.js +84 -36
- package/dist/editor/FieldHistory.js.map +1 -1
- package/dist/editor/FieldListField.js +21 -9
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/FieldListFieldWithFallbacks.js +23 -2
- package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
- package/dist/editor/GlobalMenuBar.js +29 -2
- package/dist/editor/GlobalMenuBar.js.map +1 -1
- package/dist/editor/ImageEditor.js +5 -2
- package/dist/editor/ImageEditor.js.map +1 -1
- package/dist/editor/ItemInfo.js +36 -1
- package/dist/editor/ItemInfo.js.map +1 -1
- package/dist/editor/LinkEditorDialog.js +3 -0
- package/dist/editor/LinkEditorDialog.js.map +1 -1
- package/dist/editor/MainLayout.d.ts +0 -2
- package/dist/editor/MainLayout.js +65 -8
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/MigrationsView.js +29 -5
- package/dist/editor/MigrationsView.js.map +1 -1
- package/dist/editor/MobileLayout.js +37 -12
- package/dist/editor/MobileLayout.js.map +1 -1
- package/dist/editor/PictureCropper.js +54 -45
- package/dist/editor/PictureCropper.js.map +1 -1
- package/dist/editor/PictureEditor.js +17 -15
- package/dist/editor/PictureEditor.js.map +1 -1
- package/dist/editor/QuickItemSwitcher.js +21 -21
- package/dist/editor/QuickItemSwitcher.js.map +1 -1
- package/dist/editor/SetupWizard.js +52 -12
- package/dist/editor/SetupWizard.js.map +1 -1
- package/dist/editor/Titlebar.js +7 -2
- package/dist/editor/Titlebar.js.map +1 -1
- package/dist/editor/ai/AgentCostDisplay.d.ts +1 -0
- package/dist/editor/ai/AgentCostDisplay.js +1 -1
- package/dist/editor/ai/AgentCostDisplay.js.map +1 -1
- package/dist/editor/ai/AgentDocumentList.js +32 -14
- package/dist/editor/ai/AgentDocumentList.js.map +1 -1
- package/dist/editor/ai/AgentGreeting.js +3 -2
- package/dist/editor/ai/AgentGreeting.js.map +1 -1
- package/dist/editor/ai/AgentProfileSelector.js +2 -1
- package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
- package/dist/editor/ai/AgentStatusBadge.d.ts +0 -5
- package/dist/editor/ai/AgentStatusBadge.js +67 -65
- package/dist/editor/ai/AgentStatusBadge.js.map +1 -1
- package/dist/editor/ai/AgentTerminal.d.ts +14 -2
- package/dist/editor/ai/AgentTerminal.js +2377 -483
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/AgentTerminalStatusBar.d.ts +8 -3
- package/dist/editor/ai/AgentTerminalStatusBar.js +460 -56
- package/dist/editor/ai/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/Agents.js +150 -113
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/AiResponseMessage.d.ts +10 -1
- package/dist/editor/ai/AiResponseMessage.js +238 -23
- package/dist/editor/ai/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/ContextInfoBar.d.ts +2 -3
- package/dist/editor/ai/ContextInfoBar.js +64 -7
- package/dist/editor/ai/ContextInfoBar.js.map +1 -1
- package/dist/editor/ai/GuidanceOverlay.js +17 -11
- package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
- package/dist/editor/ai/InlineAiDialog.d.ts +1 -1
- package/dist/editor/ai/InlineAiDialog.js +514 -192
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/InlineAiTrigger.js +115 -12
- package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
- package/dist/editor/ai/MediaImage.js +40 -8
- package/dist/editor/ai/MediaImage.js.map +1 -1
- package/dist/editor/ai/SpawnedAgentsPanel.js +10 -12
- package/dist/editor/ai/SpawnedAgentsPanel.js.map +1 -1
- package/dist/editor/ai/ToolCallDisplay.d.ts +22 -2
- package/dist/editor/ai/ToolCallDisplay.js +518 -147
- package/dist/editor/ai/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai/dialogs/AgentDialogHandler.d.ts +1 -8
- package/dist/editor/ai/dialogs/AgentDialogHandler.js +379 -42
- package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
- package/dist/editor/ai/dialogs/QuestionnaireInline.d.ts +5 -1
- package/dist/editor/ai/dialogs/QuestionnaireInline.js +628 -60
- package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
- package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +115 -0
- package/dist/editor/ai/dialogs/agentDialogTypes.js +2 -0
- package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
- package/dist/editor/ai/types.d.ts +3 -1
- package/dist/editor/ai/useAgentStatus.d.ts +2 -1
- package/dist/editor/ai/useAgentStatus.js +86 -99
- package/dist/editor/ai/useAgentStatus.js.map +1 -1
- package/dist/editor/ai/useInlineAiPosition.js +45 -5
- package/dist/editor/ai/useInlineAiPosition.js.map +1 -1
- package/dist/editor/client/AboutDialog.js +4 -2
- package/dist/editor/client/AboutDialog.js.map +1 -1
- package/dist/editor/client/EditorShell.d.ts +4 -1
- package/dist/editor/client/EditorShell.js +770 -237
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +33 -19
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/helpers.js +6 -0
- package/dist/editor/client/helpers.js.map +1 -1
- package/dist/editor/client/hooks/useEditorUrlSync.js +1 -2
- package/dist/editor/client/hooks/useEditorUrlSync.js.map +1 -1
- package/dist/editor/client/hooks/useEditorWebSocket.d.ts +10 -0
- package/dist/editor/client/hooks/useEditorWebSocket.js +209 -14
- package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
- package/dist/editor/client/hooks/useQuota.d.ts +8 -0
- package/dist/editor/client/hooks/useQuota.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js +68 -7
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/itemsRepository.js +10 -6
- package/dist/editor/client/itemsRepository.js.map +1 -1
- package/dist/editor/client/navigation.js +35 -3
- package/dist/editor/client/navigation.js.map +1 -1
- package/dist/editor/client/operations.d.ts +6 -3
- package/dist/editor/client/operations.js +208 -30
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/pageModelBuilder.js +4 -31
- package/dist/editor/client/pageModelBuilder.js.map +1 -1
- package/dist/editor/client/ui/DevModeIndicator.js +2 -2
- package/dist/editor/client/ui/DevModeIndicator.js.map +1 -1
- package/dist/editor/client/ui/EditorChrome.d.ts +0 -6
- package/dist/editor/client/ui/EditorChrome.js +55 -72
- package/dist/editor/client/ui/EditorChrome.js.map +1 -1
- package/dist/editor/client/ui/FullscreenControls.js +5 -3
- package/dist/editor/client/ui/FullscreenControls.js.map +1 -1
- package/dist/editor/commands/commands.d.ts +11 -1
- package/dist/editor/commands/commands.js +12 -1
- package/dist/editor/commands/commands.js.map +1 -1
- package/dist/editor/commands/componentCommands.js +109 -55
- package/dist/editor/commands/componentCommands.js.map +1 -1
- package/dist/editor/commands/customCommandConverter.d.ts +8 -1
- package/dist/editor/commands/customCommandConverter.js +35 -5
- package/dist/editor/commands/customCommandConverter.js.map +1 -1
- package/dist/editor/commands/handlers/agentHandler.js +2 -1
- package/dist/editor/commands/handlers/agentHandler.js.map +1 -1
- package/dist/editor/commands/itemCommands.d.ts +3 -0
- package/dist/editor/commands/itemCommands.js +93 -10
- package/dist/editor/commands/itemCommands.js.map +1 -1
- package/dist/editor/commands/undo.d.ts +9 -15
- package/dist/editor/commands/undo.js +24 -0
- package/dist/editor/commands/undo.js.map +1 -1
- package/dist/editor/context-menu/InsertMenu.js +83 -39
- package/dist/editor/context-menu/InsertMenu.js.map +1 -1
- package/dist/editor/field-types/MultiLineText.js +1 -1
- package/dist/editor/field-types/MultiLineText.js.map +1 -1
- package/dist/editor/field-types/RawEditor.js +1 -1
- package/dist/editor/field-types/RichTextEditor.js +13 -5
- package/dist/editor/field-types/RichTextEditor.js.map +1 -1
- package/dist/editor/field-types/RichTextEditorComponent.js +37 -3
- package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
- package/dist/editor/field-types/SingleLineText.js +1 -1
- package/dist/editor/field-types/TreeListEditor.js +3 -2
- package/dist/editor/field-types/TreeListEditor.js.map +1 -1
- package/dist/editor/field-types/richtext/components/ReactSlate.css +23 -5
- package/dist/editor/field-types/richtext/components/ReactSlate.d.ts +2 -0
- package/dist/editor/field-types/richtext/components/ReactSlate.js +28 -4
- package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
- package/dist/editor/field-types/richtext/components/ToolbarButton.js +4 -2
- package/dist/editor/field-types/richtext/components/ToolbarButton.js.map +1 -1
- package/dist/editor/field-types/richtext/contextMenuFactory.d.ts +13 -0
- package/dist/editor/field-types/richtext/contextMenuFactory.js +181 -24
- package/dist/editor/field-types/richtext/contextMenuFactory.js.map +1 -1
- package/dist/editor/field-types/richtext/types.d.ts +2 -0
- package/dist/editor/field-types/richtext/types.js.map +1 -1
- package/dist/editor/field-types/richtext/utils/plugins.js +4 -0
- package/dist/editor/field-types/richtext/utils/plugins.js.map +1 -1
- package/dist/editor/field-types/textContextMenuFactory.js +3 -2
- package/dist/editor/field-types/textContextMenuFactory.js.map +1 -1
- package/dist/editor/media-selector/AiImageSearchPrompt.js +4 -2
- package/dist/editor/media-selector/AiImageSearchPrompt.js.map +1 -1
- package/dist/editor/media-selector/MediaFolderBrowser.js +1 -1
- package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
- package/dist/editor/media-selector/MediaSelector.js +7 -1
- package/dist/editor/media-selector/MediaSelector.js.map +1 -1
- package/dist/editor/media-selector/TreeSelector.js +40 -35
- package/dist/editor/media-selector/TreeSelector.js.map +1 -1
- package/dist/editor/menubar/ActiveUsers.js +1 -1
- package/dist/editor/menubar/ActiveUsers.js.map +1 -1
- package/dist/editor/menubar/GenericToolbar.js +4 -2
- package/dist/editor/menubar/GenericToolbar.js.map +1 -1
- package/dist/editor/menubar/ItemLanguageVersion.js +2 -2
- package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
- package/dist/editor/menubar/PageSelector.js +26 -147
- package/dist/editor/menubar/PageSelector.js.map +1 -1
- package/dist/editor/menubar/Separator.js +1 -1
- package/dist/editor/menubar/VersionSelector.js +2 -4
- package/dist/editor/menubar/VersionSelector.js.map +1 -1
- package/dist/editor/menubar/WorkflowButton.js +39 -12
- package/dist/editor/menubar/WorkflowButton.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js +16 -38
- package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/EditControls.js +3 -3
- package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/HelpButton.js +1 -0
- package/dist/editor/menubar/toolbar-sections/HelpButton.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.d.ts +6 -10
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +597 -220
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js +13 -2
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
- package/dist/editor/page-editor-chrome/CommentHighlighting.js +42 -1
- package/dist/editor/page-editor-chrome/CommentHighlighting.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
- package/dist/editor/page-editor-chrome/InlineEditor.js +97 -48
- package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +38 -17
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +17 -11
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
- package/dist/editor/page-editor-chrome/useInlineAICompletion.js +301 -301
- package/dist/editor/page-editor-chrome/useInlineAICompletion.js.map +1 -1
- package/dist/editor/page-viewer/DeviceToolbar.js +1 -1
- package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -1
- package/dist/editor/page-viewer/EditorForm.js +69 -11
- package/dist/editor/page-viewer/EditorForm.js.map +1 -1
- package/dist/editor/page-viewer/MiniMap.d.ts +2 -4
- package/dist/editor/page-viewer/MiniMap.js +91 -28
- package/dist/editor/page-viewer/MiniMap.js.map +1 -1
- package/dist/editor/page-viewer/PageViewer.d.ts +3 -1
- package/dist/editor/page-viewer/PageViewer.js +92 -19
- package/dist/editor/page-viewer/PageViewer.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.d.ts +2 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +348 -115
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/pageModelSkeletonBuilder.js +114 -49
- package/dist/editor/page-viewer/pageModelSkeletonBuilder.js.map +1 -1
- package/dist/editor/page-viewer/pageViewContext.d.ts +1 -0
- package/dist/editor/page-viewer/pageViewContext.js +51 -14
- package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
- package/dist/editor/pageModel.d.ts +14 -1
- package/dist/editor/reviews/Comment.js +26 -12
- package/dist/editor/reviews/Comment.js.map +1 -1
- package/dist/editor/reviews/CommentDisplayPopover.js +7 -5
- package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/CommentView.js +19 -4
- package/dist/editor/reviews/CommentView.js.map +1 -1
- package/dist/editor/reviews/Comments.js +89 -72
- package/dist/editor/reviews/Comments.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js +281 -177
- package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
- package/dist/editor/reviews/DecisionsMatrix.js +96 -25
- package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
- package/dist/editor/reviews/DiffView.js +7 -14
- package/dist/editor/reviews/DiffView.js.map +1 -1
- package/dist/editor/reviews/EditReviewSettingsDialog.js +6 -4
- package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
- package/dist/editor/reviews/MultiReviewManager.js +25 -3
- package/dist/editor/reviews/MultiReviewManager.js.map +1 -1
- package/dist/editor/reviews/PagesPanel.js +31 -15
- package/dist/editor/reviews/PagesPanel.js.map +1 -1
- package/dist/editor/reviews/PreviewInfo.js +1 -4
- package/dist/editor/reviews/PreviewInfo.js.map +1 -1
- package/dist/editor/reviews/ReviewCard.js +13 -7
- package/dist/editor/reviews/ReviewCard.js.map +1 -1
- package/dist/editor/reviews/ReviewDetail.js +3 -2
- package/dist/editor/reviews/ReviewDetail.js.map +1 -1
- package/dist/editor/reviews/ReviewsList.js +7 -3
- package/dist/editor/reviews/ReviewsList.js.map +1 -1
- package/dist/editor/reviews/SuggestedEdit.js +34 -3
- package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
- package/dist/editor/reviews/SuggestionDisplayPopover.js +31 -5
- package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/commentAi.js +25 -6
- package/dist/editor/reviews/commentAi.js.map +1 -1
- package/dist/editor/reviews/reviewCommands.js +4 -1
- package/dist/editor/reviews/reviewCommands.js.map +1 -1
- package/dist/editor/reviews/useMultiReview.js +2 -2
- package/dist/editor/reviews/useMultiReview.js.map +1 -1
- package/dist/editor/reviews/useReviews.d.ts +2 -2
- package/dist/editor/reviews/useReviews.js +12 -30
- package/dist/editor/reviews/useReviews.js.map +1 -1
- package/dist/editor/services/agentService.d.ts +229 -5
- package/dist/editor/services/agentService.js +292 -39
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/aiService.d.ts +57 -1
- package/dist/editor/services/aiService.js +79 -6
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/services/contentService.d.ts +6 -3
- package/dist/editor/services/contentService.js +13 -12
- package/dist/editor/services/contentService.js.map +1 -1
- package/dist/editor/services/editService.d.ts +52 -1
- package/dist/editor/services/editService.js +94 -2
- package/dist/editor/services/editService.js.map +1 -1
- package/dist/editor/services/indexService.js +1 -1
- package/dist/editor/services/indexService.js.map +1 -1
- package/dist/editor/services/reviewsService.d.ts +3 -6
- package/dist/editor/services/reviewsService.js +2 -11
- package/dist/editor/services/reviewsService.js.map +1 -1
- package/dist/editor/services/serviceHelper.d.ts +2 -1
- package/dist/editor/services/serviceHelper.js +112 -20
- package/dist/editor/services/serviceHelper.js.map +1 -1
- package/dist/editor/services/systemService.d.ts +2 -1
- package/dist/editor/services/systemService.js +3 -0
- package/dist/editor/services/systemService.js.map +1 -1
- package/dist/editor/services-server/api.d.ts +1 -2
- package/dist/editor/services-server/api.js +11 -6
- package/dist/editor/services-server/api.js.map +1 -1
- package/dist/editor/settings/About.js +317 -3
- package/dist/editor/settings/About.js.map +1 -1
- package/dist/editor/settings/QuotaInfo.js +210 -4
- package/dist/editor/settings/QuotaInfo.js.map +1 -1
- package/dist/editor/settings/SettingsView.js +25 -23
- package/dist/editor/settings/SettingsView.js.map +1 -1
- package/dist/editor/settings/Status.js +7 -6
- package/dist/editor/settings/Status.js.map +1 -1
- package/dist/editor/settings/index/useIndexStatus.js +20 -22
- package/dist/editor/settings/index/useIndexStatus.js.map +1 -1
- package/dist/editor/settings/panels/AgentsPanel.d.ts +0 -4
- package/dist/editor/settings/panels/AgentsPanel.js +95 -121
- package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ModelsPanel.js +329 -108
- package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProvidersPanel.d.ts +1 -1
- package/dist/editor/settings/panels/ProvidersPanel.js +86 -59
- package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
- package/dist/editor/settings/panels/SearchConfigPanel.js +4 -4
- package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/index.d.ts +3 -2
- package/dist/editor/settings/panels/index.js +3 -2
- package/dist/editor/settings/panels/index.js.map +1 -1
- package/dist/editor/settings/status/coreStatusChecks.js +124 -19
- package/dist/editor/settings/status/coreStatusChecks.js.map +1 -1
- package/dist/editor/settings/status/useStartupChecks.d.ts +3 -1
- package/dist/editor/settings/status/useStartupChecks.js +9 -5
- package/dist/editor/settings/status/useStartupChecks.js.map +1 -1
- package/dist/editor/setup-wizard/steps/CompleteStep.d.ts +2 -1
- package/dist/editor/setup-wizard/steps/CompleteStep.js +2 -1
- package/dist/editor/setup-wizard/steps/CompleteStep.js.map +1 -1
- package/dist/editor/sidebar/ComponentPalette.js +2 -1
- package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
- package/dist/editor/sidebar/ComponentTree.d.ts +8 -1
- package/dist/editor/sidebar/ComponentTree.js +216 -69
- package/dist/editor/sidebar/ComponentTree.js.map +1 -1
- package/dist/editor/sidebar/EditHistory.js +22 -46
- package/dist/editor/sidebar/EditHistory.js.map +1 -1
- package/dist/editor/sidebar/Favorites.js +4 -8
- package/dist/editor/sidebar/Favorites.js.map +1 -1
- package/dist/editor/sidebar/MainContentTree.js +4 -3
- package/dist/editor/sidebar/MainContentTree.js.map +1 -1
- package/dist/editor/sidebar/OperationItem.js +21 -7
- package/dist/editor/sidebar/OperationItem.js.map +1 -1
- package/dist/editor/sidebar/SidebarPanel.d.ts +3 -1
- package/dist/editor/sidebar/SidebarPanel.js +44 -12
- package/dist/editor/sidebar/SidebarPanel.js.map +1 -1
- package/dist/editor/sidebar/SidebarStack.d.ts +2 -1
- package/dist/editor/sidebar/SidebarStack.js +4 -3
- package/dist/editor/sidebar/SidebarStack.js.map +1 -1
- package/dist/editor/sidebar/Validation.js +22 -12
- package/dist/editor/sidebar/Validation.js.map +1 -1
- package/dist/editor/sidebar/Workbox.js +53 -3
- package/dist/editor/sidebar/Workbox.js.map +1 -1
- package/dist/editor/sidebar/WorkspaceRail.d.ts +0 -1
- package/dist/editor/sidebar/WorkspaceRail.js +56 -167
- package/dist/editor/sidebar/WorkspaceRail.js.map +1 -1
- package/dist/editor/tree-indicators/GutterColumns.d.ts +3 -1
- package/dist/editor/tree-indicators/GutterColumns.js +26 -5
- package/dist/editor/tree-indicators/GutterColumns.js.map +1 -1
- package/dist/editor/tree-indicators/GutterContext.d.ts +4 -0
- package/dist/editor/tree-indicators/GutterContext.js +23 -0
- package/dist/editor/tree-indicators/GutterContext.js.map +1 -1
- package/dist/editor/tree-indicators/index.d.ts +0 -1
- package/dist/editor/tree-indicators/index.js +0 -1
- package/dist/editor/tree-indicators/index.js.map +1 -1
- package/dist/editor/tree-indicators/types.d.ts +12 -1
- package/dist/editor/ui/CopyMoveTargetSelectorDialog.js +1 -1
- package/dist/editor/ui/CopyMoveTargetSelectorDialog.js.map +1 -1
- package/dist/editor/ui/Icons.js +1 -1
- package/dist/editor/ui/Icons.js.map +1 -1
- package/dist/editor/ui/ItemNameDialogNew.d.ts +2 -0
- package/dist/editor/ui/ItemNameDialogNew.js +33 -17
- package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
- package/dist/editor/ui/ItemSearch.js +7 -11
- package/dist/editor/ui/ItemSearch.js.map +1 -1
- package/dist/editor/ui/SimpleIconButton.js +1 -1
- package/dist/editor/ui/SimpleIconButton.js.map +1 -1
- package/dist/editor/ui/SimpleTabs.d.ts +1 -0
- package/dist/editor/ui/SimpleTabs.js +45 -25
- package/dist/editor/ui/SimpleTabs.js.map +1 -1
- package/dist/editor/ui/Splitter.d.ts +1 -0
- package/dist/editor/ui/Splitter.js +102 -86
- package/dist/editor/ui/Splitter.js.map +1 -1
- package/dist/editor/ui/TemplateSelectorDialog.js +4 -4
- package/dist/editor/ui/TemplateSelectorDialog.js.map +1 -1
- package/dist/editor/ui/TreeListSelector.d.ts +6 -1
- package/dist/editor/ui/TreeListSelector.js +2 -2
- package/dist/editor/ui/TreeListSelector.js.map +1 -1
- package/dist/editor/utils/keyboardNavigation.d.ts +6 -20
- package/dist/editor/utils/keyboardNavigation.js +48 -140
- package/dist/editor/utils/keyboardNavigation.js.map +1 -1
- package/dist/editor/utils.js +19 -9
- package/dist/editor/utils.js.map +1 -1
- package/dist/editor/views/CompareView.d.ts +3 -1
- package/dist/editor/views/CompareView.js +7 -5
- package/dist/editor/views/CompareView.js.map +1 -1
- package/dist/editor/views/EditView.js +1 -1
- package/dist/editor/views/EditView.js.map +1 -1
- package/dist/editor/views/EditorSlot.js +27 -34
- package/dist/editor/views/EditorSlot.js.map +1 -1
- package/dist/editor/views/ItemEditor.js +7 -3
- package/dist/editor/views/ItemEditor.js.map +1 -1
- package/dist/editor/views/MediaFolderEditView.js +1 -1
- package/dist/editor/views/MediaFolderEditView.js.map +1 -1
- package/dist/editor/views/ParheliaView.js +5 -6
- package/dist/editor/views/ParheliaView.js.map +1 -1
- package/dist/editor/views/SingleEditView.d.ts +2 -1
- package/dist/editor/views/SingleEditView.js +10 -8
- package/dist/editor/views/SingleEditView.js.map +1 -1
- package/dist/editor/views/editorSlotContext.js +35 -6
- package/dist/editor/views/editorSlotContext.js.map +1 -1
- package/dist/index.d.ts +16 -2
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/services/setupWizardService.d.ts +40 -13
- package/dist/setup/services/setupWizardService.js +32 -17
- package/dist/setup/services/setupWizardService.js.map +1 -1
- package/dist/setup/wizard/steps/AddModelDialog.js +12 -3
- package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -1
- package/dist/setup/wizard/steps/ImportModelDialog.js +39 -22
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
- package/dist/splash-screen/ModernSplashScreen.js +112 -32
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/splash-screen/NewPage.js +33 -50
- package/dist/splash-screen/NewPage.js.map +1 -1
- package/dist/splash-screen/OpenPage.js +2 -6
- package/dist/splash-screen/OpenPage.js.map +1 -1
- package/dist/splash-screen/ParheliaAssistantChat.js +12 -29
- package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
- package/dist/splash-screen/ParheliaLogo.js +87 -37
- package/dist/splash-screen/ParheliaLogo.js.map +1 -1
- package/dist/splash-screen/RecentPages.js +3 -3
- package/dist/splash-screen/RecentPages.js.map +1 -1
- package/dist/tour/Tour.d.ts +2 -1
- package/dist/tour/Tour.js +256 -75
- package/dist/tour/Tour.js.map +1 -1
- package/dist/tour/default-tour.js +222 -96
- package/dist/tour/default-tour.js.map +1 -1
- package/dist/types.d.ts +63 -29
- package/package.json +19 -15
- package/styles.css +14 -10
- package/dist/editor/ComponentInfo.d.ts +0 -4
- package/dist/editor/ComponentInfo.js +0 -41
- package/dist/editor/ComponentInfo.js.map +0 -1
- package/dist/editor/ai/HelpTerminal.d.ts +0 -5
- package/dist/editor/ai/HelpTerminal.js +0 -166
- package/dist/editor/ai/HelpTerminal.js.map +0 -1
- package/dist/editor/field-types/ReactQuill.d.ts +0 -125
- package/dist/editor/field-types/ReactQuill.js +0 -385
- package/dist/editor/field-types/ReactQuill.js.map +0 -1
- package/dist/editor/services-server/graphQL.d.ts +0 -29
- package/dist/editor/services-server/graphQL.js +0 -53
- package/dist/editor/services-server/graphQL.js.map +0 -1
- package/dist/editor/settings/AllAgentsPanel.d.ts +0 -5
- package/dist/editor/settings/AllAgentsPanel.js +0 -139
- package/dist/editor/settings/AllAgentsPanel.js.map +0 -1
- package/dist/editor/settings/LatestFeedback.d.ts +0 -1
- package/dist/editor/settings/LatestFeedback.js +0 -136
- package/dist/editor/settings/LatestFeedback.js.map +0 -1
- package/dist/editor/settings/Setup.d.ts +0 -1
- package/dist/editor/settings/Setup.js +0 -211
- package/dist/editor/settings/Setup.js.map +0 -1
- package/dist/editor/settings/panels/DatabasePanel.d.ts +0 -6
- package/dist/editor/settings/panels/DatabasePanel.js +0 -50
- package/dist/editor/settings/panels/DatabasePanel.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.d.ts +0 -2
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js +0 -195
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/index.d.ts +0 -2
- package/dist/editor/settings/setup-steps/AiSetupStep/index.js +0 -21
- package/dist/editor/settings/setup-steps/AiSetupStep/index.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.d.ts +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js +0 -233
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.d.ts +0 -15
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js +0 -14
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.d.ts +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js +0 -94
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/types.d.ts +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/types.js +0 -2
- package/dist/editor/settings/setup-steps/AiSetupStep/types.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.d.ts +0 -5
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.js +0 -44
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.js.map +0 -1
- package/dist/editor/settings/setup-steps/IndexSetupStep.d.ts +0 -2
- package/dist/editor/settings/setup-steps/IndexSetupStep.js +0 -36
- package/dist/editor/settings/setup-steps/IndexSetupStep.js.map +0 -1
- package/dist/editor/settings/setup-steps/SettingsSetupStep.d.ts +0 -2
- package/dist/editor/settings/setup-steps/SettingsSetupStep.js +0 -111
- package/dist/editor/settings/setup-steps/SettingsSetupStep.js.map +0 -1
- package/dist/editor/settings/setup-steps/SetupOverview.d.ts +0 -14
- package/dist/editor/settings/setup-steps/SetupOverview.js +0 -38
- package/dist/editor/settings/setup-steps/SetupOverview.js.map +0 -1
- package/dist/editor/sidebar/Debug.d.ts +0 -1
- package/dist/editor/sidebar/Debug.js +0 -70
- package/dist/editor/sidebar/Debug.js.map +0 -1
- package/dist/editor/sidebar/GraphQL.d.ts +0 -2
- package/dist/editor/sidebar/GraphQL.js +0 -234
- package/dist/editor/sidebar/GraphQL.js.map +0 -1
- package/dist/editor/sidebar/LeftToolbar.d.ts +0 -1
- package/dist/editor/sidebar/LeftToolbar.js +0 -12
- package/dist/editor/sidebar/LeftToolbar.js.map +0 -1
- package/dist/editor/sidebar/NavigationSidebar.d.ts +0 -4
- package/dist/editor/sidebar/NavigationSidebar.js +0 -254
- package/dist/editor/sidebar/NavigationSidebar.js.map +0 -1
- package/dist/editor/tree-indicators/GutterSelector.d.ts +0 -5
- package/dist/editor/tree-indicators/GutterSelector.js +0 -91
- package/dist/editor/tree-indicators/GutterSelector.js.map +0 -1
|
@@ -8,7 +8,10 @@ import { useDebouncedCallback } from "use-debounce";
|
|
|
8
8
|
import { createOrUpdateSuggestedEdit } from "../services/suggestedEditsService";
|
|
9
9
|
import { decode } from "html-entities";
|
|
10
10
|
import { GUID_REGEX_EXACT, getItemDescriptor } from "../utils";
|
|
11
|
+
import { copyItemsNeedsTerminalCompletion, waitForEditOperationTerminal, } from "./waitForEditOperationTerminal";
|
|
11
12
|
import { ExternalChangesWarningContent, TreeOperationConfirmContent, UndoDifferentItemContent, } from "./OperationDialogContent";
|
|
13
|
+
/** When true, the delete dialog shows "permanently delete (bypass recycle bin)". */
|
|
14
|
+
const ENABLE_HARD_DELETE_IN_DELETE_DIALOG = false;
|
|
12
15
|
// Track pending suggested edit save requests to prevent race conditions
|
|
13
16
|
const pendingSuggestedEditSaves = new Map();
|
|
14
17
|
// Track pending suggested edits to prevent creating duplicates before server response
|
|
@@ -41,6 +44,10 @@ export function getOperationsContext(state, ui) {
|
|
|
41
44
|
const [executingEditOperations, setExecutingEditOperations] = useState([]);
|
|
42
45
|
const lastOp = useRef(undefined);
|
|
43
46
|
const undoing = useRef(false);
|
|
47
|
+
// Track operation IDs that were successfully undone/redone but whose React state update
|
|
48
|
+
// hasn't been rendered yet. Cleared on each render (when stateRef.current is up-to-date).
|
|
49
|
+
const recentlyUndoneIds = useRef(new Set());
|
|
50
|
+
const recentlyRedoneIds = useRef(new Set());
|
|
44
51
|
// Cache for field items (template field definitions) - these are static and don't change during editing
|
|
45
52
|
// This prevents refetching on every keystroke since itemsRepository always refetches version 0
|
|
46
53
|
const fieldItemsCache = useRef(new Map());
|
|
@@ -48,6 +55,10 @@ export function getOperationsContext(state, ui) {
|
|
|
48
55
|
// Update ref synchronously during render (not via useEffect) to avoid stale state issues
|
|
49
56
|
// This ensures stateRef.current always has the latest state when undo/redo is called
|
|
50
57
|
stateRef.current = state;
|
|
58
|
+
// The render means React has processed pending state updates, so the editHistory in
|
|
59
|
+
// stateRef is now authoritative. Clear the recently-processed tracking sets.
|
|
60
|
+
recentlyUndoneIds.current.clear();
|
|
61
|
+
recentlyRedoneIds.current.clear();
|
|
51
62
|
// Extract values to avoid state object reference issues
|
|
52
63
|
const itemsRepository = stateRef.current.itemsRepository;
|
|
53
64
|
// Debounced version of createOrUpdateSuggestedEdit to prevent excessive API calls
|
|
@@ -114,6 +125,22 @@ export function getOperationsContext(state, ui) {
|
|
|
114
125
|
const result = await executeOp(op);
|
|
115
126
|
return result;
|
|
116
127
|
}, [executeOp]);
|
|
128
|
+
const updateRenderingParameters = useCallback(async (componentId, parameters) => {
|
|
129
|
+
const pageItem = stateRef.current.page?.item?.descriptor;
|
|
130
|
+
if (!pageItem) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const op = {
|
|
134
|
+
type: "update-rendering-parameters",
|
|
135
|
+
componentId,
|
|
136
|
+
parameters,
|
|
137
|
+
mainItem: pageItem,
|
|
138
|
+
date: new Date().toISOString(),
|
|
139
|
+
id: uuid(),
|
|
140
|
+
title: "Update rendering parameters",
|
|
141
|
+
};
|
|
142
|
+
await executeOp(op, { refresh: "immediate" });
|
|
143
|
+
}, [executeOp]);
|
|
117
144
|
const handleResult = (result, options) => {
|
|
118
145
|
if (handleErrorResult(result, ui, stateRef.current)) {
|
|
119
146
|
return;
|
|
@@ -239,12 +266,28 @@ export function getOperationsContext(state, ui) {
|
|
|
239
266
|
title: "Rename item",
|
|
240
267
|
});
|
|
241
268
|
stateRef.current.requestRefresh("immediate");
|
|
242
|
-
// Only properties changed (name), not children
|
|
243
|
-
//
|
|
244
|
-
|
|
269
|
+
// Only properties changed (name/path), not children.
|
|
270
|
+
// Refresh both the operation descriptor and (when applicable) the currently loaded
|
|
271
|
+
// descriptor to handle latest-version descriptor mismatches.
|
|
272
|
+
const currentLoadedItem = stateRef.current.item;
|
|
273
|
+
const descriptorsToRefresh = [item];
|
|
274
|
+
if (currentLoadedItem &&
|
|
275
|
+
currentLoadedItem.id === item.id &&
|
|
276
|
+
currentLoadedItem.language === item.language) {
|
|
277
|
+
descriptorsToRefresh.push(currentLoadedItem.descriptor);
|
|
278
|
+
}
|
|
279
|
+
// Await the refresh to ensure cache is updated and events are fired before returning.
|
|
280
|
+
await itemsRepository.refreshItems(descriptorsToRefresh, {
|
|
245
281
|
properties: true,
|
|
246
282
|
children: false,
|
|
247
283
|
});
|
|
284
|
+
// If the renamed item is currently loaded, force a descriptor reload so
|
|
285
|
+
// UI panels (e.g. Item Info) don't remain one rename behind.
|
|
286
|
+
if (currentLoadedItem &&
|
|
287
|
+
currentLoadedItem.id === item.id &&
|
|
288
|
+
currentLoadedItem.language === item.language) {
|
|
289
|
+
await stateRef.current.loadItem(currentLoadedItem.descriptor);
|
|
290
|
+
}
|
|
248
291
|
}, [itemsRepository, executeOp]);
|
|
249
292
|
const lastEditField = useRef(undefined);
|
|
250
293
|
const editField = useCallback(async ({ field, value, rawValue, refresh = "immediate", }) => {
|
|
@@ -451,6 +494,9 @@ export function getOperationsContext(state, ui) {
|
|
|
451
494
|
// This ensures the UI only changes when the operation truly completes
|
|
452
495
|
handleResult(result, { refresh: "immediate" });
|
|
453
496
|
if (result.type === "success") {
|
|
497
|
+
for (const op of ops) {
|
|
498
|
+
recentlyUndoneIds.current.add(op.id);
|
|
499
|
+
}
|
|
454
500
|
// Check if any operations are executing in background (long-running undo)
|
|
455
501
|
const executingOps = result.data.filter((x) => x.executionStatus === "executing");
|
|
456
502
|
if (executingOps.length > 0) {
|
|
@@ -494,12 +540,21 @@ export function getOperationsContext(state, ui) {
|
|
|
494
540
|
}
|
|
495
541
|
else {
|
|
496
542
|
ui.showErrorToast({ summary: result.summary, details: result.details });
|
|
543
|
+
// Refresh history so toolbar state matches server (fixes inconsistent UI under load)
|
|
544
|
+
stateRef.current.refreshHistory?.(stateRef.current.historyMode, stateRef.current.showOnlyMyChanges);
|
|
497
545
|
return false;
|
|
498
546
|
}
|
|
499
547
|
}, [ui, itemsRepository]);
|
|
500
548
|
const undoOperations = useCallback(async (operationIds) => {
|
|
501
|
-
if (
|
|
549
|
+
if (!operationIds.length)
|
|
502
550
|
return false;
|
|
551
|
+
if (undoing.current) {
|
|
552
|
+
const deadline = Date.now() + 5000;
|
|
553
|
+
while (undoing.current && Date.now() < deadline) {
|
|
554
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
555
|
+
}
|
|
556
|
+
if (undoing.current)
|
|
557
|
+
return false;
|
|
503
558
|
}
|
|
504
559
|
undoing.current = true;
|
|
505
560
|
try {
|
|
@@ -525,7 +580,12 @@ export function getOperationsContext(state, ui) {
|
|
|
525
580
|
}, [executeUndoOperation]);
|
|
526
581
|
const undo = useCallback(async (operationId) => {
|
|
527
582
|
if (undoing.current) {
|
|
528
|
-
|
|
583
|
+
const deadline = Date.now() + 5000;
|
|
584
|
+
while (undoing.current && Date.now() < deadline) {
|
|
585
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
586
|
+
}
|
|
587
|
+
if (undoing.current)
|
|
588
|
+
return false;
|
|
529
589
|
}
|
|
530
590
|
undoing.current = true;
|
|
531
591
|
try {
|
|
@@ -533,11 +593,27 @@ export function getOperationsContext(state, ui) {
|
|
|
533
593
|
const filterBySession = stateRef.current.showOnlyMyChanges;
|
|
534
594
|
const historyMode = stateRef.current.historyMode;
|
|
535
595
|
let ops;
|
|
536
|
-
// If
|
|
537
|
-
//
|
|
596
|
+
// If the caller supplied an operationId that was already undone in this session
|
|
597
|
+
// (React hasn't re-rendered yet, so the UI may hold a stale reference), discard it
|
|
598
|
+
// and fall through to the general selection logic below.
|
|
599
|
+
if (operationId && recentlyUndoneIds.current.has(operationId)) {
|
|
600
|
+
operationId = undefined;
|
|
601
|
+
}
|
|
602
|
+
// If a specific operationId is provided (from the UI), always honor it so the UI and
|
|
603
|
+
// server stay in sync under load. Use the op from history if present (for confirmations),
|
|
604
|
+
// otherwise call the API with just the id (server is source of truth).
|
|
538
605
|
if (operationId) {
|
|
539
606
|
const targetOp = stateRef.current.editHistory.find((x) => x.id === operationId && x.canUndo);
|
|
540
|
-
|
|
607
|
+
if (targetOp) {
|
|
608
|
+
ops = [targetOp];
|
|
609
|
+
}
|
|
610
|
+
else {
|
|
611
|
+
// Not in local state (e.g. history refreshed under load). Call API with this id
|
|
612
|
+
// so we don't silently do nothing; server will accept or return an error.
|
|
613
|
+
ops = [
|
|
614
|
+
{ id: operationId, type: "unknown" },
|
|
615
|
+
];
|
|
616
|
+
}
|
|
541
617
|
}
|
|
542
618
|
else {
|
|
543
619
|
// Select undoable operations respecting showOnlyMyChanges and historyMode filters
|
|
@@ -545,6 +621,8 @@ export function getOperationsContext(state, ui) {
|
|
|
545
621
|
.filter((x) => {
|
|
546
622
|
if (!x.canUndo)
|
|
547
623
|
return false;
|
|
624
|
+
if (recentlyUndoneIds.current.has(x.id))
|
|
625
|
+
return false;
|
|
548
626
|
// Session filter (showOnlyMyChanges)
|
|
549
627
|
if (filterBySession &&
|
|
550
628
|
x.sessionId !== stateRef.current.sessionId) {
|
|
@@ -580,6 +658,10 @@ export function getOperationsContext(state, ui) {
|
|
|
580
658
|
undoing.current = false;
|
|
581
659
|
return false;
|
|
582
660
|
}
|
|
661
|
+
// When we only have an id (op not in local history), skip confirmations and call API
|
|
662
|
+
if (firstOp.type === "unknown") {
|
|
663
|
+
return await executeUndoOperation(ops);
|
|
664
|
+
}
|
|
583
665
|
// Check if this is a cross-session operation and show warning first
|
|
584
666
|
const isCrossSession = firstOp.sessionId !== stateRef.current.sessionId;
|
|
585
667
|
if (isCrossSession) {
|
|
@@ -740,6 +822,7 @@ export function getOperationsContext(state, ui) {
|
|
|
740
822
|
// which merges server responses + websocket updates while enforcing scope filtering.
|
|
741
823
|
handleResult(result, { refresh: "immediate" });
|
|
742
824
|
if (result.type === "success") {
|
|
825
|
+
recentlyRedoneIds.current.add(op.id);
|
|
743
826
|
// Check if the operation is executing in background (long-running redo)
|
|
744
827
|
const executingOps = result.data.filter((x) => x.executionStatus === "executing");
|
|
745
828
|
if (executingOps.length > 0) {
|
|
@@ -769,12 +852,19 @@ export function getOperationsContext(state, ui) {
|
|
|
769
852
|
}
|
|
770
853
|
else {
|
|
771
854
|
ui.showErrorToast({ summary: result.summary, details: result.details });
|
|
855
|
+
stateRef.current.refreshHistory?.(stateRef.current.historyMode, stateRef.current.showOnlyMyChanges);
|
|
772
856
|
return false;
|
|
773
857
|
}
|
|
774
858
|
}, [ui, itemsRepository]);
|
|
775
859
|
const redo = useCallback(async (operationId) => {
|
|
776
|
-
if (undoing.current)
|
|
777
|
-
|
|
860
|
+
if (undoing.current) {
|
|
861
|
+
const deadline = Date.now() + 5000;
|
|
862
|
+
while (undoing.current && Date.now() < deadline) {
|
|
863
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
864
|
+
}
|
|
865
|
+
if (undoing.current)
|
|
866
|
+
return false;
|
|
867
|
+
}
|
|
778
868
|
undoing.current = true;
|
|
779
869
|
try {
|
|
780
870
|
const currentItem = stateRef.current.item?.descriptor;
|
|
@@ -783,16 +873,28 @@ export function getOperationsContext(state, ui) {
|
|
|
783
873
|
const filterBySession = stateRef.current.showOnlyMyChanges;
|
|
784
874
|
const historyMode = stateRef.current.historyMode;
|
|
785
875
|
let op;
|
|
786
|
-
|
|
787
|
-
|
|
876
|
+
if (operationId && recentlyRedoneIds.current.has(operationId)) {
|
|
877
|
+
operationId = undefined;
|
|
878
|
+
}
|
|
879
|
+
// If a specific operationId is provided (from the UI), always honor it so the UI and
|
|
880
|
+
// server stay in sync under load. Use the op from history if present (for confirmations),
|
|
881
|
+
// otherwise call the API with just the id (server is source of truth).
|
|
788
882
|
if (operationId) {
|
|
789
883
|
op = stateRef.current.editHistory.find((x) => x.id === operationId && x.canRedo);
|
|
884
|
+
if (!op) {
|
|
885
|
+
op = {
|
|
886
|
+
id: operationId,
|
|
887
|
+
type: "unknown",
|
|
888
|
+
};
|
|
889
|
+
}
|
|
790
890
|
}
|
|
791
891
|
else {
|
|
792
892
|
// Select redoable operations respecting showOnlyMyChanges and historyMode filters
|
|
793
893
|
op = [...stateRef.current.editHistory].reverse().find((x) => {
|
|
794
894
|
if (!x.canRedo)
|
|
795
895
|
return false;
|
|
896
|
+
if (recentlyRedoneIds.current.has(x.id))
|
|
897
|
+
return false;
|
|
796
898
|
// Session filter (showOnlyMyChanges)
|
|
797
899
|
if (filterBySession && x.sessionId !== stateRef.current.sessionId) {
|
|
798
900
|
return false;
|
|
@@ -819,6 +921,10 @@ export function getOperationsContext(state, ui) {
|
|
|
819
921
|
}
|
|
820
922
|
if (!op)
|
|
821
923
|
return false;
|
|
924
|
+
// When we only have an id (op not in local history), skip confirmations and call API
|
|
925
|
+
if (op.type === "unknown") {
|
|
926
|
+
return await executeRedoOperation(op);
|
|
927
|
+
}
|
|
822
928
|
// Check if this is a cross-session operation and show warning first
|
|
823
929
|
const isCrossSession = op.sessionId !== stateRef.current.sessionId;
|
|
824
930
|
if (isCrossSession) {
|
|
@@ -954,19 +1060,36 @@ export function getOperationsContext(state, ui) {
|
|
|
954
1060
|
// Show confirmation dialog (with reference warning if applicable)
|
|
955
1061
|
const result = await new Promise((resolve) => {
|
|
956
1062
|
const undoCheckboxId = `delete-enable-undo-${Date.now()}`;
|
|
957
|
-
const
|
|
1063
|
+
const hardDeleteCheckboxId = `delete-hard-delete-${Date.now()}`;
|
|
1064
|
+
const deleteOptions = (_jsxs("div", { className: "mt-4 space-y-3", children: [ENABLE_HARD_DELETE_IN_DELETE_DIALOG ? (_jsx("div", { className: "rounded-md border border-red-200 bg-red-50/60 p-3", children: _jsxs("label", { className: "flex cursor-pointer items-start gap-2", children: [_jsx("input", { type: "checkbox", id: hardDeleteCheckboxId, "data-testid": "delete-hard-delete-checkbox", defaultChecked: options?.hardDelete ?? false, className: "mt-0.5 h-4 w-4 rounded border-gray-300" }), _jsxs("span", { className: "space-y-1", children: [_jsx("span", { className: "block text-sm font-medium text-red-900", children: "Permanently delete (bypass recycle bin)" }), _jsx("span", { className: "block text-xs text-red-800", children: "This skips the recycle bin. Items can only be restored if undo is enabled for this operation." })] })] }) })) : null, _jsxs("label", { className: "flex cursor-pointer items-center gap-2", children: [_jsx("input", { type: "checkbox", id: undoCheckboxId, "data-testid": "delete-enable-undo-checkbox", defaultChecked: options?.canUndo ?? true, className: "h-4 w-4 rounded border-gray-300" }), _jsx("span", { className: "text-sm", children: "Enable undo (serializes complete content)" })] })] }));
|
|
958
1065
|
const getEnableUndo = () => {
|
|
959
1066
|
const checkbox = document.getElementById(undoCheckboxId);
|
|
960
|
-
return checkbox?.checked ?? true;
|
|
1067
|
+
return checkbox?.checked ?? options?.canUndo ?? true;
|
|
1068
|
+
};
|
|
1069
|
+
const getHardDelete = () => {
|
|
1070
|
+
if (!ENABLE_HARD_DELETE_IN_DELETE_DIALOG)
|
|
1071
|
+
return false;
|
|
1072
|
+
const checkbox = document.getElementById(hardDeleteCheckboxId);
|
|
1073
|
+
return checkbox?.checked ?? options?.hardDelete ?? false;
|
|
961
1074
|
};
|
|
962
1075
|
if (hasReferences) {
|
|
963
1076
|
ui.confirmationDialogRef.current?.confirm({
|
|
964
1077
|
header: "Delete Items with References",
|
|
965
|
-
message: (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { children: "You are about to delete the following items which are referenced by other content:" }), _jsx(DeleteItemsWarning, { references: references }), _jsx("p", { className: "text-muted-foreground mt-4 text-sm", children: "Deleting these items may break links in your content. Are you sure you want to proceed?" }),
|
|
1078
|
+
message: (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { children: "You are about to delete the following items which are referenced by other content:" }), _jsx(DeleteItemsWarning, { references: references }), _jsx("p", { className: "text-muted-foreground mt-4 text-sm", children: "Deleting these items may break links in your content. Are you sure you want to proceed?" }), deleteOptions] })),
|
|
966
1079
|
acceptLabel: "Delete Anyway",
|
|
967
1080
|
rejectLabel: "Cancel",
|
|
968
|
-
accept: () => resolve({
|
|
969
|
-
|
|
1081
|
+
accept: () => resolve({
|
|
1082
|
+
confirmed: true,
|
|
1083
|
+
enableUndo: getEnableUndo(),
|
|
1084
|
+
hardDelete: getHardDelete(),
|
|
1085
|
+
}),
|
|
1086
|
+
reject: () => resolve({
|
|
1087
|
+
confirmed: false,
|
|
1088
|
+
enableUndo: options?.canUndo ?? true,
|
|
1089
|
+
hardDelete: ENABLE_HARD_DELETE_IN_DELETE_DIALOG
|
|
1090
|
+
? (options?.hardDelete ?? false)
|
|
1091
|
+
: false,
|
|
1092
|
+
}),
|
|
970
1093
|
showCancel: false,
|
|
971
1094
|
});
|
|
972
1095
|
}
|
|
@@ -974,11 +1097,21 @@ export function getOperationsContext(state, ui) {
|
|
|
974
1097
|
// No references - use simple confirmation
|
|
975
1098
|
ui.confirmationDialogRef.current?.confirm({
|
|
976
1099
|
header: "Delete Items",
|
|
977
|
-
message: (_jsxs("div", { children: [_jsxs("p", { children: ["Are you sure you want to delete
|
|
1100
|
+
message: (_jsxs("div", { children: [_jsxs("p", { children: ["Are you sure you want to delete", " ", _jsx("span", { className: "font-semibold", children: itemNames }), "?"] }), deleteOptions] })),
|
|
978
1101
|
acceptLabel: "Delete",
|
|
979
1102
|
rejectLabel: "Cancel",
|
|
980
|
-
accept: () => resolve({
|
|
981
|
-
|
|
1103
|
+
accept: () => resolve({
|
|
1104
|
+
confirmed: true,
|
|
1105
|
+
enableUndo: getEnableUndo(),
|
|
1106
|
+
hardDelete: getHardDelete(),
|
|
1107
|
+
}),
|
|
1108
|
+
reject: () => resolve({
|
|
1109
|
+
confirmed: false,
|
|
1110
|
+
enableUndo: options?.canUndo ?? true,
|
|
1111
|
+
hardDelete: ENABLE_HARD_DELETE_IN_DELETE_DIALOG
|
|
1112
|
+
? (options?.hardDelete ?? false)
|
|
1113
|
+
: false,
|
|
1114
|
+
}),
|
|
982
1115
|
showCancel: false,
|
|
983
1116
|
});
|
|
984
1117
|
}
|
|
@@ -986,6 +1119,7 @@ export function getOperationsContext(state, ui) {
|
|
|
986
1119
|
if (!result.confirmed)
|
|
987
1120
|
return;
|
|
988
1121
|
const canUndoValue = result.enableUndo;
|
|
1122
|
+
const hardDeleteValue = result.hardDelete;
|
|
989
1123
|
const op = {
|
|
990
1124
|
type: "delete-items",
|
|
991
1125
|
items: items.map(getItemDescriptor),
|
|
@@ -993,8 +1127,9 @@ export function getOperationsContext(state, ui) {
|
|
|
993
1127
|
getItemDescriptor(items[0]),
|
|
994
1128
|
date: new Date().toISOString(),
|
|
995
1129
|
id: uuid(),
|
|
996
|
-
title:
|
|
1130
|
+
title: `${hardDeleteValue ? "Hard delete" : "Delete"} ${itemNames}`,
|
|
997
1131
|
canUndo: canUndoValue,
|
|
1132
|
+
hardDelete: hardDeleteValue,
|
|
998
1133
|
};
|
|
999
1134
|
const returnedOp = await executeOp(op);
|
|
1000
1135
|
itemsRepository.onItemsDeleted(itemsToDelete.map((x) => ({
|
|
@@ -1002,6 +1137,7 @@ export function getOperationsContext(state, ui) {
|
|
|
1002
1137
|
parentId: x.parentId,
|
|
1003
1138
|
})));
|
|
1004
1139
|
stateRef.current.requestRefresh("immediate");
|
|
1140
|
+
return true;
|
|
1005
1141
|
}, [itemsRepository, executeOp, ui]);
|
|
1006
1142
|
const moveItems = useCallback(async (items, target, index) => {
|
|
1007
1143
|
// Use generic edit endpoint for long-running operation support
|
|
@@ -1077,9 +1213,17 @@ export function getOperationsContext(state, ui) {
|
|
|
1077
1213
|
id: uuid(),
|
|
1078
1214
|
title: `Copying ${items.length} item(s)...`,
|
|
1079
1215
|
};
|
|
1080
|
-
|
|
1216
|
+
let copyResult = (await executeOp(op));
|
|
1217
|
+
if (copyItemsNeedsTerminalCompletion(copyResult)) {
|
|
1218
|
+
try {
|
|
1219
|
+
const terminal = await waitForEditOperationTerminal(copyResult.id, 120_000);
|
|
1220
|
+
copyResult = { ...copyResult, ...terminal };
|
|
1221
|
+
}
|
|
1222
|
+
catch {
|
|
1223
|
+
return [];
|
|
1224
|
+
}
|
|
1225
|
+
}
|
|
1081
1226
|
// Return created item descriptors from the operation result
|
|
1082
|
-
const copyResult = result;
|
|
1083
1227
|
if (copyResult?.createdItemIds) {
|
|
1084
1228
|
return copyResult.createdItemIds.map((id) => ({
|
|
1085
1229
|
id,
|
|
@@ -1103,17 +1247,29 @@ export function getOperationsContext(state, ui) {
|
|
|
1103
1247
|
title: `Duplicating item...`,
|
|
1104
1248
|
name, // Pass the user-provided name to the backend
|
|
1105
1249
|
};
|
|
1106
|
-
|
|
1107
|
-
if (
|
|
1250
|
+
let copyResult = (await executeOp(op));
|
|
1251
|
+
if (copyItemsNeedsTerminalCompletion(copyResult)) {
|
|
1252
|
+
try {
|
|
1253
|
+
const terminal = await waitForEditOperationTerminal(copyResult.id, 120_000);
|
|
1254
|
+
copyResult = { ...copyResult, ...terminal };
|
|
1255
|
+
}
|
|
1256
|
+
catch (e) {
|
|
1257
|
+
ui.showErrorToast({
|
|
1258
|
+
summary: "Duplicate failed",
|
|
1259
|
+
details: e?.message || "Operation timed out",
|
|
1260
|
+
});
|
|
1261
|
+
return;
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
if (copyResult.errorMessage) {
|
|
1108
1265
|
ui.showErrorToast({
|
|
1109
1266
|
summary: "Duplicate failed",
|
|
1110
|
-
details:
|
|
1267
|
+
details: copyResult.errorMessage,
|
|
1111
1268
|
});
|
|
1112
1269
|
return;
|
|
1113
1270
|
}
|
|
1114
1271
|
itemsRepository.refreshItems([target]);
|
|
1115
1272
|
// Return created item descriptor from the operation result
|
|
1116
|
-
const copyResult = result;
|
|
1117
1273
|
if (copyResult?.createdItemIds?.length > 0) {
|
|
1118
1274
|
return {
|
|
1119
1275
|
id: copyResult.createdItemIds[0],
|
|
@@ -1123,6 +1279,12 @@ export function getOperationsContext(state, ui) {
|
|
|
1123
1279
|
}
|
|
1124
1280
|
return undefined;
|
|
1125
1281
|
}, [executeOp, itemsRepository, ui]);
|
|
1282
|
+
const publishItem = useCallback(async (operation) => {
|
|
1283
|
+
const result = (await executeOp(operation, {
|
|
1284
|
+
refresh: "immediate",
|
|
1285
|
+
}));
|
|
1286
|
+
return result;
|
|
1287
|
+
}, [executeOp]);
|
|
1126
1288
|
const onFieldBlur = useCallback(() => {
|
|
1127
1289
|
// Reset the last operation to force creation of a new operation
|
|
1128
1290
|
// when the user returns to edit any field after losing focus
|
|
@@ -1138,6 +1300,7 @@ export function getOperationsContext(state, ui) {
|
|
|
1138
1300
|
unlockItems: unlockItemsAndRefresh,
|
|
1139
1301
|
executeWorkflowCommand: executeWorkflowCommandAndRefresh,
|
|
1140
1302
|
editField,
|
|
1303
|
+
updateRenderingParameters,
|
|
1141
1304
|
undo,
|
|
1142
1305
|
undoOperations,
|
|
1143
1306
|
redo,
|
|
@@ -1147,6 +1310,7 @@ export function getOperationsContext(state, ui) {
|
|
|
1147
1310
|
createItem,
|
|
1148
1311
|
createVersion,
|
|
1149
1312
|
removeVersion,
|
|
1313
|
+
publishItem,
|
|
1150
1314
|
duplicateComponents,
|
|
1151
1315
|
undoing: undoing.current,
|
|
1152
1316
|
moveItems,
|
|
@@ -1160,6 +1324,7 @@ export function getOperationsContext(state, ui) {
|
|
|
1160
1324
|
unlockItemsAndRefresh,
|
|
1161
1325
|
executeWorkflowCommandAndRefresh,
|
|
1162
1326
|
editField,
|
|
1327
|
+
updateRenderingParameters,
|
|
1163
1328
|
undo,
|
|
1164
1329
|
undoOperations,
|
|
1165
1330
|
redo,
|
|
@@ -1169,6 +1334,7 @@ export function getOperationsContext(state, ui) {
|
|
|
1169
1334
|
createItem,
|
|
1170
1335
|
createVersion,
|
|
1171
1336
|
removeVersion,
|
|
1337
|
+
publishItem,
|
|
1172
1338
|
duplicateComponents,
|
|
1173
1339
|
moveItems,
|
|
1174
1340
|
mode,
|
|
@@ -1230,8 +1396,12 @@ async function getOrMergeSuggestedEditOp(field, rawValue, value, state) {
|
|
|
1230
1396
|
pendingEdit.updatedBy = state.user?.name || "unknown";
|
|
1231
1397
|
return pendingEdit;
|
|
1232
1398
|
}
|
|
1399
|
+
const matchingSuggestions = state.suggestedEdits.filter((edit) => edit.mainItemId === page.item.descriptor.id &&
|
|
1400
|
+
edit.mainItemLanguage === page.item.descriptor.language &&
|
|
1401
|
+
edit.itemId === item.id &&
|
|
1402
|
+
edit.fieldId === field.fieldId);
|
|
1233
1403
|
// Attempt to find an existing suggested edit by the same user for this field.
|
|
1234
|
-
const existing =
|
|
1404
|
+
const existing = matchingSuggestions.find((edit) => edit.mainItemId === page.item.descriptor.id &&
|
|
1235
1405
|
edit.mainItemLanguage === page.item.descriptor.language &&
|
|
1236
1406
|
edit.mainItemVersion === page.item.descriptor.version &&
|
|
1237
1407
|
edit.itemId === item.id &&
|
|
@@ -1243,8 +1413,10 @@ async function getOrMergeSuggestedEditOp(field, rawValue, value, state) {
|
|
|
1243
1413
|
existing.newValue = newVal || "";
|
|
1244
1414
|
existing.updated = new Date().toISOString();
|
|
1245
1415
|
existing.updatedBy = state.user?.name || "unknown";
|
|
1416
|
+
const nextSuggestedEdits = [...state.suggestedEdits];
|
|
1417
|
+
state.suggestedEdits = nextSuggestedEdits;
|
|
1246
1418
|
// Optionally, you might update the comments or other fields.
|
|
1247
|
-
state.setSuggestedEdits(
|
|
1419
|
+
state.setSuggestedEdits(nextSuggestedEdits);
|
|
1248
1420
|
return existing;
|
|
1249
1421
|
}
|
|
1250
1422
|
else {
|
|
@@ -1262,12 +1434,18 @@ async function getOrMergeSuggestedEditOp(field, rawValue, value, state) {
|
|
|
1262
1434
|
fieldId: field.fieldId,
|
|
1263
1435
|
oldValue: fieldItem.rawValue || "",
|
|
1264
1436
|
newValue: newVal || "",
|
|
1437
|
+
author: state.user?.name || "unknown",
|
|
1265
1438
|
status: "pending",
|
|
1439
|
+
updatedBy: state.user?.name || "unknown",
|
|
1440
|
+
created: new Date().toISOString(),
|
|
1441
|
+
updated: new Date().toISOString(),
|
|
1266
1442
|
type: "FieldValue",
|
|
1267
1443
|
};
|
|
1268
1444
|
// Add to pending edits to prevent race conditions
|
|
1269
1445
|
pendingSuggestedEdits.set(fieldKey, newEdit);
|
|
1270
|
-
|
|
1446
|
+
const nextSuggestedEdits = [...state.suggestedEdits, newEdit];
|
|
1447
|
+
state.suggestedEdits = nextSuggestedEdits;
|
|
1448
|
+
state.setSuggestedEdits(nextSuggestedEdits);
|
|
1271
1449
|
return newEdit;
|
|
1272
1450
|
}
|
|
1273
1451
|
}
|