ReadonlyIsConnectivity state as a signal, not a plain property — and that distinction is the whole point of this shape.
The socket state that feeds IsConnected$ is reported by graphql-ws, which can announce
a drop from a callback that lands inside an in-flight change-detection pass (during app
startup this reliably happens after the banner's own view has been checked). Assigning a
plain property there mutates state the @if was already evaluated against, so dev-mode
check-no-changes reports NG0100 ... Previous value: '-1' — -1 being the @if branch
index for "no branch rendered". Reading a signal from the template instead registers the
view as its consumer, so a write marks the view dirty and Angular re-refreshes it within
the same pass; the DOM and the expression can no longer disagree.
toSignal also owns the subscription lifetime via DestroyRef, so there is no manual
Subscription to unsubscribe.
A callback method that performs custom clean-up, invoked immediately before a directive, pipe, or service instance is destroyed.
After the enter/leave animation finishes, publish the banner height as a CSS custom property
When visible, this banner sets --mj-connectivity-banner-height on so that any position:fixed element referencing the shell header offset (e.g. app-switcher mobile dropdown) can account for the banner.