diff --git a/src-themeable/__tests__/theming.test.ts b/src-themeable/__tests__/theming.test.ts new file mode 100644 index 0000000000..f27b21a834 --- /dev/null +++ b/src-themeable/__tests__/theming.test.ts @@ -0,0 +1,47 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +const preset = { + secondary: [{ id: 'one-theme' }], +}; + +jest.mock('@cloudscape-design/theming-build', () => ({ + buildThemedComponents: jest.fn().mockResolvedValue(undefined), +})); + +jest.mock('../internal/template/internal/generated/theming/index.cjs', () => ({ + preset, +})); + +import { buildThemedComponents as themingCoreBuild } from '@cloudscape-design/theming-build'; + +import { buildThemedComponents } from '../theming'; + +describe('buildThemedComponents', () => { + test('passes secondary themes by default', async () => { + await buildThemedComponents({ theme: {} as any, outputDir: '/tmp/output', baseThemeId: 'visual-refresh' }); + + expect(themingCoreBuild).toHaveBeenCalledWith( + expect.objectContaining({ + preset, + }) + ); + }); + + test('omits secondary themes when includeSecondaryThemes is false', async () => { + await buildThemedComponents({ + theme: {} as any, + outputDir: '/tmp/output', + baseThemeId: 'visual-refresh', + includeSecondaryThemes: false, + }); + + expect(themingCoreBuild).toHaveBeenCalledWith( + expect.objectContaining({ + preset: { + ...preset, + secondary: [], + }, + }) + ); + }); +}); diff --git a/src-themeable/theming.ts b/src-themeable/theming.ts index 70f4f667ec..a09b4dd900 100644 --- a/src-themeable/theming.ts +++ b/src-themeable/theming.ts @@ -16,12 +16,21 @@ export interface BuildThemedComponentsParams { theme: Theme; outputDir: string; baseThemeId?: string; + includeSecondaryThemes?: boolean; } -export function buildThemedComponents({ theme, outputDir, baseThemeId }: BuildThemedComponentsParams): Promise { +export function buildThemedComponents({ + theme, + outputDir, + baseThemeId, + includeSecondaryThemes = true, +}: BuildThemedComponentsParams): Promise { return themingCoreBuild({ override: theme, - preset, + preset: { + ...preset, + secondary: includeSecondaryThemes ? preset.secondary : [], + }, baseThemeId, componentsOutputDir: join(outputDir, 'components'), designTokensOutputDir: join(outputDir, 'design-tokens'),