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
12 changes: 12 additions & 0 deletions i18n/keys.json
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,18 @@
"defaultMessage": "Clear select field",
"description": "Screen reader-only text to indicate that the select field can be cleared with a button"
},
"severity.CRITICAL": {
"defaultMessage": "Critical",
"description": "Label for critical severity level"
},
"severity.MAJOR": {
"defaultMessage": "Major",
"description": "Label for major severity level"
},
"severity.MINOR": {
"defaultMessage": "Minor",
"description": "Label for minor severity level"
},
"severity_impact.BLOCKER": {
"defaultMessage": "Blocker",
"description": "Label for blocker severity level"
Expand Down
176 changes: 111 additions & 65 deletions src/components/badges/BadgeSeverity.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ export enum BadgeSeverityLevel {
Medium = 'medium',
Low = 'low',
Info = 'info',
// Standard mode
Critical = 'critical',
Major = 'major',
Minor = 'minor',
}

export enum BadgeSeverityVariety {
Expand Down Expand Up @@ -153,6 +157,22 @@ export const BadgeSeverity = forwardRef<HTMLButtonElement, BadgeSeverityProps>((
defaultMessage: 'Medium',
description: 'Label for medium severity level',
}),
// Standard mode labels
[BadgeSeverityLevel.Critical]: formatMessage({
id: 'severity.CRITICAL',
defaultMessage: 'Critical',
description: 'Label for critical severity level',
}),
[BadgeSeverityLevel.Major]: formatMessage({
id: 'severity.MAJOR',
defaultMessage: 'Major',
description: 'Label for major severity level',
}),
[BadgeSeverityLevel.Minor]: formatMessage({
id: 'severity.MINOR',
defaultMessage: 'Minor',
description: 'Label for minor severity level',
}),
};
const severityLabel = BADGE_SEVERITY_LABEL[severity];

Expand Down Expand Up @@ -310,72 +330,98 @@ const BADGE_SEVERITY_ICON = {
SeverityIcon: IconSeverityMedium,
severityIconColor: 'echoes-severity-badge-colors-foreground-medium-icon-default',
},
} as const;

