mir-frontend-vanillalisted
Install: claude install-skill anantbhandarkar/make-it-right
# /mir-frontend-vanilla · Make It Right (vanilla JS tier)
Middle tier. `mir-frontend` decides **what is correct** (any UI); this owns **what plain DOM code gets wrong**. Load order: `mir-frontend` → `mir-frontend-vanilla` → `<framework module, if any>`.
With no library there is **no automatic teardown and no render loop**. Every listener, observer, timer, and DOM write is yours to undo, and every state change is yours to reflect. Those two absences produce almost every bug in this file.
**Platform baseline, verified 13 Aug 2026** (source: webstatus.dev). Check this before you write a fallback — and before you skip one.
| Feature | Baseline | Notes |
|---|---|---|
| `AbortController` / `addEventListener({signal})` | Widely | The listener-removal mechanism. Use it |
| `<dialog>` · `inert` · `:focus-visible` | Widely | Native modal focus trap. Do not hand-roll one |
| Form-associated custom elements (`attachInternals`) | Widely (2025-09-27) | Safari 16.4+ |
| Popover API | Newly (2025-01-27) | Safari iOS 18.3 closed the gap |
| Declarative Shadow DOM · `:state()` | Newly | |
| Invoker commands (`command` / `commandfor`) | Newly (2025-12-12) | Safari 26.2 |
| **Trusted Types** | **Newly (2026-02-24)** | Firefox 148 shipped it; Safari 26. Enforceable everywhere now |
| `setHTMLUnsafe()` / `parseHTMLUnsafe()` | Newly (2025-09-15) | Explicitly *unsafe*; parses declarative shadow roots |
| View transitions (same-document) | Newly (2025-10-14) | Firefox 144 |
| **`Element.setHTML(