@chasemoskal/magical
Version:
web toolkit for lit apps
67 lines • 4.5 kB
JavaScript
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var _TemplateSlots_instances, _a, _TemplateSlots_parent, _TemplateSlots_templates, _TemplateSlots_parentObserver, _TemplateSlots_templateObservers, _TemplateSlots_onChange, _TemplateSlots_refresh;
export class TemplateSlots {
constructor(parent, onChange = () => { }) {
_TemplateSlots_instances.add(this);
_TemplateSlots_parent.set(this, void 0);
_TemplateSlots_templates.set(this, new Map());
_TemplateSlots_parentObserver.set(this, void 0);
_TemplateSlots_templateObservers.set(this, new Set);
_TemplateSlots_onChange.set(this, () => { });
__classPrivateFieldSet(this, _TemplateSlots_parent, parent, "f");
__classPrivateFieldSet(this, _TemplateSlots_onChange, onChange, "f");
__classPrivateFieldSet(this, _TemplateSlots_parentObserver, new MutationObserver(() => __classPrivateFieldGet(this, _TemplateSlots_instances, "m", _TemplateSlots_refresh).call(this)), "f");
__classPrivateFieldGet(this, _TemplateSlots_parentObserver, "f").observe(parent, _a.parentObservationOptions);
__classPrivateFieldGet(this, _TemplateSlots_instances, "m", _TemplateSlots_refresh).call(this);
}
get(name) {
const selector = name
? `:scope > template[slot="${name}"]`
: `:scope > template:not([slot])`;
const template = __classPrivateFieldGet(this, _TemplateSlots_parent, "f")
.querySelector(selector);
return template?.content.cloneNode(true);
}
}
_a = TemplateSlots, _TemplateSlots_parent = new WeakMap(), _TemplateSlots_templates = new WeakMap(), _TemplateSlots_parentObserver = new WeakMap(), _TemplateSlots_templateObservers = new WeakMap(), _TemplateSlots_onChange = new WeakMap(), _TemplateSlots_instances = new WeakSet(), _TemplateSlots_refresh = function _TemplateSlots_refresh() {
for (const observer of __classPrivateFieldGet(this, _TemplateSlots_templateObservers, "f"))
observer.disconnect();
__classPrivateFieldGet(this, _TemplateSlots_templates, "f").clear();
__classPrivateFieldGet(this, _TemplateSlots_templateObservers, "f").clear();
const templates = Array.from(__classPrivateFieldGet(this, _TemplateSlots_parent, "f").querySelectorAll(":scope > template"));
for (const template of templates) {
const name = template.getAttribute("slot") ?? undefined;
__classPrivateFieldGet(this, _TemplateSlots_templates, "f").set(name, template);
const deepObserver = new MutationObserver(__classPrivateFieldGet(this, _TemplateSlots_onChange, "f"));
const attributeObserver = new MutationObserver(() => {
__classPrivateFieldGet(this, _TemplateSlots_instances, "m", _TemplateSlots_refresh).call(this);
__classPrivateFieldGet(this, _TemplateSlots_onChange, "f").call(this);
});
deepObserver.observe(template.content, _a.templateDeepObserverationOptions);
attributeObserver.observe(template, _a.templateAttributeObserverationOptions);
__classPrivateFieldGet(this, _TemplateSlots_templateObservers, "f").add(deepObserver);
}
};
TemplateSlots.parentObservationOptions = {
childList: true,
};
TemplateSlots.templateDeepObserverationOptions = {
childList: true,
attributes: true,
characterData: true,
subtree: true,
};
TemplateSlots.templateAttributeObserverationOptions = {
attributes: true,
};
//# sourceMappingURL=template-slots.js.map