Resilience Matrix
Every Vanilla Breeze component is assessed across six defensive design dimensions. This matrix makes the framework's progressive enhancement posture visible and verifiable.
Scope
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.
Legend
- Full
- Fully supported and tested
- Partial
- Partially supported — see component notes below
- None
- Not supported — known limitation, by design
Component Matrix
| Component |
|
|
|
|
|
|
Notes |
|---|---|---|---|---|---|---|---|
<accordion-wc> |
Full | Full | Full | Full | Full | Full | — |
<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... |
<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... |
<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... |
<emoji-picker> |
None | Partial | Full | Full | Partial | Full | Requires JS for emoji grid rendering |
<foot-notes> |
Full | Full | Full | Full | Full | Full | — |
<geo-map> |
None | Full | Full | Partial | Partial | Full | Requires JS for tile rendering. Activate button is... |
<heading-links> |
Full | Full | Full | Full | Full | Full | — |
<icon-wc> |
Partial | Full | Full | Full | Full | Full | Shows empty space without JS; decorative icons... |
<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... |
<print-page> |
Partial | Full | Full | Full | Full | Full | Print button non-functional without JS; browser... |
<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... |
<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... |
<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... |
<tab-set> |
Full | Full | Full | Full | Full | Full | — |
<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... |
<type-specimen> |
Full | Partial | Full | Full | Full | Partial | Font samples visible as text without JS |
Dimensions
- No-JS
- Content and purpose accessible without JavaScript
- No-CSS
- HTML structure logical and readable without stylesheets
- Upgrade Gap
- :not(:defined) CSS prevents layout shift during upgrade
- Keyboard
- Full feature set operable by keyboard alone
- Screen Reader
- Tested with at least one screen reader
- RTL
- Layout correct with dir=rtl
Component Notes
Detailed notes for components with Partial or None ratings.
<audio-player>- Falls back to native <audio> element
<audio-visualizer>- Requires Web Audio API. Canvas is aria-hidden (decorative). No keyboard interaction needed.
<card-list>- Content flows as stacked cards without JS
<carousel-wc>- Degrades to horizontal scroll; all slides visible
<chat-input>- Degrades to a form with textarea
<chat-window>- Content visible but no live updates without JS
<color-palette>- Color values visible as text without JS
<combo-box>- Degrades to native <select> or text input
<command-palette>- Overlay requires JS; hidden until activated
<compare-surface>- Both surfaces visible stacked without JS
<content-swap>- All content visible without JS
- Overlay requires JS; browser context menu available as fallback
<data-table>- Native <table> is fully readable without JS
<drag-surface>- Content visible but not draggable without JS
<drop-down>- Trigger visible; popup content accessible via native disclosure
<emoji-picker>- Requires JS for emoji grid rendering
<geo-map>- Requires JS for tile rendering. Activate button is focusable; interactive mode supports arrow-key panning and +/- zoom. Map content not describable to screen readers beyond aria-label coordinates.
<icon-wc>- Shows empty space without JS; decorative icons acceptable
<include-file>- Slot content or fallback text visible without JS
<page-toc>- TOC not generated without JS but page content remains navigable
<print-page>- Print button non-functional without JS; browser print still available
<qr-code>- Shows URL text fallback without JS
<settings-panel>- Overlay panel requires JS; hidden until activated
- Falls back to copy-link or mailto
<short-cuts>- Overlay requires JS; keyboard shortcuts are JS-driven
<site-search>- Search form visible; results require JS
<slide-accept>- Confirmation visible but slide interaction requires JS
<split-surface>- Both panels visible stacked without JS
<star-rating>- Rating value visible as text; interactive rating requires JS
<text-reader>- Content readable without JS; TTS and controls are enhancement
<theme-picker>- Default theme applied without JS
<toast-msg>- Notifications require JS to trigger
<tool-tip>- Trigger content visible; tooltip text available via title fallback
<type-specimen>- Font samples visible as text without JS