Foundation for removing the morfo↔soma attribute duplication: providers that compose attrs in their `props` getter were re-declaring role/aria/data that the morfo already declares (a second source that drifts — the spin-field bug). - runtime: new `SomaRuntimePart.renderProps()` — static identity + every morfo-declared static/dynamic attr, resolved against THIS part's registered sources. A part's getter spreads it and adds ONLY soma-specific extras (handlers, formatted values, native attrs), instead of hardcoding role/aria. - morfo: new `prop-defined` condition (`emitted iff prop !== undefined`) so an optional numeric aria (aria-valuemin at min=0) emits correctly — `prop-truthy` wrongly dropped 0. Wired through types, resolver, schema, compile dep-collect. - NumberField Input migrated as the reference: registers value/min/max as part sources, spreads `renderProps()`, keeps only soma extras. Removes the hardcoded role + aria-valuenow/min/max + data-spin-field-input duplication. ARIA booleans (aria-required/disabled/…) stay soma overrides for now — a propRef-valued aria compiles to raw mode, so soma still stringifies them; a future `v.ariaBool()` helper would let those resolve from the morfo too. - COMPONENT_GUIDE: "Part props: read the morfo, don't re-declare it" doctrine. Verified bit-for-bit in browser (role/aria/data identical incl. min=0 → aria-valuemin="0") + provider tests 7/7. The survey found ~⅔ of components carry this duplication (form controls 70%); this lands the pattern + the NumberField Input reference. Family rollout is the documented backlog. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>active-uix
parent
3c059ff087
commit
59a851850c
Loading…
Reference in new issue