@parhelia/core 0.1.12554 → 0.1.12555
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 +4 -6
- package/dist/agents-view/AgentCard.js +24 -143
- package/dist/agents-view/AgentCard.js.map +1 -1
- package/dist/agents-view/AgentsInbox.d.ts +1 -1
- package/dist/agents-view/AgentsInbox.js +92 -7
- package/dist/agents-view/AgentsInbox.js.map +1 -1
- package/dist/agents-view/AgentsTitlebar.js +2 -3
- package/dist/agents-view/AgentsTitlebar.js.map +1 -1
- package/dist/agents-view/AgentsView.d.ts +7 -6
- package/dist/agents-view/AgentsView.js +98 -187
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/agents-view/AgentsWorkspaceView.d.ts +6 -2
- package/dist/agents-view/AgentsWorkspaceView.js +113 -266
- package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
- package/dist/agents-view/ProfileAgentsGroup.d.ts +1 -2
- package/dist/agents-view/ProfileAgentsGroup.js +3 -4
- 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 +4 -2
- 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 +10 -6
- 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 +1 -4
- 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 +4 -12
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/copy-button.d.ts +1 -2
- 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 +126 -21
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/components/ui/input.d.ts +1 -1
- package/dist/components/ui/input.js +3 -5
- package/dist/components/ui/input.js.map +1 -1
- package/dist/components/ui/paste-button.d.ts +1 -2
- 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 +9 -1
- 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 +11 -4
- package/dist/components/ui/tabs.js.map +1 -1
- package/dist/config/config.d.ts +2 -4
- package/dist/config/config.js +70 -250
- package/dist/config/config.js.map +1 -1
- package/dist/config/types/workspace.d.ts +0 -6
- package/dist/config/types.d.ts +12 -63
- package/dist/config/types.js.map +1 -1
- package/dist/editor/ComponentInfo.d.ts +4 -0
- package/dist/editor/ComponentInfo.js +41 -0
- package/dist/editor/ComponentInfo.js.map +1 -0
- package/dist/editor/ConfirmationDialog.js +4 -20
- package/dist/editor/ConfirmationDialog.js.map +1 -1
- package/dist/editor/ContentTree.d.ts +1 -2
- package/dist/editor/ContentTree.js +32 -93
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/Editor.js +22 -87
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/FieldHistory.js +36 -84
- package/dist/editor/FieldHistory.js.map +1 -1
- package/dist/editor/FieldListField.js +9 -21
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/FieldListFieldWithFallbacks.js +2 -23
- package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
- package/dist/editor/GlobalMenuBar.js +2 -29
- package/dist/editor/GlobalMenuBar.js.map +1 -1
- package/dist/editor/ImageEditor.js +2 -5
- package/dist/editor/ImageEditor.js.map +1 -1
- package/dist/editor/ItemInfo.js +1 -36
- package/dist/editor/ItemInfo.js.map +1 -1
- package/dist/editor/LinkEditorDialog.js +0 -3
- package/dist/editor/LinkEditorDialog.js.map +1 -1
- package/dist/editor/MainLayout.d.ts +2 -0
- package/dist/editor/MainLayout.js +8 -65
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/MigrationsView.js +5 -29
- package/dist/editor/MigrationsView.js.map +1 -1
- package/dist/editor/MobileLayout.js +12 -37
- package/dist/editor/MobileLayout.js.map +1 -1
- package/dist/editor/PictureCropper.js +45 -54
- package/dist/editor/PictureCropper.js.map +1 -1
- package/dist/editor/PictureEditor.js +15 -17
- 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 +12 -52
- package/dist/editor/SetupWizard.js.map +1 -1
- package/dist/editor/Titlebar.js +2 -7
- package/dist/editor/Titlebar.js.map +1 -1
- package/dist/editor/ai/AgentCostDisplay.d.ts +0 -1
- package/dist/editor/ai/AgentCostDisplay.js +1 -1
- package/dist/editor/ai/AgentCostDisplay.js.map +1 -1
- package/dist/editor/ai/AgentDocumentList.js +14 -32
- package/dist/editor/ai/AgentDocumentList.js.map +1 -1
- package/dist/editor/ai/AgentGreeting.js +2 -3
- package/dist/editor/ai/AgentGreeting.js.map +1 -1
- package/dist/editor/ai/AgentProfileSelector.js +1 -2
- package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
- package/dist/editor/ai/AgentStatusBadge.d.ts +5 -0
- package/dist/editor/ai/AgentStatusBadge.js +65 -67
- package/dist/editor/ai/AgentStatusBadge.js.map +1 -1
- package/dist/editor/ai/AgentTerminal.d.ts +2 -14
- package/dist/editor/ai/AgentTerminal.js +483 -2377
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/AgentTerminalStatusBar.d.ts +3 -8
- package/dist/editor/ai/AgentTerminalStatusBar.js +56 -460
- package/dist/editor/ai/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/Agents.js +113 -150
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/AiResponseMessage.d.ts +1 -10
- package/dist/editor/ai/AiResponseMessage.js +23 -238
- package/dist/editor/ai/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/ContextInfoBar.d.ts +3 -2
- package/dist/editor/ai/ContextInfoBar.js +7 -64
- package/dist/editor/ai/ContextInfoBar.js.map +1 -1
- package/dist/editor/ai/GuidanceOverlay.js +11 -17
- package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
- package/dist/editor/ai/HelpTerminal.d.ts +5 -0
- package/dist/editor/ai/HelpTerminal.js +166 -0
- package/dist/editor/ai/HelpTerminal.js.map +1 -0
- package/dist/editor/ai/InlineAiDialog.d.ts +1 -1
- package/dist/editor/ai/InlineAiDialog.js +192 -514
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/InlineAiTrigger.js +12 -115
- package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
- package/dist/editor/ai/MediaImage.js +8 -40
- package/dist/editor/ai/MediaImage.js.map +1 -1
- package/dist/editor/ai/SpawnedAgentsPanel.js +12 -10
- package/dist/editor/ai/SpawnedAgentsPanel.js.map +1 -1
- package/dist/editor/ai/ToolCallDisplay.d.ts +2 -22
- package/dist/editor/ai/ToolCallDisplay.js +147 -518
- package/dist/editor/ai/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai/dialogs/AgentDialogHandler.d.ts +8 -1
- package/dist/editor/ai/dialogs/AgentDialogHandler.js +42 -379
- package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
- package/dist/editor/ai/dialogs/QuestionnaireInline.d.ts +1 -5
- package/dist/editor/ai/dialogs/QuestionnaireInline.js +60 -628
- package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
- package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +0 -115
- package/dist/editor/ai/dialogs/agentDialogTypes.js +0 -2
- package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
- package/dist/editor/ai/types.d.ts +1 -3
- package/dist/editor/ai/useAgentStatus.d.ts +1 -2
- package/dist/editor/ai/useAgentStatus.js +99 -86
- package/dist/editor/ai/useAgentStatus.js.map +1 -1
- package/dist/editor/ai/useInlineAiPosition.js +5 -45
- package/dist/editor/ai/useInlineAiPosition.js.map +1 -1
- package/dist/editor/client/AboutDialog.js +2 -4
- package/dist/editor/client/AboutDialog.js.map +1 -1
- package/dist/editor/client/EditorShell.d.ts +1 -4
- package/dist/editor/client/EditorShell.js +230 -730
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +19 -33
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/helpers.js +0 -6
- package/dist/editor/client/helpers.js.map +1 -1
- package/dist/editor/client/hooks/useEditorUrlSync.js +2 -1
- package/dist/editor/client/hooks/useEditorUrlSync.js.map +1 -1
- package/dist/editor/client/hooks/useEditorWebSocket.d.ts +0 -10
- package/dist/editor/client/hooks/useEditorWebSocket.js +14 -209
- package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
- package/dist/editor/client/hooks/useQuota.d.ts +0 -8
- package/dist/editor/client/hooks/useQuota.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js +7 -68
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/itemsRepository.js +6 -10
- package/dist/editor/client/itemsRepository.js.map +1 -1
- package/dist/editor/client/operations.d.ts +3 -6
- package/dist/editor/client/operations.js +30 -208
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/pageModelBuilder.js +31 -4
- 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 +6 -0
- package/dist/editor/client/ui/EditorChrome.js +72 -55
- package/dist/editor/client/ui/EditorChrome.js.map +1 -1
- package/dist/editor/client/ui/FullscreenControls.js +3 -5
- package/dist/editor/client/ui/FullscreenControls.js.map +1 -1
- package/dist/editor/commands/commands.d.ts +1 -11
- package/dist/editor/commands/commands.js +1 -12
- package/dist/editor/commands/commands.js.map +1 -1
- package/dist/editor/commands/componentCommands.js +55 -109
- package/dist/editor/commands/componentCommands.js.map +1 -1
- package/dist/editor/commands/customCommandConverter.d.ts +1 -8
- package/dist/editor/commands/customCommandConverter.js +5 -35
- package/dist/editor/commands/customCommandConverter.js.map +1 -1
- package/dist/editor/commands/handlers/agentHandler.js +1 -2
- package/dist/editor/commands/handlers/agentHandler.js.map +1 -1
- package/dist/editor/commands/itemCommands.d.ts +0 -3
- package/dist/editor/commands/itemCommands.js +10 -93
- package/dist/editor/commands/itemCommands.js.map +1 -1
- package/dist/editor/commands/undo.d.ts +15 -9
- package/dist/editor/commands/undo.js +0 -24
- package/dist/editor/commands/undo.js.map +1 -1
- package/dist/editor/context-menu/InsertMenu.js +39 -83
- 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/ReactQuill.d.ts +125 -0
- package/dist/editor/field-types/ReactQuill.js +385 -0
- package/dist/editor/field-types/ReactQuill.js.map +1 -0
- package/dist/editor/field-types/RichTextEditor.js +5 -13
- package/dist/editor/field-types/RichTextEditor.js.map +1 -1
- package/dist/editor/field-types/RichTextEditorComponent.js +3 -37
- 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 +2 -3
- package/dist/editor/field-types/TreeListEditor.js.map +1 -1
- package/dist/editor/field-types/richtext/components/ReactSlate.css +5 -23
- package/dist/editor/field-types/richtext/components/ReactSlate.d.ts +0 -2
- package/dist/editor/field-types/richtext/components/ReactSlate.js +4 -28
- package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
- package/dist/editor/field-types/richtext/components/ToolbarButton.js +2 -4
- package/dist/editor/field-types/richtext/components/ToolbarButton.js.map +1 -1
- package/dist/editor/field-types/richtext/contextMenuFactory.d.ts +0 -13
- package/dist/editor/field-types/richtext/contextMenuFactory.js +24 -181
- package/dist/editor/field-types/richtext/contextMenuFactory.js.map +1 -1
- package/dist/editor/field-types/richtext/types.d.ts +0 -2
- package/dist/editor/field-types/richtext/types.js.map +1 -1
- package/dist/editor/field-types/richtext/utils/plugins.js +0 -4
- package/dist/editor/field-types/richtext/utils/plugins.js.map +1 -1
- package/dist/editor/field-types/textContextMenuFactory.js +2 -3
- package/dist/editor/field-types/textContextMenuFactory.js.map +1 -1
- package/dist/editor/media-selector/AiImageSearchPrompt.js +2 -4
- 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 +1 -7
- package/dist/editor/media-selector/MediaSelector.js.map +1 -1
- package/dist/editor/media-selector/TreeSelector.js +35 -40
- 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 +2 -4
- 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 +147 -26
- package/dist/editor/menubar/PageSelector.js.map +1 -1
- package/dist/editor/menubar/Separator.js +1 -1
- package/dist/editor/menubar/VersionSelector.js +4 -2
- package/dist/editor/menubar/VersionSelector.js.map +1 -1
- package/dist/editor/menubar/WorkflowButton.js +12 -39
- package/dist/editor/menubar/WorkflowButton.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js +38 -16
- 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 +0 -1
- package/dist/editor/menubar/toolbar-sections/HelpButton.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.d.ts +10 -6
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +220 -597
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js +2 -13
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
- package/dist/editor/page-editor-chrome/CommentHighlighting.js +1 -42
- 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 +48 -97
- package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +17 -38
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +11 -17
- 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 +11 -69
- package/dist/editor/page-viewer/EditorForm.js.map +1 -1
- package/dist/editor/page-viewer/MiniMap.d.ts +4 -2
- package/dist/editor/page-viewer/MiniMap.js +28 -91
- package/dist/editor/page-viewer/MiniMap.js.map +1 -1
- package/dist/editor/page-viewer/PageViewer.d.ts +1 -3
- package/dist/editor/page-viewer/PageViewer.js +19 -92
- package/dist/editor/page-viewer/PageViewer.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.d.ts +1 -2
- package/dist/editor/page-viewer/PageViewerFrame.js +115 -348
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/pageModelSkeletonBuilder.js +49 -114
- package/dist/editor/page-viewer/pageModelSkeletonBuilder.js.map +1 -1
- package/dist/editor/page-viewer/pageViewContext.d.ts +0 -1
- package/dist/editor/page-viewer/pageViewContext.js +14 -51
- package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
- package/dist/editor/pageModel.d.ts +1 -14
- package/dist/editor/reviews/Comment.js +12 -26
- package/dist/editor/reviews/Comment.js.map +1 -1
- package/dist/editor/reviews/CommentDisplayPopover.js +5 -7
- package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/CommentView.js +4 -19
- package/dist/editor/reviews/CommentView.js.map +1 -1
- package/dist/editor/reviews/Comments.js +72 -89
- package/dist/editor/reviews/Comments.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js +177 -281
- package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
- package/dist/editor/reviews/DecisionsMatrix.js +25 -96
- package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
- package/dist/editor/reviews/DiffView.js +14 -7
- package/dist/editor/reviews/DiffView.js.map +1 -1
- package/dist/editor/reviews/EditReviewSettingsDialog.js +4 -6
- package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
- package/dist/editor/reviews/MultiReviewManager.js +3 -25
- package/dist/editor/reviews/MultiReviewManager.js.map +1 -1
- package/dist/editor/reviews/PagesPanel.js +15 -31
- package/dist/editor/reviews/PagesPanel.js.map +1 -1
- package/dist/editor/reviews/PreviewInfo.js +4 -1
- package/dist/editor/reviews/PreviewInfo.js.map +1 -1
- package/dist/editor/reviews/ReviewCard.js +7 -13
- package/dist/editor/reviews/ReviewCard.js.map +1 -1
- package/dist/editor/reviews/ReviewDetail.js +2 -3
- package/dist/editor/reviews/ReviewDetail.js.map +1 -1
- package/dist/editor/reviews/ReviewsList.js +3 -7
- package/dist/editor/reviews/ReviewsList.js.map +1 -1
- package/dist/editor/reviews/SuggestedEdit.js +3 -34
- package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
- package/dist/editor/reviews/SuggestionDisplayPopover.js +5 -31
- package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/commentAi.js +6 -25
- package/dist/editor/reviews/commentAi.js.map +1 -1
- package/dist/editor/reviews/reviewCommands.js +1 -4
- 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 +30 -12
- package/dist/editor/reviews/useReviews.js.map +1 -1
- package/dist/editor/services/agentService.d.ts +5 -229
- package/dist/editor/services/agentService.js +39 -292
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/aiService.d.ts +1 -57
- package/dist/editor/services/aiService.js +6 -79
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/services/contentService.d.ts +3 -6
- package/dist/editor/services/contentService.js +12 -13
- package/dist/editor/services/contentService.js.map +1 -1
- package/dist/editor/services/editService.d.ts +1 -52
- package/dist/editor/services/editService.js +2 -94
- 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 +6 -3
- package/dist/editor/services/reviewsService.js +11 -2
- package/dist/editor/services/reviewsService.js.map +1 -1
- package/dist/editor/services/serviceHelper.d.ts +1 -2
- package/dist/editor/services/serviceHelper.js +20 -112
- package/dist/editor/services/serviceHelper.js.map +1 -1
- package/dist/editor/services/systemService.d.ts +1 -2
- package/dist/editor/services/systemService.js +0 -3
- package/dist/editor/services/systemService.js.map +1 -1
- package/dist/editor/services-server/api.d.ts +2 -1
- package/dist/editor/services-server/api.js +6 -11
- package/dist/editor/services-server/api.js.map +1 -1
- package/dist/editor/services-server/graphQL.d.ts +29 -0
- package/dist/editor/services-server/graphQL.js +53 -0
- package/dist/editor/services-server/graphQL.js.map +1 -0
- package/dist/editor/settings/About.js +3 -317
- package/dist/editor/settings/About.js.map +1 -1
- package/dist/editor/settings/AllAgentsPanel.d.ts +5 -0
- package/dist/editor/settings/AllAgentsPanel.js +139 -0
- package/dist/editor/settings/AllAgentsPanel.js.map +1 -0
- package/dist/editor/settings/LatestFeedback.d.ts +1 -0
- package/dist/editor/settings/LatestFeedback.js +136 -0
- package/dist/editor/settings/LatestFeedback.js.map +1 -0
- package/dist/editor/settings/QuotaInfo.js +4 -210
- package/dist/editor/settings/QuotaInfo.js.map +1 -1
- package/dist/editor/settings/SettingsView.js +23 -25
- package/dist/editor/settings/SettingsView.js.map +1 -1
- package/dist/editor/settings/Setup.d.ts +1 -0
- package/dist/editor/settings/Setup.js +211 -0
- package/dist/editor/settings/Setup.js.map +1 -0
- package/dist/editor/settings/Status.js +6 -7
- package/dist/editor/settings/Status.js.map +1 -1
- package/dist/editor/settings/index/useIndexStatus.js +22 -20
- package/dist/editor/settings/index/useIndexStatus.js.map +1 -1
- package/dist/editor/settings/panels/AgentsPanel.d.ts +4 -0
- package/dist/editor/settings/panels/AgentsPanel.js +121 -95
- package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
- package/dist/editor/settings/panels/DatabasePanel.d.ts +6 -0
- package/dist/editor/settings/panels/DatabasePanel.js +50 -0
- package/dist/editor/settings/panels/DatabasePanel.js.map +1 -0
- package/dist/editor/settings/panels/ModelsPanel.js +108 -329
- 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 +59 -86
- 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 +2 -3
- package/dist/editor/settings/panels/index.js +2 -3
- package/dist/editor/settings/panels/index.js.map +1 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.d.ts +2 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js +195 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/index.d.ts +2 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/index.js +21 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/index.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.d.ts +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js +233 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.d.ts +15 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js +14 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.d.ts +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js +94 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/types.d.ts +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/types.js +2 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/types.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.d.ts +5 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.js +44 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.js.map +1 -0
- package/dist/editor/settings/setup-steps/IndexSetupStep.d.ts +2 -0
- package/dist/editor/settings/setup-steps/IndexSetupStep.js +36 -0
- package/dist/editor/settings/setup-steps/IndexSetupStep.js.map +1 -0
- package/dist/editor/settings/setup-steps/SettingsSetupStep.d.ts +2 -0
- package/dist/editor/settings/setup-steps/SettingsSetupStep.js +111 -0
- package/dist/editor/settings/setup-steps/SettingsSetupStep.js.map +1 -0
- package/dist/editor/settings/setup-steps/SetupOverview.d.ts +14 -0
- package/dist/editor/settings/setup-steps/SetupOverview.js +38 -0
- package/dist/editor/settings/setup-steps/SetupOverview.js.map +1 -0
- package/dist/editor/settings/status/coreStatusChecks.js +19 -124
- package/dist/editor/settings/status/coreStatusChecks.js.map +1 -1
- package/dist/editor/settings/status/useStartupChecks.d.ts +1 -3
- package/dist/editor/settings/status/useStartupChecks.js +5 -9
- package/dist/editor/settings/status/useStartupChecks.js.map +1 -1
- package/dist/editor/setup-wizard/steps/CompleteStep.d.ts +1 -2
- package/dist/editor/setup-wizard/steps/CompleteStep.js +1 -2
- package/dist/editor/setup-wizard/steps/CompleteStep.js.map +1 -1
- package/dist/editor/sidebar/ComponentPalette.js +1 -2
- package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
- package/dist/editor/sidebar/ComponentTree.d.ts +1 -8
- package/dist/editor/sidebar/ComponentTree.js +69 -216
- package/dist/editor/sidebar/ComponentTree.js.map +1 -1
- package/dist/editor/sidebar/Debug.d.ts +1 -0
- package/dist/editor/sidebar/Debug.js +70 -0
- package/dist/editor/sidebar/Debug.js.map +1 -0
- package/dist/editor/sidebar/EditHistory.js +46 -22
- package/dist/editor/sidebar/EditHistory.js.map +1 -1
- package/dist/editor/sidebar/Favorites.js +8 -4
- package/dist/editor/sidebar/Favorites.js.map +1 -1
- package/dist/editor/sidebar/GraphQL.d.ts +2 -0
- package/dist/editor/sidebar/GraphQL.js +234 -0
- package/dist/editor/sidebar/GraphQL.js.map +1 -0
- package/dist/editor/sidebar/LeftToolbar.d.ts +1 -0
- package/dist/editor/sidebar/LeftToolbar.js +12 -0
- package/dist/editor/sidebar/LeftToolbar.js.map +1 -0
- package/dist/editor/sidebar/MainContentTree.js +3 -4
- package/dist/editor/sidebar/MainContentTree.js.map +1 -1
- package/dist/editor/sidebar/NavigationSidebar.d.ts +4 -0
- package/dist/editor/sidebar/NavigationSidebar.js +254 -0
- package/dist/editor/sidebar/NavigationSidebar.js.map +1 -0
- package/dist/editor/sidebar/OperationItem.js +7 -21
- package/dist/editor/sidebar/OperationItem.js.map +1 -1
- package/dist/editor/sidebar/SidebarPanel.d.ts +1 -3
- package/dist/editor/sidebar/SidebarPanel.js +12 -44
- package/dist/editor/sidebar/SidebarPanel.js.map +1 -1
- package/dist/editor/sidebar/SidebarStack.d.ts +1 -2
- package/dist/editor/sidebar/SidebarStack.js +3 -4
- package/dist/editor/sidebar/SidebarStack.js.map +1 -1
- package/dist/editor/sidebar/Validation.js +12 -22
- package/dist/editor/sidebar/Validation.js.map +1 -1
- package/dist/editor/sidebar/Workbox.js +3 -53
- package/dist/editor/sidebar/Workbox.js.map +1 -1
- package/dist/editor/sidebar/WorkspaceRail.d.ts +1 -0
- package/dist/editor/sidebar/WorkspaceRail.js +167 -56
- package/dist/editor/sidebar/WorkspaceRail.js.map +1 -1
- package/dist/editor/tree-indicators/GutterColumns.d.ts +1 -3
- package/dist/editor/tree-indicators/GutterColumns.js +5 -26
- package/dist/editor/tree-indicators/GutterColumns.js.map +1 -1
- package/dist/editor/tree-indicators/GutterContext.d.ts +0 -4
- package/dist/editor/tree-indicators/GutterContext.js +0 -23
- package/dist/editor/tree-indicators/GutterContext.js.map +1 -1
- package/dist/editor/tree-indicators/GutterSelector.d.ts +5 -0
- package/dist/editor/tree-indicators/GutterSelector.js +91 -0
- package/dist/editor/tree-indicators/GutterSelector.js.map +1 -0
- package/dist/editor/tree-indicators/index.d.ts +1 -0
- package/dist/editor/tree-indicators/index.js +1 -0
- package/dist/editor/tree-indicators/index.js.map +1 -1
- package/dist/editor/tree-indicators/types.d.ts +1 -12
- 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 +0 -2
- package/dist/editor/ui/ItemNameDialogNew.js +17 -33
- package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
- package/dist/editor/ui/ItemSearch.js +11 -7
- 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 +0 -1
- package/dist/editor/ui/SimpleTabs.js +25 -45
- package/dist/editor/ui/SimpleTabs.js.map +1 -1
- package/dist/editor/ui/Splitter.d.ts +0 -1
- package/dist/editor/ui/Splitter.js +86 -102
- 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 +1 -6
- package/dist/editor/ui/TreeListSelector.js +2 -2
- package/dist/editor/ui/TreeListSelector.js.map +1 -1
- package/dist/editor/utils/keyboardNavigation.d.ts +20 -6
- package/dist/editor/utils/keyboardNavigation.js +140 -48
- package/dist/editor/utils/keyboardNavigation.js.map +1 -1
- package/dist/editor/utils.js +9 -19
- package/dist/editor/utils.js.map +1 -1
- package/dist/editor/views/CompareView.d.ts +1 -3
- package/dist/editor/views/CompareView.js +5 -7
- 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 +34 -27
- package/dist/editor/views/EditorSlot.js.map +1 -1
- package/dist/editor/views/ItemEditor.js +3 -7
- 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 +6 -5
- package/dist/editor/views/ParheliaView.js.map +1 -1
- package/dist/editor/views/SingleEditView.d.ts +1 -2
- package/dist/editor/views/SingleEditView.js +8 -10
- package/dist/editor/views/SingleEditView.js.map +1 -1
- package/dist/editor/views/editorSlotContext.js +6 -35
- package/dist/editor/views/editorSlotContext.js.map +1 -1
- package/dist/index.d.ts +2 -16
- package/dist/index.js +0 -11
- 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 +13 -40
- package/dist/setup/services/setupWizardService.js +17 -32
- package/dist/setup/services/setupWizardService.js.map +1 -1
- package/dist/setup/wizard/steps/AddModelDialog.js +3 -12
- package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -1
- package/dist/setup/wizard/steps/ImportModelDialog.js +22 -39
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
- package/dist/splash-screen/ModernSplashScreen.js +32 -112
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/splash-screen/NewPage.js +50 -33
- package/dist/splash-screen/NewPage.js.map +1 -1
- package/dist/splash-screen/OpenPage.js +6 -2
- package/dist/splash-screen/OpenPage.js.map +1 -1
- package/dist/splash-screen/ParheliaAssistantChat.js +29 -12
- package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
- package/dist/splash-screen/ParheliaLogo.js +37 -87
- 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 +1 -2
- package/dist/tour/Tour.js +75 -256
- package/dist/tour/Tour.js.map +1 -1
- package/dist/tour/default-tour.js +96 -222
- package/dist/tour/default-tour.js.map +1 -1
- package/dist/types.d.ts +29 -63
- package/package.json +15 -19
- package/styles.css +10 -14
|
@@ -4,17 +4,15 @@ import { MiniMap } from "./MiniMap";
|
|
|
4
4
|
import { useEditContext, useEditContextRef, useFieldsEditContext, useFieldsEditContextRef, } from "../client/editContext";
|
|
5
5
|
import { useDebouncedCallback, useThrottledCallback } from "use-debounce";
|
|
6
6
|
import { PageEditorChrome } from "../page-editor-chrome/PageEditorChrome";
|
|
7
|
-
import { useViewportChangeSignal } from "./pageViewContext";
|
|
8
7
|
import morphdom from "morphdom";
|
|
9
8
|
import uuid from "react-uuid";
|
|
10
9
|
import { cn } from "../../lib/utils";
|
|
11
|
-
import { findComponentRect, findFieldElement, findNearestEditableComponentId, findParentWithAttribute, getAbsolutePosition, getFieldDescriptorFromElement, findClosestFieldElement,
|
|
10
|
+
import { findComponentRect, findFieldElement, findNearestEditableComponentId, findParentWithAttribute, getAbsolutePosition, getFieldDescriptorFromElement, findClosestFieldElement, } from "../utils";
|
|
12
11
|
import { extractDOMSelectionContext } from "../utils/selectionContext";
|
|
13
|
-
import { cleanId } from "../utils/id-helper";
|
|
14
12
|
import { getAllComponentInstances, getComponentById, } from "../componentTreeHelper";
|
|
15
13
|
import { buildComponentContextMenuItems } from "../ContextMenu";
|
|
16
14
|
import { loadFieldButtons } from "../services/editService";
|
|
17
|
-
import { usePathname } from "
|
|
15
|
+
import { usePathname } from "next/navigation";
|
|
18
16
|
import { EditorWarnings } from "../EditorWarnings";
|
|
19
17
|
import { FieldActionsOverlay, } from "../FieldActionsOverlay";
|
|
20
18
|
import { NoLayout } from "../page-editor-chrome/NoLayout";
|
|
@@ -22,10 +20,9 @@ import { Spinner } from "../ui/Spinner";
|
|
|
22
20
|
import { DeviceToolbar } from "./DeviceToolbar";
|
|
23
21
|
import { buildPageModelSkeleton } from "./pageModelSkeletonBuilder";
|
|
24
22
|
const EDITOR_CSS_STYLE_ID = "parhelia-editor-css";
|
|
25
|
-
export function PageViewerFrame({ compareView, pageViewContext, className,
|
|
23
|
+
export function PageViewerFrame({ compareView, pageViewContext, className, }) {
|
|
26
24
|
const editContext = useEditContext();
|
|
27
25
|
const fieldsContext = useFieldsEditContext();
|
|
28
|
-
useViewportChangeSignal();
|
|
29
26
|
const pathname = usePathname();
|
|
30
27
|
const pageViewContextRef = useRef(undefined);
|
|
31
28
|
if (!editContext || !pageViewContext)
|
|
@@ -38,7 +35,6 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
38
35
|
const iframeRef = useRef(null);
|
|
39
36
|
const currentLoadRef = useRef(null);
|
|
40
37
|
const rebindIframeInteractionsRef = useRef(null);
|
|
41
|
-
const prevModeRef = useRef(editContext.mode);
|
|
42
38
|
const [showSpinner, setShowSpinner] = useState(false);
|
|
43
39
|
const [scroll, setScroll] = useState(0);
|
|
44
40
|
const [showMiniMap, setShowMiniMap] = useState(false);
|
|
@@ -108,11 +104,6 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
108
104
|
leading: true,
|
|
109
105
|
trailing: true,
|
|
110
106
|
});
|
|
111
|
-
const requestPageModelBuild = (doc) => {
|
|
112
|
-
if (!doc)
|
|
113
|
-
return;
|
|
114
|
-
buildPageModelThrottled(doc, editContextRef, pageViewContextRef);
|
|
115
|
-
};
|
|
116
107
|
const [iframeSrc, setIframeSrc] = useState();
|
|
117
108
|
const editorCssGuardRef = useRef({ doc: null, observer: null, editMode: true });
|
|
118
109
|
const ensureEditorCssGuard = (doc, editMode) => {
|
|
@@ -179,16 +170,11 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
179
170
|
editorCssGuardRef.current.doc = null;
|
|
180
171
|
};
|
|
181
172
|
}, []);
|
|
182
|
-
// If the editor mode flips (edit/preview), re-apply CSS
|
|
173
|
+
// If the editor mode flips (edit/preview), re-apply CSS in the current iframe doc.
|
|
183
174
|
useEffect(() => {
|
|
184
175
|
const doc = iframeRef.current?.contentDocument;
|
|
185
|
-
const isPreview = editContext.mode === "preview";
|
|
186
176
|
if (doc)
|
|
187
|
-
ensureEditorCssGuard(doc,
|
|
188
|
-
if (isPreview) {
|
|
189
|
-
editContextRef.current?.setSelectedRange(undefined);
|
|
190
|
-
fieldsContextRef.current?.setInlineEditingFieldElement(undefined);
|
|
191
|
-
}
|
|
177
|
+
ensureEditorCssGuard(doc, editContext.mode !== "preview");
|
|
192
178
|
}, [editContext.mode]);
|
|
193
179
|
useEffect(() => {
|
|
194
180
|
if (!pageItemDescriptor ||
|
|
@@ -198,12 +184,6 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
198
184
|
const urlPath = editContext.mode === "preview"
|
|
199
185
|
? pageViewContext.previewUrl
|
|
200
186
|
: pageViewContext.editUrl;
|
|
201
|
-
const prevMode = prevModeRef.current;
|
|
202
|
-
prevModeRef.current = editContext.mode;
|
|
203
|
-
const modeOnlyChange = prevMode !== editContext.mode &&
|
|
204
|
-
prevMode !== "preview" &&
|
|
205
|
-
editContext.mode !== "preview";
|
|
206
|
-
const savedScrollY = iframeRef.current?.contentWindow?.scrollY ?? 0;
|
|
207
187
|
const renderUrl = new URL(urlPath, window.location.origin);
|
|
208
188
|
const editRev = uuid();
|
|
209
189
|
renderUrl.searchParams.set("edit_rev", editRev);
|
|
@@ -224,10 +204,6 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
224
204
|
const runIntegrationRefresh = (refreshFn, message) => {
|
|
225
205
|
console.log(message);
|
|
226
206
|
refreshFn(renderUrl.toString());
|
|
227
|
-
const doc = iframeRef.current?.contentDocument;
|
|
228
|
-
if (doc) {
|
|
229
|
-
requestPageModelBuild(doc);
|
|
230
|
-
}
|
|
231
207
|
// The integration refresh path may replace/normalize <head> during hydration,
|
|
232
208
|
// which can remove our injected style. Re-ensure a few times post-refresh.
|
|
233
209
|
const ensureLater = (delay) => {
|
|
@@ -242,21 +218,6 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
242
218
|
ensureLater(100);
|
|
243
219
|
ensureLater(500);
|
|
244
220
|
ensureLater(1200);
|
|
245
|
-
if (modeOnlyChange && savedScrollY > 0) {
|
|
246
|
-
const restoreScroll = (delay) => {
|
|
247
|
-
setTimeout(() => {
|
|
248
|
-
const win = iframeRef.current?.contentWindow;
|
|
249
|
-
if (win && win.scrollY === 0) {
|
|
250
|
-
win.scrollTo(0, savedScrollY);
|
|
251
|
-
}
|
|
252
|
-
}, delay);
|
|
253
|
-
};
|
|
254
|
-
restoreScroll(50);
|
|
255
|
-
restoreScroll(200);
|
|
256
|
-
restoreScroll(500);
|
|
257
|
-
restoreScroll(1000);
|
|
258
|
-
restoreScroll(2000);
|
|
259
|
-
}
|
|
260
221
|
};
|
|
261
222
|
const runFallbackRefresh = () => {
|
|
262
223
|
setShowSpinner(true);
|
|
@@ -414,7 +375,7 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
414
375
|
injectSXAScripts(iframeRef.current);
|
|
415
376
|
}, 1000);
|
|
416
377
|
try {
|
|
417
|
-
|
|
378
|
+
buildPageModelThrottled(doc, editContextRef, pageViewContextRef);
|
|
418
379
|
}
|
|
419
380
|
catch (buildErr) { }
|
|
420
381
|
}
|
|
@@ -470,110 +431,95 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
470
431
|
}, []);
|
|
471
432
|
const selecionChangeHandler = useDebouncedCallback(() => {
|
|
472
433
|
const sel = iframeRef.current?.contentDocument?.getSelection();
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
activeEl?.closest('[role="dialog"]'));
|
|
478
|
-
};
|
|
479
|
-
if (!sel || sel.rangeCount === 0) {
|
|
480
|
-
if (!isInlineAiUiFocused()) {
|
|
481
|
-
editContextRef.current?.setSelectedRange(undefined);
|
|
482
|
-
}
|
|
483
|
-
return;
|
|
484
|
-
}
|
|
485
|
-
// Preserve the last non-collapsed selection while the inline AI UI takes focus.
|
|
486
|
-
// This avoids losing context when users click the trigger or dialog.
|
|
487
|
-
if (sel.isCollapsed && isInlineAiUiFocused()) {
|
|
488
|
-
return;
|
|
489
|
-
}
|
|
490
|
-
// Find the field element containing the selection/caret
|
|
491
|
-
const fieldElement = findClosestFieldElement(sel.anchorNode);
|
|
492
|
-
if (!fieldElement) {
|
|
493
|
-
if (!isInlineAiUiFocused()) {
|
|
494
|
-
editContextRef.current?.setSelectedRange(undefined);
|
|
495
|
-
}
|
|
496
|
-
return;
|
|
497
|
-
}
|
|
498
|
-
const fieldId = fieldElement.getAttribute("data-fieldid");
|
|
499
|
-
if (!fieldId)
|
|
500
|
-
return;
|
|
501
|
-
const range = sel.getRangeAt(0);
|
|
502
|
-
// Guard: if layout components are hidden, do not set focus for fields of layout components
|
|
503
|
-
if (editContextRef.current?.showLayoutComponents === false &&
|
|
504
|
-
pageViewContextRef.current?.page) {
|
|
505
|
-
const ownerId = fieldElement.getAttribute("data-itemid") || "";
|
|
506
|
-
const owner = getComponentById(ownerId, pageViewContextRef.current.page);
|
|
507
|
-
if (owner?.layoutId)
|
|
434
|
+
if (sel && sel.rangeCount > 0) {
|
|
435
|
+
// Only process selections that have text.
|
|
436
|
+
// Collapsed selections (carets) should not overwrite a previous AI selection context.
|
|
437
|
+
if (sel.isCollapsed)
|
|
508
438
|
return;
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
text
|
|
530
|
-
contextBefore,
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
439
|
+
// Find the field element containing the selection
|
|
440
|
+
const fieldElement = findClosestFieldElement(sel.anchorNode);
|
|
441
|
+
if (!fieldElement)
|
|
442
|
+
return;
|
|
443
|
+
const fieldId = fieldElement.getAttribute("data-fieldid");
|
|
444
|
+
if (!fieldId)
|
|
445
|
+
return;
|
|
446
|
+
const range = sel.getRangeAt(0);
|
|
447
|
+
// Guard: if layout components are hidden, do not set focus for fields of layout components
|
|
448
|
+
if (editContextRef.current?.showLayoutComponents === false &&
|
|
449
|
+
pageViewContextRef.current?.page) {
|
|
450
|
+
const ownerId = fieldElement.getAttribute("data-itemid") || "";
|
|
451
|
+
const owner = getComponentById(ownerId, pageViewContextRef.current.page);
|
|
452
|
+
if (owner?.layoutId)
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
// Compute the global offsets relative to the field element.
|
|
456
|
+
const globalStartOffset = getGlobalTextOffset(fieldElement, range.startContainer, range.startOffset);
|
|
457
|
+
const globalEndOffset = getGlobalTextOffset(fieldElement, range.endContainer, range.endOffset);
|
|
458
|
+
const selectedText = range.toString();
|
|
459
|
+
// Extract plain text context from the DOM
|
|
460
|
+
const { contextBefore, contextAfter } = extractDOMSelectionContext(fieldElement, globalStartOffset, globalEndOffset);
|
|
461
|
+
// Clone the range for the replaceText callback (ranges can become invalid after DOM changes)
|
|
462
|
+
const rangeClone = range.cloneRange();
|
|
463
|
+
const itemId = fieldElement.getAttribute("data-itemid") || "";
|
|
464
|
+
const language = fieldElement.getAttribute("data-language") || "";
|
|
465
|
+
const versionStr = fieldElement.getAttribute("data-version");
|
|
466
|
+
const version = versionStr ? parseInt(versionStr, 10) : 0;
|
|
467
|
+
editContextRef.current?.setSelectedRange({
|
|
468
|
+
itemId,
|
|
469
|
+
fieldId: fieldId,
|
|
470
|
+
language,
|
|
471
|
+
version,
|
|
472
|
+
startOffset: globalStartOffset,
|
|
473
|
+
endOffset: globalEndOffset,
|
|
474
|
+
text: selectedText,
|
|
475
|
+
contextBefore,
|
|
476
|
+
contextAfter,
|
|
477
|
+
// Create a callback that uses DOM Range API to replace text in contenteditable
|
|
478
|
+
replaceText: (newText) => {
|
|
479
|
+
try {
|
|
480
|
+
// Delete the selected content
|
|
481
|
+
rangeClone.deleteContents();
|
|
482
|
+
// Insert the new text - use the correct document from the range containers
|
|
483
|
+
const doc = rangeClone.startContainer.ownerDocument || document;
|
|
484
|
+
const textNode = doc.createTextNode(newText);
|
|
485
|
+
rangeClone.insertNode(textNode);
|
|
486
|
+
// Collapse the range to the end of the inserted text
|
|
487
|
+
rangeClone.setStartAfter(textNode);
|
|
488
|
+
rangeClone.collapse(true);
|
|
489
|
+
// Update the selection
|
|
490
|
+
const iframeSel = iframeRef.current?.contentDocument?.getSelection();
|
|
491
|
+
if (iframeSel) {
|
|
492
|
+
iframeSel.removeAllRanges();
|
|
493
|
+
iframeSel.addRange(rangeClone);
|
|
494
|
+
}
|
|
495
|
+
// Explicitly save the field value since the MutationObserver may not be active
|
|
496
|
+
// when text is selected without entering inline edit mode
|
|
497
|
+
const isRichText = fieldElement?.getAttribute("data-is-richtext") === "true";
|
|
498
|
+
const valueToSave = isRichText
|
|
499
|
+
? fieldElement?.innerHTML
|
|
500
|
+
: fieldElement?.innerText;
|
|
501
|
+
if (fieldId &&
|
|
502
|
+
itemId &&
|
|
503
|
+
language &&
|
|
504
|
+
version &&
|
|
505
|
+
editContextRef.current) {
|
|
506
|
+
editContextRef.current.operations.editField({
|
|
507
|
+
field: {
|
|
508
|
+
fieldId,
|
|
509
|
+
fieldName: fieldElement?.getAttribute("data-fieldname") || undefined,
|
|
510
|
+
item: { id: itemId, language, version },
|
|
511
|
+
},
|
|
512
|
+
refresh: "none",
|
|
513
|
+
value: valueToSave,
|
|
514
|
+
});
|
|
515
|
+
}
|
|
549
516
|
}
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
const isRichText = fieldElement?.getAttribute("data-is-richtext") === "true";
|
|
553
|
-
const valueToSave = isRichText
|
|
554
|
-
? fieldElement?.innerHTML
|
|
555
|
-
: fieldElement?.innerText;
|
|
556
|
-
if (fieldId &&
|
|
557
|
-
itemId &&
|
|
558
|
-
language &&
|
|
559
|
-
version &&
|
|
560
|
-
editContextRef.current) {
|
|
561
|
-
editContextRef.current.operations.editField({
|
|
562
|
-
field: {
|
|
563
|
-
fieldId,
|
|
564
|
-
fieldName: fieldElement?.getAttribute("data-fieldname") || undefined,
|
|
565
|
-
item: { id: itemId, language, version },
|
|
566
|
-
},
|
|
567
|
-
refresh: "none",
|
|
568
|
-
value: valueToSave,
|
|
569
|
-
});
|
|
517
|
+
catch (error) {
|
|
518
|
+
console.error("[PageViewerFrame] Failed to replace text:", error);
|
|
570
519
|
}
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
}
|
|
575
|
-
},
|
|
576
|
-
});
|
|
520
|
+
},
|
|
521
|
+
});
|
|
522
|
+
}
|
|
577
523
|
}, 300);
|
|
578
524
|
useEffect(() => {
|
|
579
525
|
const iframe = iframeRef.current;
|
|
@@ -585,7 +531,6 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
585
531
|
let mutationObserver = null;
|
|
586
532
|
const handleIframeMouseDown = async (event) => {
|
|
587
533
|
const target = event.target;
|
|
588
|
-
const targetElement = target;
|
|
589
534
|
if (editContextRef.current?.isRefreshing && showSpinner)
|
|
590
535
|
return;
|
|
591
536
|
// Activate the editor slot this iframe belongs to
|
|
@@ -597,21 +542,10 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
597
542
|
// Skip selection changes on right-click (button 2) - let context menu handler deal with it
|
|
598
543
|
if (event.button === 2)
|
|
599
544
|
return;
|
|
600
|
-
|
|
601
|
-
? findParentWithAttribute(targetElement, "data-fieldid")
|
|
602
|
-
: null;
|
|
545
|
+
let componentId = findNearestEditableComponentId(target);
|
|
603
546
|
const pageForSelection = pageViewContextRef.current?.page;
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
: undefined;
|
|
607
|
-
const componentIdFromField = fieldDescriptor && targetElement && pageForSelection
|
|
608
|
-
? resolveComponentIdForFieldTarget(fieldDescriptor, targetElement, pageForSelection)
|
|
609
|
-
: undefined;
|
|
610
|
-
const rawComponentId = componentIdFromField ??
|
|
611
|
-
(targetElement ? findNearestEditableComponentId(targetElement) : undefined);
|
|
612
|
-
let componentId = rawComponentId;
|
|
613
|
-
if (!componentIdFromField && componentId && pageForSelection) {
|
|
614
|
-
componentId = resolveComponentIdForTarget(componentId, targetElement, pageForSelection);
|
|
547
|
+
if (componentId && pageForSelection) {
|
|
548
|
+
componentId = resolveComponentIdForTarget(componentId, target, pageForSelection);
|
|
615
549
|
}
|
|
616
550
|
// Layout components can still be selected even when showLayoutComponents is false
|
|
617
551
|
// They will be displayed in read-only mode
|
|
@@ -694,6 +628,7 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
694
628
|
((editContextRef.current?.mode === "edit" &&
|
|
695
629
|
pageViewContextRef.current?.page?.item.canWriteItem) ||
|
|
696
630
|
editContextRef.current?.mode === "suggestions")) {
|
|
631
|
+
const fieldElement = findParentWithAttribute(target, "data-fieldid");
|
|
697
632
|
if (fieldElement?.hasAttribute("data-itemid")) {
|
|
698
633
|
// Guard: if layout components are hidden, do not allow editing fields of layout components
|
|
699
634
|
if (editContextRef.current?.showLayoutComponents === false &&
|
|
@@ -706,7 +641,7 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
706
641
|
}
|
|
707
642
|
blockBlurEventRef.current = Date.now() + 500;
|
|
708
643
|
const shouldRequestLock = editContextRef.current?.mode !== "suggestions";
|
|
709
|
-
const hasLock = (await fieldsContextRef.current?.setFocusedField(
|
|
644
|
+
const hasLock = (await fieldsContextRef.current?.setFocusedField(getFieldDescriptorFromElement(fieldElement), shouldRequestLock)) ?? false;
|
|
710
645
|
if (hasLock &&
|
|
711
646
|
fieldsContextRef.current?.inlineEditingFieldElement !== fieldElement) {
|
|
712
647
|
fieldsContextRef.current?.setInlineEditingFieldElement(fieldElement);
|
|
@@ -772,16 +707,12 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
772
707
|
const isDialog = activeEl?.closest(".agent-inline-dialog") ||
|
|
773
708
|
activeEl?.closest('[role="dialog"]');
|
|
774
709
|
const isTrigger = activeEl?.closest(".agent-inline-trigger");
|
|
775
|
-
// If focus moved to dialog
|
|
776
|
-
if (!isDialog &&
|
|
777
|
-
|
|
778
|
-
|
|
710
|
+
// If focus moved to dialog or trigger, OR if we still have a selection, don't clear.
|
|
711
|
+
if (!isDialog &&
|
|
712
|
+
!isTrigger &&
|
|
713
|
+
!editContextRef.current?.selectedRange) {
|
|
714
|
+
fieldsContextRef.current?.setInlineEditingFieldElement(undefined);
|
|
779
715
|
editContextRef.current?.operations.onFieldBlur?.();
|
|
780
|
-
// Keep selection-related state intact, but clear inline editing element
|
|
781
|
-
// when there is no active selectedRange.
|
|
782
|
-
if (!editContextRef.current?.selectedRange) {
|
|
783
|
-
fieldsContextRef.current?.setInlineEditingFieldElement(undefined);
|
|
784
|
-
}
|
|
785
716
|
}
|
|
786
717
|
}, 100);
|
|
787
718
|
}
|
|
@@ -837,7 +768,7 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
837
768
|
"getAttribute" in x.target &&
|
|
838
769
|
x.target.getAttribute("data-fieldid") &&
|
|
839
770
|
x.target.getAttribute("data-itemid")))) {
|
|
840
|
-
|
|
771
|
+
buildPageModelThrottled(iframeDocument, editContextRef, pageViewContextRef);
|
|
841
772
|
}
|
|
842
773
|
});
|
|
843
774
|
mutationObserver.observe(iframeDocument, {
|
|
@@ -846,126 +777,19 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
846
777
|
characterData: false, // observe text changes
|
|
847
778
|
//attributes: true, // observe attribute changes (like style or class)
|
|
848
779
|
});
|
|
849
|
-
|
|
850
|
-
};
|
|
851
|
-
const parsePositiveInt = (value) => {
|
|
852
|
-
if (!value)
|
|
853
|
-
return undefined;
|
|
854
|
-
const parsed = parseInt(value, 10);
|
|
855
|
-
return Number.isFinite(parsed) ? parsed : undefined;
|
|
856
|
-
};
|
|
857
|
-
const resolveLinkedItemDescriptor = (anchor, clickedElement) => {
|
|
858
|
-
const href = anchor.getAttribute("href") || anchor.href;
|
|
859
|
-
let hrefUrl;
|
|
860
|
-
try {
|
|
861
|
-
hrefUrl = new URL(anchor.href, iframe.contentWindow?.location?.href || window.location.href);
|
|
862
|
-
}
|
|
863
|
-
catch {
|
|
864
|
-
return undefined;
|
|
865
|
-
}
|
|
866
|
-
const attributeContainer = clickedElement?.closest("[data-itemid],[data-language],[data-version],[sc_item],[sc_itemid],[sc_lang]") || anchor;
|
|
867
|
-
// Parse Sitecore RTE format first: ~/link.aspx?_id=GUID&_z=z (target item, not the containing component)
|
|
868
|
-
let itemIdRaw;
|
|
869
|
-
if (href.includes("~/link.aspx?_id=") ||
|
|
870
|
-
href.includes("link.aspx?_id=")) {
|
|
871
|
-
const idFromUrl = hrefUrl.searchParams.get("_id");
|
|
872
|
-
if (idFromUrl) {
|
|
873
|
-
// Convert compact GUID (AD973E51E8454BD2B333859375FBBA24) to standard format with dashes
|
|
874
|
-
itemIdRaw = idFromUrl
|
|
875
|
-
.replace(/^(\w{8})(\w{4})(\w{4})(\w{4})(\w{12})$/i, "$1-$2-$3-$4-$5")
|
|
876
|
-
.toLowerCase();
|
|
877
|
-
}
|
|
878
|
-
}
|
|
879
|
-
if (!itemIdRaw) {
|
|
880
|
-
itemIdRaw =
|
|
881
|
-
hrefUrl.searchParams.get("sc_itemid") ??
|
|
882
|
-
hrefUrl.searchParams.get("itemid") ??
|
|
883
|
-
anchor.getAttribute("data-itemid") ??
|
|
884
|
-
anchor.getAttribute("sc_itemid") ??
|
|
885
|
-
attributeContainer?.getAttribute("data-itemid") ??
|
|
886
|
-
attributeContainer?.getAttribute("sc_itemid") ??
|
|
887
|
-
(anchor.getAttribute("sc_item")
|
|
888
|
-
? extractItemIdFromItemUri(anchor.getAttribute("sc_item"))
|
|
889
|
-
: undefined) ??
|
|
890
|
-
(attributeContainer?.getAttribute("sc_item")
|
|
891
|
-
? extractItemIdFromItemUri(attributeContainer.getAttribute("sc_item"))
|
|
892
|
-
: undefined);
|
|
893
|
-
}
|
|
894
|
-
const itemId = cleanId(itemIdRaw);
|
|
895
|
-
if (!itemId)
|
|
896
|
-
return undefined;
|
|
897
|
-
const language = hrefUrl.searchParams.get("sc_lang") ??
|
|
898
|
-
hrefUrl.searchParams.get("lang") ??
|
|
899
|
-
hrefUrl.searchParams.get("language") ??
|
|
900
|
-
anchor.getAttribute("data-language") ??
|
|
901
|
-
anchor.getAttribute("sc_lang") ??
|
|
902
|
-
attributeContainer?.getAttribute("data-language") ??
|
|
903
|
-
attributeContainer?.getAttribute("sc_lang") ??
|
|
904
|
-
editContextRef.current?.currentItemDescriptor?.language ??
|
|
905
|
-
editContextRef.current?.item?.language;
|
|
906
|
-
if (!language)
|
|
907
|
-
return undefined;
|
|
908
|
-
const version = parsePositiveInt(hrefUrl.searchParams.get("sc_version")) ??
|
|
909
|
-
parsePositiveInt(hrefUrl.searchParams.get("version")) ??
|
|
910
|
-
parsePositiveInt(anchor.getAttribute("data-version")) ??
|
|
911
|
-
parsePositiveInt(attributeContainer?.getAttribute("data-version")) ??
|
|
912
|
-
editContextRef.current?.currentItemDescriptor?.version ??
|
|
913
|
-
editContextRef.current?.item?.version ??
|
|
914
|
-
0;
|
|
915
|
-
return {
|
|
916
|
-
id: itemId,
|
|
917
|
-
language,
|
|
918
|
-
version,
|
|
919
|
-
};
|
|
780
|
+
buildPageModelThrottled(iframeDocument, editContextRef, pageViewContextRef);
|
|
920
781
|
};
|
|
921
782
|
const handleIframeClick = async (event) => {
|
|
922
783
|
const target = event.target;
|
|
923
|
-
if (
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
return;
|
|
930
|
-
const href = anchor.getAttribute("href") || anchor.href;
|
|
931
|
-
if (!href || href.startsWith("#") || href.startsWith("javascript:")) {
|
|
932
|
-
return;
|
|
933
|
-
}
|
|
934
|
-
const mode = editContextRef.current?.mode;
|
|
935
|
-
const isPreviewOrSuggestions = mode === "preview" || mode === "suggestions";
|
|
936
|
-
if (isPreviewOrSuggestions) {
|
|
937
|
-
let hrefUrl;
|
|
938
|
-
try {
|
|
939
|
-
hrefUrl = new URL(anchor.href, iframe.contentWindow?.location?.href || window.location.href);
|
|
940
|
-
}
|
|
941
|
-
catch {
|
|
942
|
-
return;
|
|
943
|
-
}
|
|
944
|
-
const iframeOrigin = iframe.contentWindow?.location?.origin;
|
|
945
|
-
const isInternalLink = hrefUrl.origin === window.location.origin ||
|
|
946
|
-
(iframeOrigin ? hrefUrl.origin === iframeOrigin : false);
|
|
947
|
-
if (!isInternalLink) {
|
|
784
|
+
// Check if the click target is a link (anchor tag)
|
|
785
|
+
const anchor = target.tagName.toLowerCase() === "a" ? target : target.closest("a");
|
|
786
|
+
if (anchor) {
|
|
787
|
+
const href = anchor.href;
|
|
788
|
+
// Block only navigation links, allow anchor links and javascript links
|
|
789
|
+
if (href && !href.startsWith("#") && !href.startsWith("javascript:")) {
|
|
948
790
|
event.preventDefault();
|
|
949
|
-
event.stopPropagation();
|
|
950
|
-
window.open(hrefUrl.toString(), "_blank", "noopener,noreferrer");
|
|
951
|
-
return;
|
|
952
791
|
}
|
|
953
|
-
if (isInternalLink) {
|
|
954
|
-
const linkedItem = resolveLinkedItemDescriptor(anchor, target);
|
|
955
|
-
if (linkedItem) {
|
|
956
|
-
event.preventDefault();
|
|
957
|
-
event.stopPropagation();
|
|
958
|
-
await editContextRef.current?.loadItem(linkedItem, {
|
|
959
|
-
openInNewSlot: event.altKey,
|
|
960
|
-
});
|
|
961
|
-
return;
|
|
962
|
-
}
|
|
963
|
-
}
|
|
964
|
-
// If this link cannot be resolved to an item, allow browser behavior.
|
|
965
|
-
return;
|
|
966
792
|
}
|
|
967
|
-
// In edit mode, keep navigation inside iframe disabled.
|
|
968
|
-
event.preventDefault();
|
|
969
793
|
};
|
|
970
794
|
const handleContextMenu = async (event) => {
|
|
971
795
|
if (editContextRef.current?.isRefreshing && showSpinner)
|
|
@@ -1158,7 +982,9 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
1158
982
|
const deviceHeight = pageViewContext.device === "desktop" || !pageViewContext.deviceHeight
|
|
1159
983
|
? "100%"
|
|
1160
984
|
: pageViewContext.deviceHeight || 640;
|
|
1161
|
-
return (_jsxs("div", { className: cn("relative flex h-full w-full flex-col items-center select-none", className,
|
|
985
|
+
return (_jsxs("div", { className: cn("relative flex h-full w-full flex-col items-center select-none", className, (editContext.showComponentNavigator ||
|
|
986
|
+
(editContext.showAgentsPanel && !editContext.currentWizardId)) &&
|
|
987
|
+
"pr-0"), children: [!pageViewContext.fullscreen && (_jsx(EditorWarnings, { item: pageViewContext.page?.item })), pageViewContext.device !== "desktop" && (_jsx(DeviceToolbar, { pageViewContext: pageViewContext, configuration: editContext.configuration })), _jsxs("div", { className: "relative flex flex-1 select-none", "data-testid": "page-viewer-viewport", style: {
|
|
1162
988
|
width: pageViewContext.device === "desktop" ||
|
|
1163
989
|
pageViewContext.device === "Responsive"
|
|
1164
990
|
? "100%"
|
|
@@ -1174,32 +1000,15 @@ export function PageViewerFrame({ compareView, pageViewContext, className, slotC
|
|
|
1174
1000
|
setTimeout(() => {
|
|
1175
1001
|
injectSXAScripts(iframeRef.current);
|
|
1176
1002
|
}, 1000);
|
|
1177
|
-
|
|
1003
|
+
buildPageModelThrottled(doc, editContextRef, pageViewContextRef);
|
|
1178
1004
|
}
|
|
1179
1005
|
} }), iframeRef.current && (_jsx(PageEditorChrome, { iframe: iframeRef.current, compareView: compareView, pageViewContext: pageViewContext })), pageViewContext.deviceHeight && pageViewContext.device && (_jsx("div", { className: "bg-gray-4 relative z-40 h-full w-full" }))] }), !pageViewContext.fullscreen &&
|
|
1180
1006
|
showMiniMap &&
|
|
1181
1007
|
editContext.showMinimap &&
|
|
1182
|
-
|
|
1183
|
-
editContext.parheliaSettings?.showMinimap !== false && (_jsx(MiniMap, { scroll: scroll, mainViewIframeRef: iframeRef, pageViewContext: pageViewContext, deviceHeight: pageViewContext.device === "Desktop"
|
|
1008
|
+
editContext.parheliaSettings?.showMinimap !== false && (_jsx(MiniMap, { compareView: compareView, scroll: scroll, mainViewIframeRef: iframeRef, pageViewContext: pageViewContext, deviceHeight: pageViewContext.device === "Desktop"
|
|
1184
1009
|
? undefined
|
|
1185
1010
|
: pageViewContext.deviceHeight })), showSpinner && (_jsxs(_Fragment, { children: [_jsx("div", { className: "bg-gray-4/50 absolute top-0 left-0 h-full w-full" }), _jsx("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 transform", children: _jsx(Spinner, {}) })] }))] }), _jsx(FieldActionsOverlay, { ref: fieldActionsOverlay, generatorButtons: contextMenuFieldButtons, onActionClick: handleActionClick, onParameterizedActionExecute: handleParameterizedActionExecute, currentOverlay: editContext?.currentOverlay, fieldId: contextMenuField?.fieldId || "", setCurrentOverlay: editContext?.setCurrentOverlay || (() => { }), preSelectedAction: preSelectedAction, iframe: iframeRef.current })] }));
|
|
1186
1011
|
}
|
|
1187
|
-
/**
|
|
1188
|
-
* In preview mode, disable editing in the iframe: set contentEditable=false on all
|
|
1189
|
-
* editable elements and blur the active element so the caret is removed and typing does nothing.
|
|
1190
|
-
*/
|
|
1191
|
-
function disableEditingInIframeDocument(doc) {
|
|
1192
|
-
if (!doc || !doc.body)
|
|
1193
|
-
return;
|
|
1194
|
-
const editable = doc.querySelectorAll("[contenteditable='true'], [contenteditable='']");
|
|
1195
|
-
editable.forEach((el) => {
|
|
1196
|
-
el.contentEditable = "false";
|
|
1197
|
-
});
|
|
1198
|
-
const active = doc.activeElement;
|
|
1199
|
-
if (active?.isContentEditable) {
|
|
1200
|
-
active.blur();
|
|
1201
|
-
}
|
|
1202
|
-
}
|
|
1203
1012
|
function injectEditorCSS(iframeDocument, editMode) {
|
|
1204
1013
|
if (!iframeDocument)
|
|
1205
1014
|
return;
|
|
@@ -1236,9 +1045,6 @@ function injectEditorCSS(iframeDocument, editMode) {
|
|
|
1236
1045
|
if (iframeDocument && iframeDocument.head) {
|
|
1237
1046
|
iframeDocument.head.appendChild(style);
|
|
1238
1047
|
}
|
|
1239
|
-
if (!editMode) {
|
|
1240
|
-
disableEditingInIframeDocument(iframeDocument);
|
|
1241
|
-
}
|
|
1242
1048
|
}
|
|
1243
1049
|
function resolveComponentIdForTarget(rawId, target, page) {
|
|
1244
1050
|
const direct = getComponentById(rawId, page);
|
|
@@ -1255,45 +1061,6 @@ function resolveComponentIdForTarget(rawId, target, page) {
|
|
|
1255
1061
|
getElementDepth(a.firstDOMElement || null));
|
|
1256
1062
|
return containing[0].id;
|
|
1257
1063
|
}
|
|
1258
|
-
function resolveComponentIdForFieldTarget(field, target, page) {
|
|
1259
|
-
const matches = findComponentsRenderingField(field, page);
|
|
1260
|
-
const containingMatches = matches.filter((component) => isTargetInsideComponent(target, component));
|
|
1261
|
-
const rankedMatches = (containingMatches.length > 0
|
|
1262
|
-
? containingMatches
|
|
1263
|
-
: matches).sort((a, b) => getElementDepth(b.firstDOMElement || null) -
|
|
1264
|
-
getElementDepth(a.firstDOMElement || null));
|
|
1265
|
-
return rankedMatches[0]?.id;
|
|
1266
|
-
}
|
|
1267
|
-
function findComponentsRenderingField(field, page) {
|
|
1268
|
-
if (!page?.rootComponent)
|
|
1269
|
-
return [];
|
|
1270
|
-
const matches = [];
|
|
1271
|
-
const visit = (component) => {
|
|
1272
|
-
if (componentRendersField(component, field)) {
|
|
1273
|
-
matches.push(component);
|
|
1274
|
-
}
|
|
1275
|
-
for (const placeholder of component.placeholders || []) {
|
|
1276
|
-
for (const child of placeholder.components || []) {
|
|
1277
|
-
visit(child);
|
|
1278
|
-
}
|
|
1279
|
-
}
|
|
1280
|
-
};
|
|
1281
|
-
visit(page.rootComponent);
|
|
1282
|
-
return matches;
|
|
1283
|
-
}
|
|
1284
|
-
function componentRendersField(component, field) {
|
|
1285
|
-
const renderedItems = [
|
|
1286
|
-
component.datasourceItem,
|
|
1287
|
-
...component.items.filter((item) => !component.datasourceItem ||
|
|
1288
|
-
!(item.id === component.datasourceItem.id &&
|
|
1289
|
-
item.language === component.datasourceItem.language &&
|
|
1290
|
-
item.version === component.datasourceItem.version)),
|
|
1291
|
-
].filter(Boolean);
|
|
1292
|
-
return renderedItems.some((item) => item.id === field.item.id &&
|
|
1293
|
-
item.language === field.item.language &&
|
|
1294
|
-
item.version === field.item.version &&
|
|
1295
|
-
item.renderedFieldIds.includes(field.fieldId));
|
|
1296
|
-
}
|
|
1297
1064
|
function isTargetInsideComponent(target, component) {
|
|
1298
1065
|
const start = component.firstDOMElement;
|
|
1299
1066
|
const end = component.lastDOMElement || component.firstDOMElement;
|