summaryrefslogtreecommitdiff
path: root/ui/lib/swatch
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2025-07-08 01:35:28 -0400
committerOwen Jacobson <owen@grimoire.ca>2025-07-08 01:58:25 -0400
commitc631c8fc855b1854f14fc7fbf1d8afedaa37a0db (patch)
treee14698c4a26382461f3290564212e77fdaca5d1e /ui/lib/swatch
parentaeb159c401ef446e6564e5a3643027560a3e22f4 (diff)
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.
Diffstat (limited to 'ui/lib/swatch')
-rw-r--r--ui/lib/swatch/event-capture.svelte.js22
1 files changed, 22 insertions, 0 deletions
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');
+ *
+ * // …
+ *
+ * <EventLog events={capture.events} clear={capture.clear.bind(capture)} />
+ */
+export default class EventCapture {
+ events = $state([]);
+
+ on(event) {
+ return (...args) => this.events.push({ event, args });
+ }
+
+ clear() {
+ this.events = [];
+ }
+}