diff --git a/src/tedi/components/tags/status-badge/status-badge.stories.tsx b/src/tedi/components/tags/status-badge/status-badge.stories.tsx index b764bf02..65d905da 100644 --- a/src/tedi/components/tags/status-badge/status-badge.stories.tsx +++ b/src/tedi/components/tags/status-badge/status-badge.stories.tsx @@ -1,9 +1,11 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react'; import { Fragment } from 'react/jsx-runtime'; +import { Text } from '../../base/typography/text/text'; import { Col, Row } from '../../layout/grid'; import { VerticalSpacing } from '../../layout/vertical-spacing'; -import { StatusBadge, StatusBadgeColor, StatusBadgeProps, StatusBadgeStatus } from './status-badge'; +import { Tooltip } from '../../overlays/tooltip'; +import { StatusBadge, StatusBadgeColor, StatusBadgeProps, StatusBadgeSize, StatusBadgeStatus } from './status-badge'; /** * Figma ↗
@@ -31,9 +33,14 @@ export default meta; type Story = StoryObj; +interface TemplateMultipleProps extends StatusBadgeProps { + array: Type[]; +} + const colors: StatusBadgeColor[] = ['neutral', 'brand', 'accent', 'warning', 'danger', 'success']; const variants: StatusBadgeProps['variant'][] = ['filled', 'filled-bordered', 'bordered']; const statuses: StatusBadgeStatus[] = ['inactive', 'success', 'warning', 'danger']; +const sizeArray: StatusBadgeSize[] = ['default', 'large']; const colorToIconMap: Record = { neutral: 'edit', brand: 'send', @@ -43,6 +50,7 @@ const colorToIconMap: Record = { warning: 'warning', transparent: 'edit', }; + const statusToIconMap: Record = { inactive: 'edit', success: 'send', @@ -139,6 +147,35 @@ const TemplateStatusGrid: StoryFn = (args) => { ); }; +const TemplateColumn: StoryFn = (args) => { + const { array } = args; + + return ( +
+ {array.map((value, key) => ( + + + {value ? value.charAt(0).toUpperCase() + value.slice(1) : ''} + + + + + + + ))} +
+ ); +}; + +export const Sizes: StoryObj = { + render: TemplateColumn, + args: { + array: sizeArray, + children: 'Draft', + color: 'neutral', + }, +}; + export const Colors: Story = { render: TemplateAllCombos, }; @@ -150,22 +187,15 @@ export const StatusIndicator: Story = { }, }; -const TemplateLarge: StoryFn = (args) => ( - - - - - - - - -); - -export const Large: Story = { - render: TemplateLarge, - args: { - color: 'neutral', - size: 'large', - children: 'Draft', - }, +export const WithTooltip: StoryFn = () => { + return ( + + + + + + Icon-only badges should always have a tooltip to provide context and ensure accessibility. + + + ); }; diff --git a/src/tedi/components/tags/status-badge/status-badge.tsx b/src/tedi/components/tags/status-badge/status-badge.tsx index a2ee589c..27e809c5 100644 --- a/src/tedi/components/tags/status-badge/status-badge.tsx +++ b/src/tedi/components/tags/status-badge/status-badge.tsx @@ -1,4 +1,5 @@ import cn from 'classnames'; +import { forwardRef } from 'react'; import { BreakpointSupport, useBreakpointProps } from '../../../helpers'; import { Icon } from '../../base/icon/icon'; @@ -60,7 +61,7 @@ export interface StatusBadgeProps extends BreakpointSupport { +export const StatusBadge = forwardRef((props, ref) => { const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); const { color = 'neutral', @@ -93,6 +94,7 @@ export const StatusBadge = (props: StatusBadgeProps): JSX.Element => { return ( { {children && {children}} ); -}; +}); + +StatusBadge.displayName = 'StatusBadge';