import { useState, type ReactNode } from 'react'
import { CollapsibleCard } from '../basic/collapsible-card'
import { Button } from '../basic/button'
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from '../basic/select'
import { GlobalLine, WarningLine, Forbid2Line } from '../basic/icons-inline'
const ICON_CLASS = 'w-[var(--font-size-sm)] h-[var(--font-size-sm)] shrink-0'
export type BrowserActionStatus = 'normal' | 'failed' | 'skipped'
export interface BrowserActionPartProps {
description?: string
content?: string
status?: BrowserActionStatus
onRun?: () => void
onSkip?: () => void
onViewDetail?: () => void
onAskEveryTimeChange?: (value: string) => void
className?: string
/** 供 Select 下拉浮层继承布局风格(如 dense),不传则从 document 读取 */
dataStyle?: string
/** 供 Select 下拉浮层继承颜色主题,不传则从 document 读取 */
dataTheme?: string
normalIcon?: ReactNode
failedIcon?: ReactNode
skippedIcon?: ReactNode
}
const defaultNormalIcon =
const defaultFailedIcon =
const defaultSkippedIcon =
function BrowserFooter({
askValue,
onAskChange,
onSkip,
onRun,
dataStyle,
dataTheme,
}: {
askValue: string
onAskChange: (value: string) => void
onSkip: () => void
onRun: () => void
dataStyle?: string
dataTheme?: string
}) {
return (
)
}
export function BrowserActionPart({
description,
content,
status = 'normal',
onRun,
onSkip,
onViewDetail,
onAskEveryTimeChange,
className,
dataStyle,
dataTheme,
normalIcon,
failedIcon,
skippedIcon,
}: BrowserActionPartProps) {
const [askValue, setAskValue] = useState('Ask every time')
const handleAskChange = (value: string) => {
setAskValue(value)
onAskEveryTimeChange?.(value)
}
const headerIcon =
status === 'failed'
? (failedIcon ?? defaultFailedIcon)
: status === 'skipped'
? (skippedIcon ?? defaultSkippedIcon)
: (normalIcon ?? defaultNormalIcon)
const headerTitle =
status === 'failed' ? (
Browser Failed
) : status === 'skipped' ? (
Browser Skipped
) : (
Browser
{description != null && (
{description}
)}
)
const headerRight =
status === 'failed' ? (
) : undefined
const footer =
status === 'normal' ? (
onSkip?.()}
onRun={() => onRun?.()}
dataStyle={dataStyle}
dataTheme={dataTheme}
/>
) : undefined
return (
{content != null && content !== '' && (
{content}
)}
)
}
BrowserActionPart.displayName = 'BrowserActionPart'
export const BrowserActionCard = BrowserActionPart
export type BrowserActionCardProps = BrowserActionPartProps