Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 54x 54x 306x 306x 304x | /** Tracks DOM event listeners so custom renderers can participate in cleanup. */
export interface EventRegistry {
/** Register an event listener that will be removed when the form re-renders or is destroyed. */
listen<K extends keyof HTMLElementEventMap>(
element: HTMLElement | Document,
type: K,
listener: (event: HTMLElementEventMap[K]) => void
): void;
/** Remove all listeners registered through this registry. */
cleanup(): void;
}
export function createEventRegistry(): EventRegistry {
const cleanupCallbacks: Array<() => void> = [];
return {
listen(element, type, listener) {
element.addEventListener(type, listener as EventListener);
cleanupCallbacks.push(() => element.removeEventListener(type, listener as EventListener));
},
cleanup() {
cleanupCallbacks.splice(0).forEach((callback) => callback());
}
};
}
|