Skip to content

feat(themes): Add shadcn theme #6322

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Changes from 1 commit
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
3a789b4
feat(themes): Add shadcn theme
alexcarpenter Jul 15, 2025
a754749
draft changeset
alexcarpenter Jul 15, 2025
ffdbaf6
add variables
alexcarpenter Jul 16, 2025
f372013
remove borderRadius
alexcarpenter Jul 16, 2025
c4d3803
Merge branch 'main' into alexcarpenter/user-2373-expose-shadcn-theme-…
alexcarpenter Jul 16, 2025
bedb070
use colorMutedForeground for nav links
alexcarpenter Jul 16, 2025
6080472
update vars
alexcarpenter Jul 16, 2025
9fbc4e7
updates
alexcarpenter Jul 16, 2025
365d489
rename cssLayerName to components
alexcarpenter Jul 16, 2025
e511713
hide button overlay
alexcarpenter Jul 16, 2025
46cba11
Update shadcn.ts
alexcarpenter Jul 17, 2025
781b867
Merge branch 'main' into alexcarpenter/user-2373-expose-shadcn-theme-…
alexcarpenter Jul 17, 2025
ed4f6e6
remove CSS layer name
alexcarpenter Jul 17, 2025
f6cc7d0
feat(clerk-js): Add `cssLayerName` option to `experimental_createThem…
alexcarpenter Jul 18, 2025
80671d6
remove log
alexcarpenter Jul 18, 2025
de43a5d
add more test cases
alexcarpenter Jul 18, 2025
6b43103
Revert "remove log"
alexcarpenter Jul 18, 2025
21e4e6d
remove log
alexcarpenter Jul 18, 2025
72eea01
revert NavButton changes
alexcarpenter Jul 18, 2025
3071fb6
add changeset
alexcarpenter Jul 21, 2025
dc32dbd
Merge branch 'main' into alexcarpenter/user-2373-expose-shadcn-theme-…
alexcarpenter Jul 21, 2025
6b94eef
Add font weight variables and refine button selector
alexcarpenter Jul 21, 2025
e7275b5
Merge branch 'main' into alexcarpenter/user-2373-expose-shadcn-theme-…
alexcarpenter Jul 22, 2025
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
Prev Previous commit
Next Next commit
add more test cases
  • Loading branch information
alexcarpenter committed Jul 18, 2025
commit de43a5df361ac18711c38f011b4a36a2617ff5d6
88 changes: 88 additions & 0 deletions packages/clerk-js/src/utils/__tests__/appearance.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -170,4 +170,92 @@ describe('processCssLayerNameExtraction', () => {
expect((result.baseTheme as BaseTheme & { cssLayerName?: string }).cssLayerName).toBeUndefined();
}
});

it('handles empty baseTheme array', () => {
const appearance: Appearance = {
baseTheme: [],
};

const result = processCssLayerNameExtraction(appearance);

expect(result?.cssLayerName).toBeUndefined();
expect(result?.baseTheme).toEqual([]);
expect(Array.isArray(result?.baseTheme)).toBe(true);
});

it('uses first valid cssLayerName from mixed array when appearance.cssLayerName is absent', () => {
const appearance: Appearance = {
baseTheme: [
{
__type: 'prebuilt_appearance' as const,
// No cssLayerName in first theme
},
{
__type: 'prebuilt_appearance' as const,
cssLayerName: 'second-theme-layer',
},
{
__type: 'prebuilt_appearance' as const,
cssLayerName: 'third-theme-layer',
},
],
};

const result = processCssLayerNameExtraction(appearance);

expect(result?.cssLayerName).toBe('second-theme-layer');
expect(Array.isArray(result?.baseTheme)).toBe(true);
if (Array.isArray(result?.baseTheme)) {
expect(result.baseTheme).toHaveLength(3);
// Check that cssLayerName was removed from all themes
result.baseTheme.forEach(theme => {
expect((theme as BaseTheme & { cssLayerName?: string }).cssLayerName).toBeUndefined();
});
}
});

it('preserves appearance.cssLayerName over baseTheme array cssLayerName', () => {
const appearance: Appearance = {
cssLayerName: 'appearance-level-layer',
baseTheme: [
{
__type: 'prebuilt_appearance' as const,
cssLayerName: 'theme-layer-1',
},
{
__type: 'prebuilt_appearance' as const,
cssLayerName: 'theme-layer-2',
},
],
};

const result = processCssLayerNameExtraction(appearance);

expect(result?.cssLayerName).toBe('appearance-level-layer');
expect(Array.isArray(result?.baseTheme)).toBe(true);
if (Array.isArray(result?.baseTheme)) {
expect(result.baseTheme).toHaveLength(2);
// Check that cssLayerName was removed from all themes
result.baseTheme.forEach(theme => {
expect((theme as BaseTheme & { cssLayerName?: string }).cssLayerName).toBeUndefined();
});
}
});

it('returns single theme unchanged when it has no cssLayerName', () => {
const appearance: Appearance = {
baseTheme: {
__type: 'prebuilt_appearance' as const,
// No cssLayerName property
},
};

const result = processCssLayerNameExtraction(appearance);

expect(result?.cssLayerName).toBeUndefined();
expect(result?.baseTheme).toEqual({
__type: 'prebuilt_appearance',
});
expect(Array.isArray(result?.baseTheme)).toBe(false);
});
});
Loading
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy