Welcome to Vanilla Breeze
This bell pulls live notifications from /go/notify/messages — the same contract documented at /docs/concepts/service-contracts/. Static articles like this one are the no-JS / no-backend fallback.
This bell pulls live notifications from /go/notify/messages — the same contract documented at /docs/concepts/service-contracts/. Static articles like this one are the no-JS / no-backend fallback.
Component-by-component assessment of defensive design across six dimensions: No-JS, No-CSS, Upgrade Gap, Keyboard, Screen Reader, and RTL.
Every Vanilla Breeze component is assessed across six defensive design dimensions. This matrix makes the framework's progressive enhancement posture visible and verifiable.
This matrix covers web components only — elements with a JavaScript upgrade lifecycle (connectedCallback, custom element registration). These are the elements where resilience requires deliberate engineering.
Native HTML elements and lightweight custom elements (like <layout-stack> or <form-field>) are not listed here. Native elements get their resilience from the browser platform itself. Custom elements are CSS-only — they have no JS, no upgrade gap, and no failure modes beyond what the browser provides natively.
| Component | Notes | ||||||
|---|---|---|---|---|---|---|---|
<accordion-wc> | Full | Full | Full | Full | Full | Full | Built on <details>, degrades completely to native ... |
<audio-player> | Partial | Full | Full | Full | Partial | Full | Falls back to native <audio> element |
<audio-visualizer> | None | Full | Full | Full | Full | Full | Requires Web Audio API. Canvas is aria-hidden (dec... |
<card-list> | Full | Partial | Full | Full | Full | Full | Content flows as stacked cards without JS |
<carousel-wc> | Partial | Partial | Full | Full | Full | Partial | Degrades to horizontal scroll; all slides visible |
<chat-input> | Partial | Partial | Full | Full | Partial | Full | Degrades to a form with textarea |
<chat-window> | Partial | Partial | Full | Partial | Partial | Full | Content visible but no live updates without JS |
<color-palette> | Partial | Partial | Full | Partial | Partial | Full | Color values visible as text without JS |
<combo-box> | Partial | Partial | Full | Full | Full | Full | Degrades to native <select> or text input |
<command-palette> | None | Full | Full | Full | Partial | Full | Overlay requires JS; hidden until activated |
<compare-surface> | Partial | Partial | Full | Full | Partial | Partial | Both surfaces visible stacked without JS |
<content-swap> | Partial | Full | Full | Full | Partial | Full | All content visible without JS |
<context-menu> | None | Full | Full | Full | Partial | Full | Overlay requires JS; browser context menu availabl... |
<data-table> | Full | Full | Full | Partial | Full | Full | Native <table> is fully readable without JS |
<drag-surface> | Partial | Partial | Full | Partial | Partial | Partial | Content visible but not draggable without JS |
<drop-down> | Partial | Partial | Full | Full | Full | Full | Trigger visible; popup content accessible via nati... |
<emoji-picker> | None | Partial | Full | Full | Partial | Full | Requires JS for emoji grid rendering |
<foot-notes> | Full | Full | Full | Full | Full | Full | Footnotes are links; fully accessible without JS |
<geo-map> | None | Full | Full | Partial | Partial | Full | Requires JS for tile rendering. Activate button is... |
<heading-links> | Full | Full | Full | Full | Full | Full | Headings remain fully readable; anchor links are a... |
<icon-wc> | Partial | Full | Full | Full | Full | Full | Shows empty space without JS; decorative icons acc... |
<include-file> | Partial | Full | Full | Full | Full | Full | Slot content or fallback text visible without JS |
<page-toc> | Partial | Full | Full | Full | Full | Full | TOC not generated without JS but page content rema... |
<print-page> | Partial | Full | Full | Full | Full | Full | Print button non-functional without JS; browser pr... |
<qr-code> | Partial | Full | Full | Full | Partial | Full | Shows URL text fallback without JS |
<settings-panel> | None | Full | Full | Full | Partial | Full | Overlay panel requires JS; hidden until activated |
<share-wc> | Partial | Full | Full | Full | Full | Full | Falls back to copy-link or mailto |
<short-cuts> | None | Full | Full | Full | Partial | Full | Overlay requires JS; keyboard shortcuts are JS-dri... |
<site-search> | Partial | Partial | Full | Full | Partial | Full | Search form visible; results require JS |
<slide-accept> | Partial | Partial | Full | Full | Partial | Partial | Confirmation visible but slide interaction require... |
<split-surface> | Partial | Partial | Full | Full | Partial | Partial | Both panels visible stacked without JS |
<star-rating> | Partial | Partial | Full | Full | Full | Partial | Rating value visible as text; interactive rating r... |
<tab-set> | Full | Full | Full | Full | Full | Full | Built on <details name>, degrades to native accord... |
<text-reader> | Partial | Full | Full | Full | Full | Full | Content readable without JS; TTS and controls are ... |
<theme-picker> | Partial | Partial | Full | Full | Partial | Full | Default theme applied without JS |
<toast-msg> | None | Full | Full | Full | Full | Full | Notifications require JS to trigger |
<tool-tip> | Partial | Full | Full | Partial | Partial | Full | Trigger content visible; tooltip text available vi... |
<type-specimen> | Full | Partial | Full | Full | Full | Partial | Font samples visible as text without JS |
Detailed notes for components with Partial or None ratings.
<accordion-wc><audio-player><audio-visualizer><card-list><carousel-wc><chat-input><chat-window><color-palette><combo-box><command-palette><compare-surface><content-swap><data-table><drag-surface><drop-down><emoji-picker><foot-notes><geo-map><heading-links><icon-wc><include-file><page-toc><print-page><qr-code><settings-panel><short-cuts><site-search><slide-accept><split-surface><star-rating><tab-set><text-reader><theme-picker><toast-msg><tool-tip><type-specimen>