diff --git a/build-tools/utils/themes.js b/build-tools/utils/themes.js index 5066477bbf..9e97d1a6a6 100644 --- a/build-tools/utils/themes.js +++ b/build-tools/utils/themes.js @@ -13,7 +13,7 @@ const themes = [ designTokensPackageJson: { name: '@cloudscape-design/design-tokens' }, outputPath: path.join(workspace.targetPath, 'components'), primaryThemePath: './classic/index.js', - secondaryThemePaths: ['./visual-refresh-secondary/index.js'], + secondaryThemePaths: ['./visual-refresh-secondary/index.js', './one-theme-secondary/index.js'], }, ]; diff --git a/pages/app/app-context.tsx b/pages/app/app-context.tsx index b0b2d48bd8..5ccb49794b 100644 --- a/pages/app/app-context.tsx +++ b/pages/app/app-context.tsx @@ -14,6 +14,7 @@ interface AppUrlParams { visualRefresh: boolean; motionDisabled: boolean; appLayoutWidget: boolean; + oneTheme: boolean; mode?: Mode; } @@ -34,6 +35,7 @@ const appContextDefaults: AppContextType = { visualRefresh: THEME === 'default', motionDisabled: false, appLayoutWidget: false, + oneTheme: false, }, setMode: () => {}, setUrlParams: () => {}, diff --git a/pages/app/components/theme-switcher.tsx b/pages/app/components/theme-switcher.tsx index d6afde3416..7f8c2034fb 100644 --- a/pages/app/components/theme-switcher.tsx +++ b/pages/app/components/theme-switcher.tsx @@ -9,31 +9,46 @@ import SpaceBetween from '~components/space-between'; import AppContext from '../app-context'; +type ThemeOption = 'classic' | 'visual-refresh' | 'one-theme'; + export default function ThemeSwitcher() { const { mode, urlParams, setUrlParams, setMode } = useContext(AppContext); - const vrSwitchProps: React.InputHTMLAttributes = { - id: 'visual-refresh-toggle', - type: 'checkbox', + const currentTheme: ThemeOption = urlParams.oneTheme + ? 'one-theme' + : urlParams.visualRefresh + ? 'visual-refresh' + : 'classic'; + + const setTheme = (next: ThemeOption) => { + setUrlParams({ + visualRefresh: next === 'visual-refresh' || !!ALWAYS_VISUAL_REFRESH, + oneTheme: next === 'one-theme', + }); + window.location.reload(); }; - if (ALWAYS_VISUAL_REFRESH) { - vrSwitchProps.checked = true; - vrSwitchProps.readOnly = true; - } else { - vrSwitchProps.checked = urlParams.visualRefresh; - vrSwitchProps.onChange = event => { - setUrlParams({ visualRefresh: event.target.checked }); - window.location.reload(); - }; - } + const themeOptions: Array<{ value: ThemeOption; label: string; id: string; disabled?: boolean }> = [ + { value: 'classic', label: 'Classic', id: 'classic-toggle', disabled: !!ALWAYS_VISUAL_REFRESH }, + { value: 'visual-refresh', label: 'Visual refresh', id: 'visual-refresh-toggle' }, + { value: 'one-theme', label: 'One theme', id: 'one-theme-toggle' }, + ]; return ( - + {themeOptions.map(option => ( + + ))}