export const handleEvent = ( handle: EventTarget, eventName: string, handler: (...args: any[]) => void, ...handlerArgs: unknown[] ): void => { const handlerWrapper = () => { handler(...handlerArgs); handle.removeEventListener(eventName, handlerWrapper); }; handle.addEventListener(eventName, handlerWrapper); }; export async function documentReady(): Promise { return new Promise((resolve) => { if (document.readyState !== "loading") { resolve(); } else { handleEvent(document, "DOMContentLoaded", resolve); } }); } export const htmlToElement = (html: string): T => { const template = window.document.createElement("template"); const trimmedHtml = html.trim(); // Never return a text node of whitespace as the result template.innerHTML = trimmedHtml; return template.content.firstChild as T; };