BindingInfo:
| { expr: string; kind: "attr"; name: string }
| { expr: string; kind: "if" }
| { as: string; key?: string; kind: "each"; path: string }
| { kind: "model"; path: string }
| { kind: "ref"; name: string }
| { kind: "intent"; name: string }
| { event: string; fn?: string; id?: string; kind: "action" }
| { expr: string; kind: "text" }
A binding extracted from an element by
readBindings(el). The union mirrors the directive kinds — each variant carries only the fields that apply. Element identity isn't included; the caller already has it.