const behaviorRegistry = {}; export function registerBehavior(name, behavior) { behaviorRegistry[name] = behavior; applyBehaviors(document, [name]); } export function applyBehaviors(container, behaviorNames = null) { if (!behaviorNames) { behaviorNames = Object.keys(behaviorRegistry); } behaviorNames.forEach((behaviorName) => { const behavior = behaviorRegistry[behaviorName]; const elements = container.querySelectorAll(`[${behaviorName}]`); elements.forEach((element) => { element.__behaviors = element.__behaviors || []; const hasBehavior = element.__behaviors.some( (b) => b instanceof behavior, ); if (hasBehavior) { return; } const behaviorInstance = new behavior(element); element.__behaviors.push(behaviorInstance); }); }); } export function swap(element, html) { element.innerHTML = html; applyBehaviors(element); }