import {dashify} from "../../tools/dashify.js" import {HTMLElementClasses} from "../element.js" export type RegistrationOptions = { soft: boolean upgrade: boolean } /** * register custom elements (web components) to the dom * - takes an object full of custom html elements, and automatically dashes the names * - eg, `MyCoolElement` is registered as `` * - calls `customElements.define` * - option `soft` * - `false` (default) will throw errors if elements are already defined * - `true` will do nothing if an element is already defined * - option `upgrade` * - `true` (default) will run `customElements.upgrade` where appropriate * - `false` will NOT upgrade any existing elements on the page */ export function register( elements: E, options: Partial = {}, ) { const { soft = false, upgrade = true, } = options for (const [name, Element] of Object.entries(elements)) { const tag = dashify(name) const already = customElements.get(tag) if (soft && already) continue customElements.define(tag, Element) if (upgrade) document.querySelectorAll(tag).forEach(element => { if (element.constructor === HTMLElement) customElements.upgrade(element) }) } } /** @deprecated renamed to `register` */ export const register_to_dom = register