import 'package:flutter/material.dart'; import '../tema/pluriwave_tokens.dart'; import '../tema/pluriwave_theme.dart'; enum PluriIconGlyph { home, search, favorites, player, settings } enum PluriIconVariant { outline, filled, activeGlow } class PluriIcon extends StatelessWidget { const PluriIcon({ super.key, required this.glyph, this.variant = PluriIconVariant.outline, this.size = 24, this.semanticLabel, }); final PluriIconGlyph glyph; final PluriIconVariant variant; final double size; final String? semanticLabel; @override Widget build(BuildContext context) { final tokens = context.pluriTokens; final icon = Icon( _resolveData(), size: size, color: _resolveColor(context, tokens), ); final child = variant == PluriIconVariant.activeGlow ? Container( width: size + 12, height: size + 12, decoration: BoxDecoration( shape: BoxShape.circle, boxShadow: [ BoxShadow( color: tokens.glowColor, blurRadius: 14, spreadRadius: 1, ), ], ), alignment: Alignment.center, child: icon, ) : icon; return Semantics( label: semanticLabel ?? _fallbackLabel(glyph), image: true, child: ExcludeSemantics(child: child), ); } Color _resolveColor(BuildContext context, PluriWaveTokens tokens) { if (variant == PluriIconVariant.activeGlow) return tokens.electricMagenta; if (variant == PluriIconVariant.filled) return Theme.of(context).colorScheme.onSurface; return Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.78); } IconData _resolveData() { return switch ((glyph, variant)) { (PluriIconGlyph.home, PluriIconVariant.outline) => Icons.home_outlined, (PluriIconGlyph.home, _) => Icons.home_rounded, (PluriIconGlyph.search, PluriIconVariant.outline) => Icons.search_outlined, (PluriIconGlyph.search, _) => Icons.search_rounded, (PluriIconGlyph.favorites, PluriIconVariant.outline) => Icons.favorite_border_rounded, (PluriIconGlyph.favorites, _) => Icons.favorite_rounded, (PluriIconGlyph.player, PluriIconVariant.outline) => Icons.play_circle_outline_rounded, (PluriIconGlyph.player, _) => Icons.play_circle_rounded, (PluriIconGlyph.settings, PluriIconVariant.outline) => Icons.settings_outlined, (PluriIconGlyph.settings, _) => Icons.settings_rounded, }; } String _fallbackLabel(PluriIconGlyph glyph) { return switch (glyph) { PluriIconGlyph.home => 'Inicio', PluriIconGlyph.search => 'Buscar', PluriIconGlyph.favorites => 'Favoritos', PluriIconGlyph.player => 'Reproductor', PluriIconGlyph.settings => 'Ajustes', }; } }