diff --git a/apps/studio/components/interfaces/App/ShellFallback.tsx b/apps/studio/components/interfaces/App/ShellFallback.tsx new file mode 100644 index 00000000000..ff6a1666af7 --- /dev/null +++ b/apps/studio/components/interfaces/App/ShellFallback.tsx @@ -0,0 +1,73 @@ +import { LogoLoader } from 'ui' + +import { IS_PLATFORM } from '@/lib/constants' + +// Baked into the prerendered SPA shell (_shell.html) — this is the static HTML +// shown on every cold load until the JS bundle hydrates, so nothing here can +// rely on JS: the loader animation, the 7s stuck-load help reveal, and the +// noscript message are all pure CSS/HTML. +export function ShellFallback() { + return ( + <> + +
+ {/* LogoLoader fills its parent, so give it a fixed-height box — otherwise + it stretches to the full column and pushes the help text offscreen. */} +
+ +
+ {/* data-nosnippet keeps Google from surfacing this boilerplate as the + search snippet for dashboard URLs (the shell serves every route). */} +

+ Taking longer than expected? Try clearing your browser cookies and reloading the page. + {IS_PLATFORM && ( + <> + {' '} + If the problem persists, contact{' '} + + support@supabase.com + + . + + )} +

+
+ {/* dangerouslySetInnerHTML keeps React hydration from diffing noscript + children, which the server renders as real markup but the client + treats as raw text. */} +