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