Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
c5ff0d1
feat(react,vue,astro): Add ui prop for version metadata
jacekradko Jan 23, 2026
d8370e0
chore: add changeset for ui prop
jacekradko Jan 23, 2026
67fdc89
refactor: use ui prop instead of clerkUiCtor in chrome-extension
jacekradko Jan 23, 2026
2399eff
refactor: remove clerkUiCtor from public API, add __internal_forceBun…
jacekradko Jan 23, 2026
89bb1ff
chore: update changeset description
jacekradko Jan 23, 2026
ccac639
refactor: rename clerkUiCtor to ClerkUI and ClerkUiConstructor to Cle…
jacekradko Jan 23, 2026
cf2a354
refactor: rename __internal_ClerkUiCtor to __internal_ClerkUICtor
jacekradko Jan 23, 2026
1d2c8cf
chore: simplify changeset
jacekradko Jan 24, 2026
8f705a8
refactor: rename ui.ctor to ui.ClerkUI
jacekradko Jan 24, 2026
478a0b3
Merge branch 'main' into jrad/ui-prop-cleanup
jacekradko Jan 24, 2026
9517d40
refactor: move ClerkUI inside ui object in ClerkOptions
jacekradko Jan 24, 2026
890cd43
fix: rename ctor to ClerkUI in ui export
jacekradko Jan 24, 2026
7f7665f
chore: fix formatting
jacekradko Jan 24, 2026
a3014de
chore: fix es-ES.ts formatting
jacekradko Jan 24, 2026
9774008
fix(astro): Remove unnecessary eslint-disable directive
jacekradko Jan 24, 2026
e81f20a
test(vue): add unit tests for CDN UI loading with version pinning
jacekradko Jan 24, 2026
d3c96f3
fix(astro): honor bundled UI constructor in getClerkUiEntryChunk
jacekradko Jan 24, 2026
aa0c84b
fix(astro): preserve clerkUiUrl fallback in loadClerkUiScript call
jacekradko Jan 24, 2026
64ff3dc
fix: standardize casing for clerkUIUrl and clerkUIVersion properties
jacekradko Jan 24, 2026
76d7c96
fix(vue): preserve clerkUIUrl fallback when ui.url is not set
jacekradko Jan 24, 2026
c0d3b6f
fix(vue): use type cast for clerkUIUrl/clerkUIVersion fallback
jacekradko Jan 24, 2026
61655b1
fix: update integration templates to use clerkUIUrl casing
jacekradko Jan 24, 2026
978a0d8
Merge branch 'main' into jrad/ui-prop-cleanup
jacekradko Jan 26, 2026
18a45b8
test(react-router): Add ClerkProvider clerkUIUrl prop tests
jacekradko Jan 26, 2026
a9f4cca
fix(react): Use bundled ClerkUI by default, add __internal_preferCDN …
jacekradko Jan 26, 2026
08064ce
fix(react): Await getClerkUiEntryChunk to ensure ClerkUI is resolved
jacekradko Jan 26, 2026
f44ff91
Merge branch 'main' into jrad/ui-prop-cleanup
jacekradko Jan 27, 2026
aaecdf7
fix(integration): Wait for Clerk to load before signOut in component …
jacekradko Jan 27, 2026
b9a490f
test(react): Add unit tests for bundled vs CDN UI loading
jacekradko Jan 27, 2026
21895c2
Merge main into jrad/ui-prop-cleanup
jacekradko Jan 30, 2026
68a17c9
fix(vue): Handle ui prop in clerkPlugin and fix test mocks
jacekradko Jan 30, 2026
35eaeab
feat(react): Support bundled UI via ui.ClerkUI prop
jacekradko Feb 3, 2026
a77ede7
refactor(react,vue): Remove version/url from ui prop, require ClerkUI
jacekradko Feb 4, 2026
4e339ca
fix(vue): Use clerkUICtor option instead of ui.ClerkUI for clerk.load()
jacekradko Feb 4, 2026
f9c063b
Merge branch 'main' into jrad/ui-prop-cleanup
jacekradko Feb 4, 2026
6c4d6fe
feat(ui,react): Add react-server conditional export for RSC support
jacekradko Feb 5, 2026
512942c
test(e2e): Add integration test for bundled UI with react-server cond…
jacekradko Feb 5, 2026
208a1ac
test(ui): add snapshot tests for ui export signature
jacekradko Feb 5, 2026
04b6512
Merge branch 'main' into jrad/ui-prop-cleanup
jacekradko Feb 5, 2026
6a161e0
fix(nextjs): skip UI CDN preload when ui prop is passed
jacekradko Feb 5, 2026
d5234f7
fix(chrome-extension): use ui prop instead of clerkUICtor
jacekradko Feb 5, 2026
a87e669
Merge branch 'main' into jrad/ui-prop-cleanup
jacekradko Feb 6, 2026
41bc6f4
fix(integration): isolate @clerk/ui to bundled-UI-specific test only
jacekradko Feb 6, 2026
2803a6e
fix(astro): support bundled UI via ui prop in getClerkUIEntryChunk
jacekradko Feb 6, 2026
d12dcaf
Merge branch 'main' into jrad/ui-prop-cleanup
jacekradko Feb 6, 2026
8bd8934
refactor(shared,ui,clerk-js,react,vue,astro): replace clerkUICtor wit…
jacekradko Feb 6, 2026
955d1ea
fix(vue): fix formatting in plugin.ts
jacekradko Feb 6, 2026
f8a8f2e
fix(react): externalize @clerk/ui/entry to prevent bundling into dist
jacekradko Feb 6, 2026
244e970
fix(react,nextjs): move @clerk/ui/entry dynamic import to nextjs SDK
jacekradko Feb 6, 2026
7513813
fix(nextjs): fix lint errors for @clerk/ui/entry import
jacekradko Feb 6, 2026
ef29072
chore: clean up changeset and increase async test timeout
jacekradko Feb 6, 2026
09c5da4
Merge branch 'main' into jrad/ui-prop-cleanup
jacekradko Feb 6, 2026
536005b
Merge branch 'main' into jrad/ui-prop-cleanup
jacekradko Feb 6, 2026
15e92d8
Merge branch 'main' into jrad/ui-prop-cleanup
jacekradko Feb 7, 2026
3c7b44a
fix(nextjs): Add webpackIgnore to @clerk/ui dynamic import
jacekradko Feb 8, 2026
dd6fb56
fix(nextjs): Add comment explaining webpackIgnore usage
jacekradko Feb 8, 2026
e00c31a
refactor(ui): Consolidate __PKG_VERSION__ to PACKAGE_VERSION
jacekradko Feb 8, 2026
973f9c3
fix(ui): Skip CDN prefetch when ui prop is passed
jacekradko Feb 9, 2026
6092509
chore: Format
jacekradko Feb 9, 2026
3987c28
fix(nextjs): Fix eslint-disable-next-line placement for import/no-unr…
jacekradko Feb 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .changeset/shiny-owls-dance.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
'@clerk/ui': minor
'@clerk/react': minor
'@clerk/vue': minor
'@clerk/astro': minor
Comment thread
jacekradko marked this conversation as resolved.
'@clerk/chrome-extension': minor
'@clerk/shared': minor
---

