Skip to content

Svelte

Package: velo-circuit · Adapter: velo-circuit/svelte · Overview · Editor Presets

Three integration levels (same as React):

LevelAPI
DSL onlyuse:dslCodeMirror action
Canvas onlyuse:circuitEditor action
DSL + canvas syncedbindCircuitWorkbench()

DSL only

svelte
<script lang="ts">
  let dsl = $state('R0-p(R1,C1)')
</script>

<div
  use:dslCodeMirror={{
    value: dsl,
    themeMode: 'dark',
    onChange: (v) => (dsl = v),
  }}
  class="circuit-dsl-field"
/>
svelte
<script lang="ts">
  import { dslCodeMirror } from 'velo-circuit/svelte'
</script>

Lite canvas only

svelte
<script lang="ts">
  import { circuitEditor } from 'velo-circuit/svelte'
  let dsl = $state('R0')
</script>

<div
  use:circuitEditor={{ preset: 'lite', value: dsl, themeMode: 'dark', onChange: (v) => (dsl = v) }}
  style="height: 400px"
/>

Extended editor

svelte
<div use:circuitEditor={{ preset: 'extended', value: dsl, onChange: (v) => (dsl = v) }} />

Workbench — DSL + lite as one

svelte
<script lang="ts">
  import { bindCircuitWorkbench } from 'velo-circuit/svelte'

  let dsl = $state('R0-p(R1,C1)')
  let dslEl: HTMLDivElement
  let editorEl: HTMLDivElement
  let wb: ReturnType<typeof bindCircuitWorkbench> | undefined

  $effect(() => {
    wb?.destroy()
    if (!dslEl || !editorEl) return
    wb = bindCircuitWorkbench({
      dslElement: dslEl,
      editorElement: editorEl,
      value: dsl,
      editorPreset: 'lite',
      themeMode: 'dark',
      onChange: (v) => (dsl = v),
    })
    return () => wb?.destroy()
  })
</script>

<div class="workbench">
  <div bind:this={dslEl} class="workbench-dsl" />
  <div bind:this={editorEl} class="workbench-canvas" style="min-height: 400px" />
</div>

Static SVG

svelte
<script lang="ts">
  import { renderDslPreviewSvg } from 'velo-circuit'
  let { dsl } = $props()
  const svg = $derived(renderDslPreviewSvg(dsl, { themeMode: 'dark' }))
</script>
{@html svg}

Exports

ExportDescription
dslCodeMirrorAction — standalone Boukamp field
circuitEditorAction — canvas (preset, themeMode, onChange)
bindCircuitWorkbenchImperative bind when both nodes are ready
createSvelteCircuitEditorLow-level EditorInstance