Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 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
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
21 changes: 21 additions & 0 deletions .changeset/shiny-owls-dance.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
'@clerk/ui': minor
'@clerk/react': minor
'@clerk/vue': minor
'@clerk/astro': minor
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the Astro integration support the ui prop already or is this planned? I think getClerkUIEntryChunk for Astro doesn't check for ui.ClerkUI like React and Vue do

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch — just pushed a fix in 2803a6e. Added ui.ClerkUI support to Astro's getClerkUIEntryChunk and the ui prop to AstroClerkIntegrationParams, matching what React and Vue already do.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed! Thanks

'@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>
```

**Migration note**: If you were previously using the internal `clerkUiCtor` prop, migrate to the new `ui` prop by importing `ui` from `@clerk/ui`.
4 changes: 2 additions & 2 deletions integration/templates/express-vite/src/client/main.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { Clerk } from '@clerk/clerk-js';
import { ClerkUi } from '@clerk/ui/entry';
import { ClerkUI } from '@clerk/ui/entry';

const publishableKey = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY;

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

await clerk.load({
clerkUICtor: ClerkUi,
ui: { ClerkUI },
});

if (clerk.isSignedIn) {
Expand Down
64 changes: 64 additions & 0 deletions integration/tests/next-build.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { expect, test } from '@playwright/test';

import type { Application } from '../models/application';
import { appConfigs } from '../presets';
import { linkPackage } from '../presets/utils';

type RenderingModeTestCase = {
name: string;
Expand All @@ -23,6 +24,69 @@ function getIndicator(buildOutput: string, type: 'Static' | 'Dynamic') {
.split(' ')[0];
}

test.describe('next build - bundled UI with react-server condition @nextjs', () => {
test.describe.configure({ mode: 'parallel' });
let app: Application;

test.beforeAll(async () => {
test.setTimeout(90_000); // Wait for app to be ready
app = await appConfigs.next.appRouter
.clone()
.addDependency('@clerk/ui', linkPackage('ui'))
.addFile(
'src/app/layout.tsx',
() => `import './globals.css';
import { Inter } from 'next/font/google';
import { ClerkProvider } from '@clerk/nextjs';
import { ui } from '@clerk/ui';

const inter = Inter({ subsets: ['latin'] });

export const metadata = {
title: 'Create Next App',
description: 'Generated by create next app',
};

export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<ClerkProvider ui={ui}>
<html lang='en'>
<body className={inter.className}>{children}</body>
</html>
</ClerkProvider>
);
}
`,
)
.commit();
await app.setup();
await app.withEnv(appConfigs.envs.withEmailCodes);
await app.build();
});

test.afterAll(async () => {
await app.teardown();
});

test('When ui prop is used in server component layout, builds successfully', () => {
// The layout.tsx imports { ui } from "@clerk/ui" and passes ui={ui} to ClerkProvider
// This tests the react-server conditional export which provides a server-safe marker
// The build should succeed without errors about client-only modules in server components
expect(app.buildOutput).not.toMatch(/error/i);
expect(app.buildOutput).toContain('Generating static pages');
});

test('Static pages remain static with bundled UI', () => {
// Get the static indicator from the build output
const staticIndicator = getIndicator(app.buildOutput, 'Static');

// /_not-found should still be static even with bundled UI
const notFoundPageLine = app.buildOutput.split('\n').find(msg => msg.includes('/_not-found'));

expect(notFoundPageLine).toContain(staticIndicator);
});
});

test.describe('next build - provider as client component @nextjs', () => {
test.describe.configure({ mode: 'parallel' });
let app: Application;
Expand Down
3 changes: 2 additions & 1 deletion packages/astro/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@
"lint": "eslint src env.d.ts",
"lint:attw": "attw --pack . --profile esm-only --ignore-rules internal-resolution-error",
"lint:publint": "pnpm copy:components && publint",
"publish:local": "pnpm yalc push --replace --sig"
"publish:local": "pnpm yalc push --replace --sig",
"test": "vitest run"
},
"dependencies": {
"@clerk/backend": "workspace:^",
Expand Down
1 change: 1 addition & 0 deletions packages/astro/src/env.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ interface InternalEnv {
readonly PUBLIC_CLERK_JS_URL?: string;
readonly PUBLIC_CLERK_JS_VERSION?: string;
readonly PUBLIC_CLERK_UI_URL?: string;
readonly PUBLIC_CLERK_UI_VERSION?: string;
readonly PUBLIC_CLERK_PREFETCH_UI?: string;
readonly CLERK_API_KEY?: string;
readonly CLERK_API_URL?: string;
Expand Down
3 changes: 3 additions & 0 deletions packages/astro/src/integration/create-integration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ function createIntegration<Params extends HotloadAstroClerkIntegrationParams>()
// These are not provided when the "bundled" integration is used
const clerkJSUrl = (params as any)?.clerkJSUrl as string | undefined;
const clerkJSVersion = (params as any)?.clerkJSVersion as string | undefined;
const clerkUIVersion = (params as any)?.clerkUIVersion as string | undefined;
const prefetchUI = (params as any)?.prefetchUI as boolean | undefined;

return {
Expand Down Expand Up @@ -57,6 +58,7 @@ function createIntegration<Params extends HotloadAstroClerkIntegrationParams>()
...buildEnvVarFromOption(domain, 'PUBLIC_CLERK_DOMAIN'),
...buildEnvVarFromOption(clerkJSUrl, 'PUBLIC_CLERK_JS_URL'),
...buildEnvVarFromOption(clerkJSVersion, 'PUBLIC_CLERK_JS_VERSION'),
...buildEnvVarFromOption(clerkUIVersion, 'PUBLIC_CLERK_UI_VERSION'),
...buildEnvVarFromOption(prefetchUI === false ? 'false' : undefined, 'PUBLIC_CLERK_PREFETCH_UI'),
},

Expand Down Expand Up @@ -165,6 +167,7 @@ function createClerkEnvSchema() {
PUBLIC_CLERK_DOMAIN: envField.string({ context: 'client', access: 'public', optional: true, url: true }),
PUBLIC_CLERK_JS_URL: envField.string({ context: 'client', access: 'public', optional: true, url: true }),
PUBLIC_CLERK_JS_VERSION: envField.string({ context: 'client', access: 'public', optional: true }),
PUBLIC_CLERK_UI_VERSION: envField.string({ context: 'client', access: 'public', optional: true }),
PUBLIC_CLERK_PREFETCH_UI: envField.string({ context: 'client', access: 'public', optional: true }),
PUBLIC_CLERK_UI_URL: envField.string({ context: 'client', access: 'public', optional: true, url: true }),
PUBLIC_CLERK_TELEMETRY_DISABLED: envField.boolean({ context: 'client', access: 'public', optional: true }),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';

const mockLoadClerkUIScript = vi.fn();
const mockLoadClerkJSScript = vi.fn();

vi.mock('@clerk/shared/loadClerkJsScript', () => ({
loadClerkJSScript: (...args: unknown[]) => mockLoadClerkJSScript(...args),
loadClerkUIScript: (...args: unknown[]) => mockLoadClerkUIScript(...args),
setClerkJSLoadingErrorPackageName: vi.fn(),
}));

// Mock nanostores
vi.mock('../../stores/external', () => ({
$clerkStore: { notify: vi.fn() },
}));

vi.mock('../../stores/internal', () => ({
$clerk: { get: vi.fn(), set: vi.fn() },
$csrState: { setKey: vi.fn() },
}));

vi.mock('../invoke-clerk-astro-js-functions', () => ({
invokeClerkAstroJSFunctions: vi.fn(),
}));

vi.mock('../mount-clerk-astro-js-components', () => ({
mountAllClerkAstroJSComponents: vi.fn(),
}));

const mockClerkUICtor = vi.fn();

describe('getClerkUIEntryChunk', () => {
beforeEach(() => {
vi.clearAllMocks();
vi.resetModules();
(window as any).__internal_ClerkUICtor = undefined;
(window as any).Clerk = undefined;
});

afterEach(() => {
(window as any).__internal_ClerkUICtor = undefined;
(window as any).Clerk = undefined;
});

it('preserves clerkUIUrl from options', async () => {
mockLoadClerkUIScript.mockImplementation(async () => {
(window as any).__internal_ClerkUICtor = mockClerkUICtor;
return null;
});

mockLoadClerkJSScript.mockImplementation(async () => {
(window as any).Clerk = {
load: vi.fn().mockResolvedValue(undefined),
addListener: vi.fn(),
};
return null;
});

// Dynamically import to get fresh module with mocks
const { createClerkInstance } = await import('../create-clerk-instance');

// Call createClerkInstance with clerkUIUrl
await createClerkInstance({
publishableKey: 'pk_test_xxx',
clerkUIUrl: 'https://custom.selfhosted.example.com/ui.js',
});

expect(mockLoadClerkUIScript).toHaveBeenCalled();
const loadClerkUIScriptCall = mockLoadClerkUIScript.mock.calls[0]?.[0] as Record<string, unknown>;
expect(loadClerkUIScriptCall?.clerkUIUrl).toBe('https://custom.selfhosted.example.com/ui.js');
});

it('does not set clerkUIUrl when not provided', async () => {
mockLoadClerkUIScript.mockImplementation(async () => {
(window as any).__internal_ClerkUICtor = mockClerkUICtor;
return null;
});

mockLoadClerkJSScript.mockImplementation(async () => {
(window as any).Clerk = {
load: vi.fn().mockResolvedValue(undefined),
addListener: vi.fn(),
};
return null;
});

const { createClerkInstance } = await import('../create-clerk-instance');

await createClerkInstance({
publishableKey: 'pk_test_xxx',
});

expect(mockLoadClerkUIScript).toHaveBeenCalled();
const loadClerkUIScriptCall = mockLoadClerkUIScript.mock.calls[0]?.[0] as Record<string, unknown>;
expect(loadClerkUIScriptCall?.clerkUIUrl).toBeUndefined();
});
});
14 changes: 7 additions & 7 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,
ui: { ...options?.ui, ClerkUI },
} as unknown as ClerkOptions;

initOptions = clerkOptions;
Expand Down Expand Up @@ -115,10 +115,10 @@ async function getClerkJsEntryChunk<TUi extends Ui = Ui>(options?: AstroClerkCre
*/
async function getClerkUIEntryChunk<TUi extends Ui = Ui>(
options?: AstroClerkCreateInstanceParams<TUi>,
): Promise<ClerkUiConstructor | undefined> {
// Honor explicit clerkUICtor even when prefetchUI=false
if (options?.clerkUICtor) {
return options.clerkUICtor;
): Promise<ClerkUIConstructor | undefined> {
// Support bundled UI via ui.ClerkUI prop
if (options?.ui?.ClerkUI) {
return options.ui.ClerkUI;
}

if (options?.prefetchUI === false) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ function createInjectionScriptRunner(creator: CreateClerkInstanceInternalFn) {
clientSafeVars = JSON.parse(clientSafeVarsContainer.textContent || '{}');
}

await creator(mergeEnvVarsWithParams({ ...astroClerkOptions, ...clientSafeVars }));
await creator({
...mergeEnvVarsWithParams({ ...astroClerkOptions, ...clientSafeVars }),
});
}

return runner;
Expand Down
6 changes: 4 additions & 2 deletions packages/astro/src/internal/merge-env-vars-with-params.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ const mergeEnvVarsWithParams = (params?: AstroClerkIntegrationParams & { publish
telemetry: paramTelemetry,
clerkJSUrl: paramClerkJSUrl,
clerkJSVersion: paramClerkJSVersion,
clerkUIUrl: paramClerkUiUrl,
clerkUIUrl: paramClerkUIUrl,
clerkUIVersion: paramClerkUIVersion,
prefetchUI: paramPrefetchUI,
...rest
} = params || {};
Expand All @@ -50,7 +51,8 @@ const mergeEnvVarsWithParams = (params?: AstroClerkIntegrationParams & { publish
publishableKey: paramPublishableKey || import.meta.env.PUBLIC_CLERK_PUBLISHABLE_KEY || '',
clerkJSUrl: paramClerkJSUrl || import.meta.env.PUBLIC_CLERK_JS_URL,
clerkJSVersion: paramClerkJSVersion || import.meta.env.PUBLIC_CLERK_JS_VERSION,
clerkUIUrl: paramClerkUiUrl || import.meta.env.PUBLIC_CLERK_UI_URL,
clerkUIUrl: paramClerkUIUrl || import.meta.env.PUBLIC_CLERK_UI_URL,
clerkUIVersion: paramClerkUIVersion || import.meta.env.PUBLIC_CLERK_UI_VERSION,
prefetchUI: mergePrefetchUIConfig(paramPrefetchUI),
telemetry: paramTelemetry || {
disabled: isTruthy(import.meta.env.PUBLIC_CLERK_TELEMETRY_DISABLED),
Expand Down
9 changes: 5 additions & 4 deletions packages/astro/src/server/build-clerk-hotload-script.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,9 @@ function buildClerkHotloadScript(locals: APIContext['locals']) {
return clerkJsScript + '\n';
}

const clerkUiScriptSrc = clerkUIScriptUrl({
const clerkUIScriptSrc = clerkUIScriptUrl({
clerkUIUrl: env.clerkUIUrl,
clerkUIVersion: env.clerkUIVersion,
domain,
proxyUrl,
publishableKey,
Expand All @@ -47,14 +48,14 @@ function buildClerkHotloadScript(locals: APIContext['locals']) {
// registration (which happens when React code runs @clerk/ui/register).
// When loadClerkUIScript() later adds a <script> tag, the browser uses the
// cached resource and executes it without re-downloading.
const clerkUiPreload = `
const clerkUIPreload = `
<link rel="preload"
href="${clerkUiScriptSrc}"
href="${clerkUIScriptSrc}"
as="script"
crossOrigin="anonymous"
/>`;

return clerkJsScript + clerkUiPreload + '\n';
return clerkJsScript + clerkUIPreload + '\n';
}

export { buildClerkHotloadScript };
1 change: 1 addition & 0 deletions packages/astro/src/server/get-safe-env.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ function getSafeEnv(context: ContextOrLocals) {
clerkJsUrl: getContextEnvVar('PUBLIC_CLERK_JS_URL', context),
clerkJsVersion: getContextEnvVar('PUBLIC_CLERK_JS_VERSION', context),
clerkUIUrl: getContextEnvVar('PUBLIC_CLERK_UI_URL', context),
clerkUIVersion: getContextEnvVar('PUBLIC_CLERK_UI_VERSION', context),
prefetchUI: getContextEnvVar('PUBLIC_CLERK_PREFETCH_UI', context) === 'false' ? false : undefined,
apiVersion: getContextEnvVar('CLERK_API_VERSION', context),
apiUrl: getContextEnvVar('CLERK_API_URL', context),
Expand Down
8 changes: 6 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 @@ -35,6 +35,10 @@ type AstroClerkIntegrationParams<TUi extends Ui = Ui> = Without<
* The URL that `@clerk/ui` should be hot-loaded from.
*/
clerkUIUrl?: string;
/**
* The npm version for `@clerk/ui`.
*/
clerkUIVersion?: string;
/**
* Controls prefetching of the `@clerk/ui` script.
* - `false` - Skip prefetching the UI (for custom UIs using Control Components)
Expand Down Expand Up @@ -64,7 +68,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
Loading
Loading