Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -158,5 +158,31 @@ describe('useVisualRefresh', () => {
initThemes();
expect(console.warn).toHaveBeenCalledWith(expect.stringMatching(/Multiple theme flags are enabled/));
});

test('skips visual-refresh class when skipVisualRefresh is true', () => {
window[awsuiVisualRefreshFlag] = () => true;
initThemes({ skipVisualRefresh: true });
expect(document.body).not.toHaveClass('awsui-visual-refresh');
});

test('adds one-theme class when skipVisualRefresh is true and oneTheme flag is set', () => {
(window as any)[awsuiGlobalFlagsSymbol] = { oneTheme: true };
initThemes({ skipVisualRefresh: true });
expect(document.body).toHaveClass('awsui-one-theme');
});

test('adds one-theme class and skips visual-refresh when both flags set and skipVisualRefresh is true', () => {
window[awsuiVisualRefreshFlag] = () => true;
(window as any)[awsuiGlobalFlagsSymbol] = { oneTheme: true };
initThemes({ skipVisualRefresh: true });
expect(document.body).toHaveClass('awsui-one-theme');
expect(document.body).not.toHaveClass('awsui-visual-refresh');
});

test('does not skip visual-refresh class when skipVisualRefresh is false', () => {
window[awsuiVisualRefreshFlag] = () => true;
initThemes({ skipVisualRefresh: false });
expect(document.body).toHaveClass('awsui-visual-refresh');
});
});
});
18 changes: 16 additions & 2 deletions src/internal/visual-mode/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,22 @@ function applyThemeClassName(theme: Theme) {
}
}

export function initThemes() {
const flaggedThemes = themePrecedence.filter(theme => themeDefinitions[theme].isFlagActive());
export interface InitThemesOptions {
/**
* When true, skip applying the visual-refresh body class.
* Use this for packages where visual refresh styles are always active (ALWAYS_VISUAL_REFRESH mode),
* so the body class is unnecessary — only one-theme class will be applied.
*/
skipVisualRefresh?: boolean;
}

export function initThemes(options?: InitThemesOptions) {
const flaggedThemes = themePrecedence.filter(theme => {
if (options?.skipVisualRefresh && theme === Theme.VisualRefresh) {
return false;
}
return themeDefinitions[theme].isFlagActive();
});
if (isDevelopment && flaggedThemes.length > 1) {
warnOnce(
'Theme',
Expand Down
Loading