@parhelia/core 0.1.12881 → 0.1.12883
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/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 +4 -1
- 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 +92 -14
- package/dist/config/config.js.map +1 -1
- package/dist/config/types.d.ts +7 -0
- package/dist/config/types.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/FieldHistory.d.ts +2 -1
- package/dist/editor/FieldHistory.js +13 -12
- package/dist/editor/FieldHistory.js.map +1 -1
- package/dist/editor/FieldListField.js +4 -18
- package/dist/editor/FieldListField.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/ai/AgentProfileSelector.js +7 -7
- package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
- package/dist/editor/ai/Agents.js +19 -5
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/InlineAiDialog.d.ts +1 -0
- package/dist/editor/ai/InlineAiDialog.js +239 -198
- 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 +187 -20
- package/dist/editor/ai/InlineAiTrigger.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/components/AgentSettingsPopover.js +1 -1
- package/dist/editor/ai/terminal/components/AgentSettingsPopover.js.map +1 -1
- package/dist/editor/ai/terminal/components/AiResponseMessage.js +9 -9
- package/dist/editor/ai/terminal/components/AiResponseMessage.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/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 +9 -1
- package/dist/editor/ai/useInlineAiPosition.js +10 -19
- package/dist/editor/ai/useInlineAiPosition.js.map +1 -1
- package/dist/editor/client/EditorShell.js +23 -4
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +25 -0
- 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/itemsRepository.js +3 -1
- package/dist/editor/client/itemsRepository.js.map +1 -1
- package/dist/editor/client/operations.js +26 -4
- package/dist/editor/client/operations.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/commands/handlers/uiActionHandlers.js +5 -1
- package/dist/editor/commands/handlers/uiActionHandlers.js.map +1 -1
- package/dist/editor/editor-warnings/FinalWorkflowStateReadOnly.js +5 -0
- package/dist/editor/editor-warnings/FinalWorkflowStateReadOnly.js.map +1 -1
- package/dist/editor/editor-warnings/ItemLocked.js +6 -3
- package/dist/editor/editor-warnings/ItemLocked.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 +1 -1
- 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 +1 -1
- package/dist/editor/field-types/RawEditor.js.map +1 -1
- package/dist/editor/field-types/RichTextEditorComponent.js +18 -36
- package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
- package/dist/editor/field-types/SingleLineText.js +1 -1
- 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 +185 -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 -14
- package/dist/editor/field-types/richtext/contextMenuFactory.js +4 -232
- 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/utils/conversion.js +23 -2
- package/dist/editor/field-types/richtext/utils/conversion.js.map +1 -1
- package/dist/editor/fieldTypes.d.ts +2 -0
- package/dist/editor/media-selector/MediaFolderBrowser.d.ts +2 -1
- package/dist/editor/media-selector/MediaFolderBrowser.js +19 -9
- package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
- package/dist/editor/media-selector/TreeSelector.js +15 -9
- package/dist/editor/media-selector/TreeSelector.js.map +1 -1
- package/dist/editor/media-selector/UploadZone.d.ts +2 -1
- package/dist/editor/media-selector/UploadZone.js +21 -9
- package/dist/editor/media-selector/UploadZone.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.d.ts +10 -0
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +607 -85
- 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/page-editor-chrome/BridgeInlineFormatOverlay.d.ts +3 -1
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +357 -73
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/PageEditorChrome.js +1 -1
- package/dist/editor/page-editor-chrome/PageEditorChrome.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/useBridgeInlineEditing.d.ts +1 -1
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +7 -1
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
- package/dist/editor/page-viewer/PageViewer.js +23 -4
- package/dist/editor/page-viewer/PageViewer.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +157 -2
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/reviews/Comment.js +2 -2
- 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 +2 -2
- package/dist/editor/reviews/CommentPopover.js.map +1 -1
- package/dist/editor/reviews/Comments.js +5 -4
- package/dist/editor/reviews/Comments.js.map +1 -1
- package/dist/editor/reviews/FeedbackCard.js +5 -7
- package/dist/editor/reviews/FeedbackCard.js.map +1 -1
- package/dist/editor/reviews/SuggestionCommentThread.js +3 -3
- package/dist/editor/reviews/SuggestionCommentThread.js.map +1 -1
- package/dist/editor/services/contentService.d.ts +1 -0
- package/dist/editor/services/contentService.js.map +1 -1
- package/dist/editor/sidebar/Validation.js +4 -1
- package/dist/editor/sidebar/Validation.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/SimpleIconButton.js +8 -2
- 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/views/MediaFolderEditView.js +1 -1
- package/dist/editor/views/MediaFolderEditView.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/splash-screen/DialogWrappers.js +2 -2
- package/dist/splash-screen/DialogWrappers.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 +1 -1
- package/styles.css +59 -12
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export const BRIDGE_INLINE_FORMAT_TOOLBAR_SELECTOR = '[data-bridge-inline-format-toolbar="true"]';
|
|
2
|
+
export const BRIDGE_INLINE_FORMAT_AI_BUTTON_SELECTOR = '[data-bridge-inline-format-ai-button="true"]';
|
|
3
|
+
const DEFAULT_TOOLBAR_WIDTH = 300;
|
|
4
|
+
const DEFAULT_TOOLBAR_HEIGHT = 40;
|
|
5
|
+
const VIEWPORT_PADDING = 8;
|
|
6
|
+
const SELECTION_GAP = 8;
|
|
7
|
+
export function calculateBridgeInlineFormatToolbarLayout(clientRect, options) {
|
|
8
|
+
const toolbarWidth = options?.toolbarWidth ?? DEFAULT_TOOLBAR_WIDTH;
|
|
9
|
+
const toolbarHeight = options?.toolbarHeight ?? DEFAULT_TOOLBAR_HEIGHT;
|
|
10
|
+
const anchorCenter = clientRect.left + Math.min(clientRect.width, toolbarWidth) / 2;
|
|
11
|
+
let top = clientRect.top - toolbarHeight - SELECTION_GAP;
|
|
12
|
+
if (top < VIEWPORT_PADDING) {
|
|
13
|
+
top = clientRect.bottom + SELECTION_GAP + 36;
|
|
14
|
+
}
|
|
15
|
+
top = Math.max(VIEWPORT_PADDING, Math.min(top, window.innerHeight - toolbarHeight - VIEWPORT_PADDING));
|
|
16
|
+
const left = Math.max(VIEWPORT_PADDING, Math.min(anchorCenter - toolbarWidth / 2, window.innerWidth - toolbarWidth - VIEWPORT_PADDING));
|
|
17
|
+
return {
|
|
18
|
+
left,
|
|
19
|
+
top,
|
|
20
|
+
width: toolbarWidth,
|
|
21
|
+
height: toolbarHeight,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function getInlineAiAnchorBelowToolbar(toolbarRect, aiButtonRect) {
|
|
25
|
+
return {
|
|
26
|
+
x: aiButtonRect?.left ?? toolbarRect.left,
|
|
27
|
+
y: toolbarRect.bottom,
|
|
28
|
+
align: "start",
|
|
29
|
+
origin: "toolbar",
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function getInlineAiAnchorFromBridgeToolbar(selectedRange, measuredToolbarRect) {
|
|
33
|
+
if (!selectedRange?.elementKey ||
|
|
34
|
+
!selectedRange.text?.trim() ||
|
|
35
|
+
!selectedRange.clientRect) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
if (measuredToolbarRect) {
|
|
39
|
+
return getInlineAiAnchorBelowToolbar(measuredToolbarRect, getVisibleBridgeToolbarAiButtonRect());
|
|
40
|
+
}
|
|
41
|
+
const layout = calculateBridgeInlineFormatToolbarLayout(selectedRange.clientRect);
|
|
42
|
+
return getInlineAiAnchorBelowToolbar({
|
|
43
|
+
left: layout.left,
|
|
44
|
+
bottom: layout.top + layout.height,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
export function getVisibleBridgeToolbarRect() {
|
|
48
|
+
if (typeof document === "undefined") {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
const toolbar = document.querySelector(BRIDGE_INLINE_FORMAT_TOOLBAR_SELECTOR);
|
|
52
|
+
if (!toolbar) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
return toolbar.getBoundingClientRect();
|
|
56
|
+
}
|
|
57
|
+
export function getVisibleBridgeToolbarAiButtonRect() {
|
|
58
|
+
if (typeof document === "undefined") {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
const button = document.querySelector(BRIDGE_INLINE_FORMAT_AI_BUTTON_SELECTOR);
|
|
62
|
+
if (!button) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
return button.getBoundingClientRect();
|
|
66
|
+
}
|
|
67
|
+
export function waitForVisibleBridgeToolbarRect(maxFrames = 3) {
|
|
68
|
+
if (typeof window === "undefined") {
|
|
69
|
+
return Promise.resolve(undefined);
|
|
70
|
+
}
|
|
71
|
+
const current = getVisibleBridgeToolbarRect();
|
|
72
|
+
if (current) {
|
|
73
|
+
return Promise.resolve(current);
|
|
74
|
+
}
|
|
75
|
+
return new Promise((resolve) => {
|
|
76
|
+
let frame = 0;
|
|
77
|
+
const check = () => {
|
|
78
|
+
const rect = getVisibleBridgeToolbarRect();
|
|
79
|
+
if (rect || frame >= maxFrames) {
|
|
80
|
+
resolve(rect);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
frame += 1;
|
|
84
|
+
window.requestAnimationFrame(check);
|
|
85
|
+
};
|
|
86
|
+
window.requestAnimationFrame(check);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=bridgeInlineFormatToolbarLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridgeInlineFormatToolbarLayout.js","sourceRoot":"","sources":["../../../src/editor/page-editor-chrome/bridgeInlineFormatToolbarLayout.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ export declare function useBridgeInlineEditing({ pageViewContextRef, activeBridg
|
|
|
20
20
|
beginInlineEdit: (interaction: InteractionEventPayload) => Promise<boolean>;
|
|
21
21
|
clearInlineDedupe: () => void;
|
|
22
22
|
endFieldFocus: () => void;
|
|
23
|
-
handleFieldValueChanged: (payload: FieldValueChangedEventPayload) => void
|
|
23
|
+
handleFieldValueChanged: (payload: FieldValueChangedEventPayload) => Promise<void>;
|
|
24
24
|
handleInlineEditEnded: (payload: InlineEditEndedEventPayload) => void;
|
|
25
25
|
};
|
|
26
26
|
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef } from "react";
|
|
2
2
|
import { useEditContextRef, useFieldsEditContextRef, } from "../client/editContext";
|
|
3
3
|
import { getComponentById } from "../componentTreeHelper";
|
|
4
|
+
import { isBridgePatchableTextField } from "../page-viewer/bridgeFieldPatch";
|
|
4
5
|
import { useSlotContext } from "../views/editorSlotContext";
|
|
5
6
|
export function useBridgeInlineEditing({ pageViewContextRef, activeBridgeInlineEditRef, blockIframeBlurUntil, sendBeginInlineEdit, }) {
|
|
6
7
|
const editContextRef = useEditContextRef();
|
|
@@ -43,13 +44,18 @@ export function useBridgeInlineEditing({ pageViewContextRef, activeBridgeInlineE
|
|
|
43
44
|
},
|
|
44
45
|
};
|
|
45
46
|
}, [pageViewContextRef]);
|
|
46
|
-
const handleFieldValueChanged = useCallback((payload) => {
|
|
47
|
+
const handleFieldValueChanged = useCallback(async (payload) => {
|
|
47
48
|
const editor = editContextRef.current;
|
|
48
49
|
if (!editor || editor.mode === "preview")
|
|
49
50
|
return;
|
|
50
51
|
const field = resolveFieldDescriptor(payload.fieldId, payload.item, payload.elementKey);
|
|
51
52
|
if (!field)
|
|
52
53
|
return;
|
|
54
|
+
const currentField = await editor.itemsRepository.getField(field);
|
|
55
|
+
if (!currentField ||
|
|
56
|
+
!isBridgePatchableTextField(currentField, payload.isRichText)) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
53
59
|
// Input can arrive before the delayed click interaction finishes the
|
|
54
60
|
// beginInlineEdit handshake. Mark it active immediately so suggestion
|
|
55
61
|
// preview patches do not rewrite the focused host node and reset caret.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBridgeInlineEditing.js","sourceRoot":"","sources":["../../../src/editor/page-editor-chrome/useBridgeInlineEditing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAwB5D,MAAM,UAAU,sBAAsB,CAAC,EACrC,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,GACW;IAC9B,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,MAAM,gBAAgB,GAAG,uBAAuB,EAAE,CAAC;IACnD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,MAAM,CAAqB,WAAW,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,wBAAwB,GAAG,MAAM,CAAsB,IAAI,GAAG,EAAE,CAAC,CAAC;IAExE,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,OAAO,GAAG,WAAW,EAAE,MAAM,CAAC;IAC1C,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAE1B,MAAM,sBAAsB,GAAG,WAAW,CACxC,CACE,OAA2B,EAC3B,IAA2B,EAC3B,UAAmB,EACU,EAAE;QAC/B,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAE/B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC;QAC5C,MAAM,cAAc,GAAG,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,IAAI,CAC3D,CAAC,KAAK,EAAE,EAAE,CACR,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC;YAC/C,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO;gBACxB,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAC/C,CAAC;QACF,MAAM,YAAY,GAAG,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI,QAAQ,EAAE,kBAAkB,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,EAAE,EAAE;YACzB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,IAAI,YAAY,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,UAAU,EAAE,EAAE,IAAI,YAAY,EAAE,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,UAAU,EAAE,QAAQ,IAAI,YAAY,EAAE,QAAQ,CAAC;QAChE,MAAM,YAAY,GAAG,UAAU,EAAE,OAAO,IAAI,YAAY,EAAE,OAAO,CAAC;QAClE,MAAM,OAAO,GACX,OAAO,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC/D,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,SAAS,CAAC;QAEhB,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAEhE,OAAO;YACL,OAAO;YACP,IAAI,EAAE;gBACJ,EAAE;gBACF,QAAQ;gBACR,OAAO;gBACP,IAAI,EAAE,UAAU,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI;gBAC5C,WAAW,EAAE,UAAU,EAAE,WAAW,IAAI,YAAY,EAAE,WAAW;gBACjE,IAAI,EAAE,UAAU,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI;gBAC5C,QAAQ,EAAE,UAAU,EAAE,QAAQ,IAAI,YAAY,EAAE,QAAQ;aACzD;SACF,CAAC;IACJ,CAAC,EACD,CAAC,kBAAkB,CAAC,CACrB,CAAC;IAEF,MAAM,uBAAuB,GAAG,WAAW,CACzC,
|
|
1
|
+
{"version":3,"file":"useBridgeInlineEditing.js","sourceRoot":"","sources":["../../../src/editor/page-editor-chrome/useBridgeInlineEditing.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,10 @@ import { Splitter } from "../ui/Splitter";
|
|
|
12
12
|
import { useSlotContext } from "../views/editorSlotContext";
|
|
13
13
|
import { localStorageService } from "../services/localStorageService";
|
|
14
14
|
export const SLOT_COMPONENT_NAVIGATOR_DEFAULT_WIDTH = 320;
|
|
15
|
-
|
|
15
|
+
// Fallback only: the component navigator is normally unmounted when its
|
|
16
|
+
// collapse transition ends (event-driven, see handlePanelTransitionEnd). This
|
|
17
|
+
// guardrail ensures cleanup even if a transitionend is ever missed.
|
|
18
|
+
const COMPONENT_NAVIGATOR_COLLAPSE_SAFETY_MS = 400;
|
|
16
19
|
const EDITOR_FORM_DEFAULT_WIDTH = 320;
|
|
17
20
|
const EDITOR_FORM_MIN_WIDTH = 240;
|
|
18
21
|
const EDITOR_FORM_MIN_VIEWER_WIDTH = 320;
|
|
@@ -127,6 +130,18 @@ function PageViewerContent({ pageViewContext, showFormEditor, compareView, name,
|
|
|
127
130
|
const [renderComponentNavigator, setRenderComponentNavigator] = useState(showComponentNavigator);
|
|
128
131
|
const [componentNavigatorOpening, setComponentNavigatorOpening] = useState(false);
|
|
129
132
|
const componentNavigatorWasOpenRef = useRef(showComponentNavigator);
|
|
133
|
+
const showComponentNavigatorRef = useRef(showComponentNavigator);
|
|
134
|
+
showComponentNavigatorRef.current = showComponentNavigator;
|
|
135
|
+
const handlePanelTransitionEnd = useCallback((panelName) => {
|
|
136
|
+
if (panelName === "form") {
|
|
137
|
+
editContext?.notifySurfaceSettled?.("editor-form");
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// Event-driven unmount once the navigator finishes collapsing.
|
|
141
|
+
if (panelName === "componentNavigator" && !showComponentNavigatorRef.current) {
|
|
142
|
+
setRenderComponentNavigator(false);
|
|
143
|
+
}
|
|
144
|
+
}, [editContext]);
|
|
130
145
|
useEffect(() => {
|
|
131
146
|
const wasOpen = componentNavigatorWasOpenRef.current;
|
|
132
147
|
componentNavigatorWasOpenRef.current = showComponentNavigator;
|
|
@@ -149,15 +164,19 @@ function PageViewerContent({ pageViewContext, showFormEditor, compareView, name,
|
|
|
149
164
|
setRenderComponentNavigator(false);
|
|
150
165
|
return;
|
|
151
166
|
}
|
|
167
|
+
// Primary unmount is event-driven (handlePanelTransitionEnd); this timeout is
|
|
168
|
+
// only a guardrail in case the collapse transitionend never arrives.
|
|
152
169
|
const timeout = window.setTimeout(() => {
|
|
153
170
|
setRenderComponentNavigator(false);
|
|
154
|
-
},
|
|
171
|
+
}, COMPONENT_NAVIGATOR_COLLAPSE_SAFETY_MS);
|
|
155
172
|
return () => {
|
|
156
173
|
window.clearTimeout(timeout);
|
|
157
174
|
};
|
|
158
175
|
}, [showComponentNavigator]);
|
|
159
176
|
const hasOuterRightPanel = !!editContext?.showAgentsPanel ||
|
|
160
|
-
!!(editContext?.showHelpTerminal &&
|
|
177
|
+
!!(editContext?.showHelpTerminal &&
|
|
178
|
+
!editContext?.isMobile &&
|
|
179
|
+
editContext?.currentItemDescriptor);
|
|
161
180
|
const isVertical = !!editContext?.isMobile;
|
|
162
181
|
const formPanelOpen = showFormEditor && !formEffectivelyHidden;
|
|
163
182
|
const viewerPanels = [];
|
|
@@ -190,6 +209,6 @@ function PageViewerContent({ pageViewContext, showFormEditor, compareView, name,
|
|
|
190
209
|
: "translate-x-4 opacity-0", !hasOuterRightPanel && "pr-2"), children: _jsxs("div", { className: "border-border-default flex h-full w-full flex-col rounded-md border bg-white", "data-testid": "slot-component-navigator", children: [_jsxs("div", { className: "border-border-default text-neutral-grey-100 flex items-center border-b py-2 pr-2 pl-3 text-sm font-medium", children: [_jsx("div", { className: "mr-2", children: _jsx(Layers, { className: "h-4 w-4", strokeWidth: 1 }) }), _jsx("div", { className: "mr-auto truncate", children: "Component Navigator" }), _jsx(CloseButton, { onClick: () => editContext?.setComponentNavigatorOpenForSlot?.(slotContext?.slotId ?? null, false), label: "Close", className: "ml-2" })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: _jsx(ComponentTree, { pageViewContext: pageViewContext, itemDescriptor: treeItemDescriptor, item: treeItem, isLoading: treeIsLoading }) })] }) })),
|
|
191
210
|
});
|
|
192
211
|
}
|
|
193
|
-
return (_jsx("div", { className: cn("h-full w-full", className), children: _jsx(Splitter, { panels: viewerPanels, splitterClassName: "bg-transparent -mr-2 md:w-[6px]", direction: isVertical ? "vertical" : "horizontal", localStorageKey: "editor.pageViewer.panels.v2" }) }));
|
|
212
|
+
return (_jsx("div", { className: cn("h-full w-full", className), children: _jsx(Splitter, { panels: viewerPanels, splitterClassName: "bg-transparent -mr-2 md:w-[6px]", direction: isVertical ? "vertical" : "horizontal", localStorageKey: "editor.pageViewer.panels.v2", onPanelTransitionEnd: handlePanelTransitionEnd }) }));
|
|
194
213
|
}
|
|
195
214
|
//# sourceMappingURL=PageViewer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageViewer.js","sourceRoot":"","sources":["../../../src/editor/page-viewer/PageViewer.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAiB,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,MAAM,CAAC,MAAM,sCAAsC,GAAG,GAAG,CAAC;AAC1D,MAAM,
|
|
1
|
+
{"version":3,"file":"PageViewer.js","sourceRoot":"","sources":["../../../src/editor/page-viewer/PageViewer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import { useSlotContext } from "../views/editorSlotContext";
|
|
|
6
6
|
import { useDebouncedCallback, useThrottledCallback } from "use-debounce";
|
|
7
7
|
import { PageEditorChrome } from "../page-editor-chrome/PageEditorChrome";
|
|
8
8
|
import { useBridgeInlineEditing, } from "../page-editor-chrome/useBridgeInlineEditing";
|
|
9
|
+
import { getInlineAiAnchorFromBridgeToolbar, getVisibleBridgeToolbarRect, waitForVisibleBridgeToolbarRect, } from "../page-editor-chrome/bridgeInlineFormatToolbarLayout";
|
|
9
10
|
import { IFRAME_OVERLAY_BRIDGE_GEOMETRY_EVENT, IFRAME_OVERLAY_BRIDGE_SCROLL_EVENT, IframeOverlayProvider, } from "../page-editor-chrome/overlay/IframeOverlayProvider";
|
|
10
11
|
import { DEVICE_CHANGE_EVENT, useViewportChangeSignal, } from "./pageViewContext";
|
|
11
12
|
import uuid from "react-uuid";
|
|
@@ -30,6 +31,7 @@ const ZOOM_MAX = 2;
|
|
|
30
31
|
const ZOOM_STEP = 0.25;
|
|
31
32
|
const ZOOM_TRANSITION_MS = 300;
|
|
32
33
|
const BRIDGE_INLINE_EDIT_RELEASE_EVENT = "parhelia:bridge-inline-edit-release";
|
|
34
|
+
const INLINE_AI_CLOSE_EVENT = "inline-ai-close";
|
|
33
35
|
function dispatchBridgeOverlayScroll(iframe, scroll, scrollScale = 1) {
|
|
34
36
|
iframe?.dispatchEvent(new CustomEvent(IFRAME_OVERLAY_BRIDGE_SCROLL_EVENT, {
|
|
35
37
|
detail: {
|
|
@@ -143,6 +145,53 @@ function scrollBridgeBoundsIntoView(pageViewContext, bounds, currentScroll) {
|
|
|
143
145
|
behavior: "smooth",
|
|
144
146
|
}) ?? false);
|
|
145
147
|
}
|
|
148
|
+
function getIframeWindowScroll(iframe) {
|
|
149
|
+
try {
|
|
150
|
+
const win = iframe?.contentWindow;
|
|
151
|
+
const doc = win?.document;
|
|
152
|
+
if (!win || !doc)
|
|
153
|
+
return undefined;
|
|
154
|
+
const scrollingElement = doc.scrollingElement;
|
|
155
|
+
return {
|
|
156
|
+
x: Math.max(win.scrollX || 0, scrollingElement?.scrollLeft || 0, doc.documentElement?.scrollLeft || 0, doc.body?.scrollLeft || 0),
|
|
157
|
+
y: Math.max(win.scrollY || 0, scrollingElement?.scrollTop || 0, doc.documentElement?.scrollTop || 0, doc.body?.scrollTop || 0),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function restoreIframeWindowScroll(iframe, targetScroll) {
|
|
165
|
+
if (!targetScroll)
|
|
166
|
+
return false;
|
|
167
|
+
try {
|
|
168
|
+
const win = iframe?.contentWindow;
|
|
169
|
+
if (!win)
|
|
170
|
+
return false;
|
|
171
|
+
let attempts = 0;
|
|
172
|
+
const apply = () => {
|
|
173
|
+
try {
|
|
174
|
+
attempts += 1;
|
|
175
|
+
win.scrollTo(targetScroll.x, targetScroll.y);
|
|
176
|
+
const settled = Math.abs((win.scrollX || 0) - targetScroll.x) <= 1 &&
|
|
177
|
+
Math.abs((win.scrollY || 0) - targetScroll.y) <= 1;
|
|
178
|
+
if (!settled && attempts < 8) {
|
|
179
|
+
window.requestAnimationFrame(apply);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// Cross-origin preview frames expose a WindowProxy, but reading named
|
|
184
|
+
// properties such as scrollTo/scrollX can throw. In that case the
|
|
185
|
+
// bridge-side scroll restoration is responsible for preserving scroll.
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
window.requestAnimationFrame(apply);
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
146
195
|
function applyIframeZoom(_iframe, _zoom, _location) {
|
|
147
196
|
// Zoom is applied inside the page host through the bridge setZoom command.
|
|
148
197
|
}
|
|
@@ -303,6 +352,7 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
|
|
|
303
352
|
const bridgeTextRangeSourcesRef = useRef(new Map());
|
|
304
353
|
const activeBridgeInlineEditRef = useRef(null);
|
|
305
354
|
const latestBridgeScrollRef = useRef(undefined);
|
|
355
|
+
const pendingRefreshScrollRef = useRef(undefined);
|
|
306
356
|
const suppressNextSelectionScrollRef = useRef(false);
|
|
307
357
|
// Tracks the selection we last evaluated for auto-scroll. The selection
|
|
308
358
|
// effect also depends on focusedField, so it re-runs when a field blurs
|
|
@@ -607,11 +657,17 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
|
|
|
607
657
|
activeEl?.closest(".agent-inline-trigger") ||
|
|
608
658
|
activeEl?.closest('[role="dialog"]'));
|
|
609
659
|
};
|
|
660
|
+
const isInlineAiUiPresent = () => !!document.querySelector(".agent-inline-dialog, .agent-inline-trigger");
|
|
661
|
+
const inlineAiUiFocused = isInlineAiUiFocused();
|
|
662
|
+
const inlineAiUiPresent = isInlineAiUiPresent();
|
|
663
|
+
if (selection.collapsed && (inlineAiUiFocused || inlineAiUiPresent)) {
|
|
664
|
+
return;
|
|
665
|
+
}
|
|
610
666
|
if (selection.collapsed ||
|
|
611
667
|
!selection.text ||
|
|
612
668
|
!selection.activeField?.fieldId) {
|
|
613
669
|
sendBridgeRemoteCaretPosition(selection);
|
|
614
|
-
if (!
|
|
670
|
+
if (!inlineAiUiFocused && !inlineAiUiPresent) {
|
|
615
671
|
editor.setSelectedRange(undefined);
|
|
616
672
|
}
|
|
617
673
|
return;
|
|
@@ -654,6 +710,7 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
|
|
|
654
710
|
contextAfter: typeof metadata.contextAfter === "string"
|
|
655
711
|
? metadata.contextAfter
|
|
656
712
|
: undefined,
|
|
713
|
+
formatting: selection.formatting,
|
|
657
714
|
clientRect: selectionRect,
|
|
658
715
|
};
|
|
659
716
|
editor.setSelectedRange(nextRange);
|
|
@@ -766,9 +823,44 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
|
|
|
766
823
|
if (editor && field) {
|
|
767
824
|
await editor.setFocusedField(field, editor.mode !== "suggestions");
|
|
768
825
|
}
|
|
826
|
+
const iframeRect = iframe.getBoundingClientRect();
|
|
827
|
+
const bridgeSelection = pageViewContextRef.current?.bridgeSelection;
|
|
828
|
+
const fallbackCaretRect = !interaction.selectionRect &&
|
|
829
|
+
!interaction.caretRect &&
|
|
830
|
+
bridgeSelection?.collapsed &&
|
|
831
|
+
bridgeSelection.rect &&
|
|
832
|
+
bridgeSelection.activeField?.fieldId &&
|
|
833
|
+
bridgeIdsMatch(bridgeSelection.activeField.fieldId, interaction.fieldId)
|
|
834
|
+
? bridgeSelection.rect
|
|
835
|
+
: undefined;
|
|
836
|
+
const resolvedSelectionRect = interaction.selectionRect ??
|
|
837
|
+
interaction.caretRect ??
|
|
838
|
+
fallbackCaretRect;
|
|
839
|
+
const toolbarRect = await waitForVisibleBridgeToolbarRect();
|
|
840
|
+
const selectedRange = editContextRef.current?.selectedRange ?? editor?.selectedRange;
|
|
841
|
+
const toolbarAnchor = getInlineAiAnchorFromBridgeToolbar(selectedRange, toolbarRect ?? getVisibleBridgeToolbarRect());
|
|
842
|
+
const caretAnchor = toolbarAnchor
|
|
843
|
+
? toolbarAnchor
|
|
844
|
+
: selectedRange?.text && selectedRange.clientRect
|
|
845
|
+
? {
|
|
846
|
+
x: selectedRange.clientRect.left +
|
|
847
|
+
selectedRange.clientRect.width / 2,
|
|
848
|
+
y: selectedRange.clientRect.bottom,
|
|
849
|
+
origin: "caret",
|
|
850
|
+
}
|
|
851
|
+
: resolvedSelectionRect
|
|
852
|
+
? {
|
|
853
|
+
x: iframeRect.left +
|
|
854
|
+
resolvedSelectionRect.left +
|
|
855
|
+
(resolvedSelectionRect.width ?? 0) / 2,
|
|
856
|
+
y: iframeRect.top + resolvedSelectionRect.bottom,
|
|
857
|
+
origin: "caret",
|
|
858
|
+
}
|
|
859
|
+
: undefined;
|
|
769
860
|
document.dispatchEvent(new CustomEvent("inline-ai-open", {
|
|
770
861
|
bubbles: true,
|
|
771
862
|
cancelable: true,
|
|
863
|
+
detail: caretAnchor ? { anchor: caretAnchor } : undefined,
|
|
772
864
|
}));
|
|
773
865
|
}
|
|
774
866
|
return;
|
|
@@ -810,6 +902,27 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
|
|
|
810
902
|
!effectiveInteraction.ctrlKey &&
|
|
811
903
|
!effectiveInteraction.shiftKey &&
|
|
812
904
|
!effectiveInteraction.metaKey);
|
|
905
|
+
const isInlineAiUiPresent = () => !!document.querySelector(".agent-inline-dialog, .agent-inline-trigger");
|
|
906
|
+
const closeInlineAiIfOpen = (clearSelection = true) => {
|
|
907
|
+
if (!isInlineAiUiPresent())
|
|
908
|
+
return;
|
|
909
|
+
if (clearSelection) {
|
|
910
|
+
editor.setSelectedRange(undefined);
|
|
911
|
+
}
|
|
912
|
+
document.dispatchEvent(new CustomEvent(INLINE_AI_CLOSE_EVENT));
|
|
913
|
+
};
|
|
914
|
+
const clearSelectedRangeForEditableClick = () => {
|
|
915
|
+
const selectedRange = editor.selectedRange;
|
|
916
|
+
const clickMatchesActiveTextSelection = !!(selectedRange?.text?.trim() &&
|
|
917
|
+
selectedRange.elementKey &&
|
|
918
|
+
effectiveInteraction.elementKey &&
|
|
919
|
+
selectedRange.elementKey === effectiveInteraction.elementKey);
|
|
920
|
+
if (clickMatchesActiveTextSelection) {
|
|
921
|
+
closeInlineAiIfOpen(false);
|
|
922
|
+
return;
|
|
923
|
+
}
|
|
924
|
+
closeInlineAiIfOpen(true);
|
|
925
|
+
};
|
|
813
926
|
const currentOverlay = editor.currentOverlay;
|
|
814
927
|
const isGeneratorOverlay = !!(currentOverlay &&
|
|
815
928
|
typeof currentOverlay === "string" &&
|
|
@@ -826,9 +939,11 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
|
|
|
826
939
|
if (interaction.kind === "click")
|
|
827
940
|
selectFromBridgeInteraction([]);
|
|
828
941
|
if (isEditableFieldClick) {
|
|
942
|
+
clearSelectedRangeForEditableClick();
|
|
829
943
|
await beginTrackedBridgeInlineEdit(effectiveInteraction);
|
|
830
944
|
}
|
|
831
945
|
else if (interaction.kind === "click") {
|
|
946
|
+
closeInlineAiIfOpen();
|
|
832
947
|
endTrackedBridgeFieldFocus();
|
|
833
948
|
}
|
|
834
949
|
return;
|
|
@@ -962,9 +1077,11 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
|
|
|
962
1077
|
}
|
|
963
1078
|
selectFromBridgeInteraction([componentId]);
|
|
964
1079
|
if (isEditableFieldClick) {
|
|
1080
|
+
clearSelectedRangeForEditableClick();
|
|
965
1081
|
await beginTrackedBridgeInlineEdit(effectiveInteraction);
|
|
966
1082
|
}
|
|
967
1083
|
else {
|
|
1084
|
+
closeInlineAiIfOpen();
|
|
968
1085
|
endTrackedBridgeFieldFocus();
|
|
969
1086
|
}
|
|
970
1087
|
}, [
|
|
@@ -981,7 +1098,9 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
|
|
|
981
1098
|
if (!iframe)
|
|
982
1099
|
return;
|
|
983
1100
|
const currentIframeSrc = iframe.src;
|
|
984
|
-
if (!iframeSrc ||
|
|
1101
|
+
if (!iframeSrc ||
|
|
1102
|
+
!loadedIframeSrc ||
|
|
1103
|
+
loadedIframeSrc !== currentIframeSrc) {
|
|
985
1104
|
pageViewContext.setBridgeReady(false);
|
|
986
1105
|
pageViewContext.setIframeSupportsRefresh(false);
|
|
987
1106
|
return;
|
|
@@ -1096,6 +1215,24 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
|
|
|
1096
1215
|
scrollHandlerRef.current(event.payload.geometry.scroll.y);
|
|
1097
1216
|
}
|
|
1098
1217
|
}
|
|
1218
|
+
if (pendingRefreshScrollRef.current) {
|
|
1219
|
+
const targetScroll = pendingRefreshScrollRef.current;
|
|
1220
|
+
const observedScroll = event.payload.geometry?.scroll ?? {
|
|
1221
|
+
x: 0,
|
|
1222
|
+
y: 0,
|
|
1223
|
+
};
|
|
1224
|
+
const deltaX = targetScroll.x - observedScroll.x;
|
|
1225
|
+
const deltaY = targetScroll.y - observedScroll.y;
|
|
1226
|
+
pendingRefreshScrollRef.current = undefined;
|
|
1227
|
+
if (Math.abs(deltaX) > 1 || Math.abs(deltaY) > 1) {
|
|
1228
|
+
restoreIframeWindowScroll(iframe, targetScroll);
|
|
1229
|
+
bridgeClientRef.current?.sendCommand("scrollBy", {
|
|
1230
|
+
x: deltaX,
|
|
1231
|
+
y: deltaY,
|
|
1232
|
+
behavior: "instant",
|
|
1233
|
+
});
|
|
1234
|
+
}
|
|
1235
|
+
}
|
|
1099
1236
|
setShowSpinner(false);
|
|
1100
1237
|
break;
|
|
1101
1238
|
case "selectionChanged":
|
|
@@ -1486,6 +1623,9 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
|
|
|
1486
1623
|
const shouldUseIframeSrcReload = initialLoad || pageViewContext.fullscreen || iframeOriginChanged;
|
|
1487
1624
|
function runFallbackRefresh() {
|
|
1488
1625
|
pageViewContext.setIframeSupportsRefresh(false);
|
|
1626
|
+
pendingRefreshScrollRef.current ??=
|
|
1627
|
+
getIframeWindowScroll(iframeRef.current) ??
|
|
1628
|
+
latestBridgeScrollRef.current;
|
|
1489
1629
|
setShowSpinner(true);
|
|
1490
1630
|
console.log(initialLoad
|
|
1491
1631
|
? "Initial load - setting iframe src"
|
|
@@ -1498,6 +1638,9 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
|
|
|
1498
1638
|
setIframeSrc(renderUrl.toString());
|
|
1499
1639
|
}
|
|
1500
1640
|
function runBridgeRefresh() {
|
|
1641
|
+
pendingRefreshScrollRef.current =
|
|
1642
|
+
getIframeWindowScroll(iframeRef.current) ??
|
|
1643
|
+
latestBridgeScrollRef.current;
|
|
1501
1644
|
const bridge = bridgeClientRef.current;
|
|
1502
1645
|
if (!bridge?.supportsCapability("refresh")) {
|
|
1503
1646
|
runFallbackRefresh();
|
|
@@ -1511,6 +1654,7 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
|
|
|
1511
1654
|
layoutKind: editContext.layoutMode,
|
|
1512
1655
|
});
|
|
1513
1656
|
if (!accepted) {
|
|
1657
|
+
pendingRefreshScrollRef.current = undefined;
|
|
1514
1658
|
pageViewContext.setIframeSupportsRefresh(false);
|
|
1515
1659
|
runFallbackRefresh();
|
|
1516
1660
|
}
|
|
@@ -1745,6 +1889,17 @@ function PageViewerFrameContent({ compareView, pageViewContext, editContext, cla
|
|
|
1745
1889
|
if (iframeSrc) {
|
|
1746
1890
|
setShowSpinner(false);
|
|
1747
1891
|
applyIframeZoom(iframeRef.current, zoom, "PageViewerFrame.tsx:onLoad-zoom");
|
|
1892
|
+
if (pendingRefreshScrollRef.current) {
|
|
1893
|
+
const targetScroll = pendingRefreshScrollRef.current;
|
|
1894
|
+
pendingRefreshScrollRef.current = undefined;
|
|
1895
|
+
restoreIframeWindowScroll(iframeRef.current, targetScroll);
|
|
1896
|
+
const observedScroll = getIframeWindowScroll(iframeRef.current) ?? { x: 0, y: 0 };
|
|
1897
|
+
bridgeClientRef.current?.sendCommand("scrollBy", {
|
|
1898
|
+
x: targetScroll.x - observedScroll.x,
|
|
1899
|
+
y: targetScroll.y - observedScroll.y,
|
|
1900
|
+
behavior: "instant",
|
|
1901
|
+
});
|
|
1902
|
+
}
|
|
1748
1903
|
}
|
|
1749
1904
|
} }), iframeElement && (_jsx(IframeOverlayProvider, { iframe: iframeElement, mode: "scrolling", scrollScale: 1, visualScale: 1, invalidationKey: `${zoom}:${bridgeGeometryRevision}`, deferredInvalidationMs: ZOOM_TRANSITION_MS + 50, children: _jsx(PageEditorChrome, { iframe: iframeElement, compareView: compareView, pageViewContext: pageViewContext, onBridgeRichTextCommand: sendApplyRichTextCommand }) })), pageViewContext.deviceHeight && pageViewContext.device && (_jsx("div", { className: "bg-neutral-grey-5 relative z-40 h-full w-full" }))] }), !pageViewContext.fullscreen &&
|
|
1750
1905
|
showMiniMap &&
|