diff --git a/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte b/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte
index f2c05810..48a5316c 100644
--- a/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte
+++ b/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte
@@ -3,28 +3,29 @@
import type { ControlButtonProps } from './types';
- type $$Props = ControlButtonProps;
-
- let className: $$Props['class'] = undefined;
- let bgColor: $$Props['bgColor'] = undefined;
- let bgColorHover: $$Props['bgColorHover'] = undefined;
- let color: $$Props['color'] = undefined;
- let colorHover: $$Props['colorHover'] = undefined;
- let borderColor: $$Props['borderColor'] = undefined;
-
- export { className as class };
+ let {
+ class: className,
+ bgColor,
+ bgColorHover,
+ color,
+ colorHover,
+ borderColor,
+ onclick,
+ children,
+ ...restProps
+ }: ControlButtonProps = $props();
diff --git a/packages/svelte/src/lib/plugins/Controls/Controls.svelte b/packages/svelte/src/lib/plugins/Controls/Controls.svelte
index 2984ad2c..d164852b 100644
--- a/packages/svelte/src/lib/plugins/Controls/Controls.svelte
+++ b/packages/svelte/src/lib/plugins/Controls/Controls.svelte
@@ -12,35 +12,36 @@
import type { ControlsProps } from './types';
- type $$Props = ControlsProps;
-
- export let position: $$Props['position'] = 'bottom-left';
- export let showZoom: $$Props['showZoom'] = true;
- export let showFitView: $$Props['showFitView'] = true;
- export let showLock: $$Props['showLock'] = true;
- export let buttonBgColor: $$Props['buttonBgColor'] = undefined;
- export let buttonBgColorHover: $$Props['buttonBgColorHover'] = undefined;
- export let buttonColor: $$Props['buttonColor'] = undefined;
- export let buttonColorHover: $$Props['buttonColorHover'] = undefined;
- export let buttonBorderColor: $$Props['buttonColorHover'] = undefined;
- export let ariaLabel: $$Props['aria-label'] = undefined;
- export let style: $$Props['style'] = undefined;
- export let orientation: $$Props['orientation'] = 'vertical';
- export let fitViewOptions: $$Props['fitViewOptions'] = undefined;
-
- let className: $$Props['class'] = '';
- export { className as class };
+ let {
+ position = 'bottom-left',
+ orientation = 'vertical',
+ showZoom = true,
+ showFitView = true,
+ showLock = true,
+ style,
+ class: className,
+ buttonBgColor,
+ buttonBgColorHover,
+ buttonColor,
+ buttonColorHover,
+ buttonBorderColor,
+ 'aria-label': ariaLabel,
+ fitViewOptions,
+ children,
+ before,
+ after
+ }: ControlsProps = $props();
const {
- zoomIn,
- zoomOut,
- fitView,
viewport,
minZoom,
maxZoom,
nodesDraggable,
nodesConnectable,
- elementsSelectable
+ elementsSelectable,
+ zoomIn,
+ zoomOut,
+ fitView
} = useStore();
const buttonProps = {
@@ -51,9 +52,10 @@
borderColor: buttonBorderColor
};
- $: isInteractive = $nodesDraggable || $nodesConnectable || $elementsSelectable;
- $: minZoomReached = $viewport.zoom <= $minZoom;
- $: maxZoomReached = $viewport.zoom >= $maxZoom;
+ let isInteractive = $state($nodesDraggable || $nodesConnectable || $elementsSelectable);
+ let minZoomReached = $derived($viewport.zoom <= $minZoom);
+ let maxZoomReached = $derived($viewport.zoom >= $maxZoom);
+ let orientationClass = $derived(orientation === 'horizontal' ? 'horizontal' : 'vertical');
const onZoomInHandler = () => {
zoomIn();
@@ -74,8 +76,6 @@
nodesConnectable.set(isInteractive);
elementsSelectable.set(isInteractive);
};
-
- $: orientationClass = orientation === 'horizontal' ? 'horizontal' : 'vertical';
-
+ {#if before}
+ {@render before()}
+ {/if}
{#if showZoom}
{:else}{/if}
{/if}
-
-
+ {#if children}
+ {@render children()}
+ {/if}
+ {#if after}
+ {@render after()}
+ {/if}
diff --git a/packages/svelte/src/lib/plugins/Controls/types.ts b/packages/svelte/src/lib/plugins/Controls/types.ts
index a4e5f9d7..1198d9d1 100644
--- a/packages/svelte/src/lib/plugins/Controls/types.ts
+++ b/packages/svelte/src/lib/plugins/Controls/types.ts
@@ -1,3 +1,4 @@
+import type { Snippet } from 'svelte';
import type { HTMLButtonAttributes } from 'svelte/elements';
import type { PanelPosition } from '@xyflow/system';
@@ -19,10 +20,14 @@ export type ControlsProps = {
buttonBgColorHover?: string;
buttonColor?: string;
buttonColorHover?: string;
+ buttonBorderColor?: string;
'aria-label'?: string;
style?: string;
class?: string;
orientation?: 'horizontal' | 'vertical';
+ children?: Snippet;
+ before?: Snippet;
+ after?: Snippet;
fitViewOptions?: FitViewOptions;
};
@@ -33,4 +38,5 @@ export type ControlButtonProps = HTMLButtonAttributes & {
color?: string;
colorHover?: string;
borderColor?: string;
+ children?: Snippet;
};