import "package:shadcn_flutter/shadcn_flutter.dart"; import '../../utils/format_relative_time.dart'; class ThreadButton extends StatelessWidget { final String label; final IconData? icon; final VoidCallback? onPressed; final VoidCallback? onDelete; final DateTime? lastMessage; final bool selected; final bool muted; final bool isRunning; ThreadButton({ required this.label, this.icon, this.onPressed, this.onDelete, this.lastMessage, this.selected = false, this.muted = false, this.isRunning = false, }); @override Widget build(BuildContext context) { ButtonStyle style = selected ? ButtonStyle.secondary() : ButtonStyle.ghost(); ColorScheme colorScheme = Theme.of(context).colorScheme; final button = SizedBox( width: double.infinity, child: Button( style: style.copyWith( padding: (context, state, edgeInsets) { return EdgeInsets.only( top: 8, left: 12, bottom: 8, right: 12 ); } ), disableFocusOutline: true, onPressed: onPressed ?? () {}, enabled: onPressed != null, leading: Icon( icon, color: icon == null ? Colors.transparent : (muted ? colorScheme.mutedForeground : null), ).iconSmall, trailingGap: 32, trailing: isRunning ? SizedBox( width: 12, height: 12, child: CircularProgressIndicator( strokeWidth: 1.5, color: colorScheme.primary, ), ) : lastMessage != null ? Text(formatRelativeTime(lastMessage!)).muted.small.light : null, child: Text( label, style: TextStyle( color: (muted ? colorScheme.mutedForeground : null) ), maxLines: 1, overflow: TextOverflow.ellipsis, ).small.light, ), ); if (onDelete == null) return button; return ContextMenu( items: [ MenuButton( onPressed: (_) => onDelete!(), child: const Text("Delete"), ), ], child: button, ); } }