diff --git a/skooma.js b/skooma.js index 702d983..5be4037 100644 --- a/skooma.js +++ b/skooma.js @@ -152,6 +152,25 @@ export const reactiveElement = observable => { return element } +/** A reference to a reactive element that follows it around through changes */ +export class Ref { + #current + /** @param {Element|Text} target A reactive element to follow */ + constructor(target) { + this.#current = target + this.follow(target) + } + + follow(target) { + target.addEventListener("replaced", ({next}) => { + this.#current = next + this.follow(next) + }) + } + + deref() { return this.#current } +} + /** Set an attribute on an element * @param {Element} element * @param {string} attribute