switch keep aspect on shortcut
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import '@xyflow/svelte/dist/style.css';
|
import '@xyflow/svelte/dist/style.css';
|
||||||
import type { ResizeNode } from './types';
|
import type { ResizeNode } from './types';
|
||||||
|
import { store } from './store.svelte';
|
||||||
|
|
||||||
const nodeTypes = {
|
const nodeTypes = {
|
||||||
defaultResizer: DefaultResizer,
|
defaultResizer: DefaultResizer,
|
||||||
@@ -130,6 +131,15 @@
|
|||||||
let snapToGrid = $state(false);
|
let snapToGrid = $state(false);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<svelte:window
|
||||||
|
on:keydown={(e) => {
|
||||||
|
if (e.key === 'k') store.keepAspectRatio = true;
|
||||||
|
}}
|
||||||
|
on:keyup={(e) => {
|
||||||
|
if (e.key === 'k') store.keepAspectRatio = false;
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
<SvelteFlow
|
<SvelteFlow
|
||||||
bind:nodes
|
bind:nodes
|
||||||
bind:edges
|
bind:edges
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Handle, Position, type NodeProps, NodeResizeControl, type Node } from '@xyflow/svelte';
|
import { Handle, Position, type NodeProps, NodeResizeControl, type Node } from '@xyflow/svelte';
|
||||||
import type { ResizeNode } from './types';
|
import type { ResizeNode } from './types';
|
||||||
|
import { store } from './store.svelte';
|
||||||
|
|
||||||
let { data }: NodeProps<ResizeNode> = $props();
|
let { data }: NodeProps<ResizeNode> = $props();
|
||||||
</script>
|
</script>
|
||||||
@@ -14,7 +15,7 @@
|
|||||||
onResizeStart={data.onResizeStart ?? undefined}
|
onResizeStart={data.onResizeStart ?? undefined}
|
||||||
onResize={data.onResize ?? undefined}
|
onResize={data.onResize ?? undefined}
|
||||||
onResizeEnd={data.onResizeEnd ?? undefined}
|
onResizeEnd={data.onResizeEnd ?? undefined}
|
||||||
keepAspectRatio={data.keepAspectRatio ?? undefined}
|
keepAspectRatio={store.keepAspectRatio || (data.keepAspectRatio ?? undefined)}
|
||||||
style="background: transparent; border: none;"
|
style="background: transparent; border: none;"
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
import { Handle, NodeResizer, Position, type NodeProps } from '@xyflow/svelte';
|
import { Handle, NodeResizer, Position, type NodeProps } from '@xyflow/svelte';
|
||||||
import type { ResizeNode } from './types';
|
import type { ResizeNode } from './types';
|
||||||
|
|
||||||
|
import { store } from './store.svelte';
|
||||||
|
|
||||||
let { data, selected }: NodeProps<ResizeNode> = $props();
|
let { data, selected }: NodeProps<ResizeNode> = $props();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -15,7 +17,7 @@
|
|||||||
onResizeStart={data.onResizeStart ?? undefined}
|
onResizeStart={data.onResizeStart ?? undefined}
|
||||||
onResize={data.onResize ?? undefined}
|
onResize={data.onResize ?? undefined}
|
||||||
onResizeEnd={data.onResizeEnd ?? undefined}
|
onResizeEnd={data.onResizeEnd ?? undefined}
|
||||||
keepAspectRatio={data.keepAspectRatio ?? undefined}
|
keepAspectRatio={store.keepAspectRatio || (data.keepAspectRatio ?? undefined)}
|
||||||
/>
|
/>
|
||||||
<Handle type="target" position={Position.Left} />
|
<Handle type="target" position={Position.Left} />
|
||||||
<div>{data.label}</div>
|
<div>{data.label}</div>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Handle, NodeResizeControl, Position, type NodeProps } from '@xyflow/svelte';
|
import { Handle, NodeResizeControl, Position, type NodeProps } from '@xyflow/svelte';
|
||||||
import type { ResizeNode } from './types';
|
import type { ResizeNode } from './types';
|
||||||
|
import { store } from './store.svelte';
|
||||||
|
|
||||||
let { data }: NodeProps<ResizeNode> = $props();
|
let { data }: NodeProps<ResizeNode> = $props();
|
||||||
</script>
|
</script>
|
||||||
@@ -14,7 +15,7 @@
|
|||||||
onResizeStart={data.onResizeStart ?? undefined}
|
onResizeStart={data.onResizeStart ?? undefined}
|
||||||
onResize={data.onResize ?? undefined}
|
onResize={data.onResize ?? undefined}
|
||||||
onResizeEnd={data.onResizeEnd ?? undefined}
|
onResizeEnd={data.onResizeEnd ?? undefined}
|
||||||
keepAspectRatio={data.keepAspectRatio ?? undefined}
|
keepAspectRatio={store.keepAspectRatio || (data.keepAspectRatio ?? undefined)}
|
||||||
color="red"
|
color="red"
|
||||||
position={Position.Left}
|
position={Position.Left}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Handle, NodeResizeControl, Position, type NodeProps } from '@xyflow/svelte';
|
import { Handle, NodeResizeControl, Position, type NodeProps } from '@xyflow/svelte';
|
||||||
import type { ResizeNode } from './types';
|
import type { ResizeNode } from './types';
|
||||||
|
import { store } from './store.svelte';
|
||||||
|
|
||||||
let { data }: NodeProps<ResizeNode> = $props();
|
let { data }: NodeProps<ResizeNode> = $props();
|
||||||
</script>
|
</script>
|
||||||
@@ -14,7 +15,7 @@
|
|||||||
onResizeStart={data.onResizeStart ?? undefined}
|
onResizeStart={data.onResizeStart ?? undefined}
|
||||||
onResize={data.onResize ?? undefined}
|
onResize={data.onResize ?? undefined}
|
||||||
onResizeEnd={data.onResizeEnd ?? undefined}
|
onResizeEnd={data.onResizeEnd ?? undefined}
|
||||||
keepAspectRatio={data.keepAspectRatio ?? undefined}
|
keepAspectRatio={store.keepAspectRatio || (data.keepAspectRatio ?? undefined)}
|
||||||
color="red"
|
color="red"
|
||||||
position={Position.Top}
|
position={Position.Top}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
function createStore() {
|
||||||
|
let keepAspectRatio = $state(false);
|
||||||
|
|
||||||
|
return {
|
||||||
|
get keepAspectRatio() {
|
||||||
|
return keepAspectRatio;
|
||||||
|
},
|
||||||
|
set keepAspectRatio(value: boolean) {
|
||||||
|
keepAspectRatio = value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export const store = createStore();
|
||||||
Reference in New Issue
Block a user