From 58fa4c80062a5704bbd13ddda1b2f00c7c9e40dd Mon Sep 17 00:00:00 2001 From: Diego Imbert <70353967+diegoimbert@users.noreply.github.com> Date: Thu, 17 Apr 2025 15:41:41 +0200 Subject: [PATCH] fix: improve flow editor step switch performance * replace on click wt on pointer down on flow node click * pointerdown on virtualitems * Load monaco async with a placeholder to avoid size flash * monaco placeholder for editor * less flashing * simulate first line bg * better match to monaco * more fine tune * fix for increased browser font sizes * flow nodes feel much better to click on * move setTimeout upwards * only load async in flow editor * load async monaco in app * lots of components dont respect the type and pass undefined * weird outline when opening and closing OutputPicker * fixed hover flow nodes * moved setTimeout upwards * hover color for virtual items * wrong Cargo.lock * disable interaction if not selectable * pixel perfect editor placeholder * fake monaco editor perfect in flow editor * fake monaco for app json editor * (temp) never load editor monaco * os dependant constants in monaco * Revert " (temp) never load editor monaco" This reverts commit c20fca134d9369032cd6375c514dcc4beabec97b. --------- Co-authored-by: Diego Imbert --- frontend/src/lib/components/Editor.svelte | 16 ++- .../components/FakeMonacoPlaceHolder.svelte | 112 ++++++++++++++++++ .../lib/components/InputTransformForm.svelte | 2 + frontend/src/lib/components/JsonEditor.svelte | 2 + .../src/lib/components/ResourcePicker.svelte | 2 +- .../src/lib/components/SimpleEditor.svelte | 38 ++++-- .../src/lib/components/TemplateEditor.svelte | 27 ++++- .../inputEditor/EvalV2InputEditor.svelte | 6 +- .../inputEditor/StaticInputEditor.svelte | 1 + .../flows/content/FlowModuleComponent.svelte | 3 +- .../flows/map/FlowConstantsItem.svelte | 5 +- .../flows/map/FlowModuleSchemaItem.svelte | 11 +- .../flows/map/FlowSettingsItem.svelte | 3 +- .../lib/components/flows/map/MapItem.svelte | 5 + .../components/flows/map/VirtualItem.svelte | 2 + .../flows/map/VirtualItemWrapper.svelte | 18 +-- .../flows/propPicker/OutputPicker.svelte | 1 + .../renderers/nodes/BranchAllStart.svelte | 7 +- .../renderers/nodes/BranchOneStart.svelte | 6 +- .../renderers/nodes/ForLoopEndNode.svelte | 4 +- .../renderers/nodes/ForLoopStartNode.svelte | 11 +- .../graph/renderers/nodes/InputNode.svelte | 7 +- .../graph/renderers/nodes/ModuleNode.svelte | 13 +- .../graph/renderers/nodes/NoBranchNode.svelte | 5 +- .../graph/renderers/nodes/ResultNode.svelte | 8 +- .../graph/renderers/nodes/SubflowBound.svelte | 5 +- .../graph/renderers/nodes/TriggersNode.svelte | 3 +- .../renderers/nodes/branchAllEndNode.svelte | 3 +- .../renderers/nodes/branchOneEndNode.svelte | 5 +- .../renderers/triggers/TriggersWrapper.svelte | 7 +- frontend/src/lib/components/graph/util.ts | 23 ++++ frontend/src/lib/utils.ts | 21 ++++ 32 files changed, 318 insertions(+), 64 deletions(-) create mode 100644 frontend/src/lib/components/FakeMonacoPlaceHolder.svelte diff --git a/frontend/src/lib/components/Editor.svelte b/frontend/src/lib/components/Editor.svelte index c03666b2fe..76c3e8071b 100644 --- a/frontend/src/lib/components/Editor.svelte +++ b/frontend/src/lib/components/Editor.svelte @@ -175,6 +175,7 @@ import GlobalReviewButtons from './copilot/chat/GlobalReviewButtons.svelte' import { writable } from 'svelte/store' import { formatResourceTypes } from './copilot/chat/core' + import FakeMonacoPlaceHolder from './FakeMonacoPlaceHolder.svelte' // import EditorTheme from './EditorTheme.svelte' let divEl: HTMLDivElement | null = null @@ -221,6 +222,7 @@ export let disabled: boolean = false export let lineNumbersMinChars = 3 export let isAiPanelOpen: boolean = false + export let loadAsync = false const rHash = randomHash() $: filePath = computePath(path) @@ -1374,9 +1376,14 @@ }) } - onMount(() => { + onMount(async () => { if (BROWSER) { - loadMonaco().then((x) => (disposeMethod = x)) + if (loadAsync) { + setTimeout(() => loadMonaco().then((x) => (disposeMethod = x)), 0) + } else { + let m = await loadMonaco() + disposeMethod = m + } } }) @@ -1408,6 +1415,11 @@ +{#if !editor} +
+ +
+{/if}
{#if $vimMode}
diff --git a/frontend/src/lib/components/FakeMonacoPlaceHolder.svelte b/frontend/src/lib/components/FakeMonacoPlaceHolder.svelte new file mode 100644 index 0000000000..315f4dcc3e --- /dev/null +++ b/frontend/src/lib/components/FakeMonacoPlaceHolder.svelte @@ -0,0 +1,112 @@ + + + + + + +
+
+
+ +
+
+
+ {#each lines as line, i} +
+ {line} +
+ {/each} +
+
+
+
+
+
diff --git a/frontend/src/lib/components/InputTransformForm.svelte b/frontend/src/lib/components/InputTransformForm.svelte index 67f88534c5..a12b4026a8 100644 --- a/frontend/src/lib/components/InputTransformForm.svelte +++ b/frontend/src/lib/components/InputTransformForm.svelte @@ -515,6 +515,7 @@ on:change={() => { dispatch('change', { argName, arg }) }} + loadAsync /> {/if} @@ -583,6 +584,7 @@ focused = false }} autoHeight + loadAsync /> {#if !hideHelpButton} diff --git a/frontend/src/lib/components/JsonEditor.svelte b/frontend/src/lib/components/JsonEditor.svelte index 93481027e7..24b41f9e55 100644 --- a/frontend/src/lib/components/JsonEditor.svelte +++ b/frontend/src/lib/components/JsonEditor.svelte @@ -9,6 +9,7 @@ export let error = '' export let editor: SimpleEditor | undefined = undefined export let small = false + export let loadAsync = false $: tooBig = code && code?.length > 1000000 @@ -38,6 +39,7 @@
-
+
{#if collection?.length > 0}