fix(mobile): complete outline → onSurfaceVariant sweep for text/icons (#439)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Wes
2026-04-30 22:13:03 +00:00
committed by GitHub
co-authored by Claude Opus 4.6
parent d6766c71af
commit 923f7b14fb
14 changed files with 64 additions and 54 deletions
+1 -1
View File
@@ -103,7 +103,7 @@ class _OfflineScreen extends ConsumerWidget {
onPressed: () => ref.read(authProvider.notifier).signOut(),
child: Text(
'Remove workspace and re-pair',
style: TextStyle(color: context.colors.outline),
style: TextStyle(color: context.colors.onSurfaceVariant),
),
),
],
@@ -304,7 +304,7 @@ class _FeedItemTile extends ConsumerWidget {
Text(
_relativeTime(item.createdAt),
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
],
@@ -407,7 +407,11 @@ class _EmptyState extends StatelessWidget {
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Icon(LucideIcons.bell, size: Grid.xl, color: context.colors.outline),
Icon(
LucideIcons.bell,
size: Grid.xl,
color: context.colors.onSurfaceVariant,
),
const SizedBox(height: Grid.xs),
Text(
'No activity yet',
@@ -419,7 +423,7 @@ class _EmptyState extends StatelessWidget {
Text(
'Mentions, replies, and reactions will show up here.',
style: context.textTheme.bodySmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
textAlign: TextAlign.center,
),
@@ -451,7 +455,7 @@ class _EmptyFilterState extends StatelessWidget {
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Icon(icon, size: Grid.lg, color: context.colors.outline),
Icon(icon, size: Grid.lg, color: context.colors.onSurfaceVariant),
const SizedBox(height: Grid.xxs),
Text(
message,
@@ -179,7 +179,7 @@ class _EmptyState extends StatelessWidget {
child: Text(
'Not connected',
style: context.textTheme.bodySmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
);
@@ -195,14 +195,14 @@ class _EmptyState extends StatelessWidget {
height: 24,
child: CircularProgressIndicator(
strokeWidth: 2,
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
const SizedBox(height: Grid.xxs),
Text(
'Waiting for activity\u2026',
style: context.textTheme.bodySmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
],
@@ -219,7 +219,7 @@ class _ConnectionBadge extends StatelessWidget {
@override
Widget build(BuildContext context) {
final (color, label) = switch (connection) {
ObserverConnectionState.idle => (context.colors.outline, 'Idle'),
ObserverConnectionState.idle => (context.colors.onSurfaceVariant, 'Idle'),
ObserverConnectionState.connecting => (
context.appColors.warning,
'Connecting',
@@ -40,7 +40,7 @@ class _MessageItemWidget extends StatelessWidget {
final isAssistant = item.role == 'assistant';
final badgeColor = isAssistant
? context.colors.primary
: context.colors.outline;
: context.colors.onSurfaceVariant;
final badgeLabel = isAssistant ? 'Assistant' : 'User';
return Padding(
@@ -122,14 +122,14 @@ class _ThoughtItemWidget extends HookWidget {
Icon(
LucideIcons.brain,
size: 14,
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
const SizedBox(width: Grid.half),
Expanded(
child: Text(
item.title,
style: context.textTheme.labelMedium?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
fontWeight: FontWeight.w600,
),
overflow: TextOverflow.ellipsis,
@@ -140,7 +140,7 @@ class _ThoughtItemWidget extends HookWidget {
? LucideIcons.chevronUp
: LucideIcons.chevronDown,
size: 14,
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
],
),
@@ -178,7 +178,7 @@ class _LifecycleItemWidget extends StatelessWidget {
child: Text(
'${item.title}${item.text.isNotEmpty ? ' \u2014 ${item.text}' : ''}',
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
textAlign: TextAlign.center,
),
@@ -226,14 +226,14 @@ class _MetadataItemWidget extends HookWidget {
Icon(
LucideIcons.fileText,
size: 14,
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
const SizedBox(width: Grid.half),
Expanded(
child: Text(
'${item.title} (${item.sections.length} sections)',
style: context.textTheme.labelMedium?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
fontWeight: FontWeight.w600,
),
overflow: TextOverflow.ellipsis,
@@ -244,7 +244,7 @@ class _MetadataItemWidget extends HookWidget {
? LucideIcons.chevronUp
: LucideIcons.chevronDown,
size: 14,
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
],
),
@@ -265,7 +265,7 @@ class _MetadataItemWidget extends HookWidget {
? '${section.body.substring(0, 500)}\u2026'
: section.body,
style: context.textTheme.bodySmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
],
@@ -371,7 +371,7 @@ class _ToolItemWidget extends HookWidget {
Text(
'Arguments',
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
const SizedBox(width: Grid.half),
@@ -380,7 +380,7 @@ class _ToolItemWidget extends HookWidget {
? LucideIcons.chevronUp
: LucideIcons.chevronDown,
size: 12,
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
],
),
@@ -402,7 +402,7 @@ class _ToolItemWidget extends HookWidget {
style: context.textTheme.labelSmall?.copyWith(
color: item.isError
? context.colors.error
: context.colors.outline,
: context.colors.onSurfaceVariant,
),
),
const SizedBox(width: Grid.half),
@@ -413,7 +413,7 @@ class _ToolItemWidget extends HookWidget {
size: 12,
color: item.isError
? context.colors.error
: context.colors.outline,
: context.colors.onSurfaceVariant,
),
],
),
@@ -451,7 +451,7 @@ class _ToolItemWidget extends HookWidget {
return (context.appColors.success, 'Done', LucideIcons.circleCheck);
}
if (status == ToolStatus.pending) {
return (context.colors.outline, 'Pending', LucideIcons.circleDot);
return (context.colors.onSurfaceVariant, 'Pending', LucideIcons.circleDot);
}
return (context.appColors.warning, 'Running', LucideIcons.clock3);
}
@@ -395,7 +395,7 @@ class _MessageList extends HookConsumerWidget {
Icon(
LucideIcons.messageSquare,
size: Grid.xl,
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
const SizedBox(height: Grid.xxs),
Text(
@@ -408,7 +408,7 @@ class _MessageList extends HookConsumerWidget {
Text(
'Be the first to say something!',
style: context.textTheme.bodySmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
],
@@ -1031,7 +1031,7 @@ class _TypingIndicator extends ConsumerWidget {
child: Text(
text,
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
fontStyle: FontStyle.italic,
),
),
@@ -396,7 +396,7 @@ class _ChannelSection extends StatelessWidget {
child: Text(
emptyLabel,
style: context.textTheme.bodySmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
)
@@ -428,7 +428,7 @@ class _EmptyState extends StatelessWidget {
Icon(
LucideIcons.messagesSquare,
size: Grid.xl,
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
const SizedBox(height: Grid.xs),
Text(
@@ -701,7 +701,11 @@ class _MentionSuggestions extends StatelessWidget {
),
title: Text(name, style: context.textTheme.bodyMedium),
trailing: member.isBot
? Icon(LucideIcons.bot, size: 14, color: context.colors.outline)
? Icon(
LucideIcons.bot,
size: 14,
color: context.colors.onSurfaceVariant,
)
: null,
onTap: () => onSelect(member),
);
@@ -778,7 +782,7 @@ class _ChannelSuggestions extends StatelessWidget {
trailing: Text(
channel.channelType,
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
onTap: () => onSelect(channel),
@@ -290,7 +290,7 @@ class _ContextCard extends StatelessWidget {
Text(
label,
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
fontWeight: FontWeight.w600,
),
),
@@ -138,7 +138,7 @@ class MembersSheet extends HookConsumerWidget {
child: Text(
'No members found.',
style: context.textTheme.bodySmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
),
@@ -176,7 +176,7 @@ class _SectionLabel extends StatelessWidget {
child: Text(
label.toUpperCase(),
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
fontWeight: FontWeight.w600,
letterSpacing: 0.8,
),
@@ -251,7 +251,7 @@ class _MemberTile extends ConsumerWidget {
: Text(
_roleLabel(member.role),
style: context.textTheme.bodySmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
trailing: showMenu
@@ -391,7 +391,7 @@ class _RoleSelector extends StatelessWidget {
Text(
'Role',
style: context.textTheme.labelMedium?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
const SizedBox(height: Grid.xxs),
@@ -415,7 +415,7 @@ class _ThreadMessage extends ConsumerWidget {
Text(
formatMessageTime(message.createdAt),
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
if (message.edited) ...[
@@ -423,7 +423,7 @@ class _ThreadMessage extends ConsumerWidget {
Text(
'(edited)',
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
fontStyle: FontStyle.italic,
),
),
@@ -486,7 +486,7 @@ class _ThreadTypingIndicator extends ConsumerWidget {
child: Text(
text,
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
fontStyle: FontStyle.italic,
),
),
@@ -77,7 +77,7 @@ class ForumPostCard extends ConsumerWidget {
Text(
formatRelativeTime(post.createdAt),
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
const SizedBox(width: Grid.half),
@@ -89,7 +89,7 @@ class ForumPostCard extends ConsumerWidget {
icon: Icon(
LucideIcons.ellipsis,
size: 16,
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
padding: EdgeInsets.zero,
visualDensity: VisualDensity.compact,
@@ -128,13 +128,13 @@ class ForumPostCard extends ConsumerWidget {
Icon(
LucideIcons.messageSquare,
size: 14,
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
const SizedBox(width: Grid.half),
Text(
'${summary.replyCount} ${summary.replyCount == 1 ? 'reply' : 'replies'}',
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
if (summary.lastReplyAt != null) ...[
@@ -142,14 +142,16 @@ class ForumPostCard extends ConsumerWidget {
Text(
'\u00b7',
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline.withValues(alpha: 0.5),
color: context.colors.onSurfaceVariant.withValues(
alpha: 0.5,
),
),
),
const SizedBox(width: Grid.half),
Text(
'last ${formatRelativeTime(summary.lastReplyAt!)}',
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
],
@@ -186,7 +186,7 @@ class _EmptyState extends StatelessWidget {
Icon(
LucideIcons.messageSquareText,
size: Grid.xl,
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
const SizedBox(height: Grid.xxs),
Text(
@@ -203,7 +203,7 @@ class _EmptyState extends StatelessWidget {
? 'Start a discussion by creating the first post.'
: 'Join this forum to create posts.',
style: context.textTheme.bodySmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
textAlign: TextAlign.center,
),
@@ -237,13 +237,13 @@ class _ThreadContent extends HookConsumerWidget {
Icon(
LucideIcons.messageSquare,
size: 16,
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
const SizedBox(width: Grid.half),
Text(
'${replies.length} ${replies.length == 1 ? 'reply' : 'replies'}',
style: context.textTheme.labelMedium?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
fontWeight: FontWeight.w600,
),
),
@@ -258,7 +258,7 @@ class _ThreadContent extends HookConsumerWidget {
child: Text(
'No replies yet. Be the first to respond.',
style: context.textTheme.bodyMedium?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
textAlign: TextAlign.center,
),
@@ -337,7 +337,7 @@ class _OriginalPost extends ConsumerWidget {
Text(
formatRelativeTime(post.createdAt),
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
],
@@ -406,7 +406,7 @@ class _ReplyRow extends ConsumerWidget {
Text(
formatRelativeTime(reply.createdAt),
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
],
@@ -420,7 +420,7 @@ class _ReplyRow extends ConsumerWidget {
icon: Icon(
LucideIcons.ellipsis,
size: 16,
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
padding: EdgeInsets.zero,
visualDensity: VisualDensity.compact,
+2 -2
View File
@@ -404,7 +404,7 @@ class _MessageTile extends StatelessWidget {
Text(
timeAgo,
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
),
),
],
@@ -450,7 +450,7 @@ class _SectionLabel extends StatelessWidget {
child: Text(
label.toUpperCase(),
style: context.textTheme.labelSmall?.copyWith(
color: context.colors.outline,
color: context.colors.onSurfaceVariant,
fontWeight: FontWeight.w600,
letterSpacing: 0.8,
),