← all demos

Controllers

Every add* returns a handle on the row it built. That is what makes a panel that changes shape at runtime possible — and what makes taking one apart safe.

Panel contents

Log

Why destroy() matters: a row that is only removed from the DOM stays subscribed to its signal, and the subscription keeps the detached row alive. destroy() stops the row's effects first. The counter below tracks live effect count via the panel's own controller list.