What problem does it solve? Blazor developers frequently misuse JavaScript interop by calling JS during prerendering, leaking DotNetObjectReference instances, scattering magic strings, and making excessive round-trips across the .NET-to-JS boundary. This Skill provides the correct patterns for adding, reviewing, or fixing JS interop in Blazor components. ## Core Features & Use Cases - Collocated JS Modules: Enforces .razor.js files with export instead of global window.* functions or <script> tags. - Lifecycle & Disposal Safety: Ensures interop runs only in OnAfterRenderAsync or event handlers, with IAsyncDisposable cleanup that catches JSDisconnectedException. - Typed Interop Wrappers: Encapsulates IJSRuntime calls in plain classes with internal const method names, eliminating magic strings. - Use Case: When building a Blazor chart component that calls a JavaScript charting library, use this Skill to structure the module import, batch interop calls, wire up DotNetObjectReference callbacks, and dispose everything correctly on Blazor Server. ## Quick Start Review my Blazor component's JavaScript interop code and fix any lifecycle, disposal, or batching issues.