import type { HTMLAttributes, ReactNode } from 'react'
import type { AvatarV2Props } from '../AvatarV2/avatarV2.types'
import type { ButtonV2Props } from '../ButtonV2/buttonV2.types'
export enum TimelineNodeStatus {
SUCCESS = 'success',
WARNING = 'warning',
ERROR = 'error',
NEUTRAL = 'neutral',
}
export type TimelineUser = {
name: string
avatar?: AvatarV2Props['src']
fallbackText?: string
}
export type LinePositionOptions = {
indicatorHeightPx: number
indicatorTopPx: number
labelCircleHeightPx: number
}
export type LineLayout = {
top: number
height: number
}
export type TimelineRootProps = {
children: ReactNode
className?: string
} & Omit, 'children' | 'className' | 'style'>
export type TimelineLabelProps = {
text: string
}
export type TimelineHeaderProps = HTMLAttributes & {
title: string
status?: TimelineNodeStatus
timestamp?: string
children?: ReactNode
leftSlot?: ReactNode
rightSlot?: ReactNode
}
export type TimelineSubstepProps = HTMLAttributes & {
title: string
isNestedUnderHeader?: boolean
showIndicator?: boolean
description?: string
timestamp?: string
rightSlot?: ReactNode
datetimeLeftSlot?: ReactNode
datetimeRightSlot?: ReactNode
}
export type TimelineNodeProps = HTMLAttributes & {
title?: string
leftSlot?: ReactNode
headerRightSlot?: ReactNode
datetime?: string
datetimeLeftSlot?: ReactNode
datetimeRightSlot?: ReactNode
text?: string
maxLines?: number
user?: TimelineUser
avatarProps?: Partial>
time?: string
status?: TimelineNodeStatus
children?: ReactNode
}
export type TimelineShowMoreProps = {
count: number
label?: string
onShowMore?: () => void
buttonProps?: Partial>
}
export type TimelineCommentData = {
id: string
text: string
user: { name: string; avatar?: string; fallbackText?: string }
timestamp: string
}
export type TimelineSubstepData = {
id: string
title: string
description?: string
timestamp: string
}
export type TimelineHeaderData = {
id: string
title: string
status?: string
timestamp: string
substeps?: TimelineSubstepData[]
comments?: TimelineCommentData[]
}
export type TimelineLabelData = {
id: string
date: string
headers?: TimelineHeaderData[]
comments?: TimelineCommentData[]
}
export type TimelineItemData = {
label?: TimelineLabelData
header?: TimelineHeaderData
comment?: TimelineCommentData
}