Add `ui` prop to ClerkProvider for passing `@clerk/ui`

Usage:
```tsx
import { ui } from '@clerk/ui';

<ClerkProvider ui={ui}>
...
</ClerkProvider>
```
6 changes: 4 additions & 2 deletions integration/templates/express-vite/src/client/main.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import { Clerk } from '@clerk/clerk-js';
import { ClerkUi } from '@clerk/ui/entry';
import { ui } from '@clerk/ui';

const publishableKey = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY;

document.addEventListener('DOMContentLoaded', async function () {
const clerk = new Clerk(publishableKey);

// Use bundled UI via ui.ClerkUI
await clerk.load({
clerkUiCtor: ClerkUi,
ui,
ClerkUI: ui.ClerkUI,
});
Comment thread
jacekradko marked this conversation as resolved.
Outdated

if (clerk.isSignedIn) {
Expand Down
32 changes: 18 additions & 14 deletions packages/astro/src/internal/create-clerk-instance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
setClerkJsLoadingErrorPackageName,
} from '@clerk/shared/loadClerkJsScript';
import type { ClerkOptions } from '@clerk/shared/types';
import type { ClerkUiConstructor } from '@clerk/shared/ui';
import type { ClerkUIConstructor } from '@clerk/shared/ui';
import type { Ui } from '@clerk/ui/internal';

import { $clerkStore } from '../stores/external';
Expand Down Expand Up @@ -40,7 +40,7 @@ async function createClerkInstanceInternal<TUi extends Ui = Ui>(options?: AstroC
// Both functions return early if the scripts are already loaded
// (e.g., via middleware-injected script tags in the HTML head).
const clerkJsChunk = getClerkJsEntryChunk(options);
const clerkUiCtor = getClerkUiEntryChunk(options);
const ClerkUI = getClerkUiEntryChunk(options);

await clerkJsChunk;

Expand All @@ -59,7 +59,7 @@ async function createClerkInstanceInternal<TUi extends Ui = Ui>(options?: AstroC
routerReplace: createNavigationHandler(window.history.replaceState.bind(window.history)),
...options,
// Pass the clerk-ui constructor promise to clerk.load()
clerkUiCtor,
ClerkUI,
} as unknown as ClerkOptions;

initOptions = clerkOptions;
Expand Down Expand Up @@ -109,23 +109,27 @@ async function getClerkJsEntryChunk<TUi extends Ui = Ui>(options?: AstroClerkCre
}

/**
* Gets the ClerkUI constructor, either from options or by loading the script.
* Returns early if window.__internal_ClerkUiCtor already exists.
* Gets the ClerkUI constructor by loading from CDN with version pinning.
*/
async function getClerkUiEntryChunk<TUi extends Ui = Ui>(
options?: AstroClerkCreateInstanceParams<TUi>,
): Promise<ClerkUiConstructor> {
if (options?.clerkUiCtor) {
return options.clerkUiCtor;
}

await loadClerkUiScript(options);

if (!window.__internal_ClerkUiCtor) {
): Promise<ClerkUIConstructor> {
// Load UI from CDN with version pinning from ui.version
await loadClerkUiScript(
options
? {
...options,
clerkUiVersion: options.ui?.version,
clerkUiUrl: options.ui?.url,
}
: undefined,
);

if (!window.__internal_ClerkUICtor) {
throw new Error('Failed to download latest Clerk UI. Contact support@clerk.com.');
}

return window.__internal_ClerkUiCtor;
return window.__internal_ClerkUICtor;
}

export { createClerkInstance, updateClerkOptions };
9 changes: 7 additions & 2 deletions packages/astro/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import type {
ShowProps,
Without,
} from '@clerk/shared/types';
import type { ClerkUiConstructor } from '@clerk/shared/ui';
import type { ClerkUIConstructor } from '@clerk/shared/ui';
import type { Appearance, Ui } from '@clerk/ui/internal';

type AstroClerkUpdateOptions<TUi extends Ui = Ui> = Pick<ClerkOptions, 'localization'> & {
Expand Down Expand Up @@ -36,6 +36,11 @@ type AstroClerkIntegrationParams<TUi extends Ui = Ui> = Without<
* The URL that `@clerk/ui` should be hot-loaded from.
*/
clerkUiUrl?: string;
/**
* The Clerk UI bundle to use. When provided with a bundled UI via
* `ui.ClerkUI`, it will be used instead of loading from CDN.
*/
ui?: TUi;
};

type AstroClerkCreateInstanceParams<TUi extends Ui = Ui> = AstroClerkIntegrationParams<TUi> & {
Expand All @@ -59,7 +64,7 @@ declare global {
__astro_clerk_component_props: Map<string, Map<string, Record<string, unknown>>>;
__astro_clerk_function_props: Map<string, Map<string, Record<string, unknown>>>;
Clerk: BrowserClerk;
__internal_ClerkUiCtor?: ClerkUiConstructor;
__internal_ClerkUICtor?: ClerkUIConstructor;
}
}

Expand Down
9 changes: 6 additions & 3 deletions packages/chrome-extension/src/react/ClerkProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { Clerk } from '@clerk/clerk-js/no-rhc';
import type { ClerkProviderProps as ClerkReactProviderProps } from '@clerk/react';
import { ClerkProvider as ClerkReactProvider } from '@clerk/react';
import type { Ui } from '@clerk/react/internal';
import { ClerkUi } from '@clerk/ui/entry';
import { ui } from '@clerk/ui';
import React from 'react';

import { createClerkClient } from '../internal/clerk';
Expand Down Expand Up @@ -32,11 +32,14 @@ export function ClerkProvider<TUi extends Ui = Ui>(props: ChromeExtensionClerkPr
return null;
}

// Chrome extension must use bundled UI (no CDN access in extensions)
const bundledUi = { ...ui, __internal_forceBundledUI: true } as typeof ui;

return (
<ClerkReactProvider
{...rest}
{...(rest as any)}
Clerk={clerkInstance}
clerkUiCtor={ClerkUi}
ui={bundledUi}
standardBrowser={!syncHost}
>
{children}
Expand Down
2 changes: 1 addition & 1 deletion packages/clerk-js/sandbox/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ void (async () => {
...(componentControls.clerk.getProps() ?? {}),
signInUrl: '/sign-in',
signUpUrl: '/sign-up',
clerkUiCtor: window.__internal_ClerkUiCtor,
ClerkUI: window.__internal_ClerkUICtor,
});
renderCurrentRoute();
updateVariables();
Expand Down
2 changes: 1 addition & 1 deletion packages/clerk-js/sandbox/template.html
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@
</main>

<!-- This app is in the Team SDK organization. -->
<!-- Load the UI bundle first, so window.__internal_ClerkUiCtor is available -->
<!-- Load the UI bundle first, so window.__internal_ClerkUICtor is available -->
<script
type="text/javascript"
src="<%= uiScriptUrl %>"
Expand Down
4 changes: 2 additions & 2 deletions packages/clerk-js/src/core/clerk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -485,8 +485,8 @@ export class Clerk implements ClerkInterface {
this.#options = this.#initOptions(options);

// Initialize ClerkUi if it was provided
if (this.#options.clerkUiCtor) {
this.#clerkUi = Promise.resolve(this.#options.clerkUiCtor).then(
if (this.#options.ClerkUI) {
this.#clerkUi = Promise.resolve(this.#options.ClerkUI).then(
ClerkUI =>
new ClerkUI(
() => this,
Expand Down
2 changes: 1 addition & 1 deletion packages/clerk-js/src/global.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ interface Window {
__internal_onBeforeSetActive: (intent?: 'sign-out') => Promise<void> | void;
__internal_onAfterSetActive: () => Promise<void> | void;
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
__internal_ClerkUiCtor?: import('@clerk/shared/types').ClerkUiConstructor;
__internal_ClerkUICtor?: import('@clerk/shared/types').ClerkUIConstructor;
/**
* Promise used for coordination between standalone getToken() from @clerk/shared and clerk-js.
* When getToken() is called before Clerk loads, it creates this promise with __resolve/__reject callbacks.
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/__tests__/isomorphicClerk.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ describe('isomorphicClerk', () => {
load: vi.fn().mockResolvedValue(undefined),
loaded: false,
};
(global as any).__internal_ClerkUiCtor = vi.fn();
(global as any).__internal_ClerkUICtor = vi.fn();
});

afterAll(() => {
vi.useRealTimers();
// Clean up globals
delete (global as any).Clerk;
delete (global as any).__internal_ClerkUiCtor;
delete (global as any).__internal_ClerkUICtor;
});

it('instantiates a IsomorphicClerk instance', () => {
Expand Down
1 change: 1 addition & 0 deletions packages/react/src/contexts/ClerkProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { ClerkContextProvider } from './ClerkContextProvider';

function ClerkProviderBase<TUi extends Ui>(props: ClerkProviderProps<TUi>) {
const { initialState, children, ...restIsomorphicClerkOptions } = props;

const isomorphicClerkOptions = restIsomorphicClerkOptions as unknown as IsomorphicClerkOptions;

return (
Expand Down
20 changes: 11 additions & 9 deletions packages/react/src/isomorphicClerk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ import type {
WaitlistResource,
Without,
} from '@clerk/shared/types';
import type { ClerkUiConstructor } from '@clerk/shared/ui';
import type { ClerkUIConstructor } from '@clerk/shared/ui';
import { handleValueOrFn } from '@clerk/shared/utils';

import { errorThrower } from './errors/errorThrower';
Expand Down Expand Up @@ -87,7 +87,7 @@ const SDK_METADATA = {

export interface Global {
Clerk?: HeadlessBrowserClerk | BrowserClerk;
__internal_ClerkUiCtor?: ClerkUiConstructor;
__internal_ClerkUICtor?: ClerkUIConstructor;
}

declare const global: Global;
Expand Down Expand Up @@ -461,12 +461,12 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk {
}

try {
const clerkUiCtor = this.getClerkUiEntryChunk();
const ClerkUI = this.getClerkUiEntryChunk();
const clerk = await this.getClerkJsEntryChunk();

if (!clerk.loaded) {
this.beforeLoad(clerk);
await clerk.load({ ...this.options, clerkUiCtor });
await clerk.load({ ...this.options, ClerkUI });
}
if (clerk.loaded) {
this.replayInterceptedInvocations(clerk);
Expand Down Expand Up @@ -508,11 +508,13 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk {
return global.Clerk;
}

private async getClerkUiEntryChunk(): Promise<ClerkUiConstructor> {
if (this.options.clerkUiCtor) {
return this.options.clerkUiCtor;
private async getClerkUiEntryChunk(): Promise<ClerkUIConstructor> {
// Use bundled UI constructor if forced (e.g., Chrome Extension) and ui.ClerkUI is available
if (this.options.ui?.__internal_forceBundledUI && this.options.ui.ClerkUI) {
return this.options.ui.ClerkUI;
}

// Default: load from CDN, using ui.version if available for version pinning
await loadClerkUiScript({
...this.options,
clerkUiVersion: this.options.ui?.version,
Expand All @@ -523,11 +525,11 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk {
nonce: this.options.nonce,
});

if (!global.__internal_ClerkUiCtor) {
if (!global.__internal_ClerkUICtor) {
throw new Error('Failed to download latest Clerk UI. Contact support@clerk.com.');
}

return global.__internal_ClerkUiCtor;
return global.__internal_ClerkUICtor;
}

public on: Clerk['on'] = (...args) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import type {
SignUpRedirectOptions,
TasksRedirectOptions,
} from '@clerk/shared/types';
import type { ClerkUiConstructor } from '@clerk/shared/ui';
import type { ClerkUIConstructor } from '@clerk/shared/ui';
import type { Appearance, ExtractAppearanceType, Ui } from '@clerk/ui/internal';
import type React from 'react';

Expand All @@ -29,7 +29,7 @@ declare global {
__clerk_publishable_key?: string;
__clerk_proxy_url?: Clerk['proxyUrl'];
__clerk_domain?: Clerk['domain'];
__internal_ClerkUiCtor?: ClerkUiConstructor;
__internal_ClerkUICtor?: ClerkUIConstructor;
}
}

Expand Down
18 changes: 9 additions & 9 deletions packages/shared/src/__tests__/loadClerkJsScript.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ describe('loadClerkUiScript(options)', () => {
(loadScript as Mock).mockResolvedValue(undefined);
document.querySelector = vi.fn().mockReturnValue(null);

(window as any).__internal_ClerkUiCtor = undefined;
(window as any).__internal_ClerkUICtor = undefined;

vi.useFakeTimers();
});
Expand All @@ -297,7 +297,7 @@ describe('loadClerkUiScript(options)', () => {
});

test('returns null immediately when ClerkUI is already loaded', async () => {
(window as any).__internal_ClerkUiCtor = mockClerkUi;
(window as any).__internal_ClerkUICtor = mockClerkUi;

const result = await loadClerkUiScript({ publishableKey: mockPublishableKey });
expect(result).toBeNull();
Expand All @@ -309,7 +309,7 @@ describe('loadClerkUiScript(options)', () => {

// Simulate ClerkUI becoming available after 250ms
setTimeout(() => {
(window as any).__internal_ClerkUiCtor = mockClerkUi;
(window as any).__internal_ClerkUICtor = mockClerkUi;
}, 250);

// Advance timers to allow polling to detect ClerkUI
Expand Down Expand Up @@ -343,7 +343,7 @@ describe('loadClerkUiScript(options)', () => {

expect(rejectedWith).toBeInstanceOf(ClerkRuntimeError);
expect(rejectedWith.message).toContain('Failed to load Clerk UI');
expect((window as any).__internal_ClerkUiCtor).toBeUndefined();
expect((window as any).__internal_ClerkUICtor).toBeUndefined();
});

test('waits for existing script with timeout', async () => {
Expand All @@ -354,7 +354,7 @@ describe('loadClerkUiScript(options)', () => {

// Simulate ClerkUI becoming available after 250ms
setTimeout(() => {
(window as any).__internal_ClerkUiCtor = mockClerkUi;
(window as any).__internal_ClerkUICtor = mockClerkUi;
}, 250);

// Advance timers to allow polling to detect ClerkUI
Expand All @@ -369,23 +369,23 @@ describe('loadClerkUiScript(options)', () => {
const loadPromise = loadClerkUiScript({ publishableKey: mockPublishableKey, scriptLoadTimeout: 1000 });

setTimeout(() => {
(window as any).__internal_ClerkUiCtor = mockClerkUi;
(window as any).__internal_ClerkUICtor = mockClerkUi;
}, 999);

vi.advanceTimersByTime(1000);

const result = await loadPromise;
expect(result).toBeNull();
expect((window as any).__internal_ClerkUiCtor).toBe(mockClerkUi);
expect((window as any).__internal_ClerkUICtor).toBe(mockClerkUi);
});

test('validates ClerkUI is properly loaded', async () => {
(window as any).__internal_ClerkUiCtor = mockClerkUi;
(window as any).__internal_ClerkUICtor = mockClerkUi;

const result = await loadClerkUiScript({ publishableKey: mockPublishableKey });

expect(result).toBeNull();
expect((window as any).__internal_ClerkUiCtor).toBe(mockClerkUi);
expect((window as any).__internal_ClerkUICtor).toBe(mockClerkUi);
});
});

Expand Down
4 changes: 2 additions & 2 deletions packages/shared/src/loadClerkJsScript.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export type LoadClerkUiScriptOptions = {
*
* @returns `true` if window.Clerk exists and has the expected structure with a load method.
*/
function isClerkGlobalProperlyLoaded(prop: 'Clerk' | '__internal_ClerkUiCtor'): boolean {
function isClerkGlobalProperlyLoaded(prop: 'Clerk' | '__internal_ClerkUICtor'): boolean {
if (typeof window === 'undefined' || !(window as any)[prop]) {
return false;
}
Expand All @@ -53,7 +53,7 @@ function isClerkGlobalProperlyLoaded(prop: 'Clerk' | '__internal_ClerkUiCtor'):
return !!val;
}
const isClerkProperlyLoaded = () => isClerkGlobalProperlyLoaded('Clerk');
const isClerkUiProperlyLoaded = () => isClerkGlobalProperlyLoaded('__internal_ClerkUiCtor');
const isClerkUiProperlyLoaded = () => isClerkGlobalProperlyLoaded('__internal_ClerkUICtor');

/**
* Checks if an existing script has a request error using Performance API.
Expand Down
Loading
Loading