// Her liste kartının altına dizilen ultra-kompakt kare aksiyon butonları. // Hem Material ikonu hem de emoji (Text) destekler: `emoji` doluysa emoji, // boşsa `icon` çizilir. import 'package:flutter/material.dart'; import '../theme/app_theme.dart'; import 'mini_pill.dart'; class MiniToolAction { final String? emoji; final IconData? icon; final String tooltip; final VoidCallback? onTap; final Color? tint; final bool enabled; const MiniToolAction({ this.emoji, this.icon, required this.tooltip, this.onTap, this.tint, this.enabled = true, }) : assert(emoji != null || icon != null, 'emoji ya da icon gerekli'); } class MiniToolbar extends StatelessWidget { final List actions; final double size; final double gap; const MiniToolbar({super.key, required this.actions, this.size = 12, this.gap = 2}); @override Widget build(BuildContext context) { return Row( mainAxisSize: MainAxisSize.min, children: [ for (var i = 0; i < actions.length; i++) ...[ if (i > 0) SizedBox(width: gap), _MiniSquareButton(action: actions[i], size: size), ], ], ); } } class _MiniSquareButton extends StatelessWidget { final MiniToolAction action; final double size; const _MiniSquareButton({required this.action, required this.size}); @override Widget build(BuildContext context) { final enabled = action.enabled && action.onTap != null; final fg = enabled ? (action.tint ?? AppColors.textSecondary) : AppColors.textMuted.withValues(alpha: 0.4); return Tooltip( message: action.tooltip, waitDuration: const Duration(milliseconds: 400), child: InkWell( onTap: enabled ? action.onTap : null, borderRadius: BorderRadius.circular(4), child: Container( width: size, height: size, alignment: Alignment.center, decoration: BoxDecoration( color: AppColors.surfaceAlt, borderRadius: BorderRadius.circular(4), border: Border.all( color: enabled ? AppColors.border : AppColors.border.withValues(alpha: 0.5), ), ), child: action.emoji != null ? Text( action.emoji!, style: TextStyle( fontSize: size * 0.62, height: 1.0, color: enabled ? null : fg, // Windows'ta emoji renkli çizilsin. fontFamilyFallback: kEmojiFontFallback, ), ) : Icon(action.icon, size: size * 0.62, color: fg), ), ), ); } }