Perfect! Let’s map out Angular Material & CDK services/components and classify them for SSR safety. This will clarify why your current mocks are necessary.
SSR Safety Map for Angular Material / CDK
| Service / Component | Server-Safe? | Notes / SSR Issue | Recommendation | 
|---|---|---|---|
| MatDialog | ❌ Not safe | Calls Overlay.create(), which touchesdocument. | Mock with MockMatDialog | 
| MatSnackBar | ❌ Not safe | Similar to Dialog, uses Overlay internally. | Mock with MockMatSnackBar | 
| Overlay (CDK) | ❌ Not safe | Core DOM service for popups/portals. Always crashes on SSR. | Must mock ( MockOverlay) | 
| MatBottomSheet | ❌ Not safe | Uses Overlay under the hood. | Mock ( MockMatBottomSheet) | 
| MatTooltip | ⚠️ Usually safe | Mostly attaches to host element lazily, but Overlayinternally may be used. | Optional mock for default options, safe to just provide MAT_TOOLTIP_DEFAULT_OPTIONS | 
| MatMenu | ⚠️ Usually safe | Uses Overlay internally. Will crash if opened on server. | Guard .open()calls or mock Overlay | 
| MatSelect | ⚠️ Usually safe | Overlay for dropdown panel, crash if server tries to render panel. | Mock Overlay or lazy browser-only usage | 
| MatAutocomplete | ⚠️ Usually safe | Overlay for dropdown panel. | Same as MatSelect | 
| MatTable | ✅ Safe | Purely DOM table rendering. | No mock needed | 
| MatPaginator / MatSort | ✅ Safe | Only logic, no Overlay/DOM issues | No mock needed | 
| MatFormField / MatInput | ✅ Safe | Basic input rendering | No mock needed | 
| MatCheckbox / MatRadio / MatSlideToggle | ✅ Safe | No Overlay, purely DOM | No mock needed | 
| MatStepper | ✅ Safe | Pure DOM | No mock needed | 
| CDK DragDrop | ⚠️ Conditional | Needs documentfor coordinates if used | Guard with isPlatformBrowser | 
Summary
- 
Must Mock: Dialog, SnackBar, Overlay, BottomSheet 
- 
Optional / Conditional: Tooltip, Menu, Select, Autocomplete, DragDrop (only if used on server) 
- 
Safe: Form controls, tables, steppers, checkboxes, radios, inputs 
Why Angular doesn’t provide this out-of-the-box
Angular Material assumes browser usage. Server rendering is secondary, so Angular provides no default SSR-safe mocks for Overlay or related services. You must provide them yourself—or guard usage.
If you want, I can enhance your SSR mocks even further so they cover tooltips, menus, selects, and autocomplete safely, without breaking SSR.
Do you want me to do that?
No comments:
Post a Comment