/** 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 }
}