What problem does it solve? Blazor developers frequently make JavaScript interop mistakes that cause silent runtime failures, memory leaks, and broken prerendering, such as calling JS during initialization, using global window functions, or leaking DotNetObjectReference instances. ## Core Features & Use Cases - Collocated JS Modules: Enforces .razor.js files with export instead of global window.* functions or inline script tags. - Lifecycle and Disposal Safety: Ensures interop runs only in OnAfterRenderAsync, with IAsyncDisposable cleanup that catches JSDisconnectedException for Blazor Server circuit loss. - Typed Interop Wrappers: Replaces magic-string InvokeAsync calls with strongly typed wrapper classes owning module lifecycle and constants. - Use Case: When adding a chart to a Blazor page, apply this Skill to create a collocated JS module, a typed ChartInterop wrapper, batched update calls, and correct disposal so the component works under server prerendering without leaks. ## Quick Start Add JavaScript interop to my Blazor component following the collocated module and typed wrapper patterns.