From c631c8fc855b1854f14fc7fbf1d8afedaa37a0db Mon Sep 17 00:00:00 2001
From: Owen Jacobson <owen@grimoire.ca>
Date: Tue, 8 Jul 2025 01:35:28 -0400
Subject: Event capture and display tools.

This is meant to be used in swatches, to display the events and callbacks generated by a component as part of the swatch. The usage pattern is described in the comments (in both places).

Naturally, this has its own swatch.
---
 ui/lib/components/swatch/EventLog.svelte | 37 ++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)
 create mode 100644 ui/lib/components/swatch/EventLog.svelte

(limited to 'ui/lib/components/swatch/EventLog.svelte')

diff --git a/ui/lib/components/swatch/EventLog.svelte b/ui/lib/components/swatch/EventLog.svelte
new file mode 100644
index 0000000..2d8c5c0
--- /dev/null
+++ b/ui/lib/components/swatch/EventLog.svelte
@@ -0,0 +1,37 @@
+<script>
+  /*
+   * The interface exposed by this component is designed to be compatible with the interface
+   * exposed by the `EventCapture` class, so that you can do this:
+   *
+   *    let capture = $state(new EventCapture());
+   *    const someEvent = capture.on('someEvent');
+   *
+   *    // …
+   *
+   *    <EventLog events={capture.events} clear={capture.clear.bind(capture)} />
+   */
+
+  let { events, clear = () => {} } = $props();
+
+  function onclick() {
+    clear();
+  }
+</script>
+
+<button {onclick}>clear</button>
+<table>
+  <thead>
+    <tr>
+      <th>event</th>
+      <th>arguments</th>
+    </tr>
+  </thead>
+  <tbody>
+    {#each events as { event, args }}
+      <tr>
+        <td>{event}</td>
+        <td><code>{JSON.stringify(args)}</code></td>
+      </tr>
+    {/each}
+  </tbody>
+</table>
-- 
cgit v1.2.3