const BADGE_SEVERITY_STYLES = {
[BadgeSeverityLevel.Blocker]: {
'--badge-severity-color': cssVar('severity-badge-colors-foreground-blocker-text-default'),
'--badge-severity-border-color': cssVar('severity-badge-colors-borders-blocker-default'),
'--badge-severity-background-color': cssVar(
'severity-badge-colors-background-severity-blocker-prefix-default',
),
'--badge-severity-icon-background-color': cssVar(
'severity-badge-colors-background-severity-blocker-suffix-default',
),
'--badge-severity-icon-background-color-hover': cssVar(
'severity-badge-colors-background-severity-blocker-suffix-hover',
),
},
[BadgeSeverityLevel.High]: {
'--badge-severity-color': cssVar('severity-badge-colors-foreground-high-text-default'),
'--badge-severity-border-color': cssVar('severity-badge-colors-borders-high-default'),
'--badge-severity-background-color': cssVar(
'severity-badge-colors-background-severity-high-prefix-default',
),
'--badge-severity-icon-background-color': cssVar(
'severity-badge-colors-background-severity-high-suffix-default',
),
'--badge-severity-icon-background-color-hover': cssVar(
'severity-badge-colors-background-severity-high-suffix-hover',
),
},
[BadgeSeverityLevel.Info]: {
'--badge-severity-color': cssVar('severity-badge-colors-foreground-info-text-default'),
'--badge-severity-border-color': cssVar('severity-badge-colors-borders-info-default'),
'--badge-severity-background-color': cssVar(
'severity-badge-colors-background-severity-info-prefix-default',
),
'--badge-severity-icon-background-color': cssVar(
'severity-badge-colors-background-severity-info-suffix-default',
),
'--badge-severity-icon-background-color-hover': cssVar(
'severity-badge-colors-background-severity-info-suffix-hover',
),
// Standard mode icons
[BadgeSeverityLevel.Critical]: {
SeverityIcon: IconSeverityHigh,
severityIconColor: 'echoes-severity-badge-colors-foreground-high-icon-default',
},
[BadgeSeverityLevel.Low]: {
'--badge-severity-color': cssVar('severity-badge-colors-foreground-low-text-default'),
'--badge-severity-border-color': cssVar('severity-badge-colors-borders-low-default'),
'--badge-severity-background-color': cssVar(
'severity-badge-colors-background-severity-low-prefix-default',
),
'--badge-severity-icon-background-color': cssVar(
'severity-badge-colors-background-severity-low-suffix-default',
),
'--badge-severity-icon-background-color-hover': cssVar(
'severity-badge-colors-background-severity-low-suffix-hover',
),
[BadgeSeverityLevel.Major]: {
SeverityIcon: IconSeverityMedium,
severityIconColor: 'echoes-severity-badge-colors-foreground-medium-icon-default',
},
[BadgeSeverityLevel.Medium]: {
'--badge-severity-color': cssVar('severity-badge-colors-foreground-medium-text-default'),
'--badge-severity-border-color': cssVar('severity-badge-colors-borders-medium-default'),
'--badge-severity-background-color': cssVar(
'severity-badge-colors-background-severity-medium-prefix-default',
),
'--badge-severity-icon-background-color': cssVar(
'severity-badge-colors-background-severity-medium-suffix-default',
),
'--badge-severity-icon-background-color-hover': cssVar(
'severity-badge-colors-background-severity-medium-suffix-hover',
),
[BadgeSeverityLevel.Minor]: {
SeverityIcon: IconSeverityLow,
severityIconColor: 'echoes-severity-badge-colors-foreground-low-icon-default',
},
} as const;

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'),
'--badge-severity-background-color': cssVar(
'severity-badge-colors-background-severity-blocker-prefix-default',
),
'--badge-severity-icon-background-color': cssVar(
'severity-badge-colors-background-severity-blocker-suffix-default',
),
'--badge-severity-icon-background-color-hover': cssVar(
'severity-badge-colors-background-severity-blocker-suffix-hover',
),
};

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'),
'--badge-severity-background-color': cssVar(
'severity-badge-colors-background-severity-high-prefix-default',
),
'--badge-severity-icon-background-color': cssVar(
'severity-badge-colors-background-severity-high-suffix-default',
),
'--badge-severity-icon-background-color-hover': cssVar(
'severity-badge-colors-background-severity-high-suffix-hover',
),
};

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'),
'--badge-severity-background-color': cssVar(
'severity-badge-colors-background-severity-low-prefix-default',
),
'--badge-severity-icon-background-color': cssVar(
'severity-badge-colors-background-severity-low-suffix-default',
),
'--badge-severity-icon-background-color-hover': cssVar(
'severity-badge-colors-background-severity-low-suffix-hover',
),
};

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'),
'--badge-severity-background-color': cssVar(
'severity-badge-colors-background-severity-medium-prefix-default',
),
'--badge-severity-icon-background-color': cssVar(
'severity-badge-colors-background-severity-medium-suffix-default',
),
'--badge-severity-icon-background-color-hover': cssVar(
'severity-badge-colors-background-severity-medium-suffix-hover',
),
};

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'),
'--badge-severity-background-color': cssVar(
'severity-badge-colors-background-severity-info-prefix-default',
),
'--badge-severity-icon-background-color': cssVar(
'severity-badge-colors-background-severity-info-suffix-default',
),
'--badge-severity-icon-background-color-hover': cssVar(
'severity-badge-colors-background-severity-info-suffix-hover',
),
};
const BADGE_SEVERITY_STYLES = {
[BadgeSeverityLevel.Blocker]: BADGE_SEVERITY_BLOCKER_STYLE,
[BadgeSeverityLevel.High]: BADGE_SEVERITY_HIGH_STYLE,
[BadgeSeverityLevel.Info]: BADGE_SEVERITY_INFO_STYLE,
[BadgeSeverityLevel.Low]: BADGE_SEVERITY_LOW_STYLE,
[BadgeSeverityLevel.Medium]: BADGE_SEVERITY_MEDIUM_STYLE,
// Standard mode styles
[BadgeSeverityLevel.Critical]: BADGE_SEVERITY_HIGH_STYLE,
[BadgeSeverityLevel.Minor]: BADGE_SEVERITY_LOW_STYLE,
[BadgeSeverityLevel.Major]: BADGE_SEVERITY_MEDIUM_STYLE,
};
6 changes: 5 additions & 1 deletion stories/badges/BadgeSeverity-stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
*/

import type { Meta, StoryObj } from '@storybook/react-vite';
import { BadgeSeverity, BadgeSeverityLevel, DropdownMenu } from '../../src';
import { BadgeSeverity, BadgeSeverityLevel, DropdownMenu, Label } from '../../src';
import { BadgeSeverityVariety } from '../../src/components/badges/BadgeSeverity';
import { iconsComponentsArgType } from '../helpers/arg-types';
import { basicWrapperDecorator } from '../helpers/BasicWrapper';
Expand Down Expand Up @@ -89,6 +89,10 @@ export const AllSeverities: Story = {
<BadgeSeverity ariaLabel="Medium severity" quality="Maintainability" severity="medium" />
<BadgeSeverity ariaLabel="Low severity" quality="Security" severity="low" />
<BadgeSeverity ariaLabel="Info severity" quality="Reliability" severity="info" />
<Label style={{ marginTop: 16 }}>Standard Experience</Label>
<BadgeSeverity ariaLabel="Critical severity" quality="Reliability" severity="critical" />
<BadgeSeverity ariaLabel="Major severity" quality="Reliability" severity="major" />
<BadgeSeverity ariaLabel="Minor severity" quality="Reliability" severity="minor" />
</div>
),
};