import { Button, Card, CardGroup } from '@douyinfe/semi-ui'; import type { ReactNode } from 'react'; export type WorkspaceMetricRailItem = { label: string; value: ReactNode; note: string; className?: string; }; export type WorkspaceQueueMetricRailItem = { label: string; value: ReactNode; note?: ReactNode; tone?: 'neutral' | 'primary' | 'success' | 'warning' | 'danger'; emphasis?: 'primary' | 'secondary'; active?: boolean; ariaLabel?: string; onClick?: () => void; }; type WorkspaceSummaryMetricRailProps = { ariaLabel: string; primary: WorkspaceMetricRailItem; secondary: WorkspaceMetricRailItem[]; className: string; cardClassName: string; secondaryClassName: string; primaryValueClassName?: string; }; type WorkspaceQueueMetricRailProps = { variant: 'queue'; ariaLabel: string; className: string; items: WorkspaceQueueMetricRailItem[]; context?: ReactNode; }; export function WorkspaceMetricRail(props: WorkspaceSummaryMetricRailProps | WorkspaceQueueMetricRailProps) { if ('items' in props) { const hasContext = props.context != null; return
{props.items.map((item, index) => { const toneClassName = `is-${item.tone ?? 'neutral'}`; const emphasisClassName = `is-${item.emphasis ?? (index < 2 ? 'primary' : 'secondary')}`; const classes = [ toneClassName, emphasisClassName !== toneClassName ? emphasisClassName : '', item.onClick ? 'is-action' : '', item.active ? 'is-active' : '' ].filter(Boolean).join(' '); const content = <> {item.label} {item.value} {item.note ? {item.note} : null} ; return {item.onClick ? : content} ; })}
{hasContext ?
{props.context}
: null}
; } const { ariaLabel, primary, secondary, className, cardClassName, secondaryClassName, primaryValueClassName } = props; const cardClass = (item: WorkspaceMetricRailItem, primaryCard = false) => [ cardClassName, primaryCard ? 'is-primary' : '', item.className ?? '' ].filter(Boolean).join(' '); return {primary.label} {primary.value} {primary.note} {secondary.map((item) => {item.label} {item.value} {item.note} )} ; }