gr-base/platform/loom/editor/src/lib/CustomNode.svelte
2025-11-04 10:03:32 +07:00

55 lines
1.1 KiB
Svelte

<script lang="ts">
import { NodeResizer,
Position,
useSvelteFlow,
Handle,
type NodeProps } from '@xyflow/svelte';
let { id, data, selected }: NodeProps = $props();
let { updateNodeData } = useSvelteFlow();
</script>
<div class={["sigil", !selected ? "border" : '']}>
<div>
<label for="text">{id}</label>
<input
id="text"
name="text"
value={data.text}
oninput={(evt) => {
const target = evt.target as HTMLInputElement;
updateNodeData(id, { text: target?.value });
}}
class="nodrag"
/>
{#if selected}
<NodeResizer />
{/if}
<Handle type="target" position={Position.Top} />
<Handle type="source" position={Position.Bottom} />
</div>
</div>
<style>
.sigil > div {
display: flex;
flex-direction: column;
padding: 10px;
}
.sigil {
display: flex;
height: 100%;
background-color: ivory;
border: 1px solid rgba(0,0,0,0);
}
.sigil.border {
border: 1px solid gray;
}
.sigil > div > label {
font-size: 8px;
padding-bottom: 4px;
}
</style>