From c631c8fc855b1854f14fc7fbf1d8afedaa37a0db Mon Sep 17 00:00:00 2001 From: Owen Jacobson 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 ++++++++++++++++++++++++++++++++ ui/lib/swatch/event-capture.svelte.js | 22 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 ui/lib/components/swatch/EventLog.svelte create mode 100644 ui/lib/swatch/event-capture.svelte.js (limited to 'ui/lib') 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 @@ + + + + + + + + + + + + {#each events as { event, args }} + + + + + {/each} + +
eventarguments
{event}{JSON.stringify(args)}
diff --git a/ui/lib/swatch/event-capture.svelte.js b/ui/lib/swatch/event-capture.svelte.js new file mode 100644 index 0000000..32c0f39 --- /dev/null +++ b/ui/lib/swatch/event-capture.svelte.js @@ -0,0 +1,22 @@ +/* + * The interface exposed by this class is designed to closely match the interface expected by + * the `EventLog` component, so that you can do this: + * + * let capture = $state(new EventCapture()); + * const someEvent = capture.on('someEvent'); + * + * // … + * + * + */ +export default class EventCapture { + events = $state([]); + + on(event) { + return (...args) => this.events.push({ event, args }); + } + + clear() { + this.events = []; + } +} -- cgit v1.2.3