Files
windmill/frontend/src/lib/components/JsonEditor.svelte
T
Diego ImbertandDiego Imbert 58fa4c8006 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 c20fca134d.

---------

Co-authored-by: Diego Imbert <diego@windmill.dev>
2025-04-17 15:41:41 +02:00

59 lines
1.3 KiB
Svelte

<script lang="ts">
import '@codingame/monaco-vscode-standalone-json-language-features'
import SimpleEditor from '$lib/components/SimpleEditor.svelte'
import { createEventDispatcher } from 'svelte'
import { createDispatcherIfMounted } from '$lib/createDispatcherIfMounted'
export let code: string | undefined
export let value: any = undefined
export let error = ''
export let editor: SimpleEditor | undefined = undefined
export let small = false
export let loadAsync = false
$: tooBig = code && code?.length > 1000000
const dispatch = createEventDispatcher()
const dispatchIfMounted = createDispatcherIfMounted(dispatch)
function parseJson() {
try {
if (code == '') {
value = undefined
error = ''
return
}
value = JSON.parse(code ?? '')
dispatchIfMounted('changeValue', value)
error = ''
} catch (e) {
error = e.message
}
}
$: code != undefined && parseJson()
</script>
{#if tooBig}
<span class="text-tertiary">JSON to edit is too big</span>
{:else}
<div class="flex flex-col w-full">
<div class="border w-full">
<SimpleEditor
{loadAsync}
{small}
on:focus
on:blur
bind:this={editor}
on:change
autoHeight
lang="json"
bind:code
class={$$props.class}
/>
</div>
{#if error != ''}
<span class="text-red-600 text-xs">{error}</span>
{/if}
</div>
{/if}