1- import { loadClerkJsScript , setClerkJsLoadingErrorPackageName } from '@clerk/shared/loadClerkJsScript' ;
1+ import {
2+ loadClerkJsScript ,
3+ loadClerkUiScript ,
4+ setClerkJsLoadingErrorPackageName ,
5+ } from '@clerk/shared/loadClerkJsScript' ;
26import type { ClerkOptions } from '@clerk/shared/types' ;
7+ import type { ClerkUiConstructor } from '@clerk/shared/ui' ;
38
49import { $clerkStore } from '../stores/external' ;
510import { $clerk , $csrState } from '../stores/internal' ;
@@ -31,8 +36,20 @@ const createClerkInstance = runOnce(createClerkInstanceInternal);
3136
3237async function createClerkInstanceInternal ( options ?: AstroClerkCreateInstanceParams ) {
3338 let clerkJSInstance = window . Clerk ;
39+ let clerkUiCtor : Promise < ClerkUiConstructor > | undefined ;
40+
3441 if ( ! clerkJSInstance ) {
35- await loadClerkJsScript ( options ) ;
42+ // Load both clerk-js and clerk-ui in parallel
43+ const clerkPromise = loadClerkJsScript ( options ) ;
44+ clerkUiCtor = loadClerkUiScript ( options ) . then ( ( ) => {
45+ if ( ! window . __unstable_ClerkUiCtor ) {
46+ throw new Error ( 'Failed to download latest Clerk UI. Contact support@clerk.com.' ) ;
47+ }
48+ // After the check, TypeScript knows it's defined
49+ return window . __unstable_ClerkUiCtor ;
50+ } ) ;
51+
52+ await clerkPromise ;
3653
3754 if ( ! window . Clerk ) {
3855 throw new Error ( 'Failed to download latest ClerkJS. Contact support@clerk.com.' ) ;
@@ -48,6 +65,8 @@ async function createClerkInstanceInternal(options?: AstroClerkCreateInstancePar
4865 routerPush : createNavigationHandler ( window . history . pushState . bind ( window . history ) ) ,
4966 routerReplace : createNavigationHandler ( window . history . replaceState . bind ( window . history ) ) ,
5067 ...options ,
68+ // Pass the clerk-ui constructor promise to clerk.load()
69+ clerkUiCtor,
5170 } ;
5271
5372 return clerkJSInstance
0 commit comments