UNPKG

@alegendstale/holly-components

Version:

Reusable UI components created using lit

99 lines (98 loc) 2.82 kB
import h, { resolveOptions as g } from "./element-style-observer.js"; import { toArray as n } from "./util.js"; class p { /** * @type { WeakMap<Element, ElementStyleObserver> } */ elementObservers = /* @__PURE__ */ new WeakMap(); /** * @param {StyleObserverCallback} callback * @param {StyleObserverOptions | string | string[]} [options] */ constructor(t, e) { this.callback = t, e = g(e), e.targets ??= [], e.target && e.targets.push(e.target), this.options = e, this.options.targets.length > 0 && this.options.properties.length > 0 && this.observe(this.options.targets, this.options.properties); } /** * @type {StyleObserverCallback} */ changed(t) { this.callback(t); } /** * Observe one or more targets for changes to one or more CSS properties. * * @overload * @param {Element | Element[]} targets * @param {string | string[]} properties * @returns {void} * * @overload * @param {string | string[]} properties * @param {Element | Element[]} targets * @returns {void} * * @overload * @param {...(string | Element | (string | Element)[]) } propertiesOrTargets * @returns {void} */ observe(...t) { let { targets: e, properties: r } = l(...t); if (e.length === 0 && (e = this.options.targets), e.length !== 0) for (let i of e) { let s = this.elementObservers.get(i); s || (s = new h( i, (a) => this.changed(a), this.options ), this.elementObservers.set(i, s)), s.observe(r); } } /** * Stop observing one or more targets for changes to one or more CSS properties. * * @overload * @param {Element | Element[]} targets * @param {string | string[]} properties * @returns {void} * * @overload * @param {string | string[]} properties * @param {Element | Element[]} targets * @returns {void} * * @overload * @param {...(string | Element | (string | Element)[]) } propertiesOrTargets * @returns {void} */ unobserve(...t) { let { targets: e, properties: r } = l(...t); if (e.length === 0 && (e = this.options.targets), e.length !== 0) { r.length === 0 && (r = this.options.properties); for (let i of e) { let s = this.elementObservers.get(i); s && s.unobserve(r); } } } /** * Update the transition for one or more targets. * @param {Element | Element[]} targets * @returns {void} */ updateTransition(t) { for (let e of n(t)) { let r = this.elementObservers.get(e); r && r.updateTransition(); } } } function l(o, t) { let e = [...n(o), ...n(t)]; o = [], t = []; for (let r of e) (typeof r == "string" || r instanceof String ? t : o).push(r); return { targets: o, properties: t }; } export { p as default };