From 784355c66de94f3827c7dcdcf70493faab9b2a80 Mon Sep 17 00:00:00 2001 From: Rene Floor Date: Fri, 13 Mar 2026 14:02:14 +0100 Subject: [PATCH 1/9] update tokens --- .../primitives/tokens/dark/stream_tokens.dart | 278 ++++++++++-------- .../tokens/light/stream_tokens.dart | 234 ++++++++------- .../tokens/stream_tokens_typography.dart | 6 +- 3 files changed, 283 insertions(+), 235 deletions(-) diff --git a/packages/stream_core_flutter/lib/src/theme/primitives/tokens/dark/stream_tokens.dart b/packages/stream_core_flutter/lib/src/theme/primitives/tokens/dark/stream_tokens.dart index 8e163aa..1a5c3ab 100644 --- a/packages/stream_core_flutter/lib/src/theme/primitives/tokens/dark/stream_tokens.dart +++ b/packages/stream_core_flutter/lib/src/theme/primitives/tokens/dark/stream_tokens.dart @@ -4,11 +4,12 @@ class StreamTokens { StreamTokens._(); static const baseTransparent0 = Color(0x00FFFFFF); - static const baseTransparentBlack5 = Color(0x0D000000); - static const baseTransparentBlack10 = Color(0x1A000000); - static const baseTransparentWhite70 = Color(0xB3FFFFFF); static const baseTransparentWhite10 = Color(0x1AFFFFFF); static const baseTransparentWhite20 = Color(0x33FFFFFF); + static const baseTransparentWhite30 = Color(0x4DFFFFFF); + static const baseTransparentWhite70 = Color(0xB3FFFFFF); + static const baseTransparentBlack5 = Color(0x0D000000); + static const baseTransparentBlack10 = Color(0x1A000000); static const baseTransparentBlack70 = Color(0xB3000000); static const baseBlack = Color(0xFF000000); static const baseWhite = Color(0xFFFFFFFF); @@ -142,6 +143,10 @@ class StreamTokens { static const size480 = 480; static const size560 = 560; static const size640 = 640; + static const size760 = 760; + static const size144 = 144; + static const size208 = 208; + static const size56 = 56; static const radius0 = 0; static const radius2 = 2; static const radius4 = 4; @@ -182,24 +187,28 @@ class StreamTokens { static const fontWeightW500 = 500; static const fontWeightW600 = 600; static const fontWeightW700 = 700; + static const fontSizeSize8 = 8; static const fontSizeSize10 = 10; + static const fontSizeSize11 = 11; static const fontSizeSize12 = 12; + static const fontSizeSize13 = 13; static const fontSizeSize14 = 14; static const fontSizeSize16 = 16; static const fontSizeSize15 = 15; static const fontSizeSize17 = 17; static const fontSizeSize18 = 18; static const fontSizeSize20 = 20; + static const fontSizeSize22 = 22; static const fontSizeSize24 = 24; static const fontSizeSize28 = 28; static const fontSizeSize32 = 32; static const fontSizeSize40 = 40; static const fontSizeSize48 = 48; - static const fontSizeSize13 = 13; - static const fontSizeSize8 = 8; + static const fontSizeSize64 = 64; static const lineHeightLineHeight8 = 8; static const lineHeightLineHeight10 = 10; static const lineHeightLineHeight12 = 12; + static const lineHeightLineHeight13 = 13; static const lineHeightLineHeight14 = 14; static const lineHeightLineHeight15 = 15; static const lineHeightLineHeight16 = 16; @@ -228,11 +237,6 @@ class StreamTokens { static const typographyLineHeightTight = 16; static const typographyLineHeightNormal = 20; static const typographyLineHeightRelaxed = 24; - static final lightElevation0 = [ - const BoxShadow( - color: Color.fromRGBO(0, 0, 0, 0), - ), - ]; static final lightElevation1 = [ const BoxShadow( color: Color.fromRGBO(0, 0, 0, 0.05), @@ -293,11 +297,6 @@ class StreamTokens { offset: Offset(0, 20), ), ]; - static final darkElevation0 = [ - const BoxShadow( - color: Color.fromRGBO(0, 0, 0, 0), - ), - ]; static final darkElevation1 = [ const BoxShadow( color: Color.fromRGBO(255, 255, 255, 0.15), @@ -390,7 +389,6 @@ class StreamTokens { static const messageBubbleRadiusAttachmentInline = 8; static const composerRadiusFixed = 24; static const composerRadiusFloating = 24; - static const composerBg = Color(0xFF1C1C1C); static const buttonRadiusLg = 9999; static const buttonRadiusMd = 9999; static const buttonRadiusSm = 9999; @@ -413,27 +411,27 @@ class StreamTokens { static const buttonPaddingXWithLabelMd = 16; static const buttonPaddingXWithLabelSm = 16; static const buttonPaddingXWithLabelXs = 12; - static const buttonPrimaryBg = Color(0xFF78A8FF); - static const buttonPrimaryTextOnAccent = Color(0xFFFFFFFF); - static const buttonPrimaryText = Color(0xFF78A8FF); + static const buttonPrimaryBg = Color(0xFF4586FF); static const buttonPrimaryBgLiquidGlass = Color(0x00FFFFFF); + static const buttonPrimaryText = Color(0xFFA5C5FF); + static const buttonPrimaryTextOnAccent = Color(0xFFFFFFFF); + static const buttonPrimaryTextOnDark = Color(0xFF000000); static const buttonPrimaryBorder = Color(0xFF1B53BD); - static const buttonPrimaryTextOnDark = Color(0xFF1C1C1C); - static const buttonPrimaryBorderOnDark = Color(0xFF1C1C1C); - static const buttonSecondaryText = Color(0xFFFFFFFF); + static const buttonPrimaryBorderOnDark = Color(0xFF000000); + static const buttonSecondaryBg = Color(0xFF323232); static const buttonSecondaryBgLiquidGlass = Color(0xFF000000); + static const buttonSecondaryText = Color(0xFFF8F8F8); + static const buttonSecondaryTextOnAccent = Color(0xFFF8F8F8); + static const buttonSecondaryTextOnDark = Color(0xFF000000); static const buttonSecondaryBorder = Color(0xFF565656); - static const buttonSecondaryBg = Color(0xFF464646); - static const buttonSecondaryTextOnAccent = Color(0xFFFFFFFF); - static const buttonSecondaryTextOnDark = Color(0xFF1C1C1C); static const buttonSecondaryBorderOnDark = Color(0xFF1C1C1C); - static const buttonDestructiveText = Color(0xFFFC526A); static const buttonDestructiveBg = Color(0xFFFC526A); - static const buttonDestructiveTextOnAccent = Color(0xFFFFFFFF); static const buttonDestructiveBgLiquidGlass = Color(0xFF000000); + static const buttonDestructiveText = Color(0xFFFC526A); + static const buttonDestructiveTextOnAccent = Color(0xFFFFFFFF); + static const buttonDestructiveTextOnDark = Color(0xFF000000); static const buttonDestructiveBorder = Color(0xFFFC526A); - static const buttonDestructiveTextOnDark = Color(0xFF1C1C1C); - static const buttonDestructiveBorderOnDark = Color(0xFF1C1C1C); + static const buttonDestructiveBorderOnDark = Color(0xFF000000); static const iconSizeXs = 12; static const iconSizeSm = 16; static const iconSizeMd = 20; @@ -441,140 +439,159 @@ class StreamTokens { static const iconStrokeSubtle = 1.2; static const iconStrokeDefault = 1.5; static const iconStrokeEmphasis = 2; - static const backgroundCoreHover = Color(0x1AFFFFFF); - static const backgroundCorePressed = Color(0x33FFFFFF); - static const backgroundCoreSelected = Color(0x40FFFFFF); - static const backgroundCoreDisabled = Color(0xFF323232); - static const backgroundCoreApp = Color(0xFF000000); - static const backgroundCoreScrim = Color(0xBF000000); - static const backgroundCoreSurface = Color(0xFF464646); - static const backgroundCoreSurfaceSubtle = Color(0xFF323232); - static const backgroundCoreSurfaceStrong = Color(0xFF565656); - static const backgroundCoreOverlay = Color(0xBF000000); + static const emojiSm = 16; + static const emojiMd = 24; + static const emojiLg = 32; + static const emojiXl = 48; + static const emoji2xl = 64; + static const backgroundCoreElevation0 = Color(0xFF000000); + static const backgroundCoreElevation1 = Color(0xFF1C1C1C); + static const backgroundCoreElevation2 = Color(0xFF323232); + static const backgroundCoreElevation3 = Color(0xFF565656); + static const backgroundCoreElevation4 = Color(0xFF6A6A6A); + static const backgroundCoreSurface = Color(0xFF323232); + static const backgroundCoreSurfaceSubtle = Color(0xFF1C1C1C); + static const backgroundCoreSurfaceStrong = Color(0xFF464646); + static const backgroundCoreSurfaceCard = Color(0xFF323232); static const backgroundCoreInverse = Color(0xFFF8F8F8); + static const backgroundCoreOnAccent = Color(0xFFFFFFFF); + static const backgroundCoreHighlight = Color(0xFF5F1A05); static const backgroundCoreOverlayLight = Color(0xBF000000); static const backgroundCoreOverlayDark = Color(0x80000000); - static const backgroundElevationElevation0 = Color(0xFF000000); - static const backgroundElevationElevation1 = Color(0xFF1C1C1C); - static const backgroundElevationElevation2 = Color(0xFF323232); - static const backgroundElevationElevation3 = Color(0xFF464646); - static const backgroundElevationElevation4 = Color(0xFF565656); - static const borderUtilityFocus = Color(0xFFC3D9FF); + static const backgroundCoreScrim = Color(0xBF000000); + static const backgroundCoreApp = Color(0xFF000000); + static const backgroundUtilityHover = Color(0x26FFFFFF); + static const backgroundUtilityPressed = Color(0x33FFFFFF); + static const backgroundUtilitySelected = Color(0x40FFFFFF); + static const backgroundUtilityDisabled = Color(0xFF323232); + static const borderUtilityFocus = Color(0x4078A8FF); static const borderUtilityError = Color(0xFFFC526A); - static const borderUtilityWarning = Color(0xFFF26D10); - static const borderUtilitySuccess = Color(0xFF00A46E); - static const borderUtilitySelected = Color(0xFF78A8FF); - static const borderUtilityDisabled = Color(0xFF464646); + static const borderUtilityWarning = Color(0xFFFA922B); + static const borderUtilitySuccess = Color(0xFF00C384); + static const borderUtilitySelected = Color(0x26FFFFFF); + static const borderUtilityDisabled = Color(0xFF323232); + static const borderUtilityFocused = Color(0xFF19418D); + static const borderUtilityActive = Color(0xFF4586FF); + static const borderUtilityHover = Color(0x1AFFFFFF); + static const borderUtilityPressed = Color(0x33FFFFFF); static const borderCoreDefault = Color(0xFF565656); - static const borderCoreSubtle = Color(0xFF464646); - static const borderCoreStrong = Color(0xFF6A6A6A); - static const borderCoreOnDark = Color(0xFF1C1C1C); + static const borderCoreSubtle = Color(0xFF323232); + static const borderCoreStrong = Color(0xFF8F8F8F); + static const borderCoreInverse = Color(0xFF1C1C1C); static const borderCoreOnAccent = Color(0xFFFFFFFF); - static const borderCoreOpacity10 = Color(0x33FFFFFF); - static const borderCoreOpacity25 = Color(0x40FFFFFF); - static const borderCoreOnSurface = Color(0xFF6A6A6A); + static const borderCoreOpacitySubtle = Color(0x33FFFFFF); + static const borderCoreOpacityStrong = Color(0x40FFFFFF); static const chatBgIncoming = Color(0xFF323232); static const chatBgOutgoing = Color(0xFF142F63); static const chatBgAttachmentIncoming = Color(0xFF464646); static const chatBgAttachmentOutgoing = Color(0xFF19418D); - static const chatBgTypingIndicator = Color(0xFF565656); - static const chatTextTimestamp = Color(0xFFABABAB); - static const chatTextUsername = Color(0xFFEFEFEF); - static const chatTextMention = Color(0xFFFFFFFF); - static const chatTextLink = Color(0xFFFFFFFF); - static const chatTextReaction = Color(0xFFEFEFEF); - static const chatTextSystem = Color(0xFFEFEFEF); - static const chatTextIncoming = Color(0xFFFFFFFF); + static const chatTextIncoming = Color(0xFFF8F8F8); static const chatTextOutgoing = Color(0xFFF3F7FF); - static const chatBorderOutgoing = Color(0xFF142F63); + static const chatTextUsername = Color(0xFFD8D8D8); + static const chatTextTimestamp = Color(0xFFABABAB); + static const chatTextTypingIndicator = Color(0xFFF8F8F8); + static const chatTextRead = Color(0xFF4586FF); + static const chatTextMention = Color(0xFFA5C5FF); + static const chatTextLink = Color(0xFFA5C5FF); + static const chatTextReaction = Color(0xFFD8D8D8); + static const chatTextSystem = Color(0xFFD8D8D8); static const chatBorderIncoming = Color(0xFF323232); + static const chatBorderOutgoing = Color(0xFF142F63); + static const chatBorderOnChatIncoming = Color(0xFF8F8F8F); static const chatBorderOnChatOutgoing = Color(0xFF005FFF); - static const chatBorderOnChatIncoming = Color(0xFF6A6A6A); static const chatReplyIndicatorIncoming = Color(0xFF6A6A6A); static const chatReplyIndicatorOutgoing = Color(0xFFC3D9FF); static const chatWaveformBar = Color(0x40FFFFFF); - static const chatWaveformBarPlaying = Color(0xFF78A8FF); - static const chatPollProgressTrackIncoming = Color(0xFF565656); + static const chatWaveformBarPlaying = Color(0xFF4586FF); + static const chatPollProgressTrackIncoming = Color(0xFF464646); static const chatPollProgressTrackOutgoing = Color(0xFF1B53BD); - static const chatPollProgressFillIncoming = Color(0xFFF8F8F8); + static const chatPollProgressFillIncoming = Color(0xFFABABAB); static const chatPollProgressFillOutgoing = Color(0xFFFFFFFF); - static const chatThreadConnectorIncoming = Color(0xFF323232); - static const chatThreadConnectorOutgoing = Color(0xFF142F63); - static const inputBorderDefault = Color(0xFF565656); - static const inputBorderHover = Color(0xFF6A6A6A); - static const inputBorderFocus = Color(0xFF78A8FF); - static const inputTextDefault = Color(0xFFFFFFFF); + static const chatThreadConnectorIncoming = Color(0xFF565656); + static const chatThreadConnectorOutgoing = Color(0xFF19418D); + static const inputTextDefault = Color(0xFFF8F8F8); static const inputTextPlaceholder = Color(0xFFABABAB); - static const inputTextIcon = Color(0xFFABABAB); static const inputTextDisabled = Color(0xFF6A6A6A); - static const inputSendIcon = Color(0xFF78A8FF); + static const inputTextIcon = Color(0xFFABABAB); + static const inputSendIcon = Color(0xFF4586FF); static const inputSendIconDisabled = Color(0xFF6A6A6A); - static const reactionBg = Color(0xFF464646); - static const reactionBorder = Color(0xFF6A6A6A); - static const reactionText = Color(0xFFFFFFFF); - static const reactionEmoji = Color(0xFFFFFFFF); - static const presenceBgOnline = Color(0xFF00A46E); + static const reactionBg = Color(0xFF565656); + static const reactionBorder = Color(0xFF565656); + static const reactionText = Color(0xFFF8F8F8); + static const reactionEmoji = Color(0xFFF8F8F8); + static const presenceBgOnline = Color(0xFF00C384); static const presenceBorder = Color(0xFF1C1C1C); - static const presenceBgOffline = Color(0xFF565656); + static const presenceBgOffline = Color(0xFFABABAB); static const systemText = Color(0xFFFFFFFF); static const systemBgBlur = Color(0x03000000); static const systemScrollbar = Color(0x80FFFFFF); - static const systemCaret = Color(0xFFFFFFFF); - static const badgeBgPrimary = Color(0xFF78A8FF); - static const badgeBorder = Color(0xFF1C1C1C); + static const systemCaret = Color(0xFF4586FF); + static const badgeBgDefault = Color(0xFF565656); + static const badgeBgPrimary = Color(0xFF4586FF); + static const badgeBgNeutral = Color(0xFFABABAB); static const badgeBgError = Color(0xFFFC526A); - static const badgeBgNeutral = Color(0xFF565656); - static const badgeText = Color(0xFFFFFFFF); - static const badgeTextInverse = Color(0xFF1C1C1C); - static const badgeBgDefault = Color(0xFF1C1C1C); - static const badgeBgInverse = Color(0xFFF8F8F8); + static const badgeText = Color(0xFFF8F8F8); static const badgeTextOnAccent = Color(0xFFFFFFFF); + static const badgeBorder = Color(0xFF1C1C1C); static const badgeBgOverlay = Color(0xBF000000); - static const controlRadiocheckBg = Color(0x00FFFFFF); - static const controlRadiocheckBorder = Color(0xFF565656); - static const controlRadiocheckBgSelected = Color(0xFFFFFFFF); - static const controlRadiocheckIconSelected = Color(0xFF1C1C1C); - static const controlRemoveControlBg = Color(0xFF000000); - static const controlRemoveControlIcon = Color(0xFFFFFFFF); + static const controlRemoveControlBg = Color(0xFFF8F8F8); + static const controlRemoveControlIcon = Color(0xFF000000); static const controlRemoveControlBorder = Color(0xFF1C1C1C); - static const controlProgressBarTrack = Color(0xFF565656); - static const controlProgressBarFill = Color(0xFFF8F8F8); - static const controlPlayControlBg = Color(0xFF000000); - static const controlPlayControlIcon = Color(0xFFFFFFFF); - static const controlToggleSwitchBgSelected = Color(0xFF78A8FF); - static const controlToggleSwitchKnob = Color(0xFF565656); - static const controlToggleSwitchBg = Color(0xFF565656); + static const controlProgressBarFill = Color(0xFFABABAB); + static const controlProgressBarTrack = Color(0xFF464646); + static const controlToggleSwitchBg = Color(0xFFABABAB); + static const controlToggleSwitchBgSelected = Color(0xFF4586FF); static const controlToggleSwitchBgDisabled = Color(0xFF323232); + static const controlToggleSwitchKnob = Color(0xFF6A6A6A); + static const controlPlaybackToggleText = Color(0xFFF8F8F8); static const controlPlaybackToggleBorder = Color(0xFF565656); - static const controlPlaybackToggleText = Color(0xFFFFFFFF); - static const textPrimary = Color(0xFFFFFFFF); - static const textSecondary = Color(0xFFEFEFEF); + static const controlCheckboxBg = Color(0x00FFFFFF); + static const controlCheckboxBorder = Color(0xFF565656); + static const controlCheckboxBgSelected = Color(0xFF4586FF); + static const controlCheckboxIcon = Color(0xFFFFFFFF); + static const controlPlayButtonBg = Color(0xFF000000); + static const controlPlayButtonIcon = Color(0xFFFFFFFF); + static const controlPlaybackThumbBgDefault = Color(0xFFF8F8F8); + static const controlPlaybackThumbBorderActive = Color(0xFFFFFFFF); + static const controlPlaybackThumbBgActive = Color(0xFF4586FF); + static const controlPlaybackThumbBorderDefault = Color(0x40FFFFFF); + static const controlRadioButtonBg = Color(0x00FFFFFF); + static const controlRadioButtonBorder = Color(0xFF565656); + static const controlRadioButtonBgSelected = Color(0xFF4586FF); + static const controlRadioButtonIndicator = Color(0xFFFFFFFF); + static const controlRadioCheckBg = Color(0x00FFFFFF); + static const controlRadioCheckBorder = Color(0xFF565656); + static const controlRadioCheckBgSelected = Color(0xFF4586FF); + static const controlRadioCheckIcon = Color(0xFFFFFFFF); + static const textPrimary = Color(0xFFF8F8F8); + static const textSecondary = Color(0xFFD8D8D8); static const textTertiary = Color(0xFFABABAB); static const textInverse = Color(0xFF000000); - static const textDisabled = Color(0xFF6A6A6A); - static const textLink = Color(0xFFFFFFFF); static const textOnAccent = Color(0xFFFFFFFF); - static const textOnDark = Color(0xFF1C1C1C); - static const avatarPaletteBg1 = Color(0xFF142F63); - static const avatarPaletteBg2 = Color(0xFF003A3F); - static const avatarPaletteBg3 = Color(0xFF003A25); - static const avatarPaletteBg4 = Color(0xFF2E2576); - static const avatarPaletteBg5 = Color(0xFF5F1A05); + static const textDisabled = Color(0xFF6A6A6A); + static const textLink = Color(0xFFA5C5FF); + static const avatarPaletteBg1 = Color(0xFF1B53BD); + static const avatarPaletteBg2 = Color(0xFF006970); + static const avatarPaletteBg3 = Color(0xFF006643); + static const avatarPaletteBg4 = Color(0xFF553BD8); + static const avatarPaletteBg5 = Color(0xFFA82C00); static const avatarPaletteText1 = Color(0xFFE3EDFF); static const avatarPaletteText2 = Color(0xFFD1F3F6); static const avatarPaletteText3 = Color(0xFFBDFCDB); static const avatarPaletteText4 = Color(0xFFECEDFF); static const avatarPaletteText5 = Color(0xFFFCEDB9); - static const avatarBgDefault = Color(0xFF142F63); + static const avatarBgDefault = Color(0xFF1B53BD); static const avatarBgPlaceholder = Color(0xFF464646); static const avatarTextDefault = Color(0xFFE3EDFF); - static const avatarTextPlaceholder = Color(0xFF8F8F8F); - static const accentPrimary = Color(0xFF78A8FF); - static const accentSuccess = Color(0xFF00A46E); - static const accentWarning = Color(0xFFF26D10); + static const avatarTextPlaceholder = Color(0xFFABABAB); + static const avatarPresenceBgOnline = Color(0xFF00C384); + static const avatarPresenceBgOffline = Color(0xFFABABAB); + static const avatarPresenceBorder = Color(0xFF1C1C1C); + static const accentPrimary = Color(0xFF4586FF); + static const accentSuccess = Color(0xFF00C384); + static const accentWarning = Color(0xFFFA922B); static const accentError = Color(0xFFFC526A); static const accentNeutral = Color(0xFFABABAB); - static const accentBlack = Color(0xFF000000); static const brand50 = Color(0xFF091A3B); static const brand100 = Color(0xFF142F63); static const brand150 = Color(0xFF19418D); @@ -586,10 +603,19 @@ class StreamTokens { static const brand700 = Color(0xFFC3D9FF); static const brand800 = Color(0xFFE3EDFF); static const brand900 = Color(0xFFF3F7FF); - static const chipBg = Color(0xFF1B53BD); - static const chipText = Color(0xFFF3F7FF); - static const skeletonGradientDefaultBase = Color(0xFF323232); - static const skeletonGradientDefaultHighlight = Color(0xFF565656); - static const skeletonGradientAccentBase = Color(0xFF19418D); - static const skeletonGradientAccentHighlight = Color(0xFF1B53BD); + static const skeletonLoadingBase = Color(0x00FFFFFF); + static const skeletonLoadingHighlight = Color(0x33FFFFFF); + static const chrome0 = Color(0xFFFFFFFF); + static const chrome50 = Color(0xFF1C1C1C); + static const chrome100 = Color(0xFF323232); + static const chrome150 = Color(0xFF464646); + static const chrome200 = Color(0xFF565656); + static const chrome300 = Color(0xFF6A6A6A); + static const chrome400 = Color(0xFF8F8F8F); + static const chrome500 = Color(0xFFABABAB); + static const chrome600 = Color(0xFFC4C4C4); + static const chrome700 = Color(0xFFD8D8D8); + static const chrome800 = Color(0xFFEFEFEF); + static const chrome900 = Color(0xFFF8F8F8); + static const chrome1000 = Color(0xFF000000); } diff --git a/packages/stream_core_flutter/lib/src/theme/primitives/tokens/light/stream_tokens.dart b/packages/stream_core_flutter/lib/src/theme/primitives/tokens/light/stream_tokens.dart index 9f987fe..ee07e22 100644 --- a/packages/stream_core_flutter/lib/src/theme/primitives/tokens/light/stream_tokens.dart +++ b/packages/stream_core_flutter/lib/src/theme/primitives/tokens/light/stream_tokens.dart @@ -4,11 +4,12 @@ class StreamTokens { StreamTokens._(); static const baseTransparent0 = Color(0x00FFFFFF); - static const baseTransparentBlack5 = Color(0x0D000000); - static const baseTransparentBlack10 = Color(0x1A000000); - static const baseTransparentWhite70 = Color(0xB3FFFFFF); static const baseTransparentWhite10 = Color(0x1AFFFFFF); static const baseTransparentWhite20 = Color(0x33FFFFFF); + static const baseTransparentWhite30 = Color(0x4DFFFFFF); + static const baseTransparentWhite70 = Color(0xB3FFFFFF); + static const baseTransparentBlack5 = Color(0x0D000000); + static const baseTransparentBlack10 = Color(0x1A000000); static const baseTransparentBlack70 = Color(0xB3000000); static const baseBlack = Color(0xFF000000); static const baseWhite = Color(0xFFFFFFFF); @@ -142,6 +143,10 @@ class StreamTokens { static const size480 = 480; static const size560 = 560; static const size640 = 640; + static const size760 = 760; + static const size144 = 144; + static const size208 = 208; + static const size56 = 56; static const radius0 = 0; static const radius2 = 2; static const radius4 = 4; @@ -182,24 +187,28 @@ class StreamTokens { static const fontWeightW500 = 500; static const fontWeightW600 = 600; static const fontWeightW700 = 700; + static const fontSizeSize8 = 8; static const fontSizeSize10 = 10; + static const fontSizeSize11 = 11; static const fontSizeSize12 = 12; + static const fontSizeSize13 = 13; static const fontSizeSize14 = 14; static const fontSizeSize16 = 16; static const fontSizeSize15 = 15; static const fontSizeSize17 = 17; static const fontSizeSize18 = 18; static const fontSizeSize20 = 20; + static const fontSizeSize22 = 22; static const fontSizeSize24 = 24; static const fontSizeSize28 = 28; static const fontSizeSize32 = 32; static const fontSizeSize40 = 40; static const fontSizeSize48 = 48; - static const fontSizeSize13 = 13; - static const fontSizeSize8 = 8; + static const fontSizeSize64 = 64; static const lineHeightLineHeight8 = 8; static const lineHeightLineHeight10 = 10; static const lineHeightLineHeight12 = 12; + static const lineHeightLineHeight13 = 13; static const lineHeightLineHeight14 = 14; static const lineHeightLineHeight15 = 15; static const lineHeightLineHeight16 = 16; @@ -228,11 +237,6 @@ class StreamTokens { static const typographyLineHeightTight = 16; static const typographyLineHeightNormal = 20; static const typographyLineHeightRelaxed = 24; - static final lightElevation0 = [ - const BoxShadow( - color: Color.fromRGBO(0, 0, 0, 0), - ), - ]; static final lightElevation1 = [ const BoxShadow( color: Color.fromRGBO(0, 0, 0, 0.05), @@ -293,11 +297,6 @@ class StreamTokens { offset: Offset(0, 20), ), ]; - static final darkElevation0 = [ - const BoxShadow( - color: Color.fromRGBO(0, 0, 0, 0), - ), - ]; static final darkElevation1 = [ const BoxShadow( color: Color.fromRGBO(255, 255, 255, 0.15), @@ -390,7 +389,6 @@ class StreamTokens { static const messageBubbleRadiusAttachmentInline = 8; static const composerRadiusFixed = 24; static const composerRadiusFloating = 24; - static const composerBg = Color(0xFFFFFFFF); static const buttonRadiusLg = 9999; static const buttonRadiusMd = 9999; static const buttonRadiusSm = 9999; @@ -414,25 +412,25 @@ class StreamTokens { static const buttonPaddingXWithLabelSm = 16; static const buttonPaddingXWithLabelXs = 12; static const buttonPrimaryBg = Color(0xFF005FFF); - static const buttonPrimaryTextOnAccent = Color(0xFFFFFFFF); - static const buttonPrimaryText = Color(0xFF005FFF); static const buttonPrimaryBgLiquidGlass = Color(0x00FFFFFF); - static const buttonPrimaryBorder = Color(0xFFA5C5FF); + static const buttonPrimaryText = Color(0xFF005FFF); + static const buttonPrimaryTextOnAccent = Color(0xFFFFFFFF); static const buttonPrimaryTextOnDark = Color(0xFFFFFFFF); + static const buttonPrimaryBorder = Color(0xFFA5C5FF); static const buttonPrimaryBorderOnDark = Color(0xFFFFFFFF); - static const buttonSecondaryText = Color(0xFF1A1B25); - static const buttonSecondaryBgLiquidGlass = Color(0xFFFFFFFF); - static const buttonSecondaryBorder = Color(0xFFD5DBE1); static const buttonSecondaryBg = Color(0xFFEBEEF1); + static const buttonSecondaryBgLiquidGlass = Color(0xFFFFFFFF); + static const buttonSecondaryText = Color(0xFF1A1B25); static const buttonSecondaryTextOnAccent = Color(0xFF1A1B25); static const buttonSecondaryTextOnDark = Color(0xFFFFFFFF); + static const buttonSecondaryBorder = Color(0xFFD5DBE1); static const buttonSecondaryBorderOnDark = Color(0xFFFFFFFF); - static const buttonDestructiveText = Color(0xFFD90D10); static const buttonDestructiveBg = Color(0xFFD90D10); - static const buttonDestructiveTextOnAccent = Color(0xFFFFFFFF); static const buttonDestructiveBgLiquidGlass = Color(0xFFFFFFFF); - static const buttonDestructiveBorder = Color(0xFFD90D10); + static const buttonDestructiveText = Color(0xFFD90D10); + static const buttonDestructiveTextOnAccent = Color(0xFFFFFFFF); static const buttonDestructiveTextOnDark = Color(0xFFFFFFFF); + static const buttonDestructiveBorder = Color(0xFFD90D10); static const buttonDestructiveBorderOnDark = Color(0xFFFFFFFF); static const iconSizeXs = 12; static const iconSizeSm = 16; @@ -441,140 +439,159 @@ class StreamTokens { static const iconStrokeSubtle = 1.2; static const iconStrokeDefault = 1.5; static const iconStrokeEmphasis = 2; - static const backgroundCoreHover = Color(0x0D1E252B); - static const backgroundCorePressed = Color(0x1A1E252B); - static const backgroundCoreSelected = Color(0x261E252B); - static const backgroundCoreDisabled = Color(0xFFEBEEF1); - static const backgroundCoreApp = Color(0xFFFFFFFF); - static const backgroundCoreScrim = Color(0x40000000); + static const emojiSm = 16; + static const emojiMd = 24; + static const emojiLg = 32; + static const emojiXl = 48; + static const emoji2xl = 64; + static const backgroundCoreElevation0 = Color(0xFFFFFFFF); + static const backgroundCoreElevation1 = Color(0xFFFFFFFF); + static const backgroundCoreElevation2 = Color(0xFFFFFFFF); + static const backgroundCoreElevation3 = Color(0xFFFFFFFF); + static const backgroundCoreElevation4 = Color(0xFFFFFFFF); static const backgroundCoreSurface = Color(0xFFEBEEF1); static const backgroundCoreSurfaceSubtle = Color(0xFFF6F8FA); - static const backgroundCoreSurfaceStrong = Color(0xFFC0C8D2); - static const backgroundCoreOverlay = Color(0xBFFFFFFF); + static const backgroundCoreSurfaceStrong = Color(0xFFD5DBE1); + static const backgroundCoreSurfaceCard = Color(0xFFF6F8FA); static const backgroundCoreInverse = Color(0xFF1A1B25); + static const backgroundCoreOnAccent = Color(0xFFFFFFFF); + static const backgroundCoreHighlight = Color(0xFFFEF9DA); static const backgroundCoreOverlayLight = Color(0xBFFFFFFF); - static const backgroundCoreOverlayDark = Color(0x40000000); - static const backgroundElevationElevation0 = Color(0xFFFFFFFF); - static const backgroundElevationElevation1 = Color(0xFFFFFFFF); - static const backgroundElevationElevation2 = Color(0xFFFFFFFF); - static const backgroundElevationElevation3 = Color(0xFFFFFFFF); - static const backgroundElevationElevation4 = Color(0xFFFFFFFF); - static const borderUtilityFocus = Color(0xFF78A8FF); + static const backgroundCoreOverlayDark = Color(0x401A1B25); + static const backgroundCoreScrim = Color(0x801A1B25); + static const backgroundCoreApp = Color(0xFFFFFFFF); + static const backgroundUtilityHover = Color(0x1A1A1B25); + static const backgroundUtilityPressed = Color(0x261A1B25); + static const backgroundUtilitySelected = Color(0x331A1B25); + static const backgroundUtilityDisabled = Color(0xFFEBEEF1); + static const borderUtilityHover = Color(0x1A1A1B25); + static const borderUtilityPressed = Color(0x331A1B25); + static const borderUtilitySelected = Color(0x261A1B25); + static const borderUtilityFocused = Color(0xFFC3D9FF); + static const borderUtilityActive = Color(0xFF005FFF); + static const borderUtilitySuccess = Color(0xFF00A46E); + static const borderUtilityWarning = Color(0xFFF26D10); static const borderUtilityError = Color(0xFFD90D10); - static const borderUtilityWarning = Color(0xFFC84801); - static const borderUtilitySuccess = Color(0xFF277E59); - static const borderUtilitySelected = Color(0xFF005FFF); static const borderUtilityDisabled = Color(0xFFEBEEF1); static const borderCoreDefault = Color(0xFFD5DBE1); static const borderCoreSubtle = Color(0xFFEBEEF1); - static const borderCoreStrong = Color(0xFFC0C8D2); - static const borderCoreOnDark = Color(0xFFFFFFFF); + static const borderCoreStrong = Color(0xFFA3ACBA); + static const borderCoreInverse = Color(0xFFFFFFFF); static const borderCoreOnAccent = Color(0xFFFFFFFF); - static const borderCoreOpacity10 = Color(0x1A000000); - static const borderCoreOpacity25 = Color(0x40000000); static const borderCoreOnSurface = Color(0xFFC0C8D2); + static const borderCoreOpacitySubtle = Color(0x1A1A1B25); + static const borderCoreOpacityStrong = Color(0x401A1B25); static const chatBgIncoming = Color(0xFFEBEEF1); static const chatBgOutgoing = Color(0xFFE3EDFF); static const chatBgAttachmentIncoming = Color(0xFFD5DBE1); static const chatBgAttachmentOutgoing = Color(0xFFC3D9FF); - static const chatBgTypingIndicator = Color(0xFF687385); - static const chatTextTimestamp = Color(0xFF687385); + static const chatTextIncoming = Color(0xFF1A1B25); + static const chatTextOutgoing = Color(0xFF091A3B); static const chatTextUsername = Color(0xFF414552); + static const chatTextTimestamp = Color(0xFF687385); + static const chatTextTypingIndicator = Color(0xFF1A1B25); + static const chatTextRead = Color(0xFF005FFF); static const chatTextMention = Color(0xFF005FFF); static const chatTextLink = Color(0xFF005FFF); static const chatTextReaction = Color(0xFF414552); static const chatTextSystem = Color(0xFF414552); - static const chatTextIncoming = Color(0xFF1A1B25); - static const chatTextOutgoing = Color(0xFF091A3B); - static const chatBorderOutgoing = Color(0xFFE3EDFF); static const chatBorderIncoming = Color(0xFFEBEEF1); - static const chatBorderOnChatOutgoing = Color(0xFF78A8FF); + static const chatBorderOutgoing = Color(0xFFE3EDFF); static const chatBorderOnChatIncoming = Color(0xFFA3ACBA); + static const chatBorderOnChatOutgoing = Color(0xFF78A8FF); static const chatReplyIndicatorIncoming = Color(0xFF87909F); static const chatReplyIndicatorOutgoing = Color(0xFF4586FF); - static const chatWaveformBar = Color(0x40000000); + static const chatWaveformBar = Color(0x401A1B25); static const chatWaveformBarPlaying = Color(0xFF005FFF); - static const chatPollProgressTrackIncoming = Color(0xFFC0C8D2); + static const chatPollProgressTrackIncoming = Color(0xFFD5DBE1); static const chatPollProgressTrackOutgoing = Color(0xFFA5C5FF); static const chatPollProgressFillIncoming = Color(0xFF687385); static const chatPollProgressFillOutgoing = Color(0xFF005FFF); - static const chatThreadConnectorIncoming = Color(0xFFC0C8D2); + static const chatThreadConnectorIncoming = Color(0xFFD5DBE1); static const chatThreadConnectorOutgoing = Color(0xFFC3D9FF); - static const inputBorderDefault = Color(0xFFD5DBE1); - static const inputBorderHover = Color(0xFFC0C8D2); - static const inputBorderFocus = Color(0xFF005FFF); static const inputTextDefault = Color(0xFF1A1B25); static const inputTextPlaceholder = Color(0xFF687385); - static const inputTextIcon = Color(0xFF687385); static const inputTextDisabled = Color(0xFFA3ACBA); + static const inputTextIcon = Color(0xFF687385); static const inputSendIcon = Color(0xFF005FFF); static const inputSendIconDisabled = Color(0xFFA3ACBA); static const reactionBg = Color(0xFFFFFFFF); - static const reactionBorder = Color(0xFFEBEEF1); + static const reactionBorder = Color(0xFFD5DBE1); static const reactionText = Color(0xFF1A1B25); static const reactionEmoji = Color(0xFF1A1B25); - static const presenceBgOnline = Color(0xFF277E59); + static const presenceBgOnline = Color(0xFF00A46E); static const presenceBorder = Color(0xFFFFFFFF); static const presenceBgOffline = Color(0xFF687385); static const systemText = Color(0xFF000000); static const systemBgBlur = Color(0x03FFFFFF); - static const systemScrollbar = Color(0x80000000); static const systemCaret = Color(0xFF005FFF); + static const systemScrollbar = Color(0x80000000); + static const badgeBgDefault = Color(0xFFFFFFFF); static const badgeBgPrimary = Color(0xFF005FFF); - static const badgeBorder = Color(0xFFFFFFFF); - static const badgeBgError = Color(0xFFD90D10); static const badgeBgNeutral = Color(0xFF687385); + static const badgeBgError = Color(0xFFD90D10); + static const badgeBgOverlay = Color(0xBF000000); static const badgeText = Color(0xFF1A1B25); - static const badgeTextInverse = Color(0xFFFFFFFF); - static const badgeBgDefault = Color(0xFFFFFFFF); - static const badgeBgInverse = Color(0xFF1A1B25); static const badgeTextOnAccent = Color(0xFFFFFFFF); - static const badgeBgOverlay = Color(0xBF000000); - static const controlRadiocheckBg = Color(0x00FFFFFF); - static const controlRadiocheckBorder = Color(0xFFD5DBE1); - static const controlRadiocheckBgSelected = Color(0xFF005FFF); - static const controlRadiocheckIconSelected = Color(0xFFFFFFFF); - static const controlRemoveControlBg = Color(0xFF000000); + static const badgeBorder = Color(0xFFFFFFFF); + static const controlRemoveControlBg = Color(0xFF1A1B25); static const controlRemoveControlIcon = Color(0xFFFFFFFF); static const controlRemoveControlBorder = Color(0xFFFFFFFF); - static const controlProgressBarTrack = Color(0xFFC0C8D2); static const controlProgressBarFill = Color(0xFF687385); - static const controlPlayControlBg = Color(0xFF000000); - static const controlPlayControlIcon = Color(0xFFFFFFFF); + static const controlProgressBarTrack = Color(0xFFD5DBE1); + static const controlToggleSwitchBg = Color(0xFF687385); static const controlToggleSwitchBgSelected = Color(0xFF005FFF); - static const controlToggleSwitchKnob = Color(0xFFFFFFFF); - static const controlToggleSwitchBg = Color(0xFFD5DBE1); static const controlToggleSwitchBgDisabled = Color(0xFFEBEEF1); - static const controlPlaybackToggleBorder = Color(0xFFD5DBE1); + static const controlToggleSwitchKnob = Color(0xFFFFFFFF); static const controlPlaybackToggleText = Color(0xFF1A1B25); + static const controlPlaybackToggleBorder = Color(0xFFD5DBE1); + static const controlCheckboxBg = Color(0x00FFFFFF); + static const controlCheckboxBorder = Color(0xFFD5DBE1); + static const controlCheckboxBgSelected = Color(0xFF005FFF); + static const controlCheckboxIcon = Color(0xFFFFFFFF); + static const controlPlayButtonBg = Color(0xFF000000); + static const controlPlayButtonIcon = Color(0xFFFFFFFF); + static const controlPlaybackThumbBgDefault = Color(0xFFFFFFFF); + static const controlPlaybackThumbBorderDefault = Color(0x401A1B25); + static const controlPlaybackThumbBgActive = Color(0xFF005FFF); + static const controlPlaybackThumbBorderActive = Color(0xFFFFFFFF); + static const controlRadioButtonBg = Color(0x00FFFFFF); + static const controlRadioButtonBorder = Color(0xFFD5DBE1); + static const controlRadioButtonBgSelected = Color(0xFF005FFF); + static const controlRadioButtonIndicator = Color(0xFFFFFFFF); + static const controlRadioCheckBg = Color(0x00FFFFFF); + static const controlRadioCheckBorder = Color(0xFFD5DBE1); + static const controlRadioCheckBgSelected = Color(0xFF005FFF); + static const controlRadioCheckIcon = Color(0xFFFFFFFF); static const textPrimary = Color(0xFF1A1B25); static const textSecondary = Color(0xFF414552); static const textTertiary = Color(0xFF687385); static const textInverse = Color(0xFFFFFFFF); + static const textOnAccent = Color(0xFFFFFFFF); static const textDisabled = Color(0xFFA3ACBA); static const textLink = Color(0xFF005FFF); - static const textOnAccent = Color(0xFFFFFFFF); - static const textOnDark = Color(0xFFFFFFFF); - static const avatarPaletteBg1 = Color(0xFFE3EDFF); - static const avatarPaletteBg2 = Color(0xFFD1F3F6); - static const avatarPaletteBg3 = Color(0xFFBDFCDB); - static const avatarPaletteBg4 = Color(0xFFECEDFF); - static const avatarPaletteBg5 = Color(0xFFFCEDB9); - static const avatarPaletteText1 = Color(0xFF142F63); - static const avatarPaletteText2 = Color(0xFF003A3F); - static const avatarPaletteText3 = Color(0xFF003A25); - static const avatarPaletteText4 = Color(0xFF2E2576); - static const avatarPaletteText5 = Color(0xFF5F1A05); - static const avatarBgDefault = Color(0xFFE3EDFF); - static const avatarBgPlaceholder = Color(0xFFEBEEF1); - static const avatarTextDefault = Color(0xFF142F63); + static const avatarPaletteBg1 = Color(0xFFC3D9FF); + static const avatarPaletteBg2 = Color(0xFFA9E4EA); + static const avatarPaletteBg3 = Color(0xFF8FEBBD); + static const avatarPaletteBg4 = Color(0xFFD4D7FF); + static const avatarPaletteBg5 = Color(0xFFFCD579); + static const avatarPaletteText1 = Color(0xFF091A3B); + static const avatarPaletteText2 = Color(0xFF002124); + static const avatarPaletteText3 = Color(0xFF002213); + static const avatarPaletteText4 = Color(0xFF1A114D); + static const avatarPaletteText5 = Color(0xFF331302); + static const avatarBgDefault = Color(0xFFC3D9FF); + static const avatarBgPlaceholder = Color(0xFFD5DBE1); + static const avatarTextDefault = Color(0xFF091A3B); static const avatarTextPlaceholder = Color(0xFF687385); + static const avatarPresenceBgOnline = Color(0xFF00A46E); + static const avatarPresenceBgOffline = Color(0xFF687385); + static const avatarPresenceBorder = Color(0xFFFFFFFF); static const accentPrimary = Color(0xFF005FFF); - static const accentSuccess = Color(0xFF277E59); - static const accentWarning = Color(0xFFC84801); + static const accentSuccess = Color(0xFF00A46E); + static const accentWarning = Color(0xFFF26D10); static const accentError = Color(0xFFD90D10); static const accentNeutral = Color(0xFF687385); - static const accentBlack = Color(0xFF000000); static const brand50 = Color(0xFFF3F7FF); static const brand100 = Color(0xFFE3EDFF); static const brand150 = Color(0xFFC3D9FF); @@ -586,10 +603,19 @@ class StreamTokens { static const brand700 = Color(0xFF19418D); static const brand800 = Color(0xFF142F63); static const brand900 = Color(0xFF091A3B); - static const chipBg = Color(0xFFE3EDFF); - static const chipText = Color(0xFF091A3B); - static const skeletonGradientDefaultBase = Color(0xFFF6F8FA); - static const skeletonGradientDefaultHighlight = Color(0xFFFFFFFF); - static const skeletonGradientAccentBase = Color(0xFFF3F7FF); - static const skeletonGradientAccentHighlight = Color(0xFFFFFFFF); + static const skeletonLoadingBase = Color(0x00FFFFFF); + static const skeletonLoadingHighlight = Color(0xFFFFFFFF); + static const chrome0 = Color(0xFFFFFFFF); + static const chrome50 = Color(0xFFF6F8FA); + static const chrome100 = Color(0xFFEBEEF1); + static const chrome150 = Color(0xFFD5DBE1); + static const chrome200 = Color(0xFFC0C8D2); + static const chrome300 = Color(0xFFA3ACBA); + static const chrome400 = Color(0xFF87909F); + static const chrome500 = Color(0xFF687385); + static const chrome600 = Color(0xFF545969); + static const chrome700 = Color(0xFF414552); + static const chrome800 = Color(0xFF30313D); + static const chrome900 = Color(0xFF1A1B25); + static const chrome1000 = Color(0xFF000000); } diff --git a/packages/stream_core_flutter/lib/src/theme/primitives/tokens/stream_tokens_typography.dart b/packages/stream_core_flutter/lib/src/theme/primitives/tokens/stream_tokens_typography.dart index ce24527..39e9b91 100644 --- a/packages/stream_core_flutter/lib/src/theme/primitives/tokens/stream_tokens_typography.dart +++ b/packages/stream_core_flutter/lib/src/theme/primitives/tokens/stream_tokens_typography.dart @@ -19,7 +19,7 @@ class StreamTokensTypography { fontFamily: 'Geist', fontSize: 16, fontWeight: FontWeight.w600, - height: 1, + height: 1.25, ); static const headingXs = TextStyle( fontFamily: 'Geist', @@ -103,24 +103,20 @@ class StreamTokensTypography { fontFamily: 'Geist', fontSize: 14, fontWeight: FontWeight.w700, - height: 1, ); static const numericLg = TextStyle( fontFamily: 'Geist', fontSize: 12, fontWeight: FontWeight.w700, - height: 1, ); static const numericMd = TextStyle( fontFamily: 'Geist', fontSize: 10, fontWeight: FontWeight.w700, - height: 1, ); static const numericSm = TextStyle( fontFamily: 'Geist', fontSize: 8, fontWeight: FontWeight.w700, - height: 1, ); } From 35b148b3c7e0b0ccaaa9e3ef7594f349f79f7d66 Mon Sep 17 00:00:00 2001 From: Rene Floor Date: Fri, 13 Mar 2026 14:57:00 +0100 Subject: [PATCH 2/9] update missing and renamed colors --- .../lib/app/gallery_app.directories.g.dart | 6 +- .../lib/config/theme_configuration.dart | 40 +- .../theme_customization_panel.dart | 24 +- .../accessories/stream_audio_waveform.dart | 4 +- .../avatar/stream_avatar_group.dart | 2 +- .../badge/stream_badge_notification.dart | 2 +- .../components/badge/stream_media_badge.dart | 4 +- .../badge/stream_online_indicator.dart | 2 +- .../components/common/stream_checkbox.dart | 2 +- .../controls/stream_remove_control.dart | 4 +- .../stream_audio_waveform_theme.dart | 2 +- .../theme/semantics/stream_color_scheme.dart | 387 ++++++++++++------ .../stream_color_scheme.g.theme.dart | 123 ++++-- 13 files changed, 384 insertions(+), 218 deletions(-) diff --git a/apps/design_system_gallery/lib/app/gallery_app.directories.g.dart b/apps/design_system_gallery/lib/app/gallery_app.directories.g.dart index d6494aa..680f261 100644 --- a/apps/design_system_gallery/lib/app/gallery_app.directories.g.dart +++ b/apps/design_system_gallery/lib/app/gallery_app.directories.g.dart @@ -55,7 +55,7 @@ import 'package:design_system_gallery/components/message_composer/message_compos import 'package:design_system_gallery/components/message_composer/message_composer_attachment_reply.dart' as _design_system_gallery_components_message_composer_message_composer_attachment_reply; import 'package:design_system_gallery/components/reaction/stream_reactions.dart' - as _design_system_gallery_components_reaction_stream_reaction; + as _design_system_gallery_components_reaction_stream_reactions; import 'package:design_system_gallery/components/tiles/stream_list_tile.dart' as _design_system_gallery_components_tiles_stream_list_tile; import 'package:design_system_gallery/primitives/colors.dart' @@ -579,13 +579,13 @@ final directories = <_widgetbook.WidgetbookNode>[ _widgetbook.WidgetbookUseCase( name: 'Playground', builder: - _design_system_gallery_components_reaction_stream_reaction + _design_system_gallery_components_reaction_stream_reactions .buildStreamReactionsPlayground, ), _widgetbook.WidgetbookUseCase( name: 'Showcase', builder: - _design_system_gallery_components_reaction_stream_reaction + _design_system_gallery_components_reaction_stream_reactions .buildStreamReactionsShowcase, ), ], diff --git a/apps/design_system_gallery/lib/config/theme_configuration.dart b/apps/design_system_gallery/lib/config/theme_configuration.dart index 249fc69..e368fbf 100644 --- a/apps/design_system_gallery/lib/config/theme_configuration.dart +++ b/apps/design_system_gallery/lib/config/theme_configuration.dart @@ -51,7 +51,7 @@ class ThemeConfiguration extends ChangeNotifier { Color? _backgroundSurface; Color? _backgroundSurfaceSubtle; Color? _backgroundSurfaceStrong; - Color? _backgroundOverlay; + Color? _backgroundScrim; Color? _backgroundDisabled; // ========================================================================= @@ -60,10 +60,10 @@ class ThemeConfiguration extends ChangeNotifier { Color? _borderDefault; Color? _borderSubtle; Color? _borderStrong; - Color? _borderOnDark; + Color? _borderInverse; Color? _borderOnAccent; - Color? _borderOpacity10; - Color? _borderOpacity25; + Color? _borderOpacitySubtle; + Color? _borderOpacityStrong; // ========================================================================= // Border Colors - Utility @@ -127,7 +127,7 @@ class ThemeConfiguration extends ChangeNotifier { Color get backgroundSurface => _backgroundSurface ?? _themeData.colorScheme.backgroundSurface; Color get backgroundSurfaceSubtle => _backgroundSurfaceSubtle ?? _themeData.colorScheme.backgroundSurfaceSubtle; Color get backgroundSurfaceStrong => _backgroundSurfaceStrong ?? _themeData.colorScheme.backgroundSurfaceStrong; - Color get backgroundOverlay => _backgroundOverlay ?? _themeData.colorScheme.backgroundOverlay; + Color get backgroundScrim => _backgroundScrim ?? _themeData.colorScheme.backgroundScrim; Color get backgroundDisabled => _backgroundDisabled ?? _themeData.colorScheme.backgroundDisabled; // ========================================================================= @@ -136,10 +136,10 @@ class ThemeConfiguration extends ChangeNotifier { Color get borderDefault => _borderDefault ?? _themeData.colorScheme.borderDefault; Color get borderSubtle => _borderSubtle ?? _themeData.colorScheme.borderSubtle; Color get borderStrong => _borderStrong ?? _themeData.colorScheme.borderStrong; - Color get borderOnDark => _borderOnDark ?? _themeData.colorScheme.borderOnDark; + Color get borderInverse => _borderInverse ?? _themeData.colorScheme.borderInverse; Color get borderOnAccent => _borderOnAccent ?? _themeData.colorScheme.borderOnAccent; - Color get borderOpacity10 => _borderOpacity10 ?? _themeData.colorScheme.borderOpacity10; - Color get borderOpacity25 => _borderOpacity25 ?? _themeData.colorScheme.borderOpacity25; + Color get borderOpacitySubtle => _borderOpacitySubtle ?? _themeData.colorScheme.borderOpacitySubtle; + Color get borderOpacityStrong => _borderOpacityStrong ?? _themeData.colorScheme.borderOpacityStrong; // ========================================================================= // Getters - Border Utility @@ -208,17 +208,17 @@ class ThemeConfiguration extends ChangeNotifier { void setBackgroundSurface(Color color) => _update(() => _backgroundSurface = color); void setBackgroundSurfaceSubtle(Color color) => _update(() => _backgroundSurfaceSubtle = color); void setBackgroundSurfaceStrong(Color color) => _update(() => _backgroundSurfaceStrong = color); - void setBackgroundOverlay(Color color) => _update(() => _backgroundOverlay = color); + void setBackgroundScrim(Color color) => _update(() => _backgroundScrim = color); void setBackgroundDisabled(Color color) => _update(() => _backgroundDisabled = color); // Border Core void setBorderDefault(Color color) => _update(() => _borderDefault = color); void setBorderSubtle(Color color) => _update(() => _borderSubtle = color); void setBorderStrong(Color color) => _update(() => _borderStrong = color); - void setBorderOnDark(Color color) => _update(() => _borderOnDark = color); + void setBorderInverse(Color color) => _update(() => _borderInverse = color); void setBorderOnAccent(Color color) => _update(() => _borderOnAccent = color); - void setBorderOpacity10(Color color) => _update(() => _borderOpacity10 = color); - void setBorderOpacity25(Color color) => _update(() => _borderOpacity25 = color); + void setBorderOpacitySubtle(Color color) => _update(() => _borderOpacitySubtle = color); + void setBorderOpacityStrong(Color color) => _update(() => _borderOpacityStrong = color); // Border Utility void setBorderFocus(Color color) => _update(() => _borderFocus = color); @@ -294,16 +294,16 @@ class ThemeConfiguration extends ChangeNotifier { _backgroundSurface = null; _backgroundSurfaceSubtle = null; _backgroundSurfaceStrong = null; - _backgroundOverlay = null; + _backgroundScrim = null; _backgroundDisabled = null; // Border Core _borderDefault = null; _borderSubtle = null; _borderStrong = null; - _borderOnDark = null; + _borderInverse = null; _borderOnAccent = null; - _borderOpacity10 = null; - _borderOpacity25 = null; + _borderOpacitySubtle = null; + _borderOpacityStrong = null; // Border Utility _borderFocus = null; _borderDisabled = null; @@ -377,16 +377,16 @@ class ThemeConfiguration extends ChangeNotifier { backgroundSurface: _backgroundSurface, backgroundSurfaceSubtle: _backgroundSurfaceSubtle, backgroundSurfaceStrong: _backgroundSurfaceStrong, - backgroundOverlay: _backgroundOverlay, + backgroundScrim: _backgroundScrim, backgroundDisabled: _backgroundDisabled, // Border Core borderDefault: _borderDefault, borderSubtle: _borderSubtle, borderStrong: _borderStrong, - borderOnDark: _borderOnDark, + borderInverse: _borderInverse, borderOnAccent: _borderOnAccent, - borderOpacity10: _borderOpacity10, - borderOpacity25: _borderOpacity25, + borderOpacitySubtle: _borderOpacitySubtle, + borderOpacityStrong: _borderOpacityStrong, // Border Utility - derived from brand and accents borderFocus: effectiveBorderFocus, borderDisabled: _borderDisabled, diff --git a/apps/design_system_gallery/lib/widgets/theme_studio/theme_customization_panel.dart b/apps/design_system_gallery/lib/widgets/theme_studio/theme_customization_panel.dart index 942be4a..9a32fb2 100644 --- a/apps/design_system_gallery/lib/widgets/theme_studio/theme_customization_panel.dart +++ b/apps/design_system_gallery/lib/widgets/theme_studio/theme_customization_panel.dart @@ -339,9 +339,9 @@ class _ThemeCustomizationPanelState extends State { onColorChanged: config.setBackgroundSurfaceStrong, ), ColorPickerTile( - label: 'backgroundOverlay', - color: config.backgroundOverlay, - onColorChanged: config.setBackgroundOverlay, + label: 'backgroundScrim', + color: config.backgroundScrim, + onColorChanged: config.setBackgroundScrim, ), ColorPickerTile( label: 'backgroundDisabled', @@ -377,9 +377,9 @@ class _ThemeCustomizationPanelState extends State { onColorChanged: config.setBorderStrong, ), ColorPickerTile( - label: 'borderOnDark', - color: config.borderOnDark, - onColorChanged: config.setBorderOnDark, + label: 'borderInverse', + color: config.borderInverse, + onColorChanged: config.setBorderInverse, ), ColorPickerTile( label: 'borderOnAccent', @@ -387,14 +387,14 @@ class _ThemeCustomizationPanelState extends State { onColorChanged: config.setBorderOnAccent, ), ColorPickerTile( - label: 'borderOpacity10', - color: config.borderOpacity10, - onColorChanged: config.setBorderOpacity10, + label: 'borderOpacitySubtle', + color: config.borderOpacitySubtle, + onColorChanged: config.setBorderOpacitySubtle, ), ColorPickerTile( - label: 'borderOpacity25', - color: config.borderOpacity25, - onColorChanged: config.setBorderOpacity25, + label: 'borderOpacityStrong', + color: config.borderOpacityStrong, + onColorChanged: config.setBorderOpacityStrong, ), ], ), diff --git a/packages/stream_core_flutter/lib/src/components/accessories/stream_audio_waveform.dart b/packages/stream_core_flutter/lib/src/components/accessories/stream_audio_waveform.dart index 73e4e9b..ebd9e71 100644 --- a/packages/stream_core_flutter/lib/src/components/accessories/stream_audio_waveform.dart +++ b/packages/stream_core_flutter/lib/src/components/accessories/stream_audio_waveform.dart @@ -127,7 +127,7 @@ class _StreamAudioWaveformSliderState extends State { final activeThumbColor = widget.activeThumbColor ?? theme.activeThumbColor ?? colorScheme.accentPrimary; final idleThumbColor = widget.idleThumbColor ?? theme.idleThumbColor ?? colorScheme.accentNeutral; final thumbColor = widget.isActive ? activeThumbColor : idleThumbColor; - final thumbBorderColor = widget.thumbBorderColor ?? theme.thumbBorderColor ?? colorScheme.borderOnAccent; + final thumbBorderColor = widget.thumbBorderColor ?? theme.thumbBorderColor ?? colorScheme.borderInverse; return HorizontalSlider( onChangeStart: widget.onChangeStart, @@ -285,7 +285,7 @@ class StreamAudioWaveform extends StatelessWidget { final theme = StreamAudioWaveformTheme.of(context); final colorScheme = context.streamColorScheme; - final color = this.color ?? theme.color ?? colorScheme.borderOpacity25; + final color = this.color ?? theme.color ?? colorScheme.borderOpacityStrong; final progressColor = this.progressColor ?? theme.progressColor ?? colorScheme.accentPrimary; final minBarHeight = this.minBarHeight ?? theme.minBarHeight ?? 2.0; final spacingRatio = this.spacingRatio ?? theme.spacingRatio ?? 0.3; diff --git a/packages/stream_core_flutter/lib/src/components/avatar/stream_avatar_group.dart b/packages/stream_core_flutter/lib/src/components/avatar/stream_avatar_group.dart index 9f66a03..9d73995 100644 --- a/packages/stream_core_flutter/lib/src/components/avatar/stream_avatar_group.dart +++ b/packages/stream_core_flutter/lib/src/components/avatar/stream_avatar_group.dart @@ -172,7 +172,7 @@ class DefaultStreamAvatarGroup extends StatelessWidget { size: avatarSize, border: Border.all( width: avatarBorderWidth, - color: colorScheme.borderOnDark, + color: colorScheme.borderInverse, strokeAlign: BorderSide.strokeAlignOutside, ), ), diff --git a/packages/stream_core_flutter/lib/src/components/badge/stream_badge_notification.dart b/packages/stream_core_flutter/lib/src/components/badge/stream_badge_notification.dart index e88092d..e51f110 100644 --- a/packages/stream_core_flutter/lib/src/components/badge/stream_badge_notification.dart +++ b/packages/stream_core_flutter/lib/src/components/badge/stream_badge_notification.dart @@ -229,5 +229,5 @@ class _StreamBadgeNotificationThemeDefaults extends StreamBadgeNotificationTheme Color get textColor => _colorScheme.textOnAccent; @override - Color get borderColor => _colorScheme.borderOnDark; + Color get borderColor => _colorScheme.borderInverse; } diff --git a/packages/stream_core_flutter/lib/src/components/badge/stream_media_badge.dart b/packages/stream_core_flutter/lib/src/components/badge/stream_media_badge.dart index b522606..6b44ab4 100644 --- a/packages/stream_core_flutter/lib/src/components/badge/stream_media_badge.dart +++ b/packages/stream_core_flutter/lib/src/components/badge/stream_media_badge.dart @@ -28,13 +28,13 @@ class StreamMediaBadge extends StatelessWidget { MediaBadgeType.audio => context.streamIcons.microphoneSolid, }, size: 12, - color: context.streamColorScheme.textOnDark, + color: context.streamColorScheme.textOnAccent, ), if (duration case final duration?) Text( duration.toReadableString(), - style: context.streamTextTheme.numericMd.copyWith(color: context.streamColorScheme.textOnDark), + style: context.streamTextTheme.numericMd.copyWith(color: context.streamColorScheme.textOnAccent), ), ], ), diff --git a/packages/stream_core_flutter/lib/src/components/badge/stream_online_indicator.dart b/packages/stream_core_flutter/lib/src/components/badge/stream_online_indicator.dart index 19bf17b..ccd99dd 100644 --- a/packages/stream_core_flutter/lib/src/components/badge/stream_online_indicator.dart +++ b/packages/stream_core_flutter/lib/src/components/badge/stream_online_indicator.dart @@ -240,7 +240,7 @@ class _StreamOnlineIndicatorThemeDefaults extends StreamOnlineIndicatorThemeData Color get backgroundOffline => _colorScheme.accentNeutral; @override - Color get borderColor => _colorScheme.borderOnDark; + Color get borderColor => _colorScheme.borderInverse; @override AlignmentGeometry get alignment => AlignmentDirectional.topEnd; diff --git a/packages/stream_core_flutter/lib/src/components/common/stream_checkbox.dart b/packages/stream_core_flutter/lib/src/components/common/stream_checkbox.dart index 8bf6a02..7aa9f29 100644 --- a/packages/stream_core_flutter/lib/src/components/common/stream_checkbox.dart +++ b/packages/stream_core_flutter/lib/src/components/common/stream_checkbox.dart @@ -237,7 +237,7 @@ class _StreamCheckboxStyleDefaults extends StreamCheckboxStyle { WidgetStateProperty get checkColor => WidgetStateProperty.resolveWith((states) { if (states.contains(WidgetState.selected)) { if (states.contains(WidgetState.disabled)) return _colorScheme.textDisabled; - return _colorScheme.textOnDark; + return _colorScheme.textOnAccent; } return StreamColors.transparent; }); diff --git a/packages/stream_core_flutter/lib/src/components/controls/stream_remove_control.dart b/packages/stream_core_flutter/lib/src/components/controls/stream_remove_control.dart index 58a60cd..4740228 100644 --- a/packages/stream_core_flutter/lib/src/components/controls/stream_remove_control.dart +++ b/packages/stream_core_flutter/lib/src/components/controls/stream_remove_control.dart @@ -18,9 +18,9 @@ class StreamRemoveControl extends StatelessWidget { onTap: onPressed, child: Container( decoration: BoxDecoration( - color: colorScheme.accentBlack, + color: colorScheme.backgroundInverse, shape: BoxShape.circle, - border: Border.all(color: colorScheme.borderOnDark, width: 2), + border: Border.all(color: colorScheme.borderInverse, width: 2), ), alignment: Alignment.center, height: 20, diff --git a/packages/stream_core_flutter/lib/src/theme/components/stream_audio_waveform_theme.dart b/packages/stream_core_flutter/lib/src/theme/components/stream_audio_waveform_theme.dart index c74c4f5..be8c011 100644 --- a/packages/stream_core_flutter/lib/src/theme/components/stream_audio_waveform_theme.dart +++ b/packages/stream_core_flutter/lib/src/theme/components/stream_audio_waveform_theme.dart @@ -116,7 +116,7 @@ class StreamAudioWaveformThemeData with _$StreamAudioWaveformThemeData { /// The color of the waveform bars. /// - /// Falls back to [StreamColorScheme.borderOpacity25]. + /// Falls back to [StreamColorScheme.borderOpacityStrong]. final Color? color; /// The color of the progressed waveform bars. diff --git a/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.dart b/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.dart index 1cbcbbe..4da2335 100644 --- a/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.dart +++ b/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.dart @@ -38,6 +38,7 @@ part 'stream_color_scheme.g.theme.dart'; /// See also: /// /// * [StreamBrandColor], which provides brand color shades. +/// * [StreamChromeColor], which provides neutral chrome color shades. /// * [StreamColors], which defines the primitive color palette. @immutable @ThemeGen(constructor: 'raw') @@ -46,13 +47,13 @@ class StreamColorScheme with _$StreamColorScheme { factory StreamColorScheme.light({ // Brand StreamColorSwatch? brand, + StreamColorSwatch? chrome, // Accent Color? accentPrimary, Color? accentSuccess, Color? accentWarning, Color? accentError, Color? accentNeutral, - Color? accentBlack, // Text Color? textPrimary, Color? textSecondary, @@ -61,13 +62,15 @@ class StreamColorScheme with _$StreamColorScheme { Color? textInverse, Color? textLink, Color? textOnAccent, - Color? textOnDark, // Background Color? backgroundApp, Color? backgroundSurface, Color? backgroundSurfaceSubtle, Color? backgroundSurfaceStrong, - Color? backgroundOverlay, + Color? backgroundSurfaceCard, + Color? backgroundOnAccent, + Color? backgroundHighlight, + Color? backgroundScrim, Color? backgroundOverlayLight, Color? backgroundOverlayDark, Color? backgroundDisabled, @@ -83,14 +86,17 @@ class StreamColorScheme with _$StreamColorScheme { Color? borderDefault, Color? borderSubtle, Color? borderStrong, - Color? borderOnDark, + Color? borderInverse, Color? borderOnAccent, Color? borderOnSurface, - Color? borderOpacity10, - Color? borderOpacity25, + Color? borderOpacitySubtle, + Color? borderOpacityStrong, // Border - Utility Color? borderFocus, Color? borderDisabled, + Color? borderHover, + Color? borderPressed, + Color? borderActive, Color? borderError, Color? borderWarning, Color? borderSuccess, @@ -109,67 +115,72 @@ class StreamColorScheme with _$StreamColorScheme { }) { // Brand brand ??= StreamBrandColor.light(); + chrome ??= StreamChromeColor.light(); // Accent accentPrimary ??= brand.shade500; accentSuccess ??= light_tokens.StreamTokens.accentSuccess; accentWarning ??= light_tokens.StreamTokens.accentWarning; accentError ??= light_tokens.StreamTokens.accentError; - accentNeutral ??= light_tokens.StreamTokens.accentNeutral; - accentBlack ??= light_tokens.StreamTokens.accentBlack; + accentNeutral ??= chrome.shade500; // Text - textPrimary ??= light_tokens.StreamTokens.textPrimary; - textSecondary ??= light_tokens.StreamTokens.textSecondary; - textTertiary ??= light_tokens.StreamTokens.textTertiary; - textDisabled ??= light_tokens.StreamTokens.textDisabled; - textInverse ??= light_tokens.StreamTokens.textInverse; + textPrimary ??= chrome.shade900; + textSecondary ??= chrome.shade700; + textTertiary ??= chrome.shade500; + textDisabled ??= chrome.shade300; + textInverse ??= chrome[0] ?? StreamColors.white; textLink ??= accentPrimary; - textOnAccent ??= light_tokens.StreamTokens.textOnAccent; - textOnDark ??= light_tokens.StreamTokens.textOnDark; + textOnAccent ??= chrome[0] ?? StreamColors.white; // Background - - backgroundApp ??= light_tokens.StreamTokens.backgroundCoreApp; - backgroundSurface ??= light_tokens.StreamTokens.backgroundCoreSurface; - backgroundSurfaceSubtle ??= light_tokens.StreamTokens.backgroundCoreSurfaceSubtle; - backgroundSurfaceStrong ??= light_tokens.StreamTokens.backgroundCoreSurfaceStrong; - backgroundOverlay ??= light_tokens.StreamTokens.backgroundCoreOverlay; + backgroundSurface ??= chrome.shade100; + backgroundSurfaceSubtle ??= chrome.shade50; + backgroundSurfaceStrong ??= chrome.shade150; + backgroundSurfaceCard ??= chrome.shade50; + backgroundOnAccent ??= chrome[0] ?? StreamColors.white; + backgroundHighlight ??= light_tokens.StreamTokens.backgroundCoreHighlight; + backgroundScrim ??= light_tokens.StreamTokens.backgroundCoreScrim; backgroundOverlayLight ??= light_tokens.StreamTokens.backgroundCoreOverlayLight; backgroundOverlayDark ??= light_tokens.StreamTokens.backgroundCoreOverlayDark; - backgroundDisabled ??= light_tokens.StreamTokens.backgroundCoreDisabled; - backgroundInverse ??= light_tokens.StreamTokens.backgroundCoreInverse; + backgroundDisabled ??= chrome.shade100; + backgroundInverse ??= chrome.shade900; + + backgroundElevation0 ??= chrome[0] ?? StreamColors.white; + backgroundElevation1 ??= chrome[0] ?? StreamColors.white; + backgroundElevation2 ??= chrome[0] ?? StreamColors.white; + backgroundElevation3 ??= chrome[0] ?? StreamColors.white; + backgroundElevation4 ??= chrome[0] ?? StreamColors.white; - backgroundElevation0 ??= light_tokens.StreamTokens.backgroundElevationElevation0; - backgroundElevation1 ??= light_tokens.StreamTokens.backgroundElevationElevation1; - backgroundElevation2 ??= light_tokens.StreamTokens.backgroundElevationElevation2; - backgroundElevation3 ??= light_tokens.StreamTokens.backgroundElevationElevation3; - backgroundElevation4 ??= light_tokens.StreamTokens.backgroundElevationElevation4; + backgroundApp ??= backgroundElevation0; // Border - Core borderDefault ??= light_tokens.StreamTokens.borderCoreDefault; borderSubtle ??= light_tokens.StreamTokens.borderCoreSubtle; borderStrong ??= light_tokens.StreamTokens.borderCoreStrong; - borderOnDark ??= light_tokens.StreamTokens.borderCoreOnDark; - borderOnAccent ??= light_tokens.StreamTokens.borderCoreOnAccent; - borderOnSurface ??= light_tokens.StreamTokens.borderCoreOnSurface; - borderOpacity10 ??= light_tokens.StreamTokens.borderCoreOpacity10; - borderOpacity25 ??= light_tokens.StreamTokens.borderCoreOpacity25; + borderInverse ??= chrome[0] ?? StreamColors.white; + borderOnAccent ??= chrome[0] ?? StreamColors.white; + borderOnSurface ??= chrome.shade200; + borderOpacitySubtle ??= light_tokens.StreamTokens.borderCoreOpacitySubtle; + borderOpacityStrong ??= light_tokens.StreamTokens.borderCoreOpacityStrong; // Border - Utility borderFocus ??= brand.shade300; - borderDisabled ??= light_tokens.StreamTokens.borderUtilityDisabled; + borderDisabled ??= chrome.shade100; + borderHover ??= light_tokens.StreamTokens.borderUtilityHover; + borderPressed ??= light_tokens.StreamTokens.borderUtilityPressed; + borderActive ??= accentPrimary; borderError ??= accentError; borderWarning ??= accentWarning; borderSuccess ??= accentSuccess; borderSelected ??= accentPrimary; // State - stateHover ??= light_tokens.StreamTokens.backgroundCoreHover; - statePressed ??= light_tokens.StreamTokens.backgroundCorePressed; - stateSelected ??= light_tokens.StreamTokens.backgroundCoreSelected; + stateHover ??= light_tokens.StreamTokens.backgroundUtilityHover; + statePressed ??= light_tokens.StreamTokens.backgroundUtilityPressed; + stateSelected ??= light_tokens.StreamTokens.backgroundUtilitySelected; stateFocused ??= brand.shade100; - stateDisabled ??= light_tokens.StreamTokens.backgroundCoreDisabled; + stateDisabled ??= light_tokens.StreamTokens.backgroundUtilityDisabled; // System systemText ??= light_tokens.StreamTokens.systemText; @@ -201,12 +212,12 @@ class StreamColorScheme with _$StreamColorScheme { return .raw( brand: brand, + chrome: chrome, accentPrimary: accentPrimary, accentSuccess: accentSuccess, accentWarning: accentWarning, accentError: accentError, accentNeutral: accentNeutral, - accentBlack: accentBlack, textPrimary: textPrimary, textSecondary: textSecondary, textTertiary: textTertiary, @@ -214,12 +225,14 @@ class StreamColorScheme with _$StreamColorScheme { textInverse: textInverse, textLink: textLink, textOnAccent: textOnAccent, - textOnDark: textOnDark, backgroundApp: backgroundApp, backgroundSurface: backgroundSurface, backgroundSurfaceSubtle: backgroundSurfaceSubtle, backgroundSurfaceStrong: backgroundSurfaceStrong, - backgroundOverlay: backgroundOverlay, + backgroundSurfaceCard: backgroundSurfaceCard, + backgroundOnAccent: backgroundOnAccent, + backgroundHighlight: backgroundHighlight, + backgroundScrim: backgroundScrim, backgroundOverlayLight: backgroundOverlayLight, backgroundOverlayDark: backgroundOverlayDark, backgroundDisabled: backgroundDisabled, @@ -230,15 +243,18 @@ class StreamColorScheme with _$StreamColorScheme { backgroundElevation3: backgroundElevation3, backgroundElevation4: backgroundElevation4, borderDefault: borderDefault, - borderOnDark: borderOnDark, + borderInverse: borderInverse, borderOnAccent: borderOnAccent, borderOnSurface: borderOnSurface, borderSubtle: borderSubtle, borderStrong: borderStrong, - borderOpacity10: borderOpacity10, - borderOpacity25: borderOpacity25, + borderOpacitySubtle: borderOpacitySubtle, + borderOpacityStrong: borderOpacityStrong, borderFocus: borderFocus, borderDisabled: borderDisabled, + borderHover: borderHover, + borderPressed: borderPressed, + borderActive: borderActive, borderError: borderError, borderWarning: borderWarning, borderSuccess: borderSuccess, @@ -258,13 +274,13 @@ class StreamColorScheme with _$StreamColorScheme { factory StreamColorScheme.dark({ // Brand StreamColorSwatch? brand, + StreamColorSwatch? chrome, // Accent Color? accentPrimary, Color? accentSuccess, Color? accentWarning, Color? accentError, Color? accentNeutral, - Color? accentBlack, // Text Color? textPrimary, Color? textSecondary, @@ -273,13 +289,15 @@ class StreamColorScheme with _$StreamColorScheme { Color? textInverse, Color? textLink, Color? textOnAccent, - Color? textOnDark, // Background Color? backgroundApp, Color? backgroundSurface, Color? backgroundSurfaceSubtle, Color? backgroundSurfaceStrong, - Color? backgroundOverlay, + Color? backgroundSurfaceCard, + Color? backgroundOnAccent, + Color? backgroundHighlight, + Color? backgroundScrim, Color? backgroundOverlayLight, Color? backgroundOverlayDark, Color? backgroundDisabled, @@ -294,14 +312,17 @@ class StreamColorScheme with _$StreamColorScheme { Color? borderDefault, Color? borderSubtle, Color? borderStrong, - Color? borderOpacity10, - Color? borderOpacity25, - Color? borderOnDark, + Color? borderInverse, + Color? borderOpacitySubtle, + Color? borderOpacityStrong, Color? borderOnAccent, Color? borderOnSurface, // Border - Utility Color? borderFocus, Color? borderDisabled, + Color? borderHover, + Color? borderPressed, + Color? borderActive, Color? borderError, Color? borderWarning, Color? borderSuccess, @@ -320,66 +341,71 @@ class StreamColorScheme with _$StreamColorScheme { }) { // Brand brand ??= StreamBrandColor.dark(); + chrome ??= StreamChromeColor.dark(); // Accent accentPrimary ??= brand.shade500; accentSuccess ??= dark_tokens.StreamTokens.accentSuccess; accentWarning ??= dark_tokens.StreamTokens.accentWarning; accentError ??= dark_tokens.StreamTokens.accentError; - accentNeutral ??= dark_tokens.StreamTokens.accentNeutral; - accentBlack ??= dark_tokens.StreamTokens.accentBlack; + accentNeutral ??= chrome.shade500; // Text - textPrimary ??= dark_tokens.StreamTokens.textPrimary; - textSecondary ??= dark_tokens.StreamTokens.textSecondary; - textTertiary ??= dark_tokens.StreamTokens.textTertiary; - textDisabled ??= dark_tokens.StreamTokens.textDisabled; - textInverse ??= dark_tokens.StreamTokens.textInverse; + textPrimary ??= chrome.shade900; + textSecondary ??= chrome.shade700; + textTertiary ??= chrome.shade500; + textDisabled ??= chrome.shade300; + textInverse ??= chrome[1000] ?? StreamColors.black; textLink ??= accentPrimary; - textOnAccent ??= dark_tokens.StreamTokens.textOnAccent; - textOnDark ??= dark_tokens.StreamTokens.textOnDark; + textOnAccent ??= chrome[0] ?? StreamColors.white; // Background - backgroundApp ??= dark_tokens.StreamTokens.backgroundCoreApp; - backgroundSurface ??= dark_tokens.StreamTokens.backgroundCoreSurface; - backgroundSurfaceSubtle ??= dark_tokens.StreamTokens.backgroundCoreSurfaceSubtle; - backgroundSurfaceStrong ??= dark_tokens.StreamTokens.backgroundCoreSurfaceStrong; - backgroundOverlay ??= dark_tokens.StreamTokens.backgroundCoreOverlay; + backgroundApp ??= chrome[1000] ?? StreamColors.black; + backgroundSurface ??= chrome.shade100; + backgroundSurfaceSubtle ??= chrome.shade50; + backgroundSurfaceStrong ??= chrome.shade150; + backgroundSurfaceCard ??= chrome.shade100; + backgroundOnAccent ??= chrome[0] ?? StreamColors.white; + backgroundHighlight ??= dark_tokens.StreamTokens.backgroundCoreHighlight; + backgroundScrim ??= dark_tokens.StreamTokens.backgroundCoreScrim; backgroundOverlayLight ??= dark_tokens.StreamTokens.backgroundCoreOverlayLight; backgroundOverlayDark ??= dark_tokens.StreamTokens.backgroundCoreOverlayDark; - backgroundDisabled ??= dark_tokens.StreamTokens.backgroundCoreDisabled; - backgroundInverse ??= dark_tokens.StreamTokens.backgroundCoreInverse; + backgroundDisabled ??= chrome.shade100; + backgroundInverse ??= chrome.shade900; - backgroundElevation0 ??= dark_tokens.StreamTokens.backgroundElevationElevation0; - backgroundElevation1 ??= dark_tokens.StreamTokens.backgroundElevationElevation1; - backgroundElevation2 ??= dark_tokens.StreamTokens.backgroundElevationElevation2; - backgroundElevation3 ??= dark_tokens.StreamTokens.backgroundElevationElevation3; - backgroundElevation4 ??= dark_tokens.StreamTokens.backgroundElevationElevation4; + backgroundElevation0 ??= chrome[1000] ?? StreamColors.black; + backgroundElevation1 ??= chrome.shade50; + backgroundElevation2 ??= chrome.shade100; + backgroundElevation3 ??= chrome.shade200; + backgroundElevation4 ??= chrome.shade300; // Border - Core borderDefault ??= dark_tokens.StreamTokens.borderCoreDefault; borderSubtle ??= dark_tokens.StreamTokens.borderCoreSubtle; borderStrong ??= dark_tokens.StreamTokens.borderCoreStrong; - borderOpacity10 ??= dark_tokens.StreamTokens.borderCoreOpacity10; - borderOpacity25 ??= dark_tokens.StreamTokens.borderCoreOpacity25; - borderOnDark ??= dark_tokens.StreamTokens.borderCoreOnDark; - borderOnAccent ??= dark_tokens.StreamTokens.borderCoreOnAccent; - borderOnSurface ??= dark_tokens.StreamTokens.borderCoreOnSurface; + borderInverse ??= dark_tokens.StreamTokens.borderCoreInverse; + borderOpacitySubtle ??= dark_tokens.StreamTokens.borderCoreOpacitySubtle; + borderOpacityStrong ??= dark_tokens.StreamTokens.borderCoreOpacityStrong; + borderOnAccent ??= chrome[0] ?? StreamColors.white; + borderOnSurface ??= chrome.shade200; // Border - Utility borderFocus ??= brand.shade300; - borderDisabled ??= dark_tokens.StreamTokens.borderUtilityDisabled; + borderDisabled ??= chrome.shade100; + borderHover ??= dark_tokens.StreamTokens.borderUtilityHover; + borderPressed ??= dark_tokens.StreamTokens.borderUtilityPressed; + borderActive ??= accentPrimary; borderError ??= accentError; borderWarning ??= accentWarning; borderSuccess ??= accentSuccess; borderSelected ??= accentPrimary; // State - stateHover ??= dark_tokens.StreamTokens.backgroundCoreHover; - statePressed ??= dark_tokens.StreamTokens.backgroundCorePressed; - stateSelected ??= dark_tokens.StreamTokens.backgroundCoreSelected; + stateHover ??= dark_tokens.StreamTokens.backgroundUtilityHover; + statePressed ??= dark_tokens.StreamTokens.backgroundUtilityPressed; + stateSelected ??= dark_tokens.StreamTokens.backgroundUtilitySelected; stateFocused ??= brand.shade100; - stateDisabled ??= dark_tokens.StreamTokens.backgroundCoreDisabled; + stateDisabled ??= dark_tokens.StreamTokens.backgroundUtilityDisabled; // System systemText ??= dark_tokens.StreamTokens.systemText; @@ -411,12 +437,12 @@ class StreamColorScheme with _$StreamColorScheme { return .raw( brand: brand, + chrome: chrome, accentPrimary: accentPrimary, accentSuccess: accentSuccess, accentWarning: accentWarning, accentError: accentError, accentNeutral: accentNeutral, - accentBlack: accentBlack, textPrimary: textPrimary, textSecondary: textSecondary, textTertiary: textTertiary, @@ -424,12 +450,14 @@ class StreamColorScheme with _$StreamColorScheme { textInverse: textInverse, textLink: textLink, textOnAccent: textOnAccent, - textOnDark: textOnDark, backgroundApp: backgroundApp, backgroundSurface: backgroundSurface, backgroundSurfaceSubtle: backgroundSurfaceSubtle, backgroundSurfaceStrong: backgroundSurfaceStrong, - backgroundOverlay: backgroundOverlay, + backgroundSurfaceCard: backgroundSurfaceCard, + backgroundOnAccent: backgroundOnAccent, + backgroundHighlight: backgroundHighlight, + backgroundScrim: backgroundScrim, backgroundOverlayLight: backgroundOverlayLight, backgroundOverlayDark: backgroundOverlayDark, backgroundDisabled: backgroundDisabled, @@ -440,15 +468,18 @@ class StreamColorScheme with _$StreamColorScheme { backgroundElevation3: backgroundElevation3, backgroundElevation4: backgroundElevation4, borderDefault: borderDefault, + borderInverse: borderInverse, borderStrong: borderStrong, - borderOpacity10: borderOpacity10, - borderOpacity25: borderOpacity25, - borderOnDark: borderOnDark, + borderOpacitySubtle: borderOpacitySubtle, + borderOpacityStrong: borderOpacityStrong, borderOnAccent: borderOnAccent, borderOnSurface: borderOnSurface, borderSubtle: borderSubtle, borderFocus: borderFocus, borderDisabled: borderDisabled, + borderHover: borderHover, + borderPressed: borderPressed, + borderActive: borderActive, borderError: borderError, borderWarning: borderWarning, borderSuccess: borderSuccess, @@ -466,13 +497,13 @@ class StreamColorScheme with _$StreamColorScheme { const StreamColorScheme.raw({ required this.brand, + required this.chrome, // Accent required this.accentPrimary, required this.accentSuccess, required this.accentWarning, required this.accentError, required this.accentNeutral, - required this.accentBlack, // Text required this.textPrimary, required this.textSecondary, @@ -481,13 +512,15 @@ class StreamColorScheme with _$StreamColorScheme { required this.textInverse, required this.textLink, required this.textOnAccent, - required this.textOnDark, // Background required this.backgroundApp, required this.backgroundSurface, required this.backgroundSurfaceSubtle, required this.backgroundSurfaceStrong, - required this.backgroundOverlay, + required this.backgroundSurfaceCard, + required this.backgroundOnAccent, + required this.backgroundHighlight, + required this.backgroundScrim, required this.backgroundOverlayLight, required this.backgroundOverlayDark, required this.backgroundDisabled, @@ -502,14 +535,17 @@ class StreamColorScheme with _$StreamColorScheme { required this.borderDefault, required this.borderSubtle, required this.borderStrong, - required this.borderOnDark, + required this.borderInverse, required this.borderOnAccent, required this.borderOnSurface, - required this.borderOpacity10, - required this.borderOpacity25, + required this.borderOpacitySubtle, + required this.borderOpacityStrong, // Border - Utility required this.borderFocus, required this.borderDisabled, + required this.borderHover, + required this.borderPressed, + required this.borderActive, required this.borderError, required this.borderWarning, required this.borderSuccess, @@ -532,6 +568,9 @@ class StreamColorScheme with _$StreamColorScheme { /// The brand color swatch with shades from 50 to 950. final StreamColorSwatch brand; + /// The chrome (neutral) color swatch with shades from 0 to 1000. + final StreamColorSwatch chrome; + // ---- Accent colors ---- /// The primary accent color. @@ -546,54 +585,57 @@ class StreamColorScheme with _$StreamColorScheme { /// The error accent color. final Color accentError; - /// The neutral accent color. + /// Neutral accent for low-priority badges. final Color accentNeutral; - /// The black accent color. - final Color accentBlack; - // ---- Text colors ---- - /// The primary text color. + /// Main text color. final Color textPrimary; - /// The secondary text color. + /// Secondary metadata text. final Color textSecondary; - /// The tertiary text color. + /// Lowest priority text. final Color textTertiary; - /// The disabled text color. + /// Disabled text. final Color textDisabled; - /// The inverse text color. + /// Text on dark or accent backgrounds. final Color textInverse; /// The link text color. final Color textLink; - /// The text color on accent backgrounds. + /// Text on dark or accent backgrounds. final Color textOnAccent; - /// The text color on dark backgrounds. - final Color textOnDark; - // ---- Background colors ---- - /// The main app background color. + /// Global application background. final Color backgroundApp; - /// The surface background color. + /// Standard section background. final Color backgroundSurface; - /// The subtle surface background color. + /// Very light section background. final Color backgroundSurfaceSubtle; - /// The strong surface background color. + /// Stronger section background. final Color backgroundSurfaceStrong; - /// The overlay background color. - final Color backgroundOverlay; + /// Card surface background (slightly elevated above subtle). + final Color backgroundSurfaceCard; + + /// Surface that must remain white across themes (e.g., media controls over video). + final Color backgroundOnAccent; + + /// Highlight background (e.g., quoted message, search hit). + final Color backgroundHighlight; + + /// Dimmed overlay for modals. + final Color backgroundScrim; /// The light overlay background color. final Color backgroundOverlayLight; @@ -601,63 +643,72 @@ class StreamColorScheme with _$StreamColorScheme { /// The dark overlay background color. final Color backgroundOverlayDark; - /// Disabled background for inputs, buttons, or chips. + /// Disabled backgrounds for inputs, buttons, or chips. final Color backgroundDisabled; - /// The inverse background color. + /// Inverse background used for elevated, transient, or high-attention UI surfaces that sit on top of the default app background. final Color backgroundInverse; // ---- Background - Elevation ---- - /// The elevation 0 background color. + /// Flat surfaces. final Color backgroundElevation0; - /// The elevation 1 background color. + /// Slightly elevated surfaces. final Color backgroundElevation1; - /// The elevation 2 background color. + /// Card-like elements. final Color backgroundElevation2; - /// The elevation 3 background color. + /// Popovers. final Color backgroundElevation3; - /// The elevation 4 background color. + /// Dialogs, modals. final Color backgroundElevation4; // ---- Border colors - Core ---- - /// Standard surface border + /// Standard surface border. final Color borderDefault; - /// The subtle surface border color for separators. + /// Very light separators. final Color borderSubtle; - /// The strong surface border color. + /// Stronger surface border. final Color borderStrong; - /// The border color on dark backgrounds. - final Color borderOnDark; + /// Used on dark backgrounds. + final Color borderInverse; - /// The border color on accent backgrounds. + /// Borders on accent backgrounds. final Color borderOnAccent; /// The border color on surface backgrounds. final Color borderOnSurface; - /// The 10% opacity border color. - final Color borderOpacity10; + /// Image frame border treatment (subtle opacity). + final Color borderOpacitySubtle; - /// The 25% opacity border color. - final Color borderOpacity25; + /// Image frame border treatment (strong opacity). + final Color borderOpacityStrong; // ---- Border colors - Utility ---- - /// The focus ring border color. + /// Focus ring or focus border. final Color borderFocus; - /// The disabled state border color. + /// Optional disabled border for inputs, buttons, or chips. final Color borderDisabled; + /// Hover feedback border overlay. + final Color borderHover; + + /// Pressed feedback border overlay. + final Color borderPressed; + + /// Active/selected border (same value as borderSelected). + final Color borderActive; + /// The error state border color. final Color borderError; @@ -672,13 +723,13 @@ class StreamColorScheme with _$StreamColorScheme { // ---- State colors ---- - /// The hover state overlay color. + /// Hover feedback overlay. final Color stateHover; - /// The pressed state overlay color. + /// Pressed feedback overlay. final Color statePressed; - /// The selected state overlay color. + /// Selected overlay. final Color stateSelected; /// The focused state overlay color. @@ -732,6 +783,7 @@ class StreamColorScheme with _$StreamColorScheme { /// See also: /// /// * [StreamColorScheme], which contains the brand color. +/// * [StreamChromeColor], the neutral chrome swatch. /// * [StreamColorSwatch], the base class for color swatches. @immutable class StreamBrandColor extends StreamColorSwatch { @@ -786,6 +838,73 @@ class StreamBrandColor extends StreamColorSwatch { } } +/// The chrome (neutral) color swatch for the Stream design system. +/// +/// [StreamChromeColor] extends [StreamColorSwatch] and provides the neutral +/// chrome color palette with shades from 0 (white) to 1000 (black). Chrome +/// colors are used for backgrounds, text, borders, and other UI elements that +/// adapt to light/dark themes through the neutral gray scale. +/// +/// See also: +/// * [StreamColorScheme], which contains the chrome color. +/// * [StreamColorSwatch], the base class for color swatches. +@immutable +class StreamChromeColor extends StreamColorSwatch { + const StreamChromeColor._(super.primary, super._swatch); + + /// Creates a light theme chrome color swatch. + factory StreamChromeColor.light() { + final primaryColorValue = light_tokens.StreamTokens.chrome500.toARGB32(); + return ._( + primaryColorValue, + { + 0: light_tokens.StreamTokens.chrome0, + 50: light_tokens.StreamTokens.chrome50, + 100: light_tokens.StreamTokens.chrome100, + 150: light_tokens.StreamTokens.chrome150, + 200: light_tokens.StreamTokens.chrome200, + 300: light_tokens.StreamTokens.chrome300, + 400: light_tokens.StreamTokens.chrome400, + 500: Color(primaryColorValue), + 600: light_tokens.StreamTokens.chrome600, + 700: light_tokens.StreamTokens.chrome700, + 800: light_tokens.StreamTokens.chrome800, + 900: light_tokens.StreamTokens.chrome900, + 1000: light_tokens.StreamTokens.chrome1000, + }, + ); + } + + /// Creates a dark theme chrome color swatch. + factory StreamChromeColor.dark() { + final primaryColorValue = dark_tokens.StreamTokens.chrome500.toARGB32(); + return ._( + primaryColorValue, + { + 0: dark_tokens.StreamTokens.chrome0, + 50: dark_tokens.StreamTokens.chrome50, + 100: dark_tokens.StreamTokens.chrome100, + 150: dark_tokens.StreamTokens.chrome150, + 200: dark_tokens.StreamTokens.chrome200, + 300: dark_tokens.StreamTokens.chrome300, + 400: dark_tokens.StreamTokens.chrome400, + 500: Color(primaryColorValue), + 600: dark_tokens.StreamTokens.chrome600, + 700: dark_tokens.StreamTokens.chrome700, + 800: dark_tokens.StreamTokens.chrome800, + 900: dark_tokens.StreamTokens.chrome900, + 1000: dark_tokens.StreamTokens.chrome1000, + }, + ); + } + + /// The shade-0 color (always white – used on dark/accent surfaces). + Color get shade0 => this[0]!; + + /// The shade-1000 color (always black – used as the deepest neutral). + Color get shade1000 => this[1000]!; +} + /// A background/foreground color pair for avatars. /// /// Used for deterministic color selection based on user identity. diff --git a/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.g.theme.dart b/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.g.theme.dart index 262e994..c464c59 100644 --- a/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.g.theme.dart +++ b/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.g.theme.dart @@ -31,12 +31,12 @@ mixin _$StreamColorScheme { return StreamColorScheme.raw( brand: t < 0.5 ? a.brand : b.brand, + chrome: t < 0.5 ? a.chrome : b.chrome, accentPrimary: Color.lerp(a.accentPrimary, b.accentPrimary, t)!, accentSuccess: Color.lerp(a.accentSuccess, b.accentSuccess, t)!, accentWarning: Color.lerp(a.accentWarning, b.accentWarning, t)!, accentError: Color.lerp(a.accentError, b.accentError, t)!, accentNeutral: Color.lerp(a.accentNeutral, b.accentNeutral, t)!, - accentBlack: Color.lerp(a.accentBlack, b.accentBlack, t)!, textPrimary: Color.lerp(a.textPrimary, b.textPrimary, t)!, textSecondary: Color.lerp(a.textSecondary, b.textSecondary, t)!, textTertiary: Color.lerp(a.textTertiary, b.textTertiary, t)!, @@ -44,7 +44,6 @@ mixin _$StreamColorScheme { textInverse: Color.lerp(a.textInverse, b.textInverse, t)!, textLink: Color.lerp(a.textLink, b.textLink, t)!, textOnAccent: Color.lerp(a.textOnAccent, b.textOnAccent, t)!, - textOnDark: Color.lerp(a.textOnDark, b.textOnDark, t)!, backgroundApp: Color.lerp(a.backgroundApp, b.backgroundApp, t)!, backgroundSurface: Color.lerp( a.backgroundSurface, @@ -61,11 +60,22 @@ mixin _$StreamColorScheme { b.backgroundSurfaceStrong, t, )!, - backgroundOverlay: Color.lerp( - a.backgroundOverlay, - b.backgroundOverlay, + backgroundSurfaceCard: Color.lerp( + a.backgroundSurfaceCard, + b.backgroundSurfaceCard, t, )!, + backgroundOnAccent: Color.lerp( + a.backgroundOnAccent, + b.backgroundOnAccent, + t, + )!, + backgroundHighlight: Color.lerp( + a.backgroundHighlight, + b.backgroundHighlight, + t, + )!, + backgroundScrim: Color.lerp(a.backgroundScrim, b.backgroundScrim, t)!, backgroundOverlayLight: Color.lerp( a.backgroundOverlayLight, b.backgroundOverlayLight, @@ -114,13 +124,24 @@ mixin _$StreamColorScheme { borderDefault: Color.lerp(a.borderDefault, b.borderDefault, t)!, borderSubtle: Color.lerp(a.borderSubtle, b.borderSubtle, t)!, borderStrong: Color.lerp(a.borderStrong, b.borderStrong, t)!, - borderOnDark: Color.lerp(a.borderOnDark, b.borderOnDark, t)!, + borderInverse: Color.lerp(a.borderInverse, b.borderInverse, t)!, borderOnAccent: Color.lerp(a.borderOnAccent, b.borderOnAccent, t)!, borderOnSurface: Color.lerp(a.borderOnSurface, b.borderOnSurface, t)!, - borderOpacity10: Color.lerp(a.borderOpacity10, b.borderOpacity10, t)!, - borderOpacity25: Color.lerp(a.borderOpacity25, b.borderOpacity25, t)!, + borderOpacitySubtle: Color.lerp( + a.borderOpacitySubtle, + b.borderOpacitySubtle, + t, + )!, + borderOpacityStrong: Color.lerp( + a.borderOpacityStrong, + b.borderOpacityStrong, + t, + )!, borderFocus: Color.lerp(a.borderFocus, b.borderFocus, t)!, borderDisabled: Color.lerp(a.borderDisabled, b.borderDisabled, t)!, + borderHover: Color.lerp(a.borderHover, b.borderHover, t)!, + borderPressed: Color.lerp(a.borderPressed, b.borderPressed, t)!, + borderActive: Color.lerp(a.borderActive, b.borderActive, t)!, borderError: Color.lerp(a.borderError, b.borderError, t)!, borderWarning: Color.lerp(a.borderWarning, b.borderWarning, t)!, borderSuccess: Color.lerp(a.borderSuccess, b.borderSuccess, t)!, @@ -138,12 +159,12 @@ mixin _$StreamColorScheme { StreamColorScheme copyWith({ StreamColorSwatch? brand, + StreamColorSwatch? chrome, Color? accentPrimary, Color? accentSuccess, Color? accentWarning, Color? accentError, Color? accentNeutral, - Color? accentBlack, Color? textPrimary, Color? textSecondary, Color? textTertiary, @@ -151,12 +172,14 @@ mixin _$StreamColorScheme { Color? textInverse, Color? textLink, Color? textOnAccent, - Color? textOnDark, Color? backgroundApp, Color? backgroundSurface, Color? backgroundSurfaceSubtle, Color? backgroundSurfaceStrong, - Color? backgroundOverlay, + Color? backgroundSurfaceCard, + Color? backgroundOnAccent, + Color? backgroundHighlight, + Color? backgroundScrim, Color? backgroundOverlayLight, Color? backgroundOverlayDark, Color? backgroundDisabled, @@ -169,13 +192,16 @@ mixin _$StreamColorScheme { Color? borderDefault, Color? borderSubtle, Color? borderStrong, - Color? borderOnDark, + Color? borderInverse, Color? borderOnAccent, Color? borderOnSurface, - Color? borderOpacity10, - Color? borderOpacity25, + Color? borderOpacitySubtle, + Color? borderOpacityStrong, Color? borderFocus, Color? borderDisabled, + Color? borderHover, + Color? borderPressed, + Color? borderActive, Color? borderError, Color? borderWarning, Color? borderSuccess, @@ -193,12 +219,12 @@ mixin _$StreamColorScheme { return StreamColorScheme.raw( brand: brand ?? _this.brand, + chrome: chrome ?? _this.chrome, accentPrimary: accentPrimary ?? _this.accentPrimary, accentSuccess: accentSuccess ?? _this.accentSuccess, accentWarning: accentWarning ?? _this.accentWarning, accentError: accentError ?? _this.accentError, accentNeutral: accentNeutral ?? _this.accentNeutral, - accentBlack: accentBlack ?? _this.accentBlack, textPrimary: textPrimary ?? _this.textPrimary, textSecondary: textSecondary ?? _this.textSecondary, textTertiary: textTertiary ?? _this.textTertiary, @@ -206,14 +232,17 @@ mixin _$StreamColorScheme { textInverse: textInverse ?? _this.textInverse, textLink: textLink ?? _this.textLink, textOnAccent: textOnAccent ?? _this.textOnAccent, - textOnDark: textOnDark ?? _this.textOnDark, backgroundApp: backgroundApp ?? _this.backgroundApp, backgroundSurface: backgroundSurface ?? _this.backgroundSurface, backgroundSurfaceSubtle: backgroundSurfaceSubtle ?? _this.backgroundSurfaceSubtle, backgroundSurfaceStrong: backgroundSurfaceStrong ?? _this.backgroundSurfaceStrong, - backgroundOverlay: backgroundOverlay ?? _this.backgroundOverlay, + backgroundSurfaceCard: + backgroundSurfaceCard ?? _this.backgroundSurfaceCard, + backgroundOnAccent: backgroundOnAccent ?? _this.backgroundOnAccent, + backgroundHighlight: backgroundHighlight ?? _this.backgroundHighlight, + backgroundScrim: backgroundScrim ?? _this.backgroundScrim, backgroundOverlayLight: backgroundOverlayLight ?? _this.backgroundOverlayLight, backgroundOverlayDark: @@ -228,13 +257,16 @@ mixin _$StreamColorScheme { borderDefault: borderDefault ?? _this.borderDefault, borderSubtle: borderSubtle ?? _this.borderSubtle, borderStrong: borderStrong ?? _this.borderStrong, - borderOnDark: borderOnDark ?? _this.borderOnDark, + borderInverse: borderInverse ?? _this.borderInverse, borderOnAccent: borderOnAccent ?? _this.borderOnAccent, borderOnSurface: borderOnSurface ?? _this.borderOnSurface, - borderOpacity10: borderOpacity10 ?? _this.borderOpacity10, - borderOpacity25: borderOpacity25 ?? _this.borderOpacity25, + borderOpacitySubtle: borderOpacitySubtle ?? _this.borderOpacitySubtle, + borderOpacityStrong: borderOpacityStrong ?? _this.borderOpacityStrong, borderFocus: borderFocus ?? _this.borderFocus, borderDisabled: borderDisabled ?? _this.borderDisabled, + borderHover: borderHover ?? _this.borderHover, + borderPressed: borderPressed ?? _this.borderPressed, + borderActive: borderActive ?? _this.borderActive, borderError: borderError ?? _this.borderError, borderWarning: borderWarning ?? _this.borderWarning, borderSuccess: borderSuccess ?? _this.borderSuccess, @@ -263,12 +295,12 @@ mixin _$StreamColorScheme { return copyWith( brand: other.brand, + chrome: other.chrome, accentPrimary: other.accentPrimary, accentSuccess: other.accentSuccess, accentWarning: other.accentWarning, accentError: other.accentError, accentNeutral: other.accentNeutral, - accentBlack: other.accentBlack, textPrimary: other.textPrimary, textSecondary: other.textSecondary, textTertiary: other.textTertiary, @@ -276,12 +308,14 @@ mixin _$StreamColorScheme { textInverse: other.textInverse, textLink: other.textLink, textOnAccent: other.textOnAccent, - textOnDark: other.textOnDark, backgroundApp: other.backgroundApp, backgroundSurface: other.backgroundSurface, backgroundSurfaceSubtle: other.backgroundSurfaceSubtle, backgroundSurfaceStrong: other.backgroundSurfaceStrong, - backgroundOverlay: other.backgroundOverlay, + backgroundSurfaceCard: other.backgroundSurfaceCard, + backgroundOnAccent: other.backgroundOnAccent, + backgroundHighlight: other.backgroundHighlight, + backgroundScrim: other.backgroundScrim, backgroundOverlayLight: other.backgroundOverlayLight, backgroundOverlayDark: other.backgroundOverlayDark, backgroundDisabled: other.backgroundDisabled, @@ -294,13 +328,16 @@ mixin _$StreamColorScheme { borderDefault: other.borderDefault, borderSubtle: other.borderSubtle, borderStrong: other.borderStrong, - borderOnDark: other.borderOnDark, + borderInverse: other.borderInverse, borderOnAccent: other.borderOnAccent, borderOnSurface: other.borderOnSurface, - borderOpacity10: other.borderOpacity10, - borderOpacity25: other.borderOpacity25, + borderOpacitySubtle: other.borderOpacitySubtle, + borderOpacityStrong: other.borderOpacityStrong, borderFocus: other.borderFocus, borderDisabled: other.borderDisabled, + borderHover: other.borderHover, + borderPressed: other.borderPressed, + borderActive: other.borderActive, borderError: other.borderError, borderWarning: other.borderWarning, borderSuccess: other.borderSuccess, @@ -330,12 +367,12 @@ mixin _$StreamColorScheme { final _other = (other as StreamColorScheme); return _other.brand == _this.brand && + _other.chrome == _this.chrome && _other.accentPrimary == _this.accentPrimary && _other.accentSuccess == _this.accentSuccess && _other.accentWarning == _this.accentWarning && _other.accentError == _this.accentError && _other.accentNeutral == _this.accentNeutral && - _other.accentBlack == _this.accentBlack && _other.textPrimary == _this.textPrimary && _other.textSecondary == _this.textSecondary && _other.textTertiary == _this.textTertiary && @@ -343,12 +380,14 @@ mixin _$StreamColorScheme { _other.textInverse == _this.textInverse && _other.textLink == _this.textLink && _other.textOnAccent == _this.textOnAccent && - _other.textOnDark == _this.textOnDark && _other.backgroundApp == _this.backgroundApp && _other.backgroundSurface == _this.backgroundSurface && _other.backgroundSurfaceSubtle == _this.backgroundSurfaceSubtle && _other.backgroundSurfaceStrong == _this.backgroundSurfaceStrong && - _other.backgroundOverlay == _this.backgroundOverlay && + _other.backgroundSurfaceCard == _this.backgroundSurfaceCard && + _other.backgroundOnAccent == _this.backgroundOnAccent && + _other.backgroundHighlight == _this.backgroundHighlight && + _other.backgroundScrim == _this.backgroundScrim && _other.backgroundOverlayLight == _this.backgroundOverlayLight && _other.backgroundOverlayDark == _this.backgroundOverlayDark && _other.backgroundDisabled == _this.backgroundDisabled && @@ -361,13 +400,16 @@ mixin _$StreamColorScheme { _other.borderDefault == _this.borderDefault && _other.borderSubtle == _this.borderSubtle && _other.borderStrong == _this.borderStrong && - _other.borderOnDark == _this.borderOnDark && + _other.borderInverse == _this.borderInverse && _other.borderOnAccent == _this.borderOnAccent && _other.borderOnSurface == _this.borderOnSurface && - _other.borderOpacity10 == _this.borderOpacity10 && - _other.borderOpacity25 == _this.borderOpacity25 && + _other.borderOpacitySubtle == _this.borderOpacitySubtle && + _other.borderOpacityStrong == _this.borderOpacityStrong && _other.borderFocus == _this.borderFocus && _other.borderDisabled == _this.borderDisabled && + _other.borderHover == _this.borderHover && + _other.borderPressed == _this.borderPressed && + _other.borderActive == _this.borderActive && _other.borderError == _this.borderError && _other.borderWarning == _this.borderWarning && _other.borderSuccess == _this.borderSuccess && @@ -389,12 +431,12 @@ mixin _$StreamColorScheme { return Object.hashAll([ runtimeType, _this.brand, + _this.chrome, _this.accentPrimary, _this.accentSuccess, _this.accentWarning, _this.accentError, _this.accentNeutral, - _this.accentBlack, _this.textPrimary, _this.textSecondary, _this.textTertiary, @@ -402,12 +444,14 @@ mixin _$StreamColorScheme { _this.textInverse, _this.textLink, _this.textOnAccent, - _this.textOnDark, _this.backgroundApp, _this.backgroundSurface, _this.backgroundSurfaceSubtle, _this.backgroundSurfaceStrong, - _this.backgroundOverlay, + _this.backgroundSurfaceCard, + _this.backgroundOnAccent, + _this.backgroundHighlight, + _this.backgroundScrim, _this.backgroundOverlayLight, _this.backgroundOverlayDark, _this.backgroundDisabled, @@ -420,13 +464,16 @@ mixin _$StreamColorScheme { _this.borderDefault, _this.borderSubtle, _this.borderStrong, - _this.borderOnDark, + _this.borderInverse, _this.borderOnAccent, _this.borderOnSurface, - _this.borderOpacity10, - _this.borderOpacity25, + _this.borderOpacitySubtle, + _this.borderOpacityStrong, _this.borderFocus, _this.borderDisabled, + _this.borderHover, + _this.borderPressed, + _this.borderActive, _this.borderError, _this.borderWarning, _this.borderSuccess, From bfd7b38472bfa913d59730d3fb381ad035ee6142 Mon Sep 17 00:00:00 2001 From: Rene Floor Date: Fri, 13 Mar 2026 15:08:23 +0100 Subject: [PATCH 3/9] update some wrong token values --- .../lib/src/theme/semantics/stream_color_scheme.dart | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.dart b/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.dart index 4da2335..82261e7 100644 --- a/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.dart +++ b/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.dart @@ -165,7 +165,7 @@ class StreamColorScheme with _$StreamColorScheme { borderOpacityStrong ??= light_tokens.StreamTokens.borderCoreOpacityStrong; // Border - Utility - borderFocus ??= brand.shade300; + borderFocus ??= brand.shade150; borderDisabled ??= chrome.shade100; borderHover ??= light_tokens.StreamTokens.borderUtilityHover; borderPressed ??= light_tokens.StreamTokens.borderUtilityPressed; @@ -173,7 +173,7 @@ class StreamColorScheme with _$StreamColorScheme { borderError ??= accentError; borderWarning ??= accentWarning; borderSuccess ??= accentSuccess; - borderSelected ??= accentPrimary; + borderSelected ??= light_tokens.StreamTokens.borderUtilitySelected; // State stateHover ??= light_tokens.StreamTokens.backgroundUtilityHover; @@ -344,7 +344,7 @@ class StreamColorScheme with _$StreamColorScheme { chrome ??= StreamChromeColor.dark(); // Accent - accentPrimary ??= brand.shade500; + accentPrimary ??= brand.shade400; accentSuccess ??= dark_tokens.StreamTokens.accentSuccess; accentWarning ??= dark_tokens.StreamTokens.accentWarning; accentError ??= dark_tokens.StreamTokens.accentError; @@ -356,7 +356,7 @@ class StreamColorScheme with _$StreamColorScheme { textTertiary ??= chrome.shade500; textDisabled ??= chrome.shade300; textInverse ??= chrome[1000] ?? StreamColors.black; - textLink ??= accentPrimary; + textLink ??= brand.shade600; textOnAccent ??= chrome[0] ?? StreamColors.white; // Background @@ -390,7 +390,7 @@ class StreamColorScheme with _$StreamColorScheme { borderOnSurface ??= chrome.shade200; // Border - Utility - borderFocus ??= brand.shade300; + borderFocus ??= brand.shade150; borderDisabled ??= chrome.shade100; borderHover ??= dark_tokens.StreamTokens.borderUtilityHover; borderPressed ??= dark_tokens.StreamTokens.borderUtilityPressed; @@ -398,7 +398,7 @@ class StreamColorScheme with _$StreamColorScheme { borderError ??= accentError; borderWarning ??= accentWarning; borderSuccess ??= accentSuccess; - borderSelected ??= accentPrimary; + borderSelected ??= dark_tokens.StreamTokens.borderUtilitySelected; // State stateHover ??= dark_tokens.StreamTokens.backgroundUtilityHover; From f1498747f28afc66d99500b4806e13d2f4d892d7 Mon Sep 17 00:00:00 2001 From: Rene Floor Date: Fri, 13 Mar 2026 15:38:14 +0100 Subject: [PATCH 4/9] update theme configurations --- .../lib/config/theme_configuration.dart | 187 +++++++++++++++--- .../theme_customization_panel.dart | 121 +++++++++++- .../stream_color_swatch_helper.dart | 2 + 3 files changed, 279 insertions(+), 31 deletions(-) diff --git a/apps/design_system_gallery/lib/config/theme_configuration.dart b/apps/design_system_gallery/lib/config/theme_configuration.dart index e368fbf..d150fda 100644 --- a/apps/design_system_gallery/lib/config/theme_configuration.dart +++ b/apps/design_system_gallery/lib/config/theme_configuration.dart @@ -51,8 +51,19 @@ class ThemeConfiguration extends ChangeNotifier { Color? _backgroundSurface; Color? _backgroundSurfaceSubtle; Color? _backgroundSurfaceStrong; + Color? _backgroundSurfaceCard; + Color? _backgroundOnAccent; + Color? _backgroundHighlight; Color? _backgroundScrim; + Color? _backgroundOverlayLight; + Color? _backgroundOverlayDark; Color? _backgroundDisabled; + Color? _backgroundInverse; + Color? _backgroundElevation0; + Color? _backgroundElevation1; + Color? _backgroundElevation2; + Color? _backgroundElevation3; + Color? _backgroundElevation4; // ========================================================================= // Border Colors - Core @@ -62,6 +73,7 @@ class ThemeConfiguration extends ChangeNotifier { Color? _borderStrong; Color? _borderInverse; Color? _borderOnAccent; + Color? _borderOnSurface; Color? _borderOpacitySubtle; Color? _borderOpacityStrong; @@ -70,6 +82,9 @@ class ThemeConfiguration extends ChangeNotifier { // ========================================================================= Color? _borderFocus; Color? _borderDisabled; + Color? _borderHover; + Color? _borderPressed; + Color? _borderActive; Color? _borderError; Color? _borderWarning; Color? _borderSuccess; @@ -100,6 +115,11 @@ class ThemeConfiguration extends ChangeNotifier { // ========================================================================= Color? _brandPrimaryColor; + // ========================================================================= + // Chrome Color + // ========================================================================= + Color? _chromePrimaryColor; + // ========================================================================= // Getters - Accent // ========================================================================= @@ -127,8 +147,19 @@ class ThemeConfiguration extends ChangeNotifier { Color get backgroundSurface => _backgroundSurface ?? _themeData.colorScheme.backgroundSurface; Color get backgroundSurfaceSubtle => _backgroundSurfaceSubtle ?? _themeData.colorScheme.backgroundSurfaceSubtle; Color get backgroundSurfaceStrong => _backgroundSurfaceStrong ?? _themeData.colorScheme.backgroundSurfaceStrong; + Color get backgroundSurfaceCard => _backgroundSurfaceCard ?? _themeData.colorScheme.backgroundSurfaceCard; + Color get backgroundOnAccent => _backgroundOnAccent ?? _themeData.colorScheme.backgroundOnAccent; + Color get backgroundHighlight => _backgroundHighlight ?? _themeData.colorScheme.backgroundHighlight; Color get backgroundScrim => _backgroundScrim ?? _themeData.colorScheme.backgroundScrim; + Color get backgroundOverlayLight => _backgroundOverlayLight ?? _themeData.colorScheme.backgroundOverlayLight; + Color get backgroundOverlayDark => _backgroundOverlayDark ?? _themeData.colorScheme.backgroundOverlayDark; Color get backgroundDisabled => _backgroundDisabled ?? _themeData.colorScheme.backgroundDisabled; + Color get backgroundInverse => _backgroundInverse ?? _themeData.colorScheme.backgroundInverse; + Color get backgroundElevation0 => _backgroundElevation0 ?? _themeData.colorScheme.backgroundElevation0; + Color get backgroundElevation1 => _backgroundElevation1 ?? _themeData.colorScheme.backgroundElevation1; + Color get backgroundElevation2 => _backgroundElevation2 ?? _themeData.colorScheme.backgroundElevation2; + Color get backgroundElevation3 => _backgroundElevation3 ?? _themeData.colorScheme.backgroundElevation3; + Color get backgroundElevation4 => _backgroundElevation4 ?? _themeData.colorScheme.backgroundElevation4; // ========================================================================= // Getters - Border Core @@ -138,6 +169,7 @@ class ThemeConfiguration extends ChangeNotifier { Color get borderStrong => _borderStrong ?? _themeData.colorScheme.borderStrong; Color get borderInverse => _borderInverse ?? _themeData.colorScheme.borderInverse; Color get borderOnAccent => _borderOnAccent ?? _themeData.colorScheme.borderOnAccent; + Color get borderOnSurface => _borderOnSurface ?? _themeData.colorScheme.borderOnSurface; Color get borderOpacitySubtle => _borderOpacitySubtle ?? _themeData.colorScheme.borderOpacitySubtle; Color get borderOpacityStrong => _borderOpacityStrong ?? _themeData.colorScheme.borderOpacityStrong; @@ -146,6 +178,9 @@ class ThemeConfiguration extends ChangeNotifier { // ========================================================================= Color get borderFocus => _borderFocus ?? _themeData.colorScheme.borderFocus; Color get borderDisabled => _borderDisabled ?? _themeData.colorScheme.borderDisabled; + Color get borderHover => _borderHover ?? _themeData.colorScheme.borderHover; + Color get borderPressed => _borderPressed ?? _themeData.colorScheme.borderPressed; + Color get borderActive => _borderActive ?? _themeData.colorScheme.borderActive; Color get borderError => _borderError ?? _themeData.colorScheme.borderError; Color get borderWarning => _borderWarning ?? _themeData.colorScheme.borderWarning; Color get borderSuccess => _borderSuccess ?? _themeData.colorScheme.borderSuccess; @@ -176,6 +211,11 @@ class ThemeConfiguration extends ChangeNotifier { // ========================================================================= Color get brandPrimaryColor => _brandPrimaryColor ?? _themeData.colorScheme.brand.shade500; + // ========================================================================= + // Getters - Chrome + // ========================================================================= + Color get chromePrimaryColor => _chromePrimaryColor ?? _themeData.colorScheme.chrome.shade500; + // ========================================================================= // Setters // ========================================================================= @@ -208,8 +248,19 @@ class ThemeConfiguration extends ChangeNotifier { void setBackgroundSurface(Color color) => _update(() => _backgroundSurface = color); void setBackgroundSurfaceSubtle(Color color) => _update(() => _backgroundSurfaceSubtle = color); void setBackgroundSurfaceStrong(Color color) => _update(() => _backgroundSurfaceStrong = color); + void setBackgroundSurfaceCard(Color color) => _update(() => _backgroundSurfaceCard = color); + void setBackgroundOnAccent(Color color) => _update(() => _backgroundOnAccent = color); + void setBackgroundHighlight(Color color) => _update(() => _backgroundHighlight = color); void setBackgroundScrim(Color color) => _update(() => _backgroundScrim = color); + void setBackgroundOverlayLight(Color color) => _update(() => _backgroundOverlayLight = color); + void setBackgroundOverlayDark(Color color) => _update(() => _backgroundOverlayDark = color); void setBackgroundDisabled(Color color) => _update(() => _backgroundDisabled = color); + void setBackgroundInverse(Color color) => _update(() => _backgroundInverse = color); + void setBackgroundElevation0(Color color) => _update(() => _backgroundElevation0 = color); + void setBackgroundElevation1(Color color) => _update(() => _backgroundElevation1 = color); + void setBackgroundElevation2(Color color) => _update(() => _backgroundElevation2 = color); + void setBackgroundElevation3(Color color) => _update(() => _backgroundElevation3 = color); + void setBackgroundElevation4(Color color) => _update(() => _backgroundElevation4 = color); // Border Core void setBorderDefault(Color color) => _update(() => _borderDefault = color); @@ -217,12 +268,16 @@ class ThemeConfiguration extends ChangeNotifier { void setBorderStrong(Color color) => _update(() => _borderStrong = color); void setBorderInverse(Color color) => _update(() => _borderInverse = color); void setBorderOnAccent(Color color) => _update(() => _borderOnAccent = color); + void setBorderOnSurface(Color color) => _update(() => _borderOnSurface = color); void setBorderOpacitySubtle(Color color) => _update(() => _borderOpacitySubtle = color); void setBorderOpacityStrong(Color color) => _update(() => _borderOpacityStrong = color); // Border Utility void setBorderFocus(Color color) => _update(() => _borderFocus = color); void setBorderDisabled(Color color) => _update(() => _borderDisabled = color); + void setBorderHover(Color color) => _update(() => _borderHover = color); + void setBorderPressed(Color color) => _update(() => _borderPressed = color); + void setBorderActive(Color color) => _update(() => _borderActive = color); void setBorderError(Color color) => _update(() => _borderError = color); void setBorderWarning(Color color) => _update(() => _borderWarning = color); void setBorderSuccess(Color color) => _update(() => _borderSuccess = color); @@ -245,6 +300,9 @@ class ThemeConfiguration extends ChangeNotifier { // Brand void setBrandPrimaryColor(Color color) => _update(() => _brandPrimaryColor = color); + // Chrome + void setChromePrimaryColor(Color color) => _update(() => _chromePrimaryColor = color); + void updateAvatarPaletteAt(int index, StreamAvatarColorPair pair) { final current = List.from(avatarPalette); if (index < current.length) { @@ -294,19 +352,34 @@ class ThemeConfiguration extends ChangeNotifier { _backgroundSurface = null; _backgroundSurfaceSubtle = null; _backgroundSurfaceStrong = null; + _backgroundSurfaceCard = null; + _backgroundOnAccent = null; + _backgroundHighlight = null; _backgroundScrim = null; + _backgroundOverlayLight = null; + _backgroundOverlayDark = null; _backgroundDisabled = null; + _backgroundInverse = null; + _backgroundElevation0 = null; + _backgroundElevation1 = null; + _backgroundElevation2 = null; + _backgroundElevation3 = null; + _backgroundElevation4 = null; // Border Core _borderDefault = null; _borderSubtle = null; _borderStrong = null; _borderInverse = null; _borderOnAccent = null; + _borderOnSurface = null; _borderOpacitySubtle = null; _borderOpacityStrong = null; // Border Utility _borderFocus = null; _borderDisabled = null; + _borderHover = null; + _borderPressed = null; + _borderActive = null; _borderError = null; _borderWarning = null; _borderSuccess = null; @@ -324,6 +397,8 @@ class ThemeConfiguration extends ChangeNotifier { _avatarPalette = null; // Brand _brandPrimaryColor = null; + // Chrome + _chromePrimaryColor = null; _rebuildTheme(); notifyListeners(); @@ -331,70 +406,132 @@ class ThemeConfiguration extends ChangeNotifier { void _rebuildTheme() { final baseColorScheme = _brightness == Brightness.dark ? StreamColorScheme.dark() : StreamColorScheme.light(); + final isDark = _brightness == Brightness.dark; // Compute effective brand swatch (if brand primary is customized) final effectiveBrand = _brandPrimaryColor != null ? StreamColorSwatch.fromColor(_brandPrimaryColor!, brightness: _brightness) : null; - // Derived from brand: accentPrimary defaults to brand.shade500 + // Compute effective chrome swatch (if chrome primary is customized) + final effectiveChrome = _chromePrimaryColor != null + ? StreamColorSwatch.fromColor(_chromePrimaryColor!, brightness: _brightness) + : null; + + // Derived from brand: accentPrimary defaults to brand.shade500 (light) / shade400 (dark) final effectiveAccentPrimary = _accentPrimary ?? _brandPrimaryColor; - // Derived from brand: borderFocus defaults to brand.shade300 - final effectiveBorderFocus = _borderFocus ?? effectiveBrand?.shade300; + // Derived from brand: borderFocus defaults to brand.shade150 + final effectiveBorderFocus = _borderFocus ?? effectiveBrand?.shade150; // Derived from brand: stateFocused defaults to brand.shade100 final effectiveStateFocused = _stateFocused ?? effectiveBrand?.shade100; - // Derived from accentPrimary: textLink and borderSelected + // Derived from accentPrimary: textLink and borderActive final effectiveTextLink = _textLink ?? effectiveAccentPrimary; - final effectiveBorderSelected = _borderSelected ?? effectiveAccentPrimary; + final effectiveBorderActive = _borderActive ?? effectiveAccentPrimary; // Derived from other accents: border utility colors final effectiveBorderError = _borderError ?? _accentError; final effectiveBorderWarning = _borderWarning ?? _accentWarning; final effectiveBorderSuccess = _borderSuccess ?? _accentSuccess; + // Derived from chrome: all chrome-dependent semantic colors. + // When chrome is customized via copyWith, the base scheme still holds values + // derived from the default chrome, so we must re-derive all of them explicitly. + // Extract subscript lookups to avoid Dart parsing ambiguity with ?[] inside ternaries. + final chromeShade0 = effectiveChrome?[0]; + final chromeShade1000 = effectiveChrome?[1000]; + + final effectiveAccentNeutral = _accentNeutral ?? effectiveChrome?.shade500; + final effectiveTextPrimary = _textPrimary ?? effectiveChrome?.shade900; + final effectiveTextSecondary = _textSecondary ?? effectiveChrome?.shade700; + final effectiveTextTertiary = _textTertiary ?? effectiveChrome?.shade500; + final effectiveTextDisabled = _textDisabled ?? effectiveChrome?.shade300; + final effectiveTextInverse = _textInverse ?? (isDark ? chromeShade1000 : chromeShade0); + final effectiveTextOnAccent = _textOnAccent ?? chromeShade0; + final effectiveBackgroundSurface = _backgroundSurface ?? effectiveChrome?.shade100; + final effectiveBackgroundSurfaceSubtle = _backgroundSurfaceSubtle ?? effectiveChrome?.shade50; + final effectiveBackgroundSurfaceStrong = _backgroundSurfaceStrong ?? effectiveChrome?.shade150; + final effectiveBackgroundSurfaceCard = + _backgroundSurfaceCard ?? (isDark ? effectiveChrome?.shade100 : effectiveChrome?.shade50); + final effectiveBackgroundOnAccent = _backgroundOnAccent ?? chromeShade0; + final effectiveBackgroundDisabled = _backgroundDisabled ?? effectiveChrome?.shade100; + final effectiveBackgroundInverse = _backgroundInverse ?? effectiveChrome?.shade900; + final effectiveBackgroundElevation0 = _backgroundElevation0 ?? (isDark ? chromeShade1000 : chromeShade0); + final effectiveBackgroundElevation1 = + _backgroundElevation1 ?? (isDark ? effectiveChrome?.shade50 : chromeShade0); + final effectiveBackgroundElevation2 = + _backgroundElevation2 ?? (isDark ? effectiveChrome?.shade100 : chromeShade0); + final effectiveBackgroundElevation3 = + _backgroundElevation3 ?? (isDark ? effectiveChrome?.shade200 : chromeShade0); + final effectiveBackgroundElevation4 = + _backgroundElevation4 ?? (isDark ? effectiveChrome?.shade300 : chromeShade0); + // backgroundApp derives from backgroundElevation0 in both themes + final effectiveBackgroundApp = _backgroundApp ?? effectiveBackgroundElevation0; + // In dark, borderInverse uses a fixed token (not chrome); in light it uses chrome[0] + final effectiveBorderInverse = _borderInverse ?? (isDark ? null : chromeShade0); + final effectiveBorderOnAccent = _borderOnAccent ?? chromeShade0; + final effectiveBorderOnSurface = _borderOnSurface ?? effectiveChrome?.shade200; + final effectiveBorderDisabled = _borderDisabled ?? effectiveChrome?.shade100; + final colorScheme = baseColorScheme.copyWith( // Brand brand: effectiveBrand, - // Accent - brand primary affects accentPrimary + // Chrome + chrome: effectiveChrome, + // Accent accentPrimary: effectiveAccentPrimary, accentSuccess: _accentSuccess, accentWarning: _accentWarning, accentError: _accentError, - accentNeutral: _accentNeutral, - // Text - textLink derived from accentPrimary - textPrimary: _textPrimary, - textSecondary: _textSecondary, - textTertiary: _textTertiary, - textDisabled: _textDisabled, - textInverse: _textInverse, + accentNeutral: effectiveAccentNeutral, + // Text + textPrimary: effectiveTextPrimary, + textSecondary: effectiveTextSecondary, + textTertiary: effectiveTextTertiary, + textDisabled: effectiveTextDisabled, + textInverse: effectiveTextInverse, textLink: effectiveTextLink, - textOnAccent: _textOnAccent, + textOnAccent: effectiveTextOnAccent, // Background - backgroundApp: _backgroundApp, - backgroundSurface: _backgroundSurface, - backgroundSurfaceSubtle: _backgroundSurfaceSubtle, - backgroundSurfaceStrong: _backgroundSurfaceStrong, + backgroundApp: effectiveBackgroundApp, + backgroundSurface: effectiveBackgroundSurface, + backgroundSurfaceSubtle: effectiveBackgroundSurfaceSubtle, + backgroundSurfaceStrong: effectiveBackgroundSurfaceStrong, + backgroundSurfaceCard: effectiveBackgroundSurfaceCard, + backgroundOnAccent: effectiveBackgroundOnAccent, + backgroundHighlight: _backgroundHighlight, backgroundScrim: _backgroundScrim, - backgroundDisabled: _backgroundDisabled, + backgroundOverlayLight: _backgroundOverlayLight, + backgroundOverlayDark: _backgroundOverlayDark, + backgroundDisabled: effectiveBackgroundDisabled, + backgroundInverse: effectiveBackgroundInverse, + backgroundElevation0: effectiveBackgroundElevation0, + backgroundElevation1: effectiveBackgroundElevation1, + backgroundElevation2: effectiveBackgroundElevation2, + backgroundElevation3: effectiveBackgroundElevation3, + backgroundElevation4: effectiveBackgroundElevation4, // Border Core borderDefault: _borderDefault, borderSubtle: _borderSubtle, borderStrong: _borderStrong, - borderInverse: _borderInverse, - borderOnAccent: _borderOnAccent, + borderInverse: effectiveBorderInverse, + borderOnAccent: effectiveBorderOnAccent, + borderOnSurface: effectiveBorderOnSurface, borderOpacitySubtle: _borderOpacitySubtle, borderOpacityStrong: _borderOpacityStrong, - // Border Utility - derived from brand and accents + // Border Utility borderFocus: effectiveBorderFocus, - borderDisabled: _borderDisabled, + borderDisabled: effectiveBorderDisabled, + borderHover: _borderHover, + borderPressed: _borderPressed, + borderActive: effectiveBorderActive, borderError: effectiveBorderError, borderWarning: effectiveBorderWarning, borderSuccess: effectiveBorderSuccess, - borderSelected: effectiveBorderSelected, - // State - stateFocused derived from brand + borderSelected: _borderSelected, + // State stateHover: _stateHover, statePressed: _statePressed, stateSelected: _stateSelected, diff --git a/apps/design_system_gallery/lib/widgets/theme_studio/theme_customization_panel.dart b/apps/design_system_gallery/lib/widgets/theme_studio/theme_customization_panel.dart index 9a32fb2..4465ca8 100644 --- a/apps/design_system_gallery/lib/widgets/theme_studio/theme_customization_panel.dart +++ b/apps/design_system_gallery/lib/widgets/theme_studio/theme_customization_panel.dart @@ -83,6 +83,8 @@ class _ThemeCustomizationPanelState extends State { SizedBox(height: spacing.md), _buildBrandSection(context), SizedBox(height: spacing.md), + _buildChromeSection(context), + SizedBox(height: spacing.md), _buildAccentColorsSection(context), SizedBox(height: spacing.md), _buildTextColorsSection(context), @@ -224,6 +226,20 @@ class _ThemeCustomizationPanelState extends State { ); } + Widget _buildChromeSection(BuildContext context) { + final config = context.read(); + return SectionCard( + title: 'Chrome Color', + subtitle: 'chrome', + icon: Icons.circle_outlined, + child: ColorPickerTile( + label: 'chromePrimary', + color: config.chromePrimaryColor, + onColorChanged: config.setChromePrimaryColor, + ), + ); + } + Widget _buildAccentColorsSection(BuildContext context) { final config = context.read(); return SectionCard( @@ -312,17 +328,62 @@ class _ThemeCustomizationPanelState extends State { Widget _buildBackgroundColorsSection(BuildContext context) { final config = context.read(); + final spacing = context.streamSpacing; return SectionCard( title: 'Background Colors', subtitle: 'background*', icon: Icons.format_paint, child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ ColorPickerTile( label: 'backgroundApp', color: config.backgroundApp, onColorChanged: config.setBackgroundApp, ), + ColorPickerTile( + label: 'backgroundInverse', + color: config.backgroundInverse, + onColorChanged: config.setBackgroundInverse, + ), + ColorPickerTile( + label: 'backgroundOnAccent', + color: config.backgroundOnAccent, + onColorChanged: config.setBackgroundOnAccent, + ), + ColorPickerTile( + label: 'backgroundHighlight', + color: config.backgroundHighlight, + onColorChanged: config.setBackgroundHighlight, + ), + ColorPickerTile( + label: 'backgroundScrim', + color: config.backgroundScrim, + onColorChanged: config.setBackgroundScrim, + ), + ColorPickerTile( + label: 'backgroundOverlayLight', + color: config.backgroundOverlayLight, + onColorChanged: config.setBackgroundOverlayLight, + ), + ColorPickerTile( + label: 'backgroundOverlayDark', + color: config.backgroundOverlayDark, + onColorChanged: config.setBackgroundOverlayDark, + ), + ColorPickerTile( + label: 'backgroundDisabled', + color: config.backgroundDisabled, + onColorChanged: config.setBackgroundDisabled, + ), + SizedBox(height: spacing.xs), + Text( + 'Surface', + style: context.streamTextTheme.captionEmphasis.copyWith( + color: context.streamColorScheme.textTertiary, + ), + ), + SizedBox(height: spacing.xs), ColorPickerTile( label: 'backgroundSurface', color: config.backgroundSurface, @@ -339,14 +400,42 @@ class _ThemeCustomizationPanelState extends State { onColorChanged: config.setBackgroundSurfaceStrong, ), ColorPickerTile( - label: 'backgroundScrim', - color: config.backgroundScrim, - onColorChanged: config.setBackgroundScrim, + label: 'backgroundSurfaceCard', + color: config.backgroundSurfaceCard, + onColorChanged: config.setBackgroundSurfaceCard, + ), + SizedBox(height: spacing.xs), + Text( + 'Elevation', + style: context.streamTextTheme.captionEmphasis.copyWith( + color: context.streamColorScheme.textTertiary, + ), ), + SizedBox(height: spacing.xs), ColorPickerTile( - label: 'backgroundDisabled', - color: config.backgroundDisabled, - onColorChanged: config.setBackgroundDisabled, + label: 'backgroundElevation0', + color: config.backgroundElevation0, + onColorChanged: config.setBackgroundElevation0, + ), + ColorPickerTile( + label: 'backgroundElevation1', + color: config.backgroundElevation1, + onColorChanged: config.setBackgroundElevation1, + ), + ColorPickerTile( + label: 'backgroundElevation2', + color: config.backgroundElevation2, + onColorChanged: config.setBackgroundElevation2, + ), + ColorPickerTile( + label: 'backgroundElevation3', + color: config.backgroundElevation3, + onColorChanged: config.setBackgroundElevation3, + ), + ColorPickerTile( + label: 'backgroundElevation4', + color: config.backgroundElevation4, + onColorChanged: config.setBackgroundElevation4, ), ], ), @@ -386,6 +475,11 @@ class _ThemeCustomizationPanelState extends State { color: config.borderOnAccent, onColorChanged: config.setBorderOnAccent, ), + ColorPickerTile( + label: 'borderOnSurface', + color: config.borderOnSurface, + onColorChanged: config.setBorderOnSurface, + ), ColorPickerTile( label: 'borderOpacitySubtle', color: config.borderOpacitySubtle, @@ -414,6 +508,21 @@ class _ThemeCustomizationPanelState extends State { color: config.borderFocus, onColorChanged: config.setBorderFocus, ), + ColorPickerTile( + label: 'borderActive', + color: config.borderActive, + onColorChanged: config.setBorderActive, + ), + ColorPickerTile( + label: 'borderHover', + color: config.borderHover, + onColorChanged: config.setBorderHover, + ), + ColorPickerTile( + label: 'borderPressed', + color: config.borderPressed, + onColorChanged: config.setBorderPressed, + ), ColorPickerTile( label: 'borderDisabled', color: config.borderDisabled, diff --git a/packages/stream_core_flutter/lib/src/theme/primitives/stream_color_swatch_helper.dart b/packages/stream_core_flutter/lib/src/theme/primitives/stream_color_swatch_helper.dart index d62a6c4..49cd5c1 100644 --- a/packages/stream_core_flutter/lib/src/theme/primitives/stream_color_swatch_helper.dart +++ b/packages/stream_core_flutter/lib/src/theme/primitives/stream_color_swatch_helper.dart @@ -23,11 +23,13 @@ class StreamColorSwatchHelper { final shades = [50, 100, 150, 200, 300, 400, 500, 600, 700, 800, 900]; return { + 0: const Color(0xFFFFFFFF), for (final shade in shades) shade: _adjustLightness( hslBase, _calculateLightness(shade, centerLightness, brightness: brightness), ), + 1000: const Color(0xFF000000), }; } From 6e9e259ff596531003b8d94bc18f778ba8211e03 Mon Sep 17 00:00:00 2001 From: renefloor <15101411+renefloor@users.noreply.github.com> Date: Fri, 13 Mar 2026 14:40:28 +0000 Subject: [PATCH 5/9] chore: Update Goldens --- .../ci/stream_audio_waveform_dark_states.png | Bin 11904 -> 11713 bytes .../ci/stream_audio_waveform_light_states.png | Bin 11095 -> 11307 bytes ...ream_audio_waveform_slider_dark_states.png | Bin 16192 -> 15643 bytes ...eam_audio_waveform_slider_light_states.png | Bin 16378 -> 17144 bytes .../stream_badge_notification_dark_matrix.png | Bin 5183 -> 5165 bytes .../goldens/ci/stream_button_dark_matrix.png | Bin 30371 -> 30160 bytes ...er_attachment_link_preview_dark_matrix.png | Bin 6481 -> 6830 bytes ...r_attachment_link_preview_light_matrix.png | Bin 5636 -> 5690 bytes ..._composer_attachment_reply_dark_matrix.png | Bin 3916 -> 4178 bytes ...composer_attachment_reply_light_matrix.png | Bin 3666 -> 3701 bytes 10 files changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/stream_core_flutter/test/components/accessories/goldens/ci/stream_audio_waveform_dark_states.png b/packages/stream_core_flutter/test/components/accessories/goldens/ci/stream_audio_waveform_dark_states.png index a5140bff1f6fa0cb887a571f799743faae86de6e..f3e9b9034a0c2871116bf5bdeb34034ad1c36a0a 100644 GIT binary patch literal 11713 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 literal 11904 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 Hi~|1~YhfL! diff --git a/packages/stream_core_flutter/test/components/accessories/goldens/ci/stream_audio_waveform_light_states.png b/packages/stream_core_flutter/test/components/accessories/goldens/ci/stream_audio_waveform_light_states.png index 87fad475c59843b420eeed4cf25ff9cd1a5fa0fb..0ce5c5532c108abf447d89e05e0357730722baf3 100644 GIT binary patch literal 11307 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 K{vm1h>AwM@EnmU_ literal 11095 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 IrA*)d4_w^&umAu6 diff --git a/packages/stream_core_flutter/test/components/accessories/goldens/ci/stream_audio_waveform_slider_dark_states.png b/packages/stream_core_flutter/test/components/accessories/goldens/ci/stream_audio_waveform_slider_dark_states.png index c64a0361f059b6117dbf69ea8759599bae0a313c..f50897be24578af7a19c56f8c93115346bf007db 100644 GIT binary patch literal 15643 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 literal 16192 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%0DVW~~z=OYsKM!34*G!E(uISjIrj2maaLI?da50 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 U`P|=u!}|~!2}SV|QKOIl3-d;srvLx| diff --git a/packages/stream_core_flutter/test/components/badge/goldens/ci/stream_badge_notification_dark_matrix.png b/packages/stream_core_flutter/test/components/badge/goldens/ci/stream_badge_notification_dark_matrix.png index b84574ca73b70efbc24aab316b8f1ae6e953190c..c446714ddf0d453896c3a304c575280cdafb3bbd 100644 GIT binary patch delta 4828 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 GKmP^0IM7@G literal 5183 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 SF;C#=3}U3Z=MOa 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 CXtN&x literal 6481 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 diff --git a/packages/stream_core_flutter/test/components/message_composer/goldens/ci/message_composer_attachment_link_preview_light_matrix.png b/packages/stream_core_flutter/test/components/message_composer/goldens/ci/message_composer_attachment_link_preview_light_matrix.png index 4d0c3c0fa7776fc7f473b5ec618ec63de8776e9d..f115b52b56fee75a53c9d26d5f8e387e75394881 100644 GIT binary patch literal 5690 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 Y-L(NTy;O1Vy8*z==$v7Z{^j5P1;~D%O8@`> diff --git a/packages/stream_core_flutter/test/components/message_composer/goldens/ci/message_composer_attachment_reply_dark_matrix.png b/packages/stream_core_flutter/test/components/message_composer/goldens/ci/message_composer_attachment_reply_dark_matrix.png index 8a267cdcc1d17cd211566831b2117b5f8dbbe7ca..8ce33f14a714f211cdb1f5a117a2aa562aa03f5d 100644 GIT binary patch literal 4178 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 M8%OK9TfRU30|uFY&Hw-a literal 3916 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 diff --git a/packages/stream_core_flutter/test/components/message_composer/goldens/ci/message_composer_attachment_reply_light_matrix.png b/packages/stream_core_flutter/test/components/message_composer/goldens/ci/message_composer_attachment_reply_light_matrix.png index c7dbbf6ad1e6e94037b1c5ba7e12e87f94c286e9..77734574a5943f1df9165cabdba740421902d59f 100644 GIT binary patch literal 3701 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 delta 2928 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 t1a6SJt+PP Date: Fri, 13 Mar 2026 15:45:51 +0100 Subject: [PATCH 6/9] formatting --- .../lib/config/theme_configuration.dart | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/apps/design_system_gallery/lib/config/theme_configuration.dart b/apps/design_system_gallery/lib/config/theme_configuration.dart index d150fda..6ecf421 100644 --- a/apps/design_system_gallery/lib/config/theme_configuration.dart +++ b/apps/design_system_gallery/lib/config/theme_configuration.dart @@ -442,7 +442,7 @@ class ThemeConfiguration extends ChangeNotifier { // Extract subscript lookups to avoid Dart parsing ambiguity with ?[] inside ternaries. final chromeShade0 = effectiveChrome?[0]; final chromeShade1000 = effectiveChrome?[1000]; - + final effectiveAccentNeutral = _accentNeutral ?? effectiveChrome?.shade500; final effectiveTextPrimary = _textPrimary ?? effectiveChrome?.shade900; final effectiveTextSecondary = _textSecondary ?? effectiveChrome?.shade700; @@ -459,14 +459,10 @@ class ThemeConfiguration extends ChangeNotifier { final effectiveBackgroundDisabled = _backgroundDisabled ?? effectiveChrome?.shade100; final effectiveBackgroundInverse = _backgroundInverse ?? effectiveChrome?.shade900; final effectiveBackgroundElevation0 = _backgroundElevation0 ?? (isDark ? chromeShade1000 : chromeShade0); - final effectiveBackgroundElevation1 = - _backgroundElevation1 ?? (isDark ? effectiveChrome?.shade50 : chromeShade0); - final effectiveBackgroundElevation2 = - _backgroundElevation2 ?? (isDark ? effectiveChrome?.shade100 : chromeShade0); - final effectiveBackgroundElevation3 = - _backgroundElevation3 ?? (isDark ? effectiveChrome?.shade200 : chromeShade0); - final effectiveBackgroundElevation4 = - _backgroundElevation4 ?? (isDark ? effectiveChrome?.shade300 : chromeShade0); + final effectiveBackgroundElevation1 = _backgroundElevation1 ?? (isDark ? effectiveChrome?.shade50 : chromeShade0); + final effectiveBackgroundElevation2 = _backgroundElevation2 ?? (isDark ? effectiveChrome?.shade100 : chromeShade0); + final effectiveBackgroundElevation3 = _backgroundElevation3 ?? (isDark ? effectiveChrome?.shade200 : chromeShade0); + final effectiveBackgroundElevation4 = _backgroundElevation4 ?? (isDark ? effectiveChrome?.shade300 : chromeShade0); // backgroundApp derives from backgroundElevation0 in both themes final effectiveBackgroundApp = _backgroundApp ?? effectiveBackgroundElevation0; // In dark, borderInverse uses a fixed token (not chrome); in light it uses chrome[0] From 4d228ce5d06ab18028619653a9face481c96de1e Mon Sep 17 00:00:00 2001 From: Rene Floor Date: Fri, 13 Mar 2026 15:55:50 +0100 Subject: [PATCH 7/9] fix 0 and 1000 dark values --- .../src/theme/primitives/stream_color_swatch_helper.dart | 7 +++++-- .../src/theme/primitives/tokens/dark/stream_tokens.dart | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/stream_core_flutter/lib/src/theme/primitives/stream_color_swatch_helper.dart b/packages/stream_core_flutter/lib/src/theme/primitives/stream_color_swatch_helper.dart index 49cd5c1..a52ee22 100644 --- a/packages/stream_core_flutter/lib/src/theme/primitives/stream_color_swatch_helper.dart +++ b/packages/stream_core_flutter/lib/src/theme/primitives/stream_color_swatch_helper.dart @@ -1,6 +1,8 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/painting.dart'; +import '../../../stream_core_flutter.dart'; + class StreamColorSwatchHelper { const StreamColorSwatchHelper._(); @@ -21,15 +23,16 @@ class StreamColorSwatchHelper { final centerLightness = hslBase.lightness; final shades = [50, 100, 150, 200, 300, 400, 500, 600, 700, 800, 900]; + final isLight = brightness == Brightness.light; return { - 0: const Color(0xFFFFFFFF), + 0: isLight ? StreamColors.white : StreamColors.black, for (final shade in shades) shade: _adjustLightness( hslBase, _calculateLightness(shade, centerLightness, brightness: brightness), ), - 1000: const Color(0xFF000000), + 1000: isLight ? StreamColors.black : StreamColors.white, }; } diff --git a/packages/stream_core_flutter/lib/src/theme/primitives/tokens/dark/stream_tokens.dart b/packages/stream_core_flutter/lib/src/theme/primitives/tokens/dark/stream_tokens.dart index 1a5c3ab..08652b9 100644 --- a/packages/stream_core_flutter/lib/src/theme/primitives/tokens/dark/stream_tokens.dart +++ b/packages/stream_core_flutter/lib/src/theme/primitives/tokens/dark/stream_tokens.dart @@ -605,7 +605,7 @@ class StreamTokens { static const brand900 = Color(0xFFF3F7FF); static const skeletonLoadingBase = Color(0x00FFFFFF); static const skeletonLoadingHighlight = Color(0x33FFFFFF); - static const chrome0 = Color(0xFFFFFFFF); + static const chrome0 = Color(0xFF000000); static const chrome50 = Color(0xFF1C1C1C); static const chrome100 = Color(0xFF323232); static const chrome150 = Color(0xFF464646); @@ -617,5 +617,5 @@ class StreamTokens { static const chrome700 = Color(0xFFD8D8D8); static const chrome800 = Color(0xFFEFEFEF); static const chrome900 = Color(0xFFF8F8F8); - static const chrome1000 = Color(0xFF000000); + static const chrome1000 = Color(0xFFFFFFFF); } From 5effd6bcd8e6d119fe87d9220d02d9a2060d6d12 Mon Sep 17 00:00:00 2001 From: Rene Floor Date: Fri, 13 Mar 2026 16:02:27 +0100 Subject: [PATCH 8/9] fix media badge colors --- .../lib/src/components/badge/stream_media_badge.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/stream_core_flutter/lib/src/components/badge/stream_media_badge.dart b/packages/stream_core_flutter/lib/src/components/badge/stream_media_badge.dart index 6b44ab4..2a6ad99 100644 --- a/packages/stream_core_flutter/lib/src/components/badge/stream_media_badge.dart +++ b/packages/stream_core_flutter/lib/src/components/badge/stream_media_badge.dart @@ -12,7 +12,7 @@ class StreamMediaBadge extends StatelessWidget { Widget build(BuildContext context) { return Container( decoration: BoxDecoration( - color: context.streamColorScheme.backgroundInverse, + color: context.streamColorScheme.chrome[10000], borderRadius: BorderRadius.all(context.streamRadius.max), ), padding: EdgeInsets.symmetric( @@ -28,13 +28,13 @@ class StreamMediaBadge extends StatelessWidget { MediaBadgeType.audio => context.streamIcons.microphoneSolid, }, size: 12, - color: context.streamColorScheme.textOnAccent, + color: context.streamColorScheme.textInverse, ), if (duration case final duration?) Text( duration.toReadableString(), - style: context.streamTextTheme.numericMd.copyWith(color: context.streamColorScheme.textOnAccent), + style: context.streamTextTheme.numericMd.copyWith(color: context.streamColorScheme.textInverse), ), ], ), From ea85b93ec7b7277e475c0dd2bd5347bff0d72f3f Mon Sep 17 00:00:00 2001 From: Rene Floor Date: Fri, 13 Mar 2026 16:08:49 +0100 Subject: [PATCH 9/9] fix dark theme chrome updates --- .../src/theme/semantics/stream_color_scheme.dart | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.dart b/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.dart index 82261e7..8a62692 100644 --- a/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.dart +++ b/packages/stream_core_flutter/lib/src/theme/semantics/stream_color_scheme.dart @@ -355,17 +355,16 @@ class StreamColorScheme with _$StreamColorScheme { textSecondary ??= chrome.shade700; textTertiary ??= chrome.shade500; textDisabled ??= chrome.shade300; - textInverse ??= chrome[1000] ?? StreamColors.black; + textInverse ??= chrome[0] ?? StreamColors.black; textLink ??= brand.shade600; - textOnAccent ??= chrome[0] ?? StreamColors.white; + textOnAccent ??= chrome[1000] ?? StreamColors.white; // Background - backgroundApp ??= chrome[1000] ?? StreamColors.black; backgroundSurface ??= chrome.shade100; backgroundSurfaceSubtle ??= chrome.shade50; backgroundSurfaceStrong ??= chrome.shade150; backgroundSurfaceCard ??= chrome.shade100; - backgroundOnAccent ??= chrome[0] ?? StreamColors.white; + backgroundOnAccent ??= chrome[1000] ?? StreamColors.white; backgroundHighlight ??= dark_tokens.StreamTokens.backgroundCoreHighlight; backgroundScrim ??= dark_tokens.StreamTokens.backgroundCoreScrim; backgroundOverlayLight ??= dark_tokens.StreamTokens.backgroundCoreOverlayLight; @@ -373,12 +372,14 @@ class StreamColorScheme with _$StreamColorScheme { backgroundDisabled ??= chrome.shade100; backgroundInverse ??= chrome.shade900; - backgroundElevation0 ??= chrome[1000] ?? StreamColors.black; + backgroundElevation0 ??= chrome[0] ?? StreamColors.black; backgroundElevation1 ??= chrome.shade50; backgroundElevation2 ??= chrome.shade100; backgroundElevation3 ??= chrome.shade200; backgroundElevation4 ??= chrome.shade300; + backgroundApp ??= backgroundElevation0; + // Border - Core borderDefault ??= dark_tokens.StreamTokens.borderCoreDefault; borderSubtle ??= dark_tokens.StreamTokens.borderCoreSubtle; @@ -386,7 +387,7 @@ class StreamColorScheme with _$StreamColorScheme { borderInverse ??= dark_tokens.StreamTokens.borderCoreInverse; borderOpacitySubtle ??= dark_tokens.StreamTokens.borderCoreOpacitySubtle; borderOpacityStrong ??= dark_tokens.StreamTokens.borderCoreOpacityStrong; - borderOnAccent ??= chrome[0] ?? StreamColors.white; + borderOnAccent ??= chrome[1000] ?? StreamColors.white; borderOnSurface ??= chrome.shade200; // Border - Utility