/** * The declarative binding walker - attaches signal-driven behavior to SERVER-RENDERED markup. * No VDOM, no hydration re-render: the HTML the server sent (e.g. via `@nifrajs/web-vanilla`) is * already the initial state; bindings update it surgically when signals change. * * The attribute set is CLOSED and documented - six bindings, no expression language. Values are * signal/handler NAMES looked up in the island's scope, never evaluated code, so markup can't * inject behavior: * * data-bind-text="count" textContent ← String(signal()) * data-bind-show="isOpen" hidden ← !signal() * data-bind-class="active:isOpen,b:sigB" classList.toggle per pair * data-bind-attr="aria-expanded:isOpen" setAttribute / removeAttribute (false/null remove) * data-bind-value="query" two-way /