155 lines
5.3 KiB
Dart
155 lines
5.3 KiB
Dart
import 'dart:ui' show lerpDouble;
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
@immutable
|
|
class PluriWaveTokens extends ThemeExtension<PluriWaveTokens> {
|
|
const PluriWaveTokens({
|
|
required this.deepViolet,
|
|
required this.electricMagenta,
|
|
required this.warmCoral,
|
|
required this.glassSurface,
|
|
required this.glassBorder,
|
|
required this.glowColor,
|
|
required this.listSurface,
|
|
required this.liveGreen,
|
|
required this.offlineAccent,
|
|
required this.radiusSm,
|
|
required this.radiusMd,
|
|
required this.radiusLg,
|
|
required this.spacingXs,
|
|
required this.spacingSm,
|
|
required this.spacingMd,
|
|
required this.spacingLg,
|
|
});
|
|
|
|
final Color deepViolet;
|
|
final Color electricMagenta;
|
|
final Color warmCoral;
|
|
final Color glassSurface;
|
|
final Color glassBorder;
|
|
final Color glowColor;
|
|
|
|
/// Redesign additions (Design ADR-1). Row/card surface for the flat lists
|
|
/// introduced by the redesign (Favoritos, Buscar results). De-literalised
|
|
/// from `pluriwave_theme.dart`'s previous `surfaceContainerLow` literal —
|
|
/// same value, now named — so rendered output stays byte-identical.
|
|
final Color listSurface;
|
|
|
|
/// "EN DIRECTO" indicator and the Escuchar hero's waveform colour.
|
|
/// De-literalised from `pluriwave_theme.dart`'s previous `secondary`
|
|
/// literal — same value, now named.
|
|
final Color liveGreen;
|
|
|
|
/// Offline/reconnect banner accent (WU16). No prior literal to promote —
|
|
/// a genuinely new colour.
|
|
final Color offlineAccent;
|
|
|
|
final double radiusSm;
|
|
final double radiusMd;
|
|
final double radiusLg;
|
|
|
|
final double spacingXs;
|
|
final double spacingSm;
|
|
final double spacingMd;
|
|
final double spacingLg;
|
|
|
|
/// Brand accent (S5-R8). Same hue as [electricMagenta]; exposed as a
|
|
/// static const so const contexts (e.g. AudioServiceConfig) can use it.
|
|
static const Color brand = Color(0xFF21D4D9);
|
|
|
|
/// Secondary palette used by gradients and decorative orbs (S5-R1).
|
|
/// These are token DEFINITIONS — the only place raw literals may live.
|
|
static const Color brightCyan = Color(0xFF20E6FF);
|
|
static const Color auroraTeal = Color(0xFF0E4A4F);
|
|
static const Color skyBlue = Color(0xFF60A5FA);
|
|
|
|
static const dark = PluriWaveTokens(
|
|
deepViolet: Color(0xFF07121A),
|
|
electricMagenta: brand,
|
|
warmCoral: Color(0xFFF4B860),
|
|
glassSurface: Color(0x1FFFFFFF),
|
|
glassBorder: Color(0x33FFFFFF),
|
|
glowColor: Color(0x6621D4D9),
|
|
listSurface: Color(0xFF102532),
|
|
liveGreen: Color(0xFF7EE4C2),
|
|
offlineAccent: Color(0xFF94A3B8),
|
|
radiusSm: 14,
|
|
radiusMd: 22,
|
|
radiusLg: 30,
|
|
spacingXs: 4,
|
|
spacingSm: 8,
|
|
spacingMd: 16,
|
|
spacingLg: 24,
|
|
);
|
|
|
|
@override
|
|
PluriWaveTokens copyWith({
|
|
Color? deepViolet,
|
|
Color? electricMagenta,
|
|
Color? warmCoral,
|
|
Color? glassSurface,
|
|
Color? glassBorder,
|
|
Color? glowColor,
|
|
Color? listSurface,
|
|
Color? liveGreen,
|
|
Color? offlineAccent,
|
|
double? radiusSm,
|
|
double? radiusMd,
|
|
double? radiusLg,
|
|
double? spacingXs,
|
|
double? spacingSm,
|
|
double? spacingMd,
|
|
double? spacingLg,
|
|
}) {
|
|
return PluriWaveTokens(
|
|
deepViolet: deepViolet ?? this.deepViolet,
|
|
electricMagenta: electricMagenta ?? this.electricMagenta,
|
|
warmCoral: warmCoral ?? this.warmCoral,
|
|
glassSurface: glassSurface ?? this.glassSurface,
|
|
glassBorder: glassBorder ?? this.glassBorder,
|
|
glowColor: glowColor ?? this.glowColor,
|
|
listSurface: listSurface ?? this.listSurface,
|
|
liveGreen: liveGreen ?? this.liveGreen,
|
|
offlineAccent: offlineAccent ?? this.offlineAccent,
|
|
radiusSm: radiusSm ?? this.radiusSm,
|
|
radiusMd: radiusMd ?? this.radiusMd,
|
|
radiusLg: radiusLg ?? this.radiusLg,
|
|
spacingXs: spacingXs ?? this.spacingXs,
|
|
spacingSm: spacingSm ?? this.spacingSm,
|
|
spacingMd: spacingMd ?? this.spacingMd,
|
|
spacingLg: spacingLg ?? this.spacingLg,
|
|
);
|
|
}
|
|
|
|
@override
|
|
PluriWaveTokens lerp(
|
|
covariant ThemeExtension<PluriWaveTokens>? other,
|
|
double t,
|
|
) {
|
|
if (other is! PluriWaveTokens) return this;
|
|
return PluriWaveTokens(
|
|
deepViolet: Color.lerp(deepViolet, other.deepViolet, t) ?? deepViolet,
|
|
electricMagenta:
|
|
Color.lerp(electricMagenta, other.electricMagenta, t) ??
|
|
electricMagenta,
|
|
warmCoral: Color.lerp(warmCoral, other.warmCoral, t) ?? warmCoral,
|
|
glassSurface:
|
|
Color.lerp(glassSurface, other.glassSurface, t) ?? glassSurface,
|
|
glassBorder: Color.lerp(glassBorder, other.glassBorder, t) ?? glassBorder,
|
|
glowColor: Color.lerp(glowColor, other.glowColor, t) ?? glowColor,
|
|
listSurface: Color.lerp(listSurface, other.listSurface, t) ?? listSurface,
|
|
liveGreen: Color.lerp(liveGreen, other.liveGreen, t) ?? liveGreen,
|
|
offlineAccent:
|
|
Color.lerp(offlineAccent, other.offlineAccent, t) ?? offlineAccent,
|
|
radiusSm: lerpDouble(radiusSm, other.radiusSm, t) ?? radiusSm,
|
|
radiusMd: lerpDouble(radiusMd, other.radiusMd, t) ?? radiusMd,
|
|
radiusLg: lerpDouble(radiusLg, other.radiusLg, t) ?? radiusLg,
|
|
spacingXs: lerpDouble(spacingXs, other.spacingXs, t) ?? spacingXs,
|
|
spacingSm: lerpDouble(spacingSm, other.spacingSm, t) ?? spacingSm,
|
|
spacingMd: lerpDouble(spacingMd, other.spacingMd, t) ?? spacingMd,
|
|
spacingLg: lerpDouble(spacingLg, other.spacingLg, t) ?? spacingLg,
|
|
);
|
|
}
|
|
}
|