Events

Use onChange and onPointerUpdate to react to edits and pointer moves.

<script lang="ts">
  import Excalidraw from "svelte-excalidraw";

  let lastChange = "-";
  let lastPointer = "-";

  function handleChange(elements: unknown[], _appState: unknown, _files: unknown) {
    lastChange = `Elements: ${elements.length}`;
  }

  function handlePointer(pointerUpdate: { pointer: { x: number; y: number; tool: string } }) {
    lastPointer = `x: ${pointerUpdate.pointer.x}, y: ${pointerUpdate.pointer.y}, tool: ${pointerUpdate.pointer.tool}`;
  }
</script>

<main class="events-page">
  <aside class="events-bar">
    <div><strong>Last Change:</strong> {lastChange}</div>
    <div><strong>Pointer Update:</strong> {lastPointer}</div>
  </aside>

  <section class="events-canvas">
    <Excalidraw
      onChange={handleChange}
      onPointerUpdate={handlePointer}
      autoFocus={true}
    />
  </section>
</main>

<style>
  .events-page {
    display: grid;
    grid-template-rows: auto 1fr;
    height: 100%;
    min-height: 0;
  }

  .events-bar {
    padding: 1rem;
    background: var(--border, #27272a);
    color: var(--text, #e4e4e7);
    font-family: monospace;
    font-size: 0.9rem;
    display: flex;
    justify-content: space-between;
    gap: 2rem;
    flex-shrink: 0;
  }

  .events-canvas {
    width: 100%;
    height: 100%;
    min-height: 0;
  }
</style>