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; ThreadButton({ required this.label, this.icon, this.onPressed, this.onDelete, this.lastMessage, this.selected = false, this.muted = 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: 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, ); } }