/** * @typedef {{ * el: HTMLElement; * value: T; * set: (value: T) => void; * get: () => T}} Widget * @template {any} T */ /** * @typedef {"button" | "toggle" | "slider" | "checkbox"} WidgetType */ /** * @template {any} T * @param {WidgetType} type * @returns {Widget} */ function Widget (type = "button") { /** @type {Widget} */ let out = { el: document.createElement("div"), value: 0, set: (e) => {value = e}, get: () => this.value, }; out.el.classList = ["widget", type]; if (type == "checkbox" || type == "toggle") { out.el.classList.add("button"); } return out; } export { Widget };