'use client' type MaterialDetailAction = | 'favorite' | 'share' | 'edit' | 'delete' | null export type MaterialDetailCapabilities = { canFavorite: boolean canEdit: boolean canDelete: boolean } type MaterialDetailHeaderProps = { title: string materialType: string materialId: string isFavorited: boolean capabilities: MaterialDetailCapabilities busyAction?: MaterialDetailAction onBack: () => void onFavorite: () => void onShare: () => void onEdit: () => void onDelete: () => void } type ActionButtonProps = { label: string title?: string danger?: boolean pressed?: boolean disabled?: boolean onClick: () => void children: React.ReactNode } function ActionButton({ label, title = label, danger = false, pressed, disabled = false, onClick, children, }: ActionButtonProps) { return ( {children} {label} ) } export default function MaterialDetailHeader({ title, materialType, materialId, isFavorited, capabilities, busyAction = null, onBack, onFavorite, onShare, onEdit, onDelete, }: MaterialDetailHeaderProps) { const controlsDisabled = busyAction !== null return ( {title} {materialType} · ID {materialId} {capabilities.canFavorite && ( )} {capabilities.canEdit && ( )} {capabilities.canDelete && ( )} ) }
{materialType} · ID {materialId}