@parhelia/core 0.1.12882 → 0.1.12884
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/AgentsSidebar.js +1 -1
- package/dist/agents-view/AgentsSidebar.js.map +1 -1
- package/dist/agents-view/AgentsTitlebar.d.ts +1 -1
- package/dist/agents-view/AgentsTitlebar.js +3 -6
- package/dist/agents-view/AgentsTitlebar.js.map +1 -1
- package/dist/agents-view/AgentsView.d.ts +2 -2
- package/dist/agents-view/AgentsView.js +2 -2
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/agents-view/AgentsWorkspaceView.js +1 -12
- package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
- package/dist/agents-view/CreateAgentView.d.ts +1 -1
- package/dist/agents-view/CreateAgentView.js +1 -1
- package/dist/agents-view/DateAgentsGroup.js +12 -1
- package/dist/agents-view/DateAgentsGroup.js.map +1 -1
- package/dist/agents-view/ProfileAgentsGroup.js +16 -4
- package/dist/agents-view/ProfileAgentsGroup.js.map +1 -1
- package/dist/components/ui/card.d.ts +3 -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.d.ts +2 -1
- package/dist/components/ui/context-menu.js +6 -3
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/input.js +2 -2
- package/dist/components/ui/input.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/textarea.js +2 -2
- package/dist/components/ui/textarea.js.map +1 -1
- package/dist/config/config.js +107 -12
- package/dist/config/config.js.map +1 -1
- package/dist/editor/ContextMenu.d.ts +1 -0
- package/dist/editor/ContextMenu.js +4 -4
- package/dist/editor/ContextMenu.js.map +1 -1
- package/dist/editor/FieldActionsOverlay.d.ts +0 -1
- package/dist/editor/FieldActionsOverlay.js +1 -45
- package/dist/editor/FieldActionsOverlay.js.map +1 -1
- package/dist/editor/FieldHistory.d.ts +2 -1
- package/dist/editor/FieldHistory.js +13 -12
- package/dist/editor/FieldHistory.js.map +1 -1
- package/dist/editor/FieldListField.d.ts +1 -1
- package/dist/editor/FieldListField.js +24 -36
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/ImageEditor.d.ts +6 -1
- package/dist/editor/ImageEditor.js +19 -3
- package/dist/editor/ImageEditor.js.map +1 -1
- package/dist/editor/LinkEditorDialog.d.ts +9 -2
- package/dist/editor/LinkEditorDialog.js +174 -70
- package/dist/editor/LinkEditorDialog.js.map +1 -1
- package/dist/editor/MainLayout.js +49 -6
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/MobileLayout.js +33 -1
- package/dist/editor/MobileLayout.js.map +1 -1
- package/dist/editor/PictureCropper.js +45 -28
- package/dist/editor/PictureCropper.js.map +1 -1
- package/dist/editor/PictureEditor.d.ts +2 -1
- package/dist/editor/PictureEditor.js +5 -14
- package/dist/editor/PictureEditor.js.map +1 -1
- package/dist/editor/ai/AgentProfileSelector.js +7 -7
- package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
- package/dist/editor/ai/Agents.js +20 -6
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/GuidanceOverlay.js +1 -11
- package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
- package/dist/editor/ai/InlineAiDialog.d.ts +1 -0
- package/dist/editor/ai/InlineAiDialog.js +254 -202
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/InlineAiTextEditTooltip.d.ts +8 -0
- package/dist/editor/ai/InlineAiTextEditTooltip.js +10 -0
- package/dist/editor/ai/InlineAiTextEditTooltip.js.map +1 -0
- package/dist/editor/ai/InlineAiTrigger.js +158 -31
- package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
- package/dist/editor/ai/dialogs/capturePageDom.js +66 -36
- package/dist/editor/ai/dialogs/capturePageDom.js.map +1 -1
- package/dist/editor/ai/dialogs/capturePageScreenshot.js +281 -162
- package/dist/editor/ai/dialogs/capturePageScreenshot.js.map +1 -1
- package/dist/editor/ai/inlineAiTextEditLabels.d.ts +2 -0
- package/dist/editor/ai/inlineAiTextEditLabels.js +8 -0
- package/dist/editor/ai/inlineAiTextEditLabels.js.map +1 -0
- package/dist/editor/ai/prepareInlineAiTextSelection.d.ts +5 -0
- package/dist/editor/ai/prepareInlineAiTextSelection.js +86 -0
- package/dist/editor/ai/prepareInlineAiTextSelection.js.map +1 -0
- package/dist/editor/ai/terminal/agentSessionState.d.ts +3 -0
- package/dist/editor/ai/terminal/agentSessionState.js +3 -1
- package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
- package/dist/editor/ai/terminal/agentStartRequest.d.ts +2 -1
- package/dist/editor/ai/terminal/agentStartRequest.js +2 -1
- package/dist/editor/ai/terminal/agentStartRequest.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentCostDisplay.js +1 -1
- package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentDocumentList.d.ts +7 -0
- package/dist/editor/ai/terminal/components/AgentDocumentList.js +55 -13
- package/dist/editor/ai/terminal/components/AgentDocumentList.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentEditHistoryButton.d.ts +5 -0
- package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js +12 -0
- package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js.map +1 -0
- package/dist/editor/ai/terminal/components/AgentFullPromptControls.d.ts +3 -1
- package/dist/editor/ai/terminal/components/AgentFullPromptControls.js +22 -14
- package/dist/editor/ai/terminal/components/AgentFullPromptControls.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentModeSelector.js +4 -4
- package/dist/editor/ai/terminal/components/AgentModeSelector.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +4 -4
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptComposer.js +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptComposer.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.d.ts +2 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +8 -11
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.d.ts +1 -4
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +31 -14
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.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/AgentTerminalFullLayout.d.ts +2 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +2 -4
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalView.js +13 -2
- package/dist/editor/ai/terminal/components/AgentTerminalView.js.map +1 -1
- package/dist/editor/ai/terminal/components/AiResponseMessage.js +11 -9
- package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/ContextInfoBar.js +22 -2
- package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
- package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js +37 -26
- package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js.map +1 -1
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js +3 -1
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai/terminal/components/UserMessage.d.ts +2 -1
- package/dist/editor/ai/terminal/components/UserMessage.js +144 -8
- package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentPromptComposerHandlers.js +1 -1
- package/dist/editor/ai/terminal/useAgentPromptComposerHandlers.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSessionSync.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.d.ts +3 -1
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +9 -3
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalController.js +7 -0
- package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalUiState.js +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalUiState.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentUserMessageSocketHandler.js +3 -1
- package/dist/editor/ai/terminal/useAgentUserMessageSocketHandler.js.map +1 -1
- package/dist/editor/ai/useActiveAgentConversation.d.ts +3 -0
- package/dist/editor/ai/useActiveAgentConversation.js +32 -0
- package/dist/editor/ai/useActiveAgentConversation.js.map +1 -0
- package/dist/editor/ai/useInlineAiPosition.d.ts +10 -2
- package/dist/editor/ai/useInlineAiPosition.js +32 -71
- package/dist/editor/ai/useInlineAiPosition.js.map +1 -1
- package/dist/editor/ai-image-editor/AiImageResultOverlay.js +30 -62
- package/dist/editor/ai-image-editor/AiImageResultOverlay.js.map +1 -1
- package/dist/editor/bridge/BridgeClient.d.ts +80 -0
- package/dist/editor/bridge/BridgeClient.js +417 -0
- package/dist/editor/bridge/BridgeClient.js.map +1 -0
- package/dist/editor/client/EditorShell.d.ts +5 -1
- package/dist/editor/client/EditorShell.js +295 -127
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +58 -5
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/fieldModificationStore.d.ts +1 -0
- package/dist/editor/client/fieldModificationStore.js +7 -2
- package/dist/editor/client/fieldModificationStore.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js +14 -17
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/itemsRepository.d.ts +2 -0
- package/dist/editor/client/itemsRepository.js +18 -9
- package/dist/editor/client/itemsRepository.js.map +1 -1
- package/dist/editor/client/operations.d.ts +1 -1
- package/dist/editor/client/operations.js +67 -21
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/pageModelBuilder.js +24 -7
- package/dist/editor/client/pageModelBuilder.js.map +1 -1
- package/dist/editor/client/ui/EditorChrome.js +1 -1
- package/dist/editor/client/ui/EditorChrome.js.map +1 -1
- package/dist/editor/commands/componentCommands.d.ts +3 -1
- package/dist/editor/commands/componentCommands.js +8 -3
- package/dist/editor/commands/componentCommands.js.map +1 -1
- package/dist/editor/field-types/DateFieldEditor.js +1 -1
- 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/DropLinkEditor.js +1 -1
- package/dist/editor/field-types/DropLinkEditor.js.map +1 -1
- package/dist/editor/field-types/DropListEditor.js +1 -1
- package/dist/editor/field-types/DropListEditor.js.map +1 -1
- package/dist/editor/field-types/ImageFieldEditor.js +1 -1
- package/dist/editor/field-types/ImageFieldEditor.js.map +1 -1
- package/dist/editor/field-types/InternalLinkFieldEditor.js +1 -1
- package/dist/editor/field-types/InternalLinkFieldEditor.js.map +1 -1
- package/dist/editor/field-types/LinkFieldEditor.js +15 -3
- package/dist/editor/field-types/LinkFieldEditor.js.map +1 -1
- package/dist/editor/field-types/MultiLineText.js +11 -4
- package/dist/editor/field-types/MultiLineText.js.map +1 -1
- package/dist/editor/field-types/NameValueListEditor.js +1 -1
- package/dist/editor/field-types/NameValueListEditor.js.map +1 -1
- package/dist/editor/field-types/PictureFieldEditor.js +2 -2
- package/dist/editor/field-types/PictureFieldEditor.js.map +1 -1
- package/dist/editor/field-types/RawEditor.js +9 -2
- package/dist/editor/field-types/RawEditor.js.map +1 -1
- package/dist/editor/field-types/RichTextEditorComponent.js +170 -77
- package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
- package/dist/editor/field-types/SingleLineText.js +10 -3
- package/dist/editor/field-types/SingleLineText.js.map +1 -1
- package/dist/editor/field-types/TreeListEditor.js +1 -1
- package/dist/editor/field-types/TreeListEditor.js.map +1 -1
- package/dist/editor/field-types/richtext/bridgeRichTextProfile.d.ts +21 -0
- package/dist/editor/field-types/richtext/bridgeRichTextProfile.js +96 -0
- package/dist/editor/field-types/richtext/bridgeRichTextProfile.js.map +1 -0
- package/dist/editor/field-types/richtext/components/ReactSlate.css +44 -6
- package/dist/editor/field-types/richtext/components/ReactSlate.js +191 -36
- package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
- package/dist/editor/field-types/richtext/components/SimpleRichTextEditor.css +5 -2
- package/dist/editor/field-types/richtext/components/SimpleToolbar.js +5 -4
- package/dist/editor/field-types/richtext/components/SimpleToolbar.js.map +1 -1
- package/dist/editor/field-types/richtext/contextMenuFactory.d.ts +2 -15
- package/dist/editor/field-types/richtext/contextMenuFactory.js +4 -435
- package/dist/editor/field-types/richtext/contextMenuFactory.js.map +1 -1
- package/dist/editor/field-types/richtext/richTextToolbarIcons.d.ts +7 -0
- package/dist/editor/field-types/richtext/richTextToolbarIcons.js +49 -0
- package/dist/editor/field-types/richtext/richTextToolbarIcons.js.map +1 -0
- 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/conversion.js +23 -2
- package/dist/editor/field-types/richtext/utils/conversion.js.map +1 -1
- package/dist/editor/field-types/useFormFieldCaretPresence.d.ts +13 -0
- package/dist/editor/field-types/useFormFieldCaretPresence.js +92 -0
- package/dist/editor/field-types/useFormFieldCaretPresence.js.map +1 -0
- package/dist/editor/fieldTypes.d.ts +2 -0
- package/dist/editor/media-selector/TreeSelector.js +15 -15
- package/dist/editor/media-selector/TreeSelector.js.map +1 -1
- package/dist/editor/menubar/PageSelector.js +8 -2
- package/dist/editor/menubar/PageSelector.js.map +1 -1
- package/dist/editor/menubar/VersionPreviewCard.js +4 -249
- package/dist/editor/menubar/VersionPreviewCard.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/EditControls.js +2 -2
- package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +338 -187
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js +3 -1
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js +1 -1
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.d.ts +8 -0
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +407 -0
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -0
- package/dist/editor/page-editor-chrome/CommentHighlightings.d.ts +5 -2
- package/dist/editor/page-editor-chrome/CommentHighlightings.js +340 -215
- package/dist/editor/page-editor-chrome/CommentHighlightings.js.map +1 -1
- package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.d.ts +5 -1
- package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.js +11 -4
- package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.js.map +1 -1
- package/dist/editor/page-editor-chrome/FieldActionIndicator.js +21 -13
- package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
- package/dist/editor/page-editor-chrome/FieldEditedIndicator.js +23 -29
- package/dist/editor/page-editor-chrome/FieldEditedIndicator.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js +110 -19
- package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
- package/dist/editor/page-editor-chrome/LockedFieldIndicator.d.ts +3 -2
- package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +148 -45
- package/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -1
- package/dist/editor/page-editor-chrome/PageEditorChrome.d.ts +2 -0
- package/dist/editor/page-editor-chrome/PageEditorChrome.js +25 -21
- package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
- package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +163 -128
- package/dist/editor/page-editor-chrome/PictureEditorOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.d.ts +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +6 -3
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.d.ts +1 -2
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +83 -146
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
- package/dist/editor/page-editor-chrome/SuggestionHighlightings.d.ts +5 -2
- package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +144 -63
- package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
- package/dist/editor/page-editor-chrome/VersionDiffHighlightings.d.ts +1 -2
- package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js +101 -30
- package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js.map +1 -1
- package/dist/editor/page-editor-chrome/bridgeInlineFormatToolbarLayout.d.ts +24 -0
- package/dist/editor/page-editor-chrome/bridgeInlineFormatToolbarLayout.js +89 -0
- package/dist/editor/page-editor-chrome/bridgeInlineFormatToolbarLayout.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.d.ts +10 -1
- package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js +105 -122
- package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
- package/dist/editor/page-editor-chrome/overlay/geometry.d.ts +11 -4
- package/dist/editor/page-editor-chrome/overlay/geometry.js +139 -36
- package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +26 -0
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +228 -0
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -0
- package/dist/editor/page-viewer/EditorForm.js +17 -1
- package/dist/editor/page-viewer/EditorForm.js.map +1 -1
- package/dist/editor/page-viewer/MiniMap.d.ts +2 -2
- package/dist/editor/page-viewer/MiniMap.js +176 -364
- package/dist/editor/page-viewer/MiniMap.js.map +1 -1
- package/dist/editor/page-viewer/PageViewer.js +63 -17
- package/dist/editor/page-viewer/PageViewer.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.d.ts +0 -5
- package/dist/editor/page-viewer/PageViewerFrame.js +1685 -1512
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/bridgeFieldPatch.d.ts +20 -0
- package/dist/editor/page-viewer/bridgeFieldPatch.js +33 -0
- package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -0
- package/dist/editor/page-viewer/pageViewContext.d.ts +32 -0
- package/dist/editor/page-viewer/pageViewContext.js +37 -6
- package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
- package/dist/editor/reviews/Comment.d.ts +2 -1
- package/dist/editor/reviews/Comment.js +10 -5
- package/dist/editor/reviews/Comment.js.map +1 -1
- package/dist/editor/reviews/CommentDisplayPopover.js +2 -1
- package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/CommentEditor.d.ts +1 -0
- package/dist/editor/reviews/CommentEditor.js +3 -2
- package/dist/editor/reviews/CommentEditor.js.map +1 -1
- package/dist/editor/reviews/CommentPopover.js +69 -10
- package/dist/editor/reviews/CommentPopover.js.map +1 -1
- package/dist/editor/reviews/CommentView.js +24 -4
- package/dist/editor/reviews/CommentView.js.map +1 -1
- package/dist/editor/reviews/Comments.d.ts +0 -2
- package/dist/editor/reviews/Comments.js +31 -31
- package/dist/editor/reviews/Comments.js.map +1 -1
- package/dist/editor/reviews/FeedbackCard.d.ts +4 -2
- package/dist/editor/reviews/FeedbackCard.js +8 -10
- package/dist/editor/reviews/FeedbackCard.js.map +1 -1
- package/dist/editor/reviews/SuggestedEdit.js +4 -6
- package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
- package/dist/editor/reviews/SuggestionCommentThread.js +3 -3
- package/dist/editor/reviews/SuggestionCommentThread.js.map +1 -1
- package/dist/editor/reviews/SuggestionDisplayPopover.js +3 -2
- package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/commentAi.js +96 -27
- package/dist/editor/reviews/commentAi.js.map +1 -1
- package/dist/editor/reviews/commentTransientSelection.d.ts +23 -0
- package/dist/editor/reviews/commentTransientSelection.js +7 -0
- package/dist/editor/reviews/commentTransientSelection.js.map +1 -0
- package/dist/editor/reviews/feedbackOrdering.d.ts +5 -0
- package/dist/editor/reviews/feedbackOrdering.js +27 -0
- package/dist/editor/reviews/feedbackOrdering.js.map +1 -0
- package/dist/editor/reviews/feedbackSelection.js +32 -4
- package/dist/editor/reviews/feedbackSelection.js.map +1 -1
- package/dist/editor/reviews/suggestedEditState.d.ts +12 -0
- package/dist/editor/reviews/suggestedEditState.js +90 -0
- package/dist/editor/reviews/suggestedEditState.js.map +1 -0
- package/dist/editor/reviews/suggestionDisplayValue.d.ts +43 -0
- package/dist/editor/reviews/suggestionDisplayValue.js +93 -0
- package/dist/editor/reviews/suggestionDisplayValue.js.map +1 -0
- package/dist/editor/services/agentService.d.ts +15 -0
- package/dist/editor/services/agentService.js +11 -1
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/reviewsService.d.ts +2 -2
- package/dist/editor/services/reviewsService.js.map +1 -1
- package/dist/editor/settings/SettingsView.js +2 -2
- package/dist/editor/settings/SettingsView.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js +1 -1
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProvidersPanel.js +2 -3
- package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
- package/dist/editor/sidebar/MorePanelsButton.js +1 -1
- package/dist/editor/sidebar/MorePanelsButton.js.map +1 -1
- package/dist/editor/sidebar/Validation.js +4 -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/TemplateStructureInlineEditor.js +1 -1
- package/dist/editor/template-wizard/TemplateStructureInlineEditor.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/SimpleIconButton.d.ts +2 -2
- package/dist/editor/ui/SimpleIconButton.js +7 -1
- package/dist/editor/ui/SimpleIconButton.js.map +1 -1
- package/dist/editor/ui/Splitter.d.ts +1 -0
- package/dist/editor/ui/Splitter.js +12 -2
- package/dist/editor/ui/Splitter.js.map +1 -1
- package/dist/editor/ui/animationSettle.d.ts +32 -0
- package/dist/editor/ui/animationSettle.js +85 -0
- package/dist/editor/ui/animationSettle.js.map +1 -0
- package/dist/editor/utils/expandSelectionAtCaret.d.ts +15 -0
- package/dist/editor/utils/expandSelectionAtCaret.js +183 -0
- package/dist/editor/utils/expandSelectionAtCaret.js.map +1 -0
- package/dist/editor/utils.d.ts +1 -17
- package/dist/editor/utils.js +0 -143
- package/dist/editor/utils.js.map +1 -1
- package/dist/editor/version-diff/versionDiffTargets.d.ts +3 -8
- package/dist/editor/version-diff/versionDiffTargets.js +37 -94
- package/dist/editor/version-diff/versionDiffTargets.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/splash-screen/ModernSplashScreen.js +11 -3
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/splash-screen/NewPage.js +7 -5
- package/dist/splash-screen/NewPage.js.map +1 -1
- package/dist/splash-screen/OpenPage.js +5 -3
- package/dist/splash-screen/OpenPage.js.map +1 -1
- package/dist/splash-screen/RecentPages.js +3 -3
- package/dist/splash-screen/RecentPages.js.map +1 -1
- package/dist/task-board/components/TaskDetailPanel.js +2 -1
- package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
- package/dist/task-board/views/DependencyGraphView.d.ts +42 -1
- package/dist/task-board/views/DependencyGraphView.js +94 -0
- package/dist/task-board/views/DependencyGraphView.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/package.json +2 -1
- package/styles.css +96 -0
- package/dist/editor/page-editor-chrome/InlineEditor.d.ts +0 -7
- package/dist/editor/page-editor-chrome/InlineEditor.js +0 -1719
- package/dist/editor/page-editor-chrome/InlineEditor.js.map +0 -1
- package/dist/editor/page-editor-chrome/overlay/iframeAccess.d.ts +0 -2
- package/dist/editor/page-editor-chrome/overlay/iframeAccess.js +0 -21
- package/dist/editor/page-editor-chrome/overlay/iframeAccess.js.map +0 -1
- package/dist/editor/page-editor-chrome/useInlineAICompletion.d.ts +0 -7
- package/dist/editor/page-editor-chrome/useInlineAICompletion.js +0 -758
- package/dist/editor/page-editor-chrome/useInlineAICompletion.js.map +0 -1
- package/dist/editor/page-viewer/pageModelSkeletonBuilder.d.ts +0 -3
- package/dist/editor/page-viewer/pageModelSkeletonBuilder.js +0 -796
- package/dist/editor/page-viewer/pageModelSkeletonBuilder.js.map +0 -1
|
@@ -34,6 +34,7 @@ import { post } from "../services/serviceHelper";
|
|
|
34
34
|
import { PageViewerFrame } from "../page-viewer/PageViewerFrame";
|
|
35
35
|
import { useItemsRepository } from "./itemsRepository";
|
|
36
36
|
import { Spinner } from "../ui/Spinner";
|
|
37
|
+
import { createSettleRegistry } from "../ui/animationSettle";
|
|
37
38
|
import { cleanId } from "../utils/id-helper";
|
|
38
39
|
import { useDebouncedCallback } from "use-debounce";
|
|
39
40
|
import { useKeyboardNavigation } from "../utils/keyboardNavigation";
|
|
@@ -46,6 +47,7 @@ import { QuickItemSwitcher } from "../QuickItemSwitcher";
|
|
|
46
47
|
import { useEditorSlotContext, } from "../views/editorSlotContext";
|
|
47
48
|
import { getComments, getAvailableCommentTags, } from "../services/reviewsService";
|
|
48
49
|
import { useReviews } from "../reviews/useReviews";
|
|
50
|
+
import { COMMENT_TRANSIENT_ELEMENT_KEY, COMMENT_TRANSIENT_SELECTION_RECT, } from "../reviews/commentTransientSelection";
|
|
49
51
|
import uuid from "react-uuid";
|
|
50
52
|
import { flushSync } from "react-dom";
|
|
51
53
|
import { getSuggestedEdits } from "../services/suggestedEditsService";
|
|
@@ -67,6 +69,24 @@ import { FeatureGate, LicenseFeatures, LicenseProvider, LicenseOverlay, } from "
|
|
|
67
69
|
// nothing open" (param present with this value) so reload can honor the user's intent.
|
|
68
70
|
const SIDEBAR_NONE_SENTINEL = "none";
|
|
69
71
|
const sidebarUrlValue = (ids) => ids.length ? ids.join(",") : SIDEBAR_NONE_SENTINEL;
|
|
72
|
+
// moved to hooks/useQuota
|
|
73
|
+
function isUsableTextSelectionRange(range) {
|
|
74
|
+
return !!(range &&
|
|
75
|
+
range.text?.trim() &&
|
|
76
|
+
typeof range.startOffset === "number" &&
|
|
77
|
+
typeof range.endOffset === "number" &&
|
|
78
|
+
range.startOffset !== range.endOffset &&
|
|
79
|
+
range.fieldId &&
|
|
80
|
+
range.itemId);
|
|
81
|
+
}
|
|
82
|
+
function selectionRangeMatchesField(range, field) {
|
|
83
|
+
if (!range || !field)
|
|
84
|
+
return false;
|
|
85
|
+
return (cleanId(range.fieldId) === cleanId(field.fieldId) &&
|
|
86
|
+
cleanId(range.itemId) === cleanId(field.item.id) &&
|
|
87
|
+
(!range.language || range.language === field.item.language) &&
|
|
88
|
+
(typeof range.version !== "number" || range.version === field.item.version));
|
|
89
|
+
}
|
|
70
90
|
function reconcileSlotSettingsState(previous, slots, defaults) {
|
|
71
91
|
const next = {};
|
|
72
92
|
let changed = false;
|
|
@@ -134,8 +154,10 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
134
154
|
const [focusedField, setFocusedField] = useState();
|
|
135
155
|
const focusedFieldRef = useRef(undefined);
|
|
136
156
|
const [selectedRange, setSelectedRange] = useState();
|
|
157
|
+
const lastTextSelectionRangeRef = useRef(undefined);
|
|
137
158
|
const [validating, setValidating] = useState(false);
|
|
138
159
|
const [inserting, setInserting] = useState();
|
|
160
|
+
const insertingSequenceRef = useRef(0);
|
|
139
161
|
const [showFullscreenHint, setShowFullscreenHint] = useState(false);
|
|
140
162
|
// Fullscreen is a shell-level UI mode. Keep it in EditorShell state so the shell can rerender
|
|
141
163
|
// immediately when toggled, while still syncing the active slot's PageViewContext.fullscreen.
|
|
@@ -465,7 +487,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
465
487
|
// The very first URL sync after initial load should replaceState (not pushState)
|
|
466
488
|
// so the initial bare URL isn't left as a dead-end history entry.
|
|
467
489
|
const isFirstUrlSyncRef = useRef(true);
|
|
468
|
-
const [inlineEditingFieldElement, setInlineEditingFieldElement] = useState();
|
|
469
490
|
const [lockedField, setLockedField] = useState();
|
|
470
491
|
const [itemLanguages, setItemLanguages] = useState([]);
|
|
471
492
|
const [itemVersions, setItemVersions] = useState([]);
|
|
@@ -556,9 +577,67 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
556
577
|
const [isTourActive, setIsTourActive] = useState(tourRestoredFromUrl);
|
|
557
578
|
// Track if tour was restored from URL to skip prepareAction on initial render
|
|
558
579
|
const tourRestoredRef = useRef(tourRestoredFromUrl);
|
|
559
|
-
const [mode,
|
|
580
|
+
const [mode, setModeState] = useState("edit");
|
|
581
|
+
const modeRef = useRef("edit");
|
|
582
|
+
modeRef.current = mode;
|
|
583
|
+
const modeChangeParticipantsRef = useRef(new Set());
|
|
584
|
+
const loadSuggestedEditsRef = useRef(async () => { });
|
|
585
|
+
const [modeTransitionRevision, setModeTransitionRevision] = useState(0);
|
|
560
586
|
const [previewDate, setPreviewDate] = useState();
|
|
561
587
|
const [layoutMode, setLayoutMode] = useState("final");
|
|
588
|
+
const registerModeChangeParticipant = useCallback((participant) => {
|
|
589
|
+
modeChangeParticipantsRef.current.add(participant);
|
|
590
|
+
return () => {
|
|
591
|
+
modeChangeParticipantsRef.current.delete(participant);
|
|
592
|
+
};
|
|
593
|
+
}, []);
|
|
594
|
+
const changeMode = useCallback(async (nextMode, options) => {
|
|
595
|
+
const previousMode = modeRef.current;
|
|
596
|
+
if (nextMode === previousMode)
|
|
597
|
+
return;
|
|
598
|
+
const participants = Array.from(modeChangeParticipantsRef.current);
|
|
599
|
+
for (const participant of participants) {
|
|
600
|
+
await participant.beforeModeChange?.(nextMode, previousMode, options);
|
|
601
|
+
}
|
|
602
|
+
for (const participant of participants) {
|
|
603
|
+
participant.clearInlineDedupe?.(nextMode, previousMode, options);
|
|
604
|
+
}
|
|
605
|
+
flushSync(() => {
|
|
606
|
+
modeRef.current = nextMode;
|
|
607
|
+
setModeState(nextMode);
|
|
608
|
+
setModeTransitionRevision((revision) => revision + 1);
|
|
609
|
+
if (nextMode !== "preview") {
|
|
610
|
+
setPreviewDate(undefined);
|
|
611
|
+
}
|
|
612
|
+
if (nextMode === "suggestions") {
|
|
613
|
+
setShowSuggestedEdits(true);
|
|
614
|
+
setWorkspaceId("editor");
|
|
615
|
+
setOpenSidebars((prev) => {
|
|
616
|
+
if (prev.includes("feedback"))
|
|
617
|
+
return prev;
|
|
618
|
+
const next = [...prev, "feedback"];
|
|
619
|
+
openSidebarsRef.current = next;
|
|
620
|
+
return next;
|
|
621
|
+
});
|
|
622
|
+
}
|
|
623
|
+
else {
|
|
624
|
+
setShowSuggestedEdits(false);
|
|
625
|
+
}
|
|
626
|
+
});
|
|
627
|
+
if (nextMode === "suggestions") {
|
|
628
|
+
void loadSuggestedEditsRef.current();
|
|
629
|
+
}
|
|
630
|
+
}, []);
|
|
631
|
+
const setMode = useCallback((nextMode) => {
|
|
632
|
+
const resolvedMode = typeof nextMode === "function" ? nextMode(modeRef.current) : nextMode;
|
|
633
|
+
void changeMode(resolvedMode);
|
|
634
|
+
}, [changeMode]);
|
|
635
|
+
const workspaceShowsModeControls = !!configuration.editor.workspaces?.find((workspace) => workspace.id === workspaceId)?.toolbarFactory;
|
|
636
|
+
useEffect(() => {
|
|
637
|
+
if (workspaceShowsModeControls || mode !== "suggestions")
|
|
638
|
+
return;
|
|
639
|
+
void changeMode("edit", { reason: "mode-controls-hidden" });
|
|
640
|
+
}, [changeMode, mode, workspaceId, workspaceShowsModeControls]);
|
|
562
641
|
useEffect(() => {
|
|
563
642
|
if (mode !== "preview") {
|
|
564
643
|
setPreviewDate(undefined);
|
|
@@ -577,6 +656,9 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
577
656
|
return userPreferences.showAgentsPanel ?? false;
|
|
578
657
|
});
|
|
579
658
|
const [editorFormHiddenDefault, setEditorFormHiddenDefault] = useState(userPreferences.editorFormHidden ?? false);
|
|
659
|
+
// Stable registry that lets layout owners (Splitter panels) report when a
|
|
660
|
+
// reveal surface finished animating, and lets callers await that signal.
|
|
661
|
+
const settleRegistry = useMemo(() => createSettleRegistry(), []);
|
|
580
662
|
useEffect(() => {
|
|
581
663
|
setSlotSettingsById((prev) => reconcileSlotSettingsState(prev, editorSlots, {
|
|
582
664
|
showComponentNavigator: showComponentNavigatorDefault,
|
|
@@ -664,19 +746,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
664
746
|
setSelectedHelpSectionId(helpParam === "contents" || helpParam === "true" ? null : helpParam);
|
|
665
747
|
}
|
|
666
748
|
}, [searchParams, isInitialLoad]);
|
|
667
|
-
useEffect(() => {
|
|
668
|
-
if (mode === "suggestions") {
|
|
669
|
-
// Ensure we're in the editor workspace and open the feedback sidebar
|
|
670
|
-
setWorkspaceId("editor");
|
|
671
|
-
// Open the feedback sidebar if not already open
|
|
672
|
-
setOpenSidebars((prev) => {
|
|
673
|
-
if (!prev.includes("comments")) {
|
|
674
|
-
return [...prev, "comments"];
|
|
675
|
-
}
|
|
676
|
-
return prev;
|
|
677
|
-
});
|
|
678
|
-
}
|
|
679
|
-
}, [mode]);
|
|
680
749
|
useEffect(() => {
|
|
681
750
|
if (focusedField &&
|
|
682
751
|
selection.length > 0 &&
|
|
@@ -686,7 +755,19 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
686
755
|
}, [selection]);
|
|
687
756
|
useEffect(() => {
|
|
688
757
|
focusedFieldRef.current = focusedField;
|
|
758
|
+
const lastTextSelection = lastTextSelectionRangeRef.current;
|
|
759
|
+
if (focusedField &&
|
|
760
|
+
lastTextSelection &&
|
|
761
|
+
(focusedField.fieldId !== lastTextSelection.fieldId ||
|
|
762
|
+
focusedField.item.id !== lastTextSelection.itemId)) {
|
|
763
|
+
lastTextSelectionRangeRef.current = undefined;
|
|
764
|
+
}
|
|
689
765
|
}, [focusedField]);
|
|
766
|
+
useEffect(() => {
|
|
767
|
+
if (isUsableTextSelectionRange(selectedRange)) {
|
|
768
|
+
lastTextSelectionRangeRef.current = selectedRange;
|
|
769
|
+
}
|
|
770
|
+
}, [selectedRange]);
|
|
690
771
|
// Track the current page item descriptor for itemsRepository
|
|
691
772
|
const [currentPageItem, setCurrentPageItem] = useState();
|
|
692
773
|
// Create itemsRepository with current page item (will be updated when page loads)
|
|
@@ -1220,7 +1301,8 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
1220
1301
|
const toggleHelpTerminal = useCallback((options) => {
|
|
1221
1302
|
const isCurrentlyOpen = showHelpTerminal;
|
|
1222
1303
|
const requestedTab = options?.activeTab;
|
|
1223
|
-
if (isCurrentlyOpen &&
|
|
1304
|
+
if (isCurrentlyOpen &&
|
|
1305
|
+
(!requestedTab || requestedTab === helpTerminalActiveTab)) {
|
|
1224
1306
|
// Close when toggling the currently active help view.
|
|
1225
1307
|
handleSetShowHelpTerminal(false);
|
|
1226
1308
|
}
|
|
@@ -1423,9 +1505,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
1423
1505
|
}
|
|
1424
1506
|
// Handle mode changes — always set to avoid stale-closure mismatch
|
|
1425
1507
|
const urlMode = urlParams.get("mode");
|
|
1426
|
-
|
|
1427
|
-
setMode(urlMode);
|
|
1428
|
-
}
|
|
1508
|
+
setMode(urlMode ?? "edit");
|
|
1429
1509
|
// Handle fullscreen changes (shell-level state)
|
|
1430
1510
|
const isFullscreen = urlParams.get("fullscreen") === "true";
|
|
1431
1511
|
if (configuration.forceFullscreen) {
|
|
@@ -1705,6 +1785,9 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
1705
1785
|
const edits = result.data || [];
|
|
1706
1786
|
setSuggestedEdits(edits);
|
|
1707
1787
|
}, [item, searchParams]);
|
|
1788
|
+
useEffect(() => {
|
|
1789
|
+
loadSuggestedEditsRef.current = loadSuggestedEdits;
|
|
1790
|
+
}, [loadSuggestedEdits]);
|
|
1708
1791
|
const loadFavorites = useCallback(async () => {
|
|
1709
1792
|
try {
|
|
1710
1793
|
const result = await getAllFavorites();
|
|
@@ -1717,6 +1800,9 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
1717
1800
|
setFavorites([]);
|
|
1718
1801
|
}
|
|
1719
1802
|
}, []);
|
|
1803
|
+
const refreshFavorites = useCallback(async (opts) => {
|
|
1804
|
+
await loadFavorites();
|
|
1805
|
+
}, [loadFavorites]);
|
|
1720
1806
|
const page = activePageViewContext.page;
|
|
1721
1807
|
const currentHistoryScope = useMemo(() => {
|
|
1722
1808
|
const currentItem = item?.descriptor;
|
|
@@ -2113,6 +2199,9 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
2113
2199
|
globalThis.editorRefreshTimer = undefined;
|
|
2114
2200
|
};
|
|
2115
2201
|
if (mode === "immediate") {
|
|
2202
|
+
if (refreshTimer) {
|
|
2203
|
+
clearTimeout(refreshTimer);
|
|
2204
|
+
}
|
|
2116
2205
|
doRefresh();
|
|
2117
2206
|
return;
|
|
2118
2207
|
}
|
|
@@ -2306,7 +2395,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
2306
2395
|
else {
|
|
2307
2396
|
current.set("compare", "true");
|
|
2308
2397
|
}
|
|
2309
|
-
current.set("mode", mode);
|
|
2398
|
+
current.set("mode", workspaceShowsModeControls ? mode : "edit");
|
|
2310
2399
|
// Handle fullscreen parameter
|
|
2311
2400
|
if (fullscreen) {
|
|
2312
2401
|
current.set("fullscreen", "true");
|
|
@@ -2762,6 +2851,11 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
2762
2851
|
if (currentOverlay !== "context-menu")
|
|
2763
2852
|
contextMenuRef.current?.close({});
|
|
2764
2853
|
}, [currentOverlay]);
|
|
2854
|
+
const handleContextMenuOpenChange = useCallback((open) => {
|
|
2855
|
+
if (open)
|
|
2856
|
+
return;
|
|
2857
|
+
setCurrentOverlay((overlay) => overlay === "context-menu" ? undefined : overlay);
|
|
2858
|
+
}, []);
|
|
2765
2859
|
useEffect(() => {
|
|
2766
2860
|
loadItemVersions();
|
|
2767
2861
|
}, [currentItemDescriptor]);
|
|
@@ -3011,9 +3105,35 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
3011
3105
|
};
|
|
3012
3106
|
}, [promptSessionReconnect]);
|
|
3013
3107
|
const sendSocketMessage = useCallback((message) => {
|
|
3108
|
+
if (message.type === "caret-position" &&
|
|
3109
|
+
message.payload?.source === "form-field") {
|
|
3110
|
+
const payload = message.payload;
|
|
3111
|
+
setRemoteCarets((current) => {
|
|
3112
|
+
if (payload.offset == null) {
|
|
3113
|
+
if (!current[sessionId])
|
|
3114
|
+
return current;
|
|
3115
|
+
const next = { ...current };
|
|
3116
|
+
delete next[sessionId];
|
|
3117
|
+
return next;
|
|
3118
|
+
}
|
|
3119
|
+
if (!payload.fieldId || !payload.item) {
|
|
3120
|
+
return current;
|
|
3121
|
+
}
|
|
3122
|
+
return {
|
|
3123
|
+
...current,
|
|
3124
|
+
[sessionId]: {
|
|
3125
|
+
sessionId,
|
|
3126
|
+
fieldId: payload.fieldId,
|
|
3127
|
+
item: payload.item,
|
|
3128
|
+
offset: payload.offset,
|
|
3129
|
+
value: payload.value,
|
|
3130
|
+
},
|
|
3131
|
+
};
|
|
3132
|
+
});
|
|
3133
|
+
}
|
|
3014
3134
|
// Routes over whichever transport is active (WebSocket preferred, SSE fallback).
|
|
3015
3135
|
getEditorRealtime().send(message);
|
|
3016
|
-
}, []);
|
|
3136
|
+
}, [sessionId]);
|
|
3017
3137
|
// URL update helper - defined early so it can be used by workspace/sidebar functions
|
|
3018
3138
|
const updateUrl = useCallback((params) => {
|
|
3019
3139
|
// Use the actual browser pathname (including any basePath like /parhelia)
|
|
@@ -3491,34 +3611,51 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
3491
3611
|
operationsContext.context.markOperationComplete;
|
|
3492
3612
|
}, [operationsContext.context.markOperationComplete]);
|
|
3493
3613
|
// Replace selected text with new content (for inline AI editing)
|
|
3494
|
-
const replaceSelectedText = useCallback(async (newText) => {
|
|
3495
|
-
|
|
3496
|
-
return;
|
|
3614
|
+
const replaceSelectedText = useCallback(async (newText, selectionOverride) => {
|
|
3615
|
+
const rangeToReplace = selectionOverride ?? selectedRange ?? lastTextSelectionRangeRef.current;
|
|
3497
3616
|
try {
|
|
3498
3617
|
// If we have selected text and a replaceText callback, use it
|
|
3499
|
-
if (
|
|
3500
|
-
|
|
3618
|
+
if (rangeToReplace?.text && rangeToReplace.replaceText) {
|
|
3619
|
+
rangeToReplace.replaceText(newText);
|
|
3501
3620
|
setSelectedRange(undefined);
|
|
3621
|
+
lastTextSelectionRangeRef.current = undefined;
|
|
3502
3622
|
return;
|
|
3503
3623
|
}
|
|
3504
3624
|
// If no selection but we have a replaceText callback, try to use it for insertion
|
|
3505
3625
|
// (some editors might support insertion via the same callback)
|
|
3506
|
-
if (!
|
|
3507
|
-
|
|
3626
|
+
if (!rangeToReplace?.text && rangeToReplace?.replaceText) {
|
|
3627
|
+
rangeToReplace.replaceText(newText);
|
|
3508
3628
|
setSelectedRange(undefined);
|
|
3629
|
+
lastTextSelectionRangeRef.current = undefined;
|
|
3509
3630
|
return;
|
|
3510
3631
|
}
|
|
3632
|
+
const fieldToReplace = focusedField ??
|
|
3633
|
+
(rangeToReplace?.fieldId &&
|
|
3634
|
+
rangeToReplace.itemId &&
|
|
3635
|
+
rangeToReplace.language &&
|
|
3636
|
+
typeof rangeToReplace.version === "number"
|
|
3637
|
+
? {
|
|
3638
|
+
fieldId: rangeToReplace.fieldId,
|
|
3639
|
+
item: {
|
|
3640
|
+
id: rangeToReplace.itemId,
|
|
3641
|
+
language: rangeToReplace.language,
|
|
3642
|
+
version: rangeToReplace.version,
|
|
3643
|
+
},
|
|
3644
|
+
}
|
|
3645
|
+
: undefined);
|
|
3646
|
+
if (!fieldToReplace)
|
|
3647
|
+
return;
|
|
3511
3648
|
// Fallback: indexOf-based replacement/insertion for plain text fields
|
|
3512
|
-
const { fieldId, item } =
|
|
3649
|
+
const { fieldId, item } = fieldToReplace;
|
|
3513
3650
|
const modifiedField = getActiveSlotContext()?.fieldModificationStore.getField(fieldId, item.id, item.language, item.version);
|
|
3514
3651
|
const currentValue = modifiedField
|
|
3515
3652
|
? modifiedField.value || ""
|
|
3516
|
-
: (await itemsRepository.getField(
|
|
3517
|
-
"";
|
|
3653
|
+
: (await itemsRepository.getField(fieldToReplace))
|
|
3654
|
+
?.value || "";
|
|
3518
3655
|
let newValue;
|
|
3519
|
-
if (
|
|
3656
|
+
if (rangeToReplace?.text) {
|
|
3520
3657
|
// Replace selected text
|
|
3521
|
-
const { text: originalSelectedText } =
|
|
3658
|
+
const { text: originalSelectedText } = rangeToReplace;
|
|
3522
3659
|
const actualPosition = currentValue.indexOf(originalSelectedText);
|
|
3523
3660
|
if (actualPosition === -1) {
|
|
3524
3661
|
console.error("Failed to find selected text in field value");
|
|
@@ -3531,7 +3668,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
3531
3668
|
}
|
|
3532
3669
|
else {
|
|
3533
3670
|
// Insert at cursor position (use startOffset if available, otherwise append)
|
|
3534
|
-
const insertPosition =
|
|
3671
|
+
const insertPosition = rangeToReplace?.startOffset ?? currentValue.length;
|
|
3535
3672
|
newValue =
|
|
3536
3673
|
currentValue.slice(0, insertPosition) +
|
|
3537
3674
|
newText +
|
|
@@ -3539,12 +3676,13 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
3539
3676
|
}
|
|
3540
3677
|
// Update the field
|
|
3541
3678
|
await operations.editField({
|
|
3542
|
-
field:
|
|
3679
|
+
field: fieldToReplace,
|
|
3543
3680
|
value: newValue,
|
|
3544
3681
|
refresh: "immediate",
|
|
3545
3682
|
});
|
|
3546
3683
|
// Clear the selection after replacement/insertion
|
|
3547
3684
|
setSelectedRange(undefined);
|
|
3685
|
+
lastTextSelectionRangeRef.current = undefined;
|
|
3548
3686
|
}
|
|
3549
3687
|
catch (error) {
|
|
3550
3688
|
console.error("Failed to replace/insert text:", error);
|
|
@@ -4021,18 +4159,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4021
4159
|
};
|
|
4022
4160
|
}
|
|
4023
4161
|
}, [operations.onFieldBlur]);
|
|
4024
|
-
useEffect(() => {
|
|
4025
|
-
if (mode === "suggestions") {
|
|
4026
|
-
setShowSuggestedEdits(true);
|
|
4027
|
-
// Refresh from the server to recover from any missed
|
|
4028
|
-
// `suggested-edit-updated` WebSocket events (e.g. created by an
|
|
4029
|
-
// agent tool while another tab was focused).
|
|
4030
|
-
loadSuggestedEdits();
|
|
4031
|
-
}
|
|
4032
|
-
else {
|
|
4033
|
-
setShowSuggestedEdits(false);
|
|
4034
|
-
}
|
|
4035
|
-
}, [mode, loadSuggestedEdits]);
|
|
4036
4162
|
const isReadOnly = !item ||
|
|
4037
4163
|
!item.canWriteItem ||
|
|
4038
4164
|
!item.canWriteLanguage ||
|
|
@@ -4051,15 +4177,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4051
4177
|
// Otherwise, only show workspaces that are in the settings
|
|
4052
4178
|
return workspaceIdsFromSettings.includes(w.id) && !w.visible;
|
|
4053
4179
|
});
|
|
4054
|
-
// Handle initial mode setup from URL (only on initial load)
|
|
4055
|
-
useEffect(() => {
|
|
4056
|
-
if (!isInitialLoad)
|
|
4057
|
-
return;
|
|
4058
|
-
const queryMode = searchParams.get("mode");
|
|
4059
|
-
if (queryMode) {
|
|
4060
|
-
setMode(queryMode);
|
|
4061
|
-
}
|
|
4062
|
-
}, [searchParams, isInitialLoad]);
|
|
4063
4180
|
// Add this new effect for initial fullscreen setup
|
|
4064
4181
|
useEffect(() => {
|
|
4065
4182
|
if (!isInitialLoad)
|
|
@@ -4187,16 +4304,11 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4187
4304
|
dragEnd: () => {
|
|
4188
4305
|
setDragObject(undefined);
|
|
4189
4306
|
},
|
|
4190
|
-
droppedInPlaceholder: async (placeholderKey, index, spotPositionElement, spotPositionAnchor, insertOption) => {
|
|
4191
|
-
|
|
4307
|
+
droppedInPlaceholder: async (placeholderKey, index, spotPositionElement, spotPositionAnchor, insertOption, spotPosition) => {
|
|
4308
|
+
const droppedDragObject = dragObject;
|
|
4309
|
+
if ((!droppedDragObject && !insertOption) || !page)
|
|
4192
4310
|
return;
|
|
4193
4311
|
setDragObject(undefined);
|
|
4194
|
-
if (spotPositionElement && spotPositionAnchor) {
|
|
4195
|
-
setInserting({
|
|
4196
|
-
positionElement: spotPositionElement,
|
|
4197
|
-
positionAnchor: spotPositionAnchor,
|
|
4198
|
-
});
|
|
4199
|
-
}
|
|
4200
4312
|
const placeholderKeyComponents = placeholderKey.split("_");
|
|
4201
4313
|
const parentId = placeholderKeyComponents.length === 1
|
|
4202
4314
|
? undefined
|
|
@@ -4206,39 +4318,31 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4206
4318
|
let op;
|
|
4207
4319
|
if (!currentItemDescriptorRef.current)
|
|
4208
4320
|
return;
|
|
4321
|
+
let insertionSequence;
|
|
4322
|
+
if ((spotPosition || spotPositionElement) && spotPositionAnchor) {
|
|
4323
|
+
insertionSequence = ++insertingSequenceRef.current;
|
|
4324
|
+
setInserting({
|
|
4325
|
+
position: spotPosition,
|
|
4326
|
+
positionElement: spotPositionElement,
|
|
4327
|
+
positionAnchor: spotPositionAnchor,
|
|
4328
|
+
});
|
|
4329
|
+
}
|
|
4330
|
+
let operationPromise;
|
|
4209
4331
|
if (insertOption) {
|
|
4210
4332
|
// Clear any selected component type for insertion once the component
|
|
4211
4333
|
// has been dropped into a placeholder. This ensures that insert mode
|
|
4212
4334
|
// can exit cleanly and the editor header updates from "Add Component"
|
|
4213
4335
|
// to the actual component name after the operation completes.
|
|
4214
4336
|
setSelectedForInsertion("");
|
|
4215
|
-
operations
|
|
4216
|
-
.addComponent(insertOption.typeId, placeholderKey, index, currentItemDescriptorRef.current)
|
|
4217
|
-
.then((result) => {
|
|
4218
|
-
setInserting(undefined);
|
|
4219
|
-
})
|
|
4220
|
-
.catch((err) => {
|
|
4221
|
-
setInserting(undefined);
|
|
4222
|
-
});
|
|
4223
|
-
return;
|
|
4337
|
+
operationPromise = operations.addComponent(insertOption.typeId, placeholderKey, index, currentItemDescriptorRef.current);
|
|
4224
4338
|
}
|
|
4225
|
-
if (
|
|
4226
|
-
|
|
4227
|
-
if (dragObject && dragObject.type == "template") {
|
|
4228
|
-
operations
|
|
4229
|
-
.addComponent(dragObject.typeId, placeholderKey, index, currentItemDescriptorRef.current)
|
|
4230
|
-
.then((result) => {
|
|
4231
|
-
setInserting(undefined);
|
|
4232
|
-
})
|
|
4233
|
-
.catch((err) => {
|
|
4234
|
-
setInserting(undefined);
|
|
4235
|
-
});
|
|
4236
|
-
return;
|
|
4339
|
+
else if (droppedDragObject?.type == "template") {
|
|
4340
|
+
operationPromise = operations.addComponent(droppedDragObject.typeId, placeholderKey, index, currentItemDescriptorRef.current);
|
|
4237
4341
|
}
|
|
4238
|
-
if (
|
|
4239
|
-
(
|
|
4342
|
+
else if (droppedDragObject?.type == "component" ||
|
|
4343
|
+
(droppedDragObject?.type == "items" && droppedDragObject.items)) {
|
|
4240
4344
|
const parentComponent = parentId && page ? getComponentById(parentId, page) : null;
|
|
4241
|
-
if (
|
|
4345
|
+
if (droppedDragObject.type == "items" && droppedDragObject.items) {
|
|
4242
4346
|
op = {
|
|
4243
4347
|
type: "link-component",
|
|
4244
4348
|
mainItem: page.item.descriptor,
|
|
@@ -4252,33 +4356,52 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4252
4356
|
placeholderIndex: index,
|
|
4253
4357
|
date: new Date().toISOString(),
|
|
4254
4358
|
id: uuid(),
|
|
4255
|
-
linkedComponentItem:
|
|
4359
|
+
linkedComponentItem: droppedDragObject.items[0],
|
|
4256
4360
|
title: "Link component",
|
|
4257
4361
|
};
|
|
4258
4362
|
}
|
|
4259
4363
|
else {
|
|
4260
|
-
const componentIds =
|
|
4261
|
-
if (componentIds.length
|
|
4262
|
-
|
|
4263
|
-
|
|
4264
|
-
|
|
4265
|
-
|
|
4266
|
-
|
|
4267
|
-
|
|
4268
|
-
|
|
4269
|
-
|
|
4270
|
-
|
|
4271
|
-
|
|
4272
|
-
|
|
4273
|
-
|
|
4274
|
-
|
|
4275
|
-
|
|
4276
|
-
|
|
4277
|
-
}
|
|
4364
|
+
const componentIds = droppedDragObject.components?.map((c) => c.id) ?? [];
|
|
4365
|
+
if (componentIds.length > 0) {
|
|
4366
|
+
op = {
|
|
4367
|
+
type: "move-component",
|
|
4368
|
+
mainItem: page.item.descriptor,
|
|
4369
|
+
parent: parentId && {
|
|
4370
|
+
id: parentId,
|
|
4371
|
+
language: page.item.descriptor.language,
|
|
4372
|
+
version: page.item.descriptor.version,
|
|
4373
|
+
},
|
|
4374
|
+
placeholderKey,
|
|
4375
|
+
placeholderIndex: index,
|
|
4376
|
+
componentIds,
|
|
4377
|
+
date: new Date().toISOString(),
|
|
4378
|
+
id: uuid(),
|
|
4379
|
+
title: "Move component",
|
|
4380
|
+
};
|
|
4381
|
+
}
|
|
4278
4382
|
}
|
|
4279
4383
|
}
|
|
4280
4384
|
if (op)
|
|
4281
|
-
operations.executeEditOperation(op);
|
|
4385
|
+
operationPromise = operations.executeEditOperation(op);
|
|
4386
|
+
if (!operationPromise) {
|
|
4387
|
+
if (insertionSequence !== undefined &&
|
|
4388
|
+
insertingSequenceRef.current === insertionSequence) {
|
|
4389
|
+
setInserting(undefined);
|
|
4390
|
+
}
|
|
4391
|
+
return;
|
|
4392
|
+
}
|
|
4393
|
+
try {
|
|
4394
|
+
await operationPromise;
|
|
4395
|
+
}
|
|
4396
|
+
catch (err) {
|
|
4397
|
+
console.error("Failed to drop component in placeholder", err);
|
|
4398
|
+
}
|
|
4399
|
+
finally {
|
|
4400
|
+
if (insertionSequence !== undefined &&
|
|
4401
|
+
insertingSequenceRef.current === insertionSequence) {
|
|
4402
|
+
setInserting(undefined);
|
|
4403
|
+
}
|
|
4404
|
+
}
|
|
4282
4405
|
},
|
|
4283
4406
|
page,
|
|
4284
4407
|
triggerFieldAction: async (fieldDescriptor, actionButton, parameters, event) => {
|
|
@@ -4557,27 +4680,50 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4557
4680
|
setShowComments,
|
|
4558
4681
|
showResolvedComments,
|
|
4559
4682
|
setShowResolvedComments,
|
|
4560
|
-
addComment: async () => {
|
|
4683
|
+
addComment: async (options) => {
|
|
4561
4684
|
const descriptor = item?.descriptor;
|
|
4562
4685
|
if (!descriptor)
|
|
4563
4686
|
return;
|
|
4564
4687
|
// Snapshot selection context up-front so switching views doesn't change what we comment on.
|
|
4688
|
+
const hintedFieldSnapshot = options?.field;
|
|
4565
4689
|
const focusedFieldSnapshot = focusedFieldRef.current;
|
|
4566
|
-
const
|
|
4567
|
-
|
|
4568
|
-
|
|
4569
|
-
|
|
4690
|
+
const selectedRangeCandidate = isUsableTextSelectionRange(selectedRange)
|
|
4691
|
+
? selectedRange
|
|
4692
|
+
: lastTextSelectionRangeRef.current;
|
|
4693
|
+
const selectedRangeSnapshot = !hintedFieldSnapshot ||
|
|
4694
|
+
selectionRangeMatchesField(selectedRangeCandidate, hintedFieldSnapshot)
|
|
4695
|
+
? selectedRangeCandidate
|
|
4696
|
+
: undefined;
|
|
4697
|
+
const selectedRangeFieldSnapshot = isUsableTextSelectionRange(selectedRangeSnapshot)
|
|
4698
|
+
? {
|
|
4699
|
+
fieldId: selectedRangeSnapshot.fieldId,
|
|
4700
|
+
item: {
|
|
4701
|
+
id: selectedRangeSnapshot.itemId,
|
|
4702
|
+
language: selectedRangeSnapshot.language || descriptor.language,
|
|
4703
|
+
version: typeof selectedRangeSnapshot.version === "number"
|
|
4704
|
+
? selectedRangeSnapshot.version
|
|
4705
|
+
: descriptor.version,
|
|
4706
|
+
},
|
|
4707
|
+
}
|
|
4708
|
+
: undefined;
|
|
4709
|
+
const commentFieldSnapshot = selectedRangeFieldSnapshot ??
|
|
4710
|
+
hintedFieldSnapshot ??
|
|
4711
|
+
focusedFieldSnapshot;
|
|
4712
|
+
const itemId = commentFieldSnapshot?.item.id ||
|
|
4713
|
+
(selection.length > 0 ? selection[0] : undefined) ||
|
|
4570
4714
|
descriptor.id;
|
|
4571
4715
|
if (!itemId)
|
|
4572
4716
|
return;
|
|
4573
4717
|
// Ensure the feedback sidebar is open when adding a comment (e.g. command palette / toolbar button).
|
|
4574
4718
|
openSidebar("feedback");
|
|
4575
|
-
const language = descriptor.language;
|
|
4576
|
-
const version =
|
|
4719
|
+
const language = commentFieldSnapshot?.item.language || descriptor.language;
|
|
4720
|
+
const version = typeof commentFieldSnapshot?.item.version === "number"
|
|
4721
|
+
? commentFieldSnapshot.item.version
|
|
4722
|
+
: descriptor.version;
|
|
4577
4723
|
const getFieldName = async () => {
|
|
4578
|
-
if (!
|
|
4724
|
+
if (!commentFieldSnapshot)
|
|
4579
4725
|
return "";
|
|
4580
|
-
const field = await itemsRepository.getField(
|
|
4726
|
+
const field = await itemsRepository.getField(commentFieldSnapshot);
|
|
4581
4727
|
return field?.name;
|
|
4582
4728
|
};
|
|
4583
4729
|
const getItemName = async () => {
|
|
@@ -4593,24 +4739,40 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4593
4739
|
isNew: true,
|
|
4594
4740
|
itemId,
|
|
4595
4741
|
itemName: await getItemName(),
|
|
4596
|
-
fieldId:
|
|
4742
|
+
fieldId: commentFieldSnapshot?.fieldId,
|
|
4597
4743
|
fieldName: await getFieldName(),
|
|
4598
4744
|
mainItemId: descriptor.id,
|
|
4599
4745
|
language,
|
|
4600
4746
|
version,
|
|
4601
4747
|
position: 0,
|
|
4602
|
-
rangeStart: selectedRangeSnapshot
|
|
4603
|
-
|
|
4748
|
+
rangeStart: isUsableTextSelectionRange(selectedRangeSnapshot)
|
|
4749
|
+
? selectedRangeSnapshot.startOffset
|
|
4750
|
+
: 0,
|
|
4751
|
+
rangeEnd: isUsableTextSelectionRange(selectedRangeSnapshot)
|
|
4752
|
+
? selectedRangeSnapshot.endOffset
|
|
4753
|
+
: 0,
|
|
4604
4754
|
author: user?.name,
|
|
4605
4755
|
authorDisplayName: user?.fullName,
|
|
4606
|
-
|
|
4756
|
+
created: new Date().toISOString(),
|
|
4607
4757
|
};
|
|
4758
|
+
if (selectedRangeSnapshot?.clientRect) {
|
|
4759
|
+
newComment[COMMENT_TRANSIENT_SELECTION_RECT] =
|
|
4760
|
+
selectedRangeSnapshot.clientRect;
|
|
4761
|
+
}
|
|
4762
|
+
if (selectedRangeSnapshot?.elementKey) {
|
|
4763
|
+
newComment[COMMENT_TRANSIENT_ELEMENT_KEY] =
|
|
4764
|
+
selectedRangeSnapshot.elementKey;
|
|
4765
|
+
}
|
|
4608
4766
|
setComments([newComment, ...comments]);
|
|
4609
4767
|
setSelectedComment(newComment);
|
|
4610
4768
|
setShowComments(true);
|
|
4769
|
+
lastTextSelectionRangeRef.current = undefined;
|
|
4611
4770
|
},
|
|
4612
4771
|
mode,
|
|
4772
|
+
changeMode,
|
|
4613
4773
|
setMode,
|
|
4774
|
+
registerModeChangeParticipant,
|
|
4775
|
+
modeTransitionRevision,
|
|
4614
4776
|
previewDate,
|
|
4615
4777
|
setPreviewDate,
|
|
4616
4778
|
layoutMode,
|
|
@@ -4635,6 +4797,8 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4635
4797
|
setComponentNavigatorOpenForSlot,
|
|
4636
4798
|
showAgentsPanel,
|
|
4637
4799
|
setShowAgentsPanel: handleSetShowAgentsPanel,
|
|
4800
|
+
waitForSurfaceSettled: settleRegistry.waitForSurfaceSettled,
|
|
4801
|
+
notifySurfaceSettled: settleRegistry.notifySettled,
|
|
4638
4802
|
isEditorFormHiddenForSlot,
|
|
4639
4803
|
setEditorFormHiddenForSlot,
|
|
4640
4804
|
editorFormHintSeen,
|
|
@@ -4678,6 +4842,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4678
4842
|
setCurrentWizardId,
|
|
4679
4843
|
favorites,
|
|
4680
4844
|
loadFavorites,
|
|
4845
|
+
refreshFavorites,
|
|
4681
4846
|
isQuickSwitcherVisible: quickSwitcherVisible,
|
|
4682
4847
|
// Context factory registry methods
|
|
4683
4848
|
registerContextFactory: (name, factory) => {
|
|
@@ -4786,6 +4951,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4786
4951
|
isRefreshing,
|
|
4787
4952
|
favorites,
|
|
4788
4953
|
loadFavorites,
|
|
4954
|
+
refreshFavorites,
|
|
4789
4955
|
currentWizardId,
|
|
4790
4956
|
quickSwitcherVisible,
|
|
4791
4957
|
quickSwitcherSelectedIndex,
|
|
@@ -4796,6 +4962,10 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4796
4962
|
factoriesRef,
|
|
4797
4963
|
user,
|
|
4798
4964
|
statusMessage,
|
|
4965
|
+
changeMode,
|
|
4966
|
+
setMode,
|
|
4967
|
+
registerModeChangeParticipant,
|
|
4968
|
+
modeTransitionRevision,
|
|
4799
4969
|
previewDate,
|
|
4800
4970
|
layoutMode,
|
|
4801
4971
|
enableCompletions,
|
|
@@ -4811,6 +4981,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4811
4981
|
handleSetShowComponentNavigator,
|
|
4812
4982
|
showAgentsPanel,
|
|
4813
4983
|
handleSetShowAgentsPanel,
|
|
4984
|
+
settleRegistry,
|
|
4814
4985
|
activeSlotId,
|
|
4815
4986
|
editorSlots,
|
|
4816
4987
|
slotContexts,
|
|
@@ -4861,8 +5032,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4861
5032
|
setLockedField(undefined); // Clear client-side lock state
|
|
4862
5033
|
await releaseFieldLocks(sessionId);
|
|
4863
5034
|
},
|
|
4864
|
-
inlineEditingFieldElement,
|
|
4865
|
-
setInlineEditingFieldElement,
|
|
4866
5035
|
};
|
|
4867
5036
|
// Debug: Track editContext changes
|
|
4868
5037
|
// const prevDependencies = useRef<any[]>([]);
|
|
@@ -4901,7 +5070,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4901
5070
|
// componentDesignerRendering,
|
|
4902
5071
|
// insertMode,
|
|
4903
5072
|
// currentOverlay,
|
|
4904
|
-
// inlineEditingFieldElement,
|
|
4905
5073
|
// lockedField,
|
|
4906
5074
|
// selectedRange,
|
|
4907
5075
|
// pageViewContext,
|
|
@@ -4989,7 +5157,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
4989
5157
|
// 'componentDesignerRendering',
|
|
4990
5158
|
// 'insertMode',
|
|
4991
5159
|
// 'currentOverlay',
|
|
4992
|
-
// 'inlineEditingFieldElement',
|
|
4993
5160
|
// 'lockedField',
|
|
4994
5161
|
// 'selectedRange',
|
|
4995
5162
|
// 'pageViewContext',
|
|
@@ -5117,13 +5284,14 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
|
|
|
5117
5284
|
: window.location.pathname;
|
|
5118
5285
|
window.history.replaceState(getCurrentHistoryState(), "", newUrl);
|
|
5119
5286
|
}, configuration: configuration, restoredFromUrl: tourRestoredRef.current })), _jsx(FeatureGate, { feature: LicenseFeatures.AI, children: _jsx(GuidanceOverlay, {}) }), _jsx(FeatureGate, { feature: LicenseFeatures.AI, children: _jsx(AgentDialogHandler, {}) })] }));
|
|
5120
|
-
|
|
5287
|
+
const showRefreshSpinner = editContext.isRefreshing && !activePageViewContext.iframeSupportsRefresh;
|
|
5288
|
+
return (_jsx(LicenseProvider, { initialLicenseStatus: initialLicenseStatus, initialStatusLoaded: initialLicenseStatusLoaded, children: _jsx("div", { className: `editor h-full w-full`, children: _jsx(OperationsContextProvider, { value: operationsContext.context, children: _jsx(FieldsEditContextProvider, { value: fieldsEditContext, children: _jsx(EditContextProvider, { value: editContext, children: _jsxs(SplashScreenAgentProvider, { children: [_jsx(DevModeIndicator, {}), startupChecks.state === "loading" && _jsx(EditorLoadingOverlay, {}), showRefreshSpinner && (_jsx("div", { className: "text-neutral-grey-50 pointer-events-none fixed right-0 bottom-0 flex h-24 w-24 items-center justify-center opacity-50 select-none", children: _jsx(Spinner, {}) })), (currentWorkspace.id === "agents" ||
|
|
5121
5289
|
currentWorkspace.id === "taskboard" ||
|
|
5122
5290
|
currentWorkspace.id === "translation-management") &&
|
|
5123
5291
|
showAgentsWorkspaceEditor && (_jsx(AgentsSlotContextBridgeHost, { slots: editorSlots })), startupChecks.state !== "loading" && (children || editorUi), startupChecks.state !== "loading" && dialog, _jsx(Toaster, { position: "top-center" }), " ", _jsx(ConfirmationDialog, { ref: confirmationDialogRef }), _jsx(ConcurrentUserLimitDialog, { open: concurrentUserLimitError !== null, onOpenChange: (open) => {
|
|
5124
5292
|
if (!open) {
|
|
5125
5293
|
setConcurrentUserLimitError(null);
|
|
5126
5294
|
}
|
|
5127
|
-
}, sessionId: sessionId, currentUsers: concurrentUserLimitError?.currentUsers ?? 0, maxUsers: concurrentUserLimitError?.maxUsers ?? 0, message: concurrentUserLimitError?.message ?? "", onRetry: handleRetryConnection, isAdministrator: userInfo.user.isAdministrator === true }), _jsx(QuickItemSwitcher, { visible: quickSwitcherVisible, entries: quickSwitcherEntries.slice(0, 5), selectedIndex: quickSwitcherSelectedIndex, onSelect: handleQuickSwitcherSelect, onClose: () => setQuickSwitcherVisible(false) }), _jsx(EditContextMenu, { ref: contextMenuRef }), _jsx(EditorFormHintPopover, {}), _jsx(FeatureGate, { feature: LicenseFeatures.AI, children: _jsx(InlineAiTrigger, {}) }), media.mediaSelectorVisible && (_jsx(MediaSelector, { language: editContext.currentItemDescriptor.language, visible: media.mediaSelectorVisible, onHide: media.handleHide, onMediaSelected: media.onMediaSelect, selectedIdPath: media.selectedMediaIdPath, mode: media.mediaSelectorMode, initialSearchTerm: media.initialSearchTerm })), _jsx(FieldEditorPopup, { ref: fieldEditorPopupRef }), _jsx(LicenseOverlay, {}), _jsx(SessionExpiredOverlay, {})] }) }) }) }) }) }));
|
|
5295
|
+
}, sessionId: sessionId, currentUsers: concurrentUserLimitError?.currentUsers ?? 0, maxUsers: concurrentUserLimitError?.maxUsers ?? 0, message: concurrentUserLimitError?.message ?? "", onRetry: handleRetryConnection, isAdministrator: userInfo.user.isAdministrator === true }), _jsx(QuickItemSwitcher, { visible: quickSwitcherVisible, entries: quickSwitcherEntries.slice(0, 5), selectedIndex: quickSwitcherSelectedIndex, onSelect: handleQuickSwitcherSelect, onClose: () => setQuickSwitcherVisible(false) }), _jsx(EditContextMenu, { ref: contextMenuRef, onOpenChange: handleContextMenuOpenChange }), _jsx(EditorFormHintPopover, {}), _jsx(FeatureGate, { feature: LicenseFeatures.AI, children: _jsx(InlineAiTrigger, {}) }), media.mediaSelectorVisible && (_jsx(MediaSelector, { language: editContext.currentItemDescriptor.language, visible: media.mediaSelectorVisible, onHide: media.handleHide, onMediaSelected: media.onMediaSelect, selectedIdPath: media.selectedMediaIdPath, mode: media.mediaSelectorMode, initialSearchTerm: media.initialSearchTerm })), _jsx(FieldEditorPopup, { ref: fieldEditorPopupRef }), _jsx(LicenseOverlay, {}), _jsx(SessionExpiredOverlay, {})] }) }) }) }) }) }));
|
|
5128
5296
|
}
|
|
5129
5297
|
//# sourceMappingURL=EditorShell.js.map
|