Top-level PdfViewer. Picks between an annotation-enabled inner
viewer (which mounts the relay-backed sync hook) and a plain one
(which doesn't need a relay provider in scope). The split exists
because useRelaySubProtocol throws when called outside a
<SemanticRelayProvider>, and the library-preview usage of
PdfViewer (no annotations, no provider) must not crash.
Top-level
PdfViewer. Picks between an annotation-enabled inner viewer (which mounts the relay-backed sync hook) and a plain one (which doesn't need a relay provider in scope). The split exists becauseuseRelaySubProtocolthrows when called outside a<SemanticRelayProvider>, and the library-preview usage ofPdfViewer(no annotations, no provider) must not crash.