Bug
Input.Root's type prop is captured as a plain, non-reactive field on InputRootContext: the context interface declares readonly type: string (packages/0/src/components/Input/InputRoot.vue — every sibling field is a ref/getter), and setup assigns the destructured prop value once into the provided context object. Input.Control reads that frozen value, so changing :type on Input.Root after mount never reaches the rendered control element.
Reproduction
Bind :type to a ref, toggle 'password' ↔ 'text' (the classic reveal-password toggle), and inspect the <input>'s DOM type attribute — it never changes. Verified via document.querySelector('input').type before/after toggle: icon/state around it updates, the control does not.
Expected
type should be reactive like the context's other fields (wrap with toRef when placed on the context, and have InputControl read it reactively).
Context
Found while building a downstream design-system field component with a reveal toggle; worked around with <Input.Root :key="type"> (full remount — costs transient validation state + focus on toggle), so not urgent downstream, but the primitive's contract implies reactivity.
Bug
Input.Root'stypeprop is captured as a plain, non-reactive field onInputRootContext: the context interface declaresreadonly type: string(packages/0/src/components/Input/InputRoot.vue — every sibling field is a ref/getter), and setup assigns the destructured prop value once into the provided context object.Input.Controlreads that frozen value, so changing:typeonInput.Rootafter mount never reaches the rendered control element.Reproduction
Bind
:typeto a ref, toggle'password'↔'text'(the classic reveal-password toggle), and inspect the<input>'s DOMtypeattribute — it never changes. Verified viadocument.querySelector('input').typebefore/after toggle: icon/state around it updates, the control does not.Expected
typeshould be reactive like the context's other fields (wrap withtoRefwhen placed on the context, and haveInputControlread it reactively).Context
Found while building a downstream design-system field component with a reveal toggle; worked around with
<Input.Root :key="type">(full remount — costs transient validation state + focus on toggle), so not urgent downstream, but the primitive's contract implies reactivity.