Severity: warning | Blocks morph build: no
The tag is registered but not fully implemented in the native runtime yet —
currently <input>, <select>, and <textarea>:
warning : mx-tag-stub : Tag <select> is registered but not fully implemented
hint: Use <div> with custom handling instead of <select>
Learn more: https://morph.levizr.com/docs/errors/mx-tag-stubThis is a warning: the build proceeds, rendering the element as a basic container without full native behavior.
Morph would rather warn than surprise you. These elements exist in the tag registry so existing JSX parses, but their native control behavior (caret, focus, selection, dropdown popups) is still under construction (see future text input). Without the warning you would stare at a dropdown that never opens and blame your code.
// ⚠️ Renders as a plain container, no dropdown behavior — mx-tag-stub
export default function App() {
return (
<div>
<select>
<option value="a">A</option>
</select>
</div>
);
}For now, build the interaction from supported primitives:
// ✅ Custom dropdown from div + state + events
import { morphState } from 'morph';
export default function App() {
const [open, setOpen] = morphState(false);
const [choice, setChoice] = morphState("a");
return (
<div>
<button onClick={() => setOpen((o) => !o)}>{choice}</button>
{open && (
<div>
<button onClick={() => { setChoice("a"); setOpen(false); }}>A</button>
<button onClick={() => { setChoice("b"); setOpen(false); }}>B</button>
</div>
)}
</div>
);
}For text entry, see the login example, which shows controlled inputs with validation using currently supported behavior.
Steps:
div/button + morphState as above.Escalate it while stub behavior is unacceptable in your app:
{
"lint": {
"severities": { "mx-tag-stub": "error" }
}
}