diff --git a/src/components/badges/BadgeSeverity.tsx b/src/components/badges/BadgeSeverity.tsx index 9643b5872..5d8050021 100644 --- a/src/components/badges/BadgeSeverity.tsx +++ b/src/components/badges/BadgeSeverity.tsx @@ -348,6 +348,8 @@ const BADGE_SEVERITY_ICON = { const BADGE_SEVERITY_BLOCKER_STYLE = { '--badge-severity-color': cssVar('severity-badge-colors-foreground-blocker-text-default'), '--badge-severity-border-color': cssVar('severity-badge-colors-borders-blocker-default'), + '--spinner-color-override': cssVar('severity-badge-colors-foreground-blocker-icon-default'), + '--spinner-track-color-override': cssVar('color-border-bold'), '--badge-severity-background-color': cssVar( 'severity-badge-colors-background-severity-blocker-prefix-default', ), @@ -362,6 +364,8 @@ const BADGE_SEVERITY_BLOCKER_STYLE = { const BADGE_SEVERITY_HIGH_STYLE = { '--badge-severity-color': cssVar('severity-badge-colors-foreground-high-text-default'), '--badge-severity-border-color': cssVar('severity-badge-colors-borders-high-default'), + '--spinner-color-override': cssVar('severity-badge-colors-foreground-high-icon-default'), + '--spinner-track-color-override': cssVar('color-border-bold'), '--badge-severity-background-color': cssVar( 'severity-badge-colors-background-severity-high-prefix-default', ), @@ -376,6 +380,8 @@ const BADGE_SEVERITY_HIGH_STYLE = { const BADGE_SEVERITY_LOW_STYLE = { '--badge-severity-color': cssVar('severity-badge-colors-foreground-low-text-default'), '--badge-severity-border-color': cssVar('severity-badge-colors-borders-low-default'), + '--spinner-color-override': cssVar('severity-badge-colors-foreground-low-icon-default'), + '--spinner-track-color-override': cssVar('color-border-bold'), '--badge-severity-background-color': cssVar( 'severity-badge-colors-background-severity-low-prefix-default', ), @@ -390,6 +396,8 @@ const BADGE_SEVERITY_LOW_STYLE = { const BADGE_SEVERITY_MEDIUM_STYLE = { '--badge-severity-color': cssVar('severity-badge-colors-foreground-medium-text-default'), '--badge-severity-border-color': cssVar('severity-badge-colors-borders-medium-default'), + '--spinner-color-override': cssVar('severity-badge-colors-foreground-medium-icon-default'), + '--spinner-track-color-override': cssVar('color-border-bold'), '--badge-severity-background-color': cssVar( 'severity-badge-colors-background-severity-medium-prefix-default', ), @@ -404,6 +412,8 @@ const BADGE_SEVERITY_MEDIUM_STYLE = { const BADGE_SEVERITY_INFO_STYLE = { '--badge-severity-color': cssVar('severity-badge-colors-foreground-info-text-default'), '--badge-severity-border-color': cssVar('severity-badge-colors-borders-info-default'), + '--spinner-color-override': cssVar('severity-badge-colors-foreground-info-icon-default'), + '--spinner-track-color-override': cssVar('color-border-bold'), '--badge-severity-background-color': cssVar( 'severity-badge-colors-background-severity-info-prefix-default', ), @@ -414,7 +424,7 @@ const BADGE_SEVERITY_INFO_STYLE = { 'severity-badge-colors-background-severity-info-suffix-hover', ), }; -const BADGE_SEVERITY_STYLES = { +export const BADGE_SEVERITY_STYLES = { [BadgeSeverityLevel.Blocker]: BADGE_SEVERITY_BLOCKER_STYLE, [BadgeSeverityLevel.High]: BADGE_SEVERITY_HIGH_STYLE, [BadgeSeverityLevel.Info]: BADGE_SEVERITY_INFO_STYLE, diff --git a/src/components/badges/__tests__/BadgeSeverity-test.tsx b/src/components/badges/__tests__/BadgeSeverity-test.tsx index 7e5a74f85..0fc935cfb 100644 --- a/src/components/badges/__tests__/BadgeSeverity-test.tsx +++ b/src/components/badges/__tests__/BadgeSeverity-test.tsx @@ -21,7 +21,9 @@ import { screen } from '@testing-library/react'; import { render } from '~common/helpers/test-utils'; import { IconBug } from '../../../components/icons'; -import { BadgeSeverity } from '../BadgeSeverity'; +import { BADGE_SEVERITY_STYLES, BadgeSeverity, BadgeSeverityLevel } from '../BadgeSeverity'; + +import { cssVar } from '~utils/design-tokens'; describe('BadgeSeverity', () => { it('renders as expected', () => { @@ -58,4 +60,17 @@ describe('BadgeSeverity', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); expect(screen.getByRole('button', { name: 'click me' })).toBeEnabled(); }); + + it.each([ + [BadgeSeverityLevel.Blocker, cssVar('severity-badge-colors-foreground-blocker-icon-default')], + [BadgeSeverityLevel.High, cssVar('severity-badge-colors-foreground-high-icon-default')], + [BadgeSeverityLevel.Medium, cssVar('severity-badge-colors-foreground-medium-icon-default')], + [BadgeSeverityLevel.Low, cssVar('severity-badge-colors-foreground-low-icon-default')], + [BadgeSeverityLevel.Info, cssVar('severity-badge-colors-foreground-info-icon-default')], + ])('defines %s severity tokens for the loading spinner', (severity, spinnerColor) => { + expect(BADGE_SEVERITY_STYLES[severity]).toMatchObject({ + '--spinner-color-override': spinnerColor, + '--spinner-track-color-override': cssVar('color-border-bold'), + }); + }); }); diff --git a/src/components/buttons/ButtonStyles.tsx b/src/components/buttons/ButtonStyles.tsx index a16759ff4..f9fd11da2 100644 --- a/src/components/buttons/ButtonStyles.tsx +++ b/src/components/buttons/ButtonStyles.tsx @@ -119,6 +119,8 @@ export const BUTTON_VARIETY_STYLES = { '--button-background-active': cssVar('color-surface-active'), '--button-background-focus': cssVar('color-surface-default'), '--button-background-disabled': cssVar('color-surface-disabled'), + '--spinner-color-override': cssVar('color-icon-default'), + '--spinner-track-color-override': cssVar('color-border-bold'), }, [ButtonVariety.DefaultGhost]: { '--button-color': cssVar('color-text-default'), @@ -128,6 +130,8 @@ export const BUTTON_VARIETY_STYLES = { '--button-background-active': cssVar('color-background-ghost-neutral-active'), '--button-background-focus': cssVar('color-background-ghost-neutral-focus'), '--button-background-disabled': cssVar('color-background-ghost-neutral-default'), + '--spinner-color-override': cssVar('color-icon-default'), + '--spinner-track-color-override': cssVar('color-border-bold'), }, [ButtonVariety.Primary]: { '--button-color': cssVar('color-text-on-color'), @@ -138,6 +142,7 @@ export const BUTTON_VARIETY_STYLES = { '--button-background-focus': cssVar('color-background-accent-focus'), '--button-background-disabled': cssVar('color-surface-disabled'), '--spinner-color-override': cssVar('color-icon-on-color'), + '--spinner-track-color-override': cssVar('color-border-bold'), }, [ButtonVariety.PrimaryGhost]: { '--button-color': cssVar('color-text-accent'), @@ -147,6 +152,7 @@ export const BUTTON_VARIETY_STYLES = { '--button-background-active': cssVar('color-background-ghost-accent-active'), '--button-background-focus': cssVar('color-background-ghost-accent-focus'), '--button-background-disabled': cssVar('color-background-ghost-accent-default'), + '--spinner-color-override': cssVar('color-border-accent-default'), }, [ButtonVariety.Danger]: { '--button-color': cssVar('color-text-on-color'), @@ -157,6 +163,7 @@ export const BUTTON_VARIETY_STYLES = { '--button-background-focus': cssVar('color-background-danger-focus'), '--button-background-disabled': cssVar('color-surface-disabled'), '--spinner-color-override': cssVar('color-icon-on-color'), + '--spinner-track-color-override': cssVar('color-background-danger-active'), }, [ButtonVariety.DangerGhost]: { '--button-color': cssVar('color-text-danger'), @@ -166,6 +173,7 @@ export const BUTTON_VARIETY_STYLES = { '--button-background-active': cssVar('color-background-ghost-danger-active'), '--button-background-focus': cssVar('color-background-ghost-danger-focus'), '--button-background-disabled': cssVar('color-background-ghost-danger-default'), + '--spinner-color-override': cssVar('color-icon-danger'), }, [ButtonVariety.DangerOutline]: { '--button-color': cssVar('color-text-danger'), @@ -175,6 +183,7 @@ export const BUTTON_VARIETY_STYLES = { '--button-background-active': cssVar('color-surface-active'), '--button-background-focus': cssVar('color-surface-default'), '--button-background-disabled': cssVar('color-surface-disabled'), + '--spinner-color-override': cssVar('color-icon-danger'), }, }; diff --git a/src/components/buttons/__tests__/Button-test.tsx b/src/components/buttons/__tests__/Button-test.tsx index 04f3f8b50..3fa11ea78 100644 --- a/src/components/buttons/__tests__/Button-test.tsx +++ b/src/components/buttons/__tests__/Button-test.tsx @@ -21,6 +21,10 @@ import { screen } from '@testing-library/react'; import { PointerEventsCheckLevel } from '@testing-library/user-event'; import { render, renderWithMemoryRouter } from '~common/helpers/test-utils'; import { Button } from '../Button'; +import { BUTTON_VARIETY_STYLES } from '../ButtonStyles'; +import { ButtonVariety } from '../ButtonTypes'; + +import { cssVar } from '~utils/design-tokens'; describe('Button', () => { it('should call onClick function when clicked', async () => { @@ -60,6 +64,29 @@ describe('Button', () => { expect(screen.getByRole('button', { name: 'Loading... Click me' })).toBeEnabled(); }); + it.each([ + [ButtonVariety.Default, cssVar('color-icon-default'), cssVar('color-border-bold')], + [ButtonVariety.DefaultGhost, cssVar('color-icon-default'), cssVar('color-border-bold')], + [ButtonVariety.Primary, cssVar('color-icon-on-color'), cssVar('color-border-bold')], + [ButtonVariety.Danger, cssVar('color-icon-on-color'), cssVar('color-background-danger-active')], + ])('defines %s spinner arc and track sentiment tokens', (variety, spinnerColor, trackColor) => { + expect(BUTTON_VARIETY_STYLES[variety]).toMatchObject({ + '--spinner-color-override': spinnerColor, + '--spinner-track-color-override': trackColor, + }); + }); + + it.each([ + [ButtonVariety.PrimaryGhost, cssVar('color-border-accent-default')], + [ButtonVariety.DangerGhost, cssVar('color-icon-danger')], + [ButtonVariety.DangerOutline, cssVar('color-icon-danger')], + ])('defines %s spinner arc sentiment token', (variety, spinnerColor) => { + expect(BUTTON_VARIETY_STYLES[variety]).toMatchObject({ + '--spinner-color-override': spinnerColor, + }); + expect(BUTTON_VARIETY_STYLES[variety]).not.toHaveProperty('--spinner-track-color-override'); + }); + it('should render with prefix and suffix', () => { render(