diff --git a/SDDSComponents/SDDSComponents.xcodeproj/project.pbxproj b/SDDSComponents/SDDSComponents.xcodeproj/project.pbxproj index 2bfe6e113..97ce3decc 100644 --- a/SDDSComponents/SDDSComponents.xcodeproj/project.pbxproj +++ b/SDDSComponents/SDDSComponents.xcodeproj/project.pbxproj @@ -274,6 +274,7 @@ 818C03B22C418A90002C6D0A /* SDDSSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818C03B12C418A90002C6D0A /* SDDSSwitch.swift */; }; 818C03B52C418C50002C6D0A /* TypographyConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818C03B42C418C50002C6D0A /* TypographyConfiguration.swift */; }; 818C03B92C43B99B002C6D0A /* ColorToken+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818C03B82C43B99B002C6D0A /* ColorToken+Extensions.swift */; }; + 81F2AA9A2F20010100ABCD01 /* StatefulColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81F2AA992F20010100ABCD01 /* StatefulColor.swift */; }; 818C03BF2C43C371002C6D0A /* DebugModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818C03BE2C43C371002C6D0A /* DebugModifier.swift */; }; 818C03C52C4512A6002C6D0A /* SelectionControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818C03C42C4512A6002C6D0A /* SelectionControl.swift */; }; 818C03C72C45140B002C6D0A /* CheckboxAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818C03C62C45140B002C6D0A /* CheckboxAppearance.swift */; }; @@ -765,6 +766,7 @@ 818C03B12C418A90002C6D0A /* SDDSSwitch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSSwitch.swift; sourceTree = ""; }; 818C03B42C418C50002C6D0A /* TypographyConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypographyConfiguration.swift; sourceTree = ""; }; 818C03B82C43B99B002C6D0A /* ColorToken+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ColorToken+Extensions.swift"; sourceTree = ""; }; + 81F2AA992F20010100ABCD01 /* StatefulColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatefulColor.swift; sourceTree = ""; }; 818C03BE2C43C371002C6D0A /* DebugModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebugModifier.swift; sourceTree = ""; }; 818C03C42C4512A6002C6D0A /* SelectionControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectionControl.swift; sourceTree = ""; }; 818C03C62C45140B002C6D0A /* CheckboxAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckboxAppearance.swift; sourceTree = ""; }; @@ -2500,6 +2502,7 @@ 81CBC0922C82241100FBDAC8 /* BackportAsyncImage */, 818C03B42C418C50002C6D0A /* TypographyConfiguration.swift */, 818C03B82C43B99B002C6D0A /* ColorToken+Extensions.swift */, + 81F2AA992F20010100ABCD01 /* StatefulColor.swift */, 818C03BE2C43C371002C6D0A /* DebugModifier.swift */, 818C03E22C479003002C6D0A /* Image+Extensions.swift */, 8159F72F2C5D1CFE00622836 /* FillStyle.swift */, @@ -4913,6 +4916,7 @@ 812DB7562D57B44100D3F4A3 /* TextFieldAccessibility.swift in Sources */, 81F7532E2CF4689C000156D9 /* ButtonAccessibility.swift in Sources */, 818C03B92C43B99B002C6D0A /* ColorToken+Extensions.swift in Sources */, + 81F2AA9A2F20010100ABCD01 /* StatefulColor.swift in Sources */, 817339E92D033E8E0092608A /* AvatarAppearance.swift in Sources */, 811DE1712C5783B6000DD354 /* HierarchicalList.swift in Sources */, 818C03D02C451651002C6D0A /* SelectionControlAppearance.swift in Sources */, diff --git a/SDDSComponents/Sources/SDDSComponents/Common/ColorToken+Extensions.swift b/SDDSComponents/Sources/SDDSComponents/Common/ColorToken+Extensions.swift index 33dae9340..b19ceb9f9 100644 --- a/SDDSComponents/Sources/SDDSComponents/Common/ColorToken+Extensions.swift +++ b/SDDSComponents/Sources/SDDSComponents/Common/ColorToken+Extensions.swift @@ -120,12 +120,7 @@ public extension ColorToken { } var buttonColor: ButtonColor { - ButtonColor( - defaultColor: self, - highlightedColor: self, - hoveredColor: self, - selectedColor: self - ) + ButtonColor(defaultColor: self) } } diff --git a/SDDSComponents/Sources/SDDSComponents/Common/StatefulColor.swift b/SDDSComponents/Sources/SDDSComponents/Common/StatefulColor.swift new file mode 100644 index 000000000..4895e2f7e --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Common/StatefulColor.swift @@ -0,0 +1,4 @@ +import Foundation +@_exported import SDDSThemeCore + +public typealias StatefulColor = SDDSThemeCore.StatefulColor diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/ButtonAppearance/ButtonAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/ButtonAppearance/ButtonAppearance.swift index c6e07a240..520602526 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/ButtonAppearance/ButtonAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/ButtonAppearance/ButtonAppearance.swift @@ -9,12 +9,12 @@ import SwiftUI - size: Конфигурация размеров кнопки, определяемая `ButtonSizeConfiguration`. - shapeStyle: Стиль формы кнопки (например, закругленная или овальная), определяемый `ButtonShapeStyle`. - titleTypography: Типографика для текста заголовка кнопки, определяемая `TypographyConfiguration`. - - titleColor: Цвет текста заголовка кнопки для различных состояний, определяемый `ButtonColor`. + - titleColor: Цвет текста заголовка кнопки для различных состояний, определяемый `StatefulColor`. - subtitleTypography: Типографика для текста подзаголовка кнопки, определяемая `TypographyConfiguration`. - - subtitleColor: Цвет текста подзаголовка кнопки для различных состояний, определяемый `ButtonColor`. - - iconColor: Цвет иконки кнопки для различных состояний, определяемый `ButtonColor`. - - spinnerColor: Цвет спиннера загрузки для различных состояний, определяемый `ButtonColor`. - - backgroundColor: Цвет фона кнопки для различных состояний, определяемый `ButtonColor`. + - subtitleColor: Цвет текста подзаголовка кнопки для различных состояний, определяемый `StatefulColor`. + - iconColor: Цвет иконки кнопки для различных состояний, определяемый `StatefulColor`. + - spinnerColor: Цвет спиннера загрузки для различных состояний, определяемый `StatefulColor`. + - backgroundColor: Цвет фона кнопки для различных состояний, определяемый `StatefulColor`. - disabledAlpha: Прозрачность кнопки, когда она отключена. - loadingAlpha: Прозрачность кнопки, когда она находится в состоянии загрузки. @@ -38,8 +38,9 @@ public struct ButtonAppearance { public var titleTypography: TypographyConfiguration /** - Цвет текста заголовка кнопки для различных состояний, определяемый `ButtonColor`. + Цвет текста заголовка кнопки для различных состояний, определяемый `StatefulColor`. */ + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var titleColor: ButtonColor /** @@ -48,23 +49,27 @@ public struct ButtonAppearance { public var subtitleTypography: TypographyConfiguration /** - Цвет текста подзаголовка кнопки для различных состояний, определяемый `ButtonColor`. + Цвет текста подзаголовка кнопки для различных состояний, определяемый `StatefulColor`. */ + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var subtitleColor: ButtonColor /** - Цвет иконки кнопки для различных состояний, определяемый `ButtonColor`. + Цвет иконки кнопки для различных состояний, определяемый `StatefulColor`. */ + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var iconColor: ButtonColor /** - Цвет спиннера загрузки для различных состояний, определяемый `ButtonColor`. + Цвет спиннера загрузки для различных состояний, определяемый `StatefulColor`. */ + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var spinnerColor: ButtonColor /** - Цвет фона кнопки для различных состояний, определяемый `ButtonColor`. + Цвет фона кнопки для различных состояний, определяемый `StatefulColor`. */ + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var backgroundColor: ButtonColor /** @@ -118,6 +123,8 @@ public struct ButtonAppearance { self.disabledAlpha = disabledAlpha self.loadingAlpha = loadingAlpha } + + } extension ButtonAppearance: EnvironmentKey { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/ButtonAppearance/ButtonColor.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/ButtonAppearance/ButtonColor.swift index bf645703c..ca1d92f02 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/ButtonAppearance/ButtonColor.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/ButtonAppearance/ButtonColor.swift @@ -1,46 +1,24 @@ import Foundation +import SwiftUI @_exported import SDDSThemeCore -/** - `ButtonColor` определяет цвета кнопки для различных состояний. - - - Properties: - - defaultColor: Цвет для стандартного состояния кнопки. - - highlightedColor: Цвет для состояния, когда кнопка нажата. - - hoveredColor: Цвет для состояния, когда кнопка находится под курсором. - */ +@available(*, deprecated, message: "Use StatefulColor instead.") public struct ButtonColor: Hashable { - /** - Цвет для стандартного состояния кнопки. - */ - public let defaultColor: ColorToken - - /** - Цвет для состояния, когда кнопка нажата. - */ - public let highlightedColor: ColorToken - - /** - Цвет для состояния, когда кнопка находится под курсором. - */ - public let hoveredColor: ColorToken - - /** - Цвет, используемый для кнопки, когда она находится в выбранном состоянии. - Этот цвет применяется к кнопке, когда она выбрана в контейнере элементов. - */ - public let selectedColor: ColorToken + public var defaultColor: ColorToken { + didSet { rawStatefulColor = nil } + } + public var highlightedColor: ColorToken { + didSet { rawStatefulColor = nil } + } + public var hoveredColor: ColorToken { + didSet { rawStatefulColor = nil } + } + public var selectedColor: ColorToken { + didSet { rawStatefulColor = nil } + } - /** - Инициализатор для создания `ButtonColor`. - - - Parameters: - - defaultColor: Цвет для стандартного состояния. - - highlightedColor: Цвет для состояния нажатия. - - hoveredColor: Цвет для состояния наведения. - - selectedColor: Цвет для в выбранном состоянии - - */ + private var rawStatefulColor: StatefulColor? + public init( defaultColor: ColorToken = .clearColor, highlightedColor: ColorToken = .clearColor, @@ -51,19 +29,89 @@ public struct ButtonColor: Hashable { self.highlightedColor = highlightedColor self.hoveredColor = hoveredColor self.selectedColor = selectedColor + self.rawStatefulColor = nil } - - public static func == (lhs: ButtonColor, rhs: ButtonColor) -> Bool { - lhs.defaultColor == rhs.defaultColor && - lhs.highlightedColor == rhs.highlightedColor && - lhs.hoveredColor == rhs.hoveredColor && - lhs.selectedColor == rhs.selectedColor + + public var statefulColor: StatefulColor { + rawStatefulColor ?? StatefulColor( + defaultValue: defaultColor, + values: [ + .init(states: [InteractiveState.pressed], value: highlightedColor), + .init(states: [InteractiveState.hovered], value: hoveredColor), + .init(states: [InteractiveState.selected], value: selectedColor), + .init(states: [InteractiveState.activated], value: selectedColor) + ] + ) } - - public func hash(into hasher: inout Hasher) { - hasher.combine(defaultColor) - hasher.combine(highlightedColor) - hasher.combine(hoveredColor) - hasher.combine(selectedColor) + + public init(_ statefulColor: StatefulColor) { + self.defaultColor = statefulColor.resolvedDefaultValue() + self.highlightedColor = statefulColor.resolvedValue(for: Set([InteractiveState.pressed])) + self.hoveredColor = statefulColor.resolvedValue(for: Set([InteractiveState.hovered])) + let selectedValue = statefulColor.resolvedValue(for: Set([InteractiveState.selected])) + let activatedValue = statefulColor.resolvedValue(for: Set([InteractiveState.activated])) + self.selectedColor = selectedValue != defaultColor ? selectedValue : activatedValue + self.rawStatefulColor = statefulColor + } +} + +public extension ButtonColor { + func resolvedDefaultValue() -> ColorToken { + statefulColor.resolvedDefaultValue() + } + + func resolvedValue(for activeStates: Set) -> ColorToken { + statefulColor.resolvedValue(for: activeStates) + } + + func resolvedValue(for activeStates: Set) -> ColorToken { + statefulColor.resolvedValue(for: activeStates) + } + + func color( + for activeStates: Set, + colorScheme: ColorScheme, + subtheme: SubthemeData = SubthemeData() + ) -> Color { + statefulColor.color(for: activeStates, colorScheme: colorScheme, subtheme: subtheme) + } +} + +public extension SDDSThemeCore.StatefulColor { + @available(*, deprecated, message: "Use StatefulColor(defaultValue:values:) with state entries instead.") + init( + defaultColor: ColorToken = .clearColor, + highlightedColor: ColorToken = .clearColor, + hoveredColor: ColorToken = .clearColor, + selectedColor: ColorToken = .clearColor + ) { + self.init( + defaultValue: defaultColor, + values: [ + .init(states: [InteractiveState.pressed], value: highlightedColor), + .init(states: [InteractiveState.hovered], value: hoveredColor), + .init(states: [InteractiveState.selected], value: selectedColor) + ] + ) + } + + @available(*, deprecated, message: "Use resolvedValue(for:) with an explicit state set.") + var defaultColor: ColorToken { + resolvedDefaultValue() + } + + @available(*, deprecated, message: "Use resolvedValue(for:) with an explicit state set.") + var highlightedColor: ColorToken { + resolvedValue(for: Set([InteractiveState.pressed])) + } + + @available(*, deprecated, message: "Use resolvedValue(for:) with an explicit state set.") + var hoveredColor: ColorToken { + resolvedValue(for: Set([InteractiveState.hovered])) + } + + @available(*, deprecated, message: "Use resolvedValue(for:) with an explicit state set.") + var selectedColor: ColorToken { + resolvedValue(for: Set([InteractiveState.selected])) } } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/SDDSButton.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/SDDSButton.swift index 8aed12d16..97456d699 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/SDDSButton.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/SDDSButton.swift @@ -281,15 +281,11 @@ public extension SDDSButton where Counter == EmptyView { private extension SDDSButton { func currentColor(for buttonColor: ButtonColor) -> Color { - if isSelected { - return buttonColor.selectedColor.color(for: colorScheme, subtheme: subtheme) - } else if isHighlighted { - return buttonColor.highlightedColor.color(for: colorScheme, subtheme: subtheme) - } else if isHovered { - return buttonColor.hoveredColor.color(for: colorScheme, subtheme: subtheme) - } else { - return buttonColor.defaultColor.color(for: colorScheme, subtheme: subtheme) - } + var activeStates = Set() + if isSelected { activeStates.insert(.selected) } + if isHighlighted { activeStates.insert(.pressed) } + if isHovered { activeStates.insert(.hovered) } + return buttonColor.color(for: activeStates, colorScheme: colorScheme, subtheme: subtheme) } func hasIconAttributes() -> Bool { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipAppearance.swift index 04b218537..0504c02a7 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipAppearance.swift @@ -17,10 +17,14 @@ import SwiftUI public struct ChipAppearance: Hashable { let id = UUID() public var size: ChipSizeConfiguration + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var titleColor: ButtonColor public var titleTypography: TypographyConfiguration + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var imageTintColor: ButtonColor + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var buttonTintColor: ButtonColor + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var backgroundColor: ButtonColor public var disabledAlpha: CGFloat @@ -41,6 +45,8 @@ public struct ChipAppearance: Hashable { self.backgroundColor = backgroundColor self.disabledAlpha = disabledAlpha } + + public static func == (lhs: ChipAppearance, rhs: ChipAppearance) -> Bool { lhs.id == rhs.id && diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/SDDSChip.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/SDDSChip.swift index 6371d111f..0c39a385b 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/SDDSChip.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/SDDSChip.swift @@ -110,7 +110,11 @@ public struct SDDSChip: View { .renderingMode(.template) .aspectRatio(contentMode: .fit) .frame(width: appearance.size.iconImageSize.width, height: appearance.size.iconImageSize.height) - .foregroundColor(appearance.imageTintColor.defaultColor.color(for: colorScheme, subtheme: subtheme)) + .foregroundColor( + appearance.imageTintColor + .resolvedValue(for: Set()) + .color(for: colorScheme, subtheme: subtheme) + ) .accessibilityHidden(true) Spacer() .frame(width: appearance.size.contentStartPadding) @@ -120,7 +124,11 @@ public struct SDDSChip: View { .lineLimit(1) .typography(appearance.titleTypography.typography(with: appearance.size) ?? .undefined) .frame(width: textWidth) - .foregroundColor(appearance.titleColor.defaultColor.color(for: colorScheme, subtheme: subtheme)) + .foregroundColor( + appearance.titleColor + .resolvedValue(for: Set()) + .color(for: colorScheme, subtheme: subtheme) + ) .accessibilityLabel(Text(accessibility.titleLabel)) .accessibilityValue(Text(title)) @@ -133,7 +141,11 @@ public struct SDDSChip: View { .renderingMode(.template) .aspectRatio(contentMode: .fit) .frame(width: appearance.size.buttonImageSize.width, height: appearance.size.buttonImageSize.height) - .foregroundColor(appearance.buttonTintColor.defaultColor.color(for: colorScheme, subtheme: subtheme)) + .foregroundColor( + appearance.buttonTintColor + .resolvedValue(for: Set()) + .color(for: colorScheme, subtheme: subtheme) + ) .accessibilityLabel(Text(accessibility.removeButtonLabel)) .accessibilityHint(Text(accessibility.removeButtonHint)) .accessibilityAddTraits(.isButton) @@ -146,7 +158,11 @@ public struct SDDSChip: View { .frame(height: appearance.size.height) .background( RoundedRectangle(cornerRadius: borderRadius) - .fill(appearance.backgroundColor.defaultColor.color(for: colorScheme, subtheme: subtheme)) + .fill( + appearance.backgroundColor + .resolvedValue(for: Set()) + .color(for: colorScheme, subtheme: subtheme) + ) .opacity(isEnabled ? 1.0 : appearance.disabledAlpha) ) .accessibilityElement(children: .combine) diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCodeField/CoreInputView.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCodeField/CoreInputView.swift index 43be6d548..59827de26 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCodeField/CoreInputView.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCodeField/CoreInputView.swift @@ -291,7 +291,7 @@ internal struct CoreInputView: View { if visibleCharacters.contains(globalIndex) && showBeforeSecure { Text(value) .typography(valueTypography) - .foregroundColor((isError ? valueColorError : valueColor).color(for: colorScheme, subtheme: subtheme)) + .foregroundColor(valueColorToken(isError: isError).color(for: colorScheme, subtheme: subtheme)) } else { if let fillColor = fillColor(isError: isError) { dot(color: fillColor) @@ -300,7 +300,7 @@ internal struct CoreInputView: View { } else { Text(value) .typography(valueTypography) - .foregroundColor((isError ? valueColorError : valueColor).color(for: colorScheme, subtheme: subtheme)) + .foregroundColor(valueColorToken(isError: isError).color(for: colorScheme, subtheme: subtheme)) } } } else { @@ -350,21 +350,21 @@ internal struct CoreInputView: View { if visibleCharacters.contains(globalIndex) && showBeforeSecure { Text(value) .typography(valueTypography) - .foregroundColor((isError ? valueColorError : valueColor).color(for: colorScheme, subtheme: subtheme)) + .foregroundColor(valueColorToken(isError: isError).color(for: colorScheme, subtheme: subtheme)) } else { dot(isError: isError) } } else { Text(value) .typography(valueTypography) - .foregroundColor((isError ? valueColorError : valueColor).color(for: colorScheme, subtheme: subtheme)) + .foregroundColor(valueColorToken(isError: isError).color(for: colorScheme, subtheme: subtheme)) } } @ViewBuilder private func dot(isError: Bool) -> some View { Circle() - .fill((isError ? dotColorError : dotColor).color(for: colorScheme, subtheme: subtheme)) + .fill(dotColorToken(isError: isError).color(for: colorScheme, subtheme: subtheme)) .frame(width: dotSize, height: dotSize) } @@ -484,26 +484,6 @@ internal struct CoreInputView: View { } } - private func backgroundColor(isError: Bool, isCurrentPosition: Bool) -> ColorToken { - if isError { - return backgroundColorError - } - - if isFocused && isCurrentPosition { - return backgroundColorActivated - } else { - return backgroundColor - } - } - - private func captionColor(isCaptionErrorDisplayed: Bool) -> ColorToken { - if isCaptionErrorDisplayed { - return captionColorError - } - - return captionColor - } - private func globalIndex(groupIndex: Int, itemIndex: Int, groups: [CodeFieldGroup]) -> Int { var globalIndex = 0 for i in 0.. ColorToken? { + private var valueStatefulColor: StatefulColor { + StatefulColor( + defaultValue: valueColor, + values: [ + .init(states: [InteractiveState.error], value: valueColorError) + ] + ) + } + + private var dotStatefulColor: StatefulColor { + StatefulColor( + defaultValue: dotColor, + values: [ + .init(states: [InteractiveState.error], value: dotColorError) + ] + ) + } + + private var captionStatefulColor: StatefulColor { + StatefulColor( + defaultValue: captionColor, + values: [ + .init(states: [InteractiveState.error], value: captionColorError) + ] + ) + } + + private var backgroundStatefulColor: StatefulColor { + StatefulColor( + defaultValue: backgroundColor, + values: [ + .init(states: [InteractiveState.error], value: backgroundColorError), + .init(states: [InteractiveState.focused], value: backgroundColorActivated) + ] + ) + } + + private var strokeStatefulColor: StatefulColor? { + guard let strokeColor else { return nil } + var values: [StatefulColor.Item] = [] + if let strokeColorError { + values.append(.init(states: [InteractiveState.error], value: strokeColorError)) + } + if let strokeColorFocused { + values.append(.init(states: [InteractiveState.focused], value: strokeColorFocused)) + } + return StatefulColor(defaultValue: strokeColor, values: values) + } + + private var fillStatefulColor: StatefulColor? { + guard let fillColor else { return nil } + var values: [StatefulColor.Item] = [] + if let fillColorError { + values.append(.init(states: [InteractiveState.error], value: fillColorError)) + } + return StatefulColor(defaultValue: fillColor, values: values) + } + + private func states(isError: Bool, isFocused: Bool = false) -> Set { + var states = Set() if isError { - if animationPhase == .colorChange || animationPhase == .scaleUp || animationPhase == .shaking { - return strokeColorError - } - return strokeColorError + states.insert(.error) } - if isFocused { - return strokeColorFocused - } else { - return strokeColor + states.insert(.focused) } + return states + } + + private func strokeColor(isError: Bool) -> ColorToken? { + strokeStatefulColor?.resolvedValue(for: states(isError: isError, isFocused: isFocused)) } private func fillColor(isError: Bool) -> ColorToken? { - if isError { - return fillColorError - } else { - return fillColor - } + fillStatefulColor?.resolvedValue(for: states(isError: isError)) + } + + private func valueColorToken(isError: Bool) -> ColorToken { + valueStatefulColor.resolvedValue(for: states(isError: isError)) + } + + private func dotColorToken(isError: Bool) -> ColorToken { + dotStatefulColor.resolvedValue(for: states(isError: isError)) + } + + private func captionColor(isCaptionErrorDisplayed: Bool) -> ColorToken { + captionStatefulColor.resolvedValue(for: states(isError: isCaptionErrorDisplayed)) + } + + private func backgroundColor(isError: Bool, isCurrentPosition: Bool) -> ColorToken { + backgroundStatefulColor.resolvedValue( + for: states(isError: isError, isFocused: isCurrentPosition && isFocused) + ) } } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCodeInput/SDDSCodeInput.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCodeInput/SDDSCodeInput.swift index 4a785e87c..d14beb5f0 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCodeInput/SDDSCodeInput.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCodeInput/SDDSCodeInput.swift @@ -73,7 +73,7 @@ public struct SDDSCodeInput: View { captionTypography: appearance.captionTypography.typography(with: appearance.size) ?? .undefined, strokeColor: appearance.strokeColor, strokeColorError: appearance.strokeColorError, - strokeColorFocused: appearance.strokeColor, + strokeColorFocused: appearance.strokeColorFocused, fillColor: appearance.fillColor, fillColorError: appearance.fillColorError, strokeWidth: appearance.size.strokeWidth, diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCollapsingNavigationBar/CollapsingNavigationBarAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCollapsingNavigationBar/CollapsingNavigationBarAppearance.swift index d3aed865c..0ab232a3b 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCollapsingNavigationBar/CollapsingNavigationBarAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCollapsingNavigationBar/CollapsingNavigationBarAppearance.swift @@ -26,8 +26,10 @@ public struct CollapsingNavigationBarAppearance { public var textTypography: TypographyConfiguration public var titleTypography: TypographyConfiguration public var titleTypographyCollapsed: TypographyConfiguration + public var titleStatefulTypography: StatefulValue public var descriptionTypography: TypographyConfiguration public var descriptionTypographyCollapsed: TypographyConfiguration + public var descriptionStatefulTypography: StatefulValue // Тень public var shadow: ShadowToken @@ -48,8 +50,10 @@ public struct CollapsingNavigationBarAppearance { textTypography: TypographyConfiguration = .default, titleTypography: TypographyConfiguration = .default, titleTypographyCollapsed: TypographyConfiguration = .default, + titleStatefulTypography: StatefulValue? = nil, descriptionTypography: TypographyConfiguration = .default, descriptionTypographyCollapsed: TypographyConfiguration = .default, + descriptionStatefulTypography: StatefulValue? = nil, shadow: ShadowToken = ShadowToken(), size: CollapsingNavigationBarSizeConfiguration = CollapsingNavigationBarSize() ) { @@ -65,8 +69,20 @@ public struct CollapsingNavigationBarAppearance { self.textTypography = textTypography self.titleTypography = titleTypography self.titleTypographyCollapsed = titleTypographyCollapsed + self.titleStatefulTypography = titleStatefulTypography ?? StatefulValue( + defaultValue: titleTypography, + values: [ + .init(states: [InteractiveState.collapsed], value: titleTypographyCollapsed) + ] + ) self.descriptionTypography = descriptionTypography self.descriptionTypographyCollapsed = descriptionTypographyCollapsed + self.descriptionStatefulTypography = descriptionStatefulTypography ?? StatefulValue( + defaultValue: descriptionTypography, + values: [ + .init(states: [InteractiveState.collapsed], value: descriptionTypographyCollapsed) + ] + ) self.shadow = shadow self.size = size } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCollapsingNavigationBar/SDDSCollapsingNavigationBar.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCollapsingNavigationBar/SDDSCollapsingNavigationBar.swift index ee5bbc20b..5bb1d8a01 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCollapsingNavigationBar/SDDSCollapsingNavigationBar.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCollapsingNavigationBar/SDDSCollapsingNavigationBar.swift @@ -395,7 +395,7 @@ public struct SDDSCollapsingNavigationBar< VStack(alignment: horizontalAlignment, spacing: spacingBetweenTitleAndDescription) { Group { collapsedTitle() - .typography(appearance.titleTypographyCollapsed.typography(with: appearance.size as Any) ?? .undefined) + .typography(resolvedTitleTypography(collapsed: true)) .foregroundColor(currentColor(for: appearance.titleColor)) .multilineTextAlignment(useAbsoluteCentering ? .center : (collapsedTextAlign == .center ? .center : (collapsedTextAlign == .left ? .leading : .trailing))) } @@ -407,7 +407,7 @@ public struct SDDSCollapsingNavigationBar< .frame(minHeight: hasTitle ? collapsedTitleLineHeight : 0, maxHeight: hideTitle ? 0 : nil) Group { collapsedDescription() - .typography(appearance.descriptionTypographyCollapsed.typography(with: appearance.size as Any) ?? .undefined) + .typography(resolvedDescriptionTypography(collapsed: true)) .foregroundColor(currentColor(for: appearance.descriptionColor)) .multilineTextAlignment(useAbsoluteCentering ? .center : (collapsedTextAlign == .center ? .center : (collapsedTextAlign == .left ? .leading : .trailing))) } @@ -464,12 +464,12 @@ public struct SDDSCollapsingNavigationBar< Spacer().frame(height: appearance.size.textBlockTopMargin) VStack(alignment: expandedTextAlign.horizontalAlignment, spacing: appearance.size.descriptionPadding) { expandedTitle() - .typography(appearance.titleTypography.typography(with: appearance.size as Any) ?? .undefined) + .typography(resolvedTitleTypography(collapsed: false)) .foregroundColor(currentColor(for: appearance.titleColor)) .multilineTextAlignment(expandedTextAlign == .center ? .center : (expandedTextAlign == .left ? .leading : .trailing)) .frame(maxWidth: .infinity, alignment: Alignment(horizontal: expandedTextAlign.horizontalAlignment, vertical: .top)) expandedDescription() - .typography(appearance.descriptionTypography.typography(with: appearance.size as Any) ?? .undefined) + .typography(resolvedDescriptionTypography(collapsed: false)) .foregroundColor(currentColor(for: appearance.descriptionColor)) .multilineTextAlignment(expandedTextAlign == .center ? .center : (expandedTextAlign == .left ? .leading : .trailing)) .frame(maxWidth: .infinity, alignment: Alignment(horizontal: expandedTextAlign.horizontalAlignment, vertical: .top)) @@ -546,6 +546,18 @@ public struct SDDSCollapsingNavigationBar< token.color(for: colorScheme, subtheme: subtheme) } + private func resolvedTitleTypography(collapsed: Bool) -> TypographyToken { + let states: Set = collapsed ? [.collapsed] : [] + let config = appearance.titleStatefulTypography.resolvedValue(for: states) + return config.typography(with: appearance.size as Any) ?? .undefined + } + + private func resolvedDescriptionTypography(collapsed: Bool) -> TypographyToken { + let states: Set = collapsed ? [.collapsed] : [] + let config = appearance.descriptionStatefulTypography.resolvedValue(for: states) + return config.typography(with: appearance.size as Any) ?? .undefined + } + private func cornerRadius(from pathDrawer: PathDrawer) -> CGFloat { if let drawer = pathDrawer as? CornerRadiusDrawer { return drawer.cornerRadius diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCounter/CounterAppearance/CounterAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCounter/CounterAppearance/CounterAppearance.swift index 0c2de8535..5e816adc5 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCounter/CounterAppearance/CounterAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCounter/CounterAppearance/CounterAppearance.swift @@ -7,7 +7,9 @@ public struct CounterAppearance: Modifiable { public var size: CounterSizeConfiguration public var textTypography: TypographyConfiguration + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var textColor: ButtonColor + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var backgroundColor: ButtonColor public init( @@ -21,6 +23,8 @@ public struct CounterAppearance: Modifiable { self.textColor = textColor self.backgroundColor = backgroundColor } + + public func modify(_ value: CounterAppearance) -> CounterAppearance { var result = self diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCounter/SDDSCounter.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCounter/SDDSCounter.swift index ceb465d18..2a011b68d 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCounter/SDDSCounter.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCounter/SDDSCounter.swift @@ -116,15 +116,11 @@ private extension SDDSCounter { } func currentColor(for counterColor: ButtonColor) -> Color { - if isSelected { - return counterColor.selectedColor.color(for: colorScheme, subtheme: subtheme) - } else if isHighlighted { - return counterColor.highlightedColor.color(for: colorScheme, subtheme: subtheme) - } else if isHovered { - return counterColor.hoveredColor.color(for: colorScheme, subtheme: subtheme) - } else { - return counterColor.defaultColor.color(for: colorScheme, subtheme: subtheme) - } + var activeStates = Set() + if isSelected { activeStates.insert(.selected) } + if isHighlighted { activeStates.insert(.pressed) } + if isHovered { activeStates.insert(.hovered) } + return counterColor.color(for: activeStates, colorScheme: colorScheme, subtheme: subtheme) } var isAuto: Bool { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSListItem/ListItemAppearance/ListItemAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSListItem/ListItemAppearance/ListItemAppearance.swift index e2f61e7de..c7d6eff20 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSListItem/ListItemAppearance/ListItemAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSListItem/ListItemAppearance/ListItemAppearance.swift @@ -12,6 +12,7 @@ public struct ListItemAppearance: Hashable { public var subtitleColor: ColorToken public var disclosureIconColor: ColorToken public var disclosureIcon: Image? + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var backgroundColor: ButtonColor public var disabledAlpha: CGFloat public var counterAppearance: CounterAppearance? @@ -44,6 +45,8 @@ public struct ListItemAppearance: Hashable { self.counterAppearance = counterAppearance self.size = size } + + public static func == (lhs: ListItemAppearance, rhs: ListItemAppearance) -> Bool { lhs.id == rhs.id && @@ -60,4 +63,4 @@ extension ListItemAppearance: EnvironmentKey { public static var defaultValue: Self { EnvironmentValueProvider.shared.value(forKey: ListItemAppearance.self, fallback: ListItemAppearance()) } -} \ No newline at end of file +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSListItem/SDDSListItem.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSListItem/SDDSListItem.swift index f2fd70b43..4aeebe760 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSListItem/SDDSListItem.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSListItem/SDDSListItem.swift @@ -202,10 +202,8 @@ public struct SDDSListItem: View { } private func currentColor(for buttonColor: ButtonColor) -> Color { - if isHovered { - return buttonColor.hoveredColor.color(for: colorScheme, subtheme: subtheme) - } else { - return buttonColor.defaultColor.color(for: colorScheme, subtheme: subtheme) - } + var activeStates = Set() + if isHovered { activeStates.insert(.hovered) } + return buttonColor.color(for: activeStates, colorScheme: colorScheme, subtheme: subtheme) } } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSPaginationDots/PaginationDotsAppearance/PaginationDotsAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSPaginationDots/PaginationDotsAppearance/PaginationDotsAppearance.swift index f01c46a16..d165f9129 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSPaginationDots/PaginationDotsAppearance/PaginationDotsAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSPaginationDots/PaginationDotsAppearance/PaginationDotsAppearance.swift @@ -4,10 +4,39 @@ import SDDSThemeCore public struct PaginationDotsAppearance { public var size: PaginationDotsSizeConfiguration = DefaultPaginationDotsSize() - public var dotBackgroundColor: ColorToken = .clearColor - public var dotBackgroundColorActivated: ColorToken = .clearColor - + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") + public var dotBackgroundStatefulColor: ButtonColor = ButtonColor(defaultColor: .clearColor) + + @available(*, deprecated, message: "Use dotBackgroundStatefulColor.defaultColor.") + public var dotBackgroundColor: ColorToken { + get { dotBackgroundStatefulColor.defaultColor } + set { dotBackgroundStatefulColor.defaultColor = newValue } + } + + @available(*, deprecated, message: "Use dotBackgroundStatefulColor.selectedColor.") + public var dotBackgroundColorActivated: ColorToken { + get { dotBackgroundStatefulColor.selectedColor } + set { dotBackgroundStatefulColor.selectedColor = newValue } + } + public init() {} + + public init( + size: PaginationDotsSizeConfiguration, + dotBackgroundColor: ColorToken = .clearColor, + dotBackgroundColorActivated: ColorToken = .clearColor, + dotBackgroundStatefulColor: ButtonColor? = nil + ) { + self.size = size + self.dotBackgroundColor = dotBackgroundColor + self.dotBackgroundColorActivated = dotBackgroundColorActivated + self.dotBackgroundStatefulColor = dotBackgroundStatefulColor ?? ButtonColor( + defaultColor: dotBackgroundColor, + selectedColor: dotBackgroundColorActivated + ) + } + + } extension PaginationDotsAppearance: EnvironmentKey { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSPaginationDots/SDDSPaginationDots.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSPaginationDots/SDDSPaginationDots.swift index 6d835546d..cc4cde02c 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSPaginationDots/SDDSPaginationDots.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSPaginationDots/SDDSPaginationDots.swift @@ -175,8 +175,16 @@ public struct SDDSPaginationDots: View { PaginationDotView( width: isSelected ? appearance.size.dotWidthActivated : appearance.size.dotWidth, height: isSelected ? appearance.size.dotHeightActivated : appearance.size.dotHeight, - unselectedColor: appearance.dotBackgroundColor.color(for: colorScheme, subtheme: subtheme), - selectedColor: appearance.dotBackgroundColorActivated.color(for: colorScheme, subtheme: subtheme), + unselectedColor: appearance.dotBackgroundStatefulColor.color( + for: [], + colorScheme: colorScheme, + subtheme: subtheme + ), + selectedColor: appearance.dotBackgroundStatefulColor.color( + for: [.activated], + colorScheme: colorScheme, + subtheme: subtheme + ), isSelected: isSelected, scale: scale ) diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSegment/SDDSSegment.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSegment/SDDSSegment.swift index 5ad26a57c..2fffd0c3a 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSegment/SDDSSegment.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSegment/SDDSSegment.swift @@ -189,13 +189,10 @@ public struct SDDSSegment: View { } private func currentColor(for counterColor: ButtonColor) -> Color { - if isHighlighted { - return counterColor.highlightedColor.color(for: colorScheme, subtheme: subtheme) - } else if isHovered { - return counterColor.hoveredColor.color(for: colorScheme, subtheme: subtheme) - } else { - return counterColor.defaultColor.color(for: colorScheme, subtheme: subtheme) - } + var activeStates = Set() + if isHighlighted { activeStates.insert(.pressed) } + if isHovered { activeStates.insert(.hovered) } + return counterColor.color(for: activeStates, colorScheme: colorScheme, subtheme: subtheme) } private var backgroundColor: Color { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSegment/SegmentAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSegment/SegmentAppearance.swift index c89e24bfa..452a06f4a 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSegment/SegmentAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSegment/SegmentAppearance.swift @@ -7,7 +7,7 @@ import SwiftUI - Properties: - size: Конфигурация размеров сегмента, определяемая `SegmentSizeConfiguration`. - - backgroundColor: Цвет фона сегмента для различных состояний, определяемый `ButtonColor`. + - backgroundColor: Цвет фона сегмента для различных состояний, определяемый `StatefulColor`. - segmentItemAppearance: Внешний вид элементов сегмента, определяемый `SegmentItemAppearance`. - Methods: @@ -15,6 +15,7 @@ import SwiftUI */ public struct SegmentAppearance { public var size: SegmentSizeConfiguration + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var backgroundColor: ButtonColor? public var segmentItemAppearance: SegmentItemAppearance @available(*, deprecated, message: "Don't use it, public method will be removed") @@ -51,6 +52,8 @@ public struct SegmentAppearance { self.segmentItemAppearance = segmentItemAppearance self.disabledAlpha = 0 } + + } extension SegmentAppearance: EnvironmentKey { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSegmentItem/SegmentItemAppearance/SegmentItemAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSegmentItem/SegmentItemAppearance/SegmentItemAppearance.swift index e18ebafc2..a6551e241 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSegmentItem/SegmentItemAppearance/SegmentItemAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSegmentItem/SegmentItemAppearance/SegmentItemAppearance.swift @@ -6,13 +6,18 @@ public struct SegmentItemAppearance { public var size: SegmentItemSizeConfiguration public var shapeStyle: ComponentShapeStyle public var titleTypography: TypographyConfiguration + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var titleColor: ButtonColor public var subtitleTypography: TypographyConfiguration + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var subtitleColor: ButtonColor - @available(*, deprecated, message: "Don't use it, public method will be removed") + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var iconColor: ButtonColor + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var startContentColor: ButtonColor + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var endContentColor: ButtonColor + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var backgroundColor: ButtonColor public var disabledAlpha: CGFloat public var counterAppearance: CounterAppearance @@ -72,6 +77,8 @@ public struct SegmentItemAppearance { self.counterAppearance = counterAppearance self.iconColor = ButtonColor() } + + } extension SegmentItemAppearance: EnvironmentKey { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSelectItem/SDDSSelectItem.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSelectItem/SDDSSelectItem.swift index 2e9a072d0..8388e38c5 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSelectItem/SDDSSelectItem.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSelectItem/SDDSSelectItem.swift @@ -91,15 +91,11 @@ public struct SDDSSelectItem: View { } private func currentColor(for buttonColor: ButtonColor) -> Color { - if isSelected { - return buttonColor.selectedColor.color(for: colorScheme, subtheme: subtheme) - } else if isHighlighted { - return buttonColor.highlightedColor.color(for: colorScheme, subtheme: subtheme) - } else if isHovered { - return buttonColor.hoveredColor.color(for: colorScheme, subtheme: subtheme) - } else { - return buttonColor.defaultColor.color(for: colorScheme, subtheme: subtheme) - } + var activeStates = Set() + if isSelected { activeStates.insert(.selected) } + if isHighlighted { activeStates.insert(.pressed) } + if isHovered { activeStates.insert(.hovered) } + return buttonColor.color(for: activeStates, colorScheme: colorScheme, subtheme: subtheme) } @ViewBuilder diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSelectItem/SelectItemAppearance/SelectItemAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSelectItem/SelectItemAppearance/SelectItemAppearance.swift index afd858ac5..92aa1bb20 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSelectItem/SelectItemAppearance/SelectItemAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSelectItem/SelectItemAppearance/SelectItemAppearance.swift @@ -10,6 +10,7 @@ public enum SelectItemType: String, CaseIterable { public struct SelectItemAppearance { public var itemType: SelectItemType public var iconColor: ColorToken + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var backgroundColor: ButtonColor public var disabledAlpha: CGFloat public var cellAppearance: CellAppearance @@ -36,6 +37,8 @@ public struct SelectItemAppearance { self.icon = icon self.size = size } + + } extension SelectItemAppearance: EnvironmentKey { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SDDSSwitch.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SDDSSwitch.swift index fccfb89d9..c85338aa4 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SDDSSwitch.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SDDSSwitch.swift @@ -86,8 +86,8 @@ public struct SDDSSwitch: View { SDDSToggle( isOn: $isOn, size: appearance.size, - onColor: appearance.toggleTrackColorChecked, - offColor: appearance.toggleTrackColor, + onColor: appearance.toggleTrackStatefulColor.resolvedValue(for: Set([InteractiveState.checked])), + offColor: appearance.toggleTrackStatefulColor.resolvedValue(for: Set()), thumbColor: appearance.toggleThumbColor ) .opacity(isEnabled ? 1.0 : appearance.disabledAlpha) diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchAppearance.swift index b7aff22d5..8d11a5905 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchAppearance.swift @@ -87,6 +87,15 @@ public struct SwitchAppearance: Hashable { } public extension SwitchAppearance { + var toggleTrackStatefulColor: StatefulColor { + StatefulColor( + defaultValue: toggleTrackColor, + values: [ + .init(states: [InteractiveState.checked], value: toggleTrackColorChecked) + ] + ) + } + /** Возвращает цвет переключателя в зависимости от его состояния (включен/выключен). diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabBar/SDDSTabBarItem.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabBar/SDDSTabBarItem.swift index 5d26a15b6..5573f4892 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabBar/SDDSTabBarItem.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabBar/SDDSTabBarItem.swift @@ -112,15 +112,21 @@ public struct SDDSTabBarItem: View { } private var backgroundColor: ColorToken { - isSelected ? ColorToken.clearColor : appearance.backgroundColor.defaultColor + isSelected + ? ColorToken.clearColor + : appearance.backgroundColor.resolvedValue(for: Set()) } private var iconColor: ColorToken { - isSelected ? appearance.iconColor.selectedColor : appearance.iconColor.defaultColor + appearance.iconColor.resolvedValue( + for: isSelected ? Set([InteractiveState.selected]) : Set() + ) } private var labelColor: ColorToken { - isSelected ? appearance.labelColor.selectedColor : appearance.labelColor.defaultColor + appearance.labelColor.resolvedValue( + for: isSelected ? Set([InteractiveState.selected]) : Set() + ) } var appearance: TabBarItemAppearance { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabBar/TabBarContent.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabBar/TabBarContent.swift index e876803ab..a1a07072d 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabBar/TabBarContent.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabBar/TabBarContent.swift @@ -87,7 +87,8 @@ public struct TabBarContent: View { @ViewBuilder private var selectedContent: some View { if currentSelectedIndex < items.count, let appearance = items[currentSelectedIndex].appearance, items[currentSelectedIndex].allowSelection { - appearance.backgroundColor.selectedColor.color(for: colorScheme, subtheme: subtheme) + appearance.backgroundColor + .color(for: Set([InteractiveState.selected]), colorScheme: colorScheme, subtheme: subtheme) .frame(width: itemSizes[currentSelectedIndex]?.width ?? 0, height: itemSizes[currentSelectedIndex]?.height ?? 0) .shape(pathDrawer: appearance.size.shape) .offset(x: selectedItemOffset) diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabBar/TabBarItemAppearance/TabBarItemAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabBar/TabBarItemAppearance/TabBarItemAppearance.swift index bc3889321..c690426f6 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabBar/TabBarItemAppearance/TabBarItemAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabBar/TabBarItemAppearance/TabBarItemAppearance.swift @@ -16,8 +16,11 @@ import SDDSThemeCore */ public struct TabBarItemAppearance: Hashable { let id = UUID() + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var labelColor: ButtonColor + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var iconColor: ButtonColor + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var backgroundColor: ButtonColor public var labelTypography: TypographyConfiguration public var counterAppearance: CounterAppearance? @@ -41,6 +44,8 @@ public struct TabBarItemAppearance: Hashable { self.indicatorAppearance = indicatorAppearance self.size = size } + + public static func == (lhs: TabBarItemAppearance, rhs: TabBarItemAppearance) -> Bool { lhs.id == rhs.id && diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabs/SDDSTabItem.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabs/SDDSTabItem.swift index 5a6cb50d3..308cc60ef 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabs/SDDSTabItem.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabs/SDDSTabItem.swift @@ -294,22 +294,13 @@ public struct SDDSTabItem Color { - if isDisabled { - return buttonColor.defaultColor.color(for: colorScheme, subtheme: subtheme) - } else if isSelected { - return buttonColor.selectedColor.color(for: colorScheme, subtheme: subtheme) - } else { - return buttonColor.defaultColor.color(for: colorScheme, subtheme: subtheme) - } + var activeStates = Set() + if isSelected { activeStates.insert(.selected) } + return buttonColor.color(for: activeStates, colorScheme: colorScheme, subtheme: subtheme) } private func actionContentColor(for buttonColor: ButtonColor) -> Color { - // actionColor не меняется в selected состоянии - if isDisabled { - return buttonColor.defaultColor.color(for: colorScheme, subtheme: subtheme) - } else { - return buttonColor.defaultColor.color(for: colorScheme, subtheme: subtheme) - } + buttonColor.color(for: [], colorScheme: colorScheme, subtheme: subtheme) } private var labelTypography: TypographyToken { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabs/TabItemAppearance/TabItemAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabs/TabItemAppearance/TabItemAppearance.swift index 206f0befa..bb6e8f5df 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabs/TabItemAppearance/TabItemAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabs/TabItemAppearance/TabItemAppearance.swift @@ -21,10 +21,15 @@ import SDDSThemeCore public struct TabItemAppearance: Hashable { let id = UUID() public var size: TabItemSizeConfiguration + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var labelColor: ButtonColor + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var valueColor: ButtonColor + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var startContentColor: ButtonColor + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var endContentColor: ButtonColor + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var actionColor: ButtonColor public var labelTypography: TypographyConfiguration public var valueTypography: TypographyConfiguration @@ -57,6 +62,8 @@ public struct TabItemAppearance: Hashable { self.actionIcon = actionIcon self.indicatorColor = indicatorColor } + + public static func == (lhs: TabItemAppearance, rhs: TabItemAppearance) -> Bool { return lhs.id == rhs.id diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabs/TabsAppearance/TabsAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabs/TabsAppearance/TabsAppearance.swift index b81ac22a4..6dde29d56 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabs/TabsAppearance/TabsAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTabs/TabsAppearance/TabsAppearance.swift @@ -22,6 +22,7 @@ import SDDSThemeCore public struct TabsAppearance: Hashable { let id = UUID() public var size: TabsSizeConfiguration + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var disclosureColor: ButtonColor public var indicatorColor: ColorToken public var overflowNextIcon: Image? @@ -61,6 +62,8 @@ public struct TabsAppearance: Hashable { self.disclosureTextTypography = disclosureTextTypography self.disclosureIcon = disclosureIcon } + + public static func == (lhs: TabsAppearance, rhs: TabsAppearance) -> Bool { return lhs.id == rhs.id diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextArea/SDDSTextArea.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextArea/SDDSTextArea.swift index e530f21d3..7c5e23470 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextArea/SDDSTextArea.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextArea/SDDSTextArea.swift @@ -539,64 +539,58 @@ public struct SDDSTextArea: View { } private var endContentColor: Color { - if readOnly { - return appearance.endContentColorReadOnly?.color(for: colorScheme, subtheme: subtheme) ?? appearance.endContentColor.color(for: colorScheme, subtheme: subtheme) - } - return appearance.endContentColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.endContentColor, + focused: appearance.endContentColorFocused, + readOnly: appearance.endContentColorReadOnly + ) } private var counterColor: Color { - return appearance.counterColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.counterColor, + readOnly: appearance.counterColorReadOnly + ) } private var backgroundColor: Color { - if readOnly { - return appearance.backgroundColorReadOnly?.color(for: colorScheme, subtheme: subtheme) ?? appearance.backgroundColor.color(for: colorScheme, subtheme: subtheme) - } - if isFocused { - return appearance.backgroundColorFocused.color(for: colorScheme, subtheme: subtheme) - } - return appearance.backgroundColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.backgroundColor, + focused: appearance.backgroundColorFocused, + readOnly: appearance.backgroundColorReadOnly + ) } private var captionColor: Color { - if readOnly { - return appearance.captionColorReadOnly?.color(for: colorScheme, subtheme: subtheme) ?? appearance.captionColor.color(for: colorScheme, subtheme: subtheme) - } - if isFocused { - return appearance.captionColorFocused.color(for: colorScheme, subtheme: subtheme) - } - return appearance.captionColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.captionColor, + focused: appearance.captionColorFocused, + readOnly: appearance.captionColorReadOnly + ) } private var placeholderColor: Color { - if readOnly { - return appearance.placeholderColorReadOnly?.color(for: colorScheme, subtheme: subtheme) ?? appearance.placeholderColor.color(for: colorScheme, subtheme: subtheme) - } - if isFocused { - return appearance.placeholderColorFocused.color(for: colorScheme, subtheme: subtheme) - } - return appearance.placeholderColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.placeholderColor, + focused: appearance.placeholderColorFocused, + readOnly: appearance.placeholderColorReadOnly + ) } private var textColor: Color { - if readOnly { - return appearance.textColorReadOnly?.color(for: colorScheme, subtheme: subtheme) ?? appearance.textColor.color(for: colorScheme, subtheme: subtheme) - } - if isFocused { - return appearance.textColorFocused.color(for: colorScheme, subtheme: subtheme) - } - return appearance.textColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.textColor, + focused: appearance.textColorFocused, + readOnly: appearance.textColorReadOnly + ) } private var bottomLineColor: Color { - if readOnly { - return appearance.lineColorReadOnly.color(for: colorScheme, subtheme: subtheme) - } - if isFocused { - return appearance.lineColorFocused.color(for: colorScheme, subtheme: subtheme) - } - return appearance.lineColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.lineColor, + focused: appearance.lineColorFocused, + readOnly: appearance.lineColorReadOnly + ) } @ViewBuilder @@ -888,6 +882,33 @@ public struct SDDSTextArea: View { dynamicHeight ? 0 : appearance.size.chipsPadding } + private var colorActiveStates: Set { + var states = Set() + if isFocused { + states.insert(.focused) + } + if readOnly { + states.insert(.readonly) + } + return states + } + + private func resolveStatefulColor( + default defaultColor: ColorToken, + focused: ColorToken? = nil, + readOnly: ColorToken? = nil + ) -> Color { + var values: [StatefulColor.Item] = [] + if let readOnly { + values.append(.init(states: [InteractiveState.readonly], value: readOnly)) + } + if let focused { + values.append(.init(states: [InteractiveState.focused], value: focused)) + } + return StatefulColor(defaultValue: defaultColor, values: values) + .color(for: colorActiveStates, colorScheme: colorScheme, subtheme: subtheme) + } + } public struct Action: View { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextField/SDDSTextField.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextField/SDDSTextField.swift index 4f58f0419..3e1c30b94 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextField/SDDSTextField.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextField/SDDSTextField.swift @@ -636,70 +636,59 @@ public struct SDDSTextField: View { } private var endContentColor: Color { - if readOnly { - return appearance.endContentColorReadOnly?.color(for: colorScheme, subtheme: subtheme) ?? appearance.endContentColor.color(for: colorScheme, subtheme: subtheme) - } - return appearance.endContentColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.endContentColor, + focused: appearance.endContentColorFocused, + readOnly: appearance.endContentColorReadOnly + ) } private var backgroundColor: Color { - if readOnly { - return appearance.backgroundColorReadOnly?.color(for: colorScheme, subtheme: subtheme) ?? appearance.backgroundColor.color(for: colorScheme, subtheme: subtheme) - } - if isFocused { - return appearance.backgroundColorFocused.color(for: colorScheme, subtheme: subtheme) - } - return appearance.backgroundColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.backgroundColor, + focused: appearance.backgroundColorFocused, + readOnly: appearance.backgroundColorReadOnly + ) } private var captionColor: Color { - if readOnly { - return appearance.captionColorReadOnly.color(for: colorScheme, subtheme: subtheme) - } - if isFocused { - return appearance.captionColorFocused.color(for: colorScheme, subtheme: subtheme) - } - return appearance.captionColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.captionColor, + focused: appearance.captionColorFocused, + readOnly: appearance.captionColorReadOnly + ) } private var placeholderColor: Color { - if readOnly { - return appearance.placeholderColorReadOnly?.color(for: colorScheme, subtheme: subtheme) ?? appearance.placeholderColor.color(for: colorScheme, subtheme: subtheme) - } - if isFocused { - return appearance.placeholderColorFocused.color(for: colorScheme, subtheme: subtheme) - } - return appearance.placeholderColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.placeholderColor, + focused: appearance.placeholderColorFocused, + readOnly: appearance.placeholderColorReadOnly + ) } private var textColor: Color { - if readOnly { - return appearance.textColorReadOnly?.color(for: colorScheme, subtheme: subtheme) ?? appearance.textColor.color(for: colorScheme, subtheme: subtheme) - } - if isFocused { - return appearance.textColorFocused.color(for: colorScheme, subtheme: subtheme) - } - return appearance.textColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.textColor, + focused: appearance.textColorFocused, + readOnly: appearance.textColorReadOnly + ) } private var bottomLineColor: Color { - if readOnly { - return appearance.lineColorReadOnly.color(for: colorScheme, subtheme: subtheme) - } - if isFocused { - return appearance.lineColorFocused.color(for: colorScheme, subtheme: subtheme) - } - return appearance.lineColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.lineColor, + focused: appearance.lineColorFocused, + readOnly: appearance.lineColorReadOnly + ) } private var iconViewColor: Color { - if readOnly { - return appearance.startContentColorReadOnly?.color(for: colorScheme, subtheme: subtheme) ?? appearance.startContentColor.color(for: colorScheme, subtheme: subtheme) - } - if isFocused { - return appearance.startContentColorFocused.color(for: colorScheme, subtheme: subtheme) - } - return appearance.startContentColor.color(for: colorScheme, subtheme: subtheme) + resolveStatefulColor( + default: appearance.startContentColor, + focused: appearance.startContentColorFocused, + readOnly: appearance.startContentColorReadOnly + ) } @ViewBuilder @@ -935,6 +924,33 @@ public struct SDDSTextField: View { var appearance: TextFieldAppearance { _appearance ?? environmentAppearance } + + private var colorActiveStates: Set { + var states = Set() + if isFocused { + states.insert(.focused) + } + if readOnly { + states.insert(.readonly) + } + return states + } + + private func resolveStatefulColor( + default defaultColor: ColorToken, + focused: ColorToken? = nil, + readOnly: ColorToken? = nil + ) -> Color { + var values: [StatefulColor.Item] = [] + if let readOnly { + values.append(.init(states: [InteractiveState.readonly], value: readOnly)) + } + if let focused { + values.append(.init(states: [InteractiveState.focused], value: focused)) + } + return StatefulColor(defaultValue: defaultColor, values: values) + .color(for: colorActiveStates, colorScheme: colorScheme, subtheme: subtheme) + } } public extension SDDSTextField where IconContent == AnyView, ActionContent == AnyView { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSWheel/SDDSWheel.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSWheel/SDDSWheel.swift index 993ce9a16..c53d8ca3e 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSWheel/SDDSWheel.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSWheel/SDDSWheel.swift @@ -849,7 +849,7 @@ private extension SDDSWheel { } func currentColor(for buttonColor: ButtonColor) -> Color { - return buttonColor.defaultColor.color(for: colorScheme, subtheme: subtheme) + buttonColor.color(for: [], colorScheme: colorScheme, subtheme: subtheme) } var descriptionTypography: TypographyToken { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSWheel/WheelAppearance/WheelAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSWheel/WheelAppearance/WheelAppearance.swift index 5be2809f9..2cf060cd4 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSWheel/WheelAppearance/WheelAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSWheel/WheelAppearance/WheelAppearance.swift @@ -12,7 +12,9 @@ public struct WheelAppearance { public var descriptionColor: ColorToken // Цвета иконок управления + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var controlIconUpColor: ButtonColor + @available(*, deprecated, message: "ButtonColor is deprecated and will be replaced by StatefulColor in a future release.") public var controlIconDownColor: ButtonColor // Цвет разделителя @@ -40,8 +42,8 @@ public struct WheelAppearance { itemTextColor: ColorToken = .clearColor, itemTextAfterColor: ColorToken = .clearColor, descriptionColor: ColorToken = .clearColor, - controlIconUpColor: ButtonColor = .init(defaultColor: .clearColor, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: .clearColor), - controlIconDownColor: ButtonColor = .init(defaultColor: .clearColor, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: .clearColor), + controlIconUpColor: ButtonColor = ButtonColor(defaultColor: .clearColor), + controlIconDownColor: ButtonColor = ButtonColor(defaultColor: .clearColor), separatorColor: ColorToken = .clearColor, itemTextTypography: TypographyConfiguration = .default, itemTextAfterTypography: TypographyConfiguration = .default, @@ -67,6 +69,8 @@ public struct WheelAppearance { self.dividerStyle = dividerStyle self.size = size } + + } // MARK: - Environment Key diff --git a/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControl.swift b/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControl.swift index 9838f0aab..d830423f9 100644 --- a/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControl.swift +++ b/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControl.swift @@ -154,7 +154,17 @@ struct SelectionControl: View { } private var fillView: some View { - appearance.size.togglePathDrawer + let activeStates: Set + switch state { + case .selected: + activeStates = [.checked] + case .indeterminate: + activeStates = [.indeterminate] + case .deselected: + activeStates = [] + } + + return appearance.size.togglePathDrawer .path( in: CGRect( x: 0, @@ -162,7 +172,7 @@ struct SelectionControl: View { width: appearance.size.width - paddings, height: appearance.size.height - paddings) ) - .fill(appearance.toggleColor.color(for: colorScheme, subtheme: subtheme)) + .fill(appearance.toggleStatefulColor.color(for: activeStates, colorScheme: colorScheme, subtheme: subtheme)) } // MARK: - Accessibility diff --git a/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControlAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControlAppearance.swift index 68c0c897b..9beab741f 100644 --- a/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControlAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControlAppearance.swift @@ -22,6 +22,7 @@ public protocol SelectionControlAppearance { func titleColor(for isEnabled: Bool) -> ColorToken func subtitleColor(for isEnabled: Bool) -> ColorToken + var toggleStatefulColor: StatefulColor { get } } public extension SelectionControlAppearance { @@ -32,4 +33,14 @@ public extension SelectionControlAppearance { func subtitleColor(for isEnabled: Bool) -> ColorToken { return isEnabled ? subtitleColor : subtitleColor.withOpacity(disabledAlpha) } + + var toggleStatefulColor: StatefulColor { + StatefulColor( + defaultValue: toggleColor, + values: [ + .init(states: [InteractiveState.checked], value: toggleColorChecked), + .init(states: [InteractiveState.indeterminate], value: toggleColorIndeterminate) + ] + ) + } } diff --git a/SDDSDemoApp/SDDSDemoApp/Views/OverlayView/OverlayView.swift b/SDDSDemoApp/SDDSDemoApp/Views/OverlayView/OverlayView.swift index 939df73ca..a7587f6f2 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/OverlayView/OverlayView.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/OverlayView/OverlayView.swift @@ -46,7 +46,7 @@ struct OverlayView: View { HStack { Spacer() BasicButton( - title: "Overlay Target", + title: "Overlay", subtitle: "", iconAttributes: .init(image: Asset.plasma24.image, alignment: .leading), action: {} diff --git a/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/project.pbxproj b/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/project.pbxproj index 9e0ee8300..381f2905b 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/project.pbxproj +++ b/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/project.pbxproj @@ -285,6 +285,7 @@ 8180A5A72C11C35500009AF5 /* FontFamilyToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8180A49E2C0F71A500009AF5 /* FontFamilyToken.swift */; }; 8180A5A82C11C35500009AF5 /* ShapeToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8180A4A02C0F71A500009AF5 /* ShapeToken.swift */; }; 8180A5A92C11C35700009AF5 /* GradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8180A4B62C0F71A500009AF5 /* GradientView.swift */; }; + 81F2AA8A2F20000100ABCD01 /* StatefulValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81F2AA892F20000100ABCD01 /* StatefulValue.swift */; }; 8180A5AB2C11C37F00009AF5 /* Device.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8180A4B42C0F71A500009AF5 /* Device.swift */; }; 8180A5B62C131CC100009AF5 /* Gradients+Generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8180A5AC2C131CC000009AF5 /* Gradients+Generated.swift */; }; 8180A5B72C131CC100009AF5 /* Shadows+Generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8180A5AD2C131CC000009AF5 /* Shadows+Generated.swift */; }; @@ -778,6 +779,7 @@ 8180A49D2C0F71A500009AF5 /* GradientToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GradientToken.swift; sourceTree = ""; }; 8180A49E2C0F71A500009AF5 /* FontFamilyToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FontFamilyToken.swift; sourceTree = ""; }; 8180A49F2C0F71A500009AF5 /* ColorToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ColorToken.swift; sourceTree = ""; }; + 81F2AA892F20000100ABCD01 /* StatefulValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Common/StatefulValue.swift; sourceTree = ""; }; 8180A4A02C0F71A500009AF5 /* ShapeToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShapeToken.swift; sourceTree = ""; }; 8180A4A22C0F71A500009AF5 /* LineHeightModifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineHeightModifier.swift; sourceTree = ""; }; 8180A4A32C0F71A500009AF5 /* TypographyModifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TypographyModifier.swift; sourceTree = ""; }; @@ -1693,6 +1695,7 @@ isa = PBXGroup; children = ( 81E9D8782ED772BA00229705 /* Subtheme.swift */, + 81F2AA892F20000100ABCD01 /* StatefulValue.swift */, 8180A5832C11C01D00009AF5 /* SDDSThemeCore.h */, 8180A4A72C0F71A500009AF5 /* Extensions */, 8180A4A12C0F71A500009AF5 /* Modifiers */, @@ -3103,6 +3106,7 @@ 8180A59B2C11C34400009AF5 /* TypographyToken+AdaptiveStyle.swift in Sources */, 81DE5FE32D634E1B0041B639 /* SpacingToken.swift in Sources */, 81E9D8792ED772BE00229705 /* Subtheme.swift in Sources */, + 81F2AA8A2F20000100ABCD01 /* StatefulValue.swift in Sources */, 8180A5972C11C34000009AF5 /* LineHeightModifier.swift in Sources */, 8180A5A92C11C35700009AF5 /* GradientView.swift in Sources */, 8180A5A72C11C35500009AF5 /* FontFamilyToken.swift in Sources */, diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/CodeGeneration/CodeGenerationComponent+Extension.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/CodeGeneration/CodeGenerationComponent+Extension.swift index b0af32ffb..1d1a4e2a5 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/CodeGeneration/CodeGenerationComponent+Extension.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/CodeGeneration/CodeGenerationComponent+Extension.swift @@ -133,7 +133,7 @@ enum CodeGenerationComponent: String, CaseIterable, Decodable { // .iconButton, // .basicButtonGroup, // .iconButtonGroup, - // .textField, +// .textField, // .textFieldClear, // .textArea, // .textAreaClear, @@ -227,17 +227,17 @@ enum CodeGenerationComponent: String, CaseIterable, Decodable { // .noteCompact, // .drawerCloseInner, // .drawerCloseNone, -// .drawerCloseOuter +// .drawerCloseOuter, // .toolbarHorizontal, // .toolbarVertical, // .autocompleteTight, // .autocompleteNormal, -// .collapsingNavigationBarInternalPage, -// .collapsingNavigationBarMainPage, + .collapsingNavigationBarInternalPage, + .collapsingNavigationBarMainPage, // .autocompleteTight, // .autocompleteNormal, -// .collapsingNavigationBarInternalPage, -// .collapsingNavigationBarMainPage, +//// .collapsingNavigationBarInternalPage, +//// .collapsingNavigationBarMainPage, // .editable, // .selectSingleTight, // .selectSingleNormal, @@ -246,9 +246,9 @@ enum CodeGenerationComponent: String, CaseIterable, Decodable { // .selectItemSingleTight, // .selectItemSingleNormal, // .selectItemMultipleTight, -// .selectItemMultipleNormal - .paginationDotsVertical, - .paginationDotsHorizontal +// .selectItemMultipleNormal, +// .paginationDotsVertical, +// .paginationDotsHorizontal ] } diff --git "a/SDDSThemeBuilder/SDDSThemeBuilderCore/CodeGeneration/\320\241omponents/ContextBuilders/ButtonColorContextBuilder.swift" "b/SDDSThemeBuilder/SDDSThemeBuilderCore/CodeGeneration/\320\241omponents/ContextBuilders/ButtonColorContextBuilder.swift" index 5ca25681a..101cd7914 100644 --- "a/SDDSThemeBuilder/SDDSThemeBuilderCore/CodeGeneration/\320\241omponents/ContextBuilders/ButtonColorContextBuilder.swift" +++ "b/SDDSThemeBuilder/SDDSThemeBuilderCore/CodeGeneration/\320\241omponents/ContextBuilders/ButtonColorContextBuilder.swift" @@ -1,31 +1,97 @@ import Foundation final class ButtonColorContextBuilder: CodeGenerationContextBuilder { - let defaultColor: ColorKeyValue? - let highlightedColor: ColorState? - let hoveredColor: ColorState? - let selectedColor: ColorState? + enum OutputType { + case buttonColor + case statefulColor + } + + private let defaultColor: ColorKeyValue? + private let highlightedColor: ColorState? + private let hoveredColor: ColorState? + private let selectedColor: ColorState? + private let statefulSource: ColorKeyValue? + private let outputType: OutputType - init(defaultColor: ColorKeyValue?, highlightedColor: ColorState?, hoveredColor: ColorState?, selectedColor: ColorState? = nil) { + init( + defaultColor: ColorKeyValue?, + highlightedColor: ColorState?, + hoveredColor: ColorState?, + selectedColor: ColorState? = nil, + outputType: OutputType = .buttonColor + ) { self.defaultColor = defaultColor self.highlightedColor = highlightedColor self.hoveredColor = hoveredColor self.selectedColor = selectedColor + self.statefulSource = nil + self.outputType = outputType + } + + init(statefulColor: ColorKeyValue?, outputType: OutputType = .buttonColor) { + self.defaultColor = nil + self.highlightedColor = nil + self.hoveredColor = nil + self.selectedColor = nil + self.statefulSource = statefulColor + self.outputType = outputType } var context: String? { - if defaultColor == nil && highlightedColor == nil && hoveredColor == nil { + if defaultColor == nil && highlightedColor == nil && hoveredColor == nil && statefulSource == nil { return nil } let clearColor = "ColorToken.clearColor" - - let defaultColorToken = ColorTokenContextBuilder(defaultColor, hasDefault: true).context ?? clearColor - let highlightedColorToken = ColorTokenContextBuilder(highlightedColor, hasDefault: true).context ?? clearColor - let hoveredColorToken = ColorTokenContextBuilder(hoveredColor, hasDefault: true).context ?? clearColor - let selectedColorToken = ColorTokenContextBuilder(selectedColor, hasDefault: true).context ?? clearColor - return """ - ButtonColor(defaultColor: \(defaultColorToken), highlightedColor: \(highlightedColorToken), hoveredColor: \(hoveredColorToken), selectedColor: \(selectedColorToken)) - """ + if let statefulSource { + let defaultToken = ColorTokenContextBuilder(statefulSource, hasDefault: true).context ?? clearColor + let values = statefulSource.states?.compactMap(statefulItemContext) ?? [] + return buildStatefulColorContext(defaultToken: defaultToken, values: values) + } + + let defaultToken = ColorTokenContextBuilder(defaultColor, hasDefault: true).context ?? clearColor + var values = [String]() + if let highlighted = stateItemContext(highlightedColor, explicitState: "InteractiveState.pressed") { + values.append(highlighted) + } + if let hovered = stateItemContext(hoveredColor, explicitState: "InteractiveState.hovered") { + values.append(hovered) + } + if let selected = stateItemContext(selectedColor, explicitState: "InteractiveState.selected") { + values.append(selected) + } + return buildStatefulColorContext(defaultToken: defaultToken, values: values) + } + + private func buildStatefulColorContext(defaultToken: String, values: [String]) -> String { + let valuesContext: String + if values.isEmpty { + valuesContext = "[]" + } else { + valuesContext = "[\n \(values.joined(separator: ",\n "))\n ]" + } + let statefulColorContext = "StatefulColor(defaultValue: \(defaultToken), values: \(valuesContext))" + switch outputType { + case .buttonColor: + return "ButtonColor(\(statefulColorContext))" + case .statefulColor: + return statefulColorContext + } + } + + private func statefulItemContext(_ state: ColorState) -> String? { + guard let colorToken = ColorTokenContextBuilder(state, hasDefault: false).context else { + return nil + } + let stateCases = state.state?.map { "InteractiveState.\($0.rawValue)" } ?? [] + let stateContext = stateCases.isEmpty ? "[]" : "[\(stateCases.joined(separator: ", "))]" + return ".init(states: \(stateContext), value: \(colorToken))" + } + + private func stateItemContext(_ state: ColorState?, explicitState: String) -> String? { + guard let state, let colorToken = ColorTokenContextBuilder(state, hasDefault: false).context else { + return nil + } + return ".init(states: [\(explicitState)], value: \(colorToken))" } } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/ComponentConfiguration/ColorKeyValue.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/ComponentConfiguration/ColorKeyValue.swift index a76aa93a4..97b56c444 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/ComponentConfiguration/ColorKeyValue.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/ComponentConfiguration/ColorKeyValue.swift @@ -6,8 +6,28 @@ struct ColorKeyValue: Codable { let alpha: Double? let states: [ColorState]? - func value(for statesSet: [ColorState.State]) -> ColorState? { - let defaultState = ColorState(state: [], value: `default`) - return states?.first(where: { $0.state == statesSet }) ?? defaultState + func value(for statesSet: [ComponentState]) -> ColorState? { + let statefulValue = asStatefulValue() + return statefulValue.value(for: statesSet).map { ColorState(state: statesSet, value: $0) } + } + + func value(for state: ComponentState) -> ColorState? { + value(for: [state]) + } + + func value(for statesSet: Set) -> ColorState? { + value(for: Array(statesSet)) + } + + func asStatefulValue() -> StatefulValueDTO { + StatefulValueDTO( + defaultValue: `default`, + values: (states ?? []).map { + StatefulValueDTO.Item( + states: Set($0.state ?? []), + value: $0.value + ) + } + ) } } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/ComponentConfiguration/ColorState.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/ComponentConfiguration/ColorState.swift index 5e19ef511..dcc7177c2 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/ComponentConfiguration/ColorState.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/ComponentConfiguration/ColorState.swift @@ -1,18 +1,6 @@ import Foundation struct ColorState: Codable { - enum State: String, Codable { - case activated - case pressed - case hovered - case checked - case selected - case focused - case indeterminate - case error - case readonly - } - - let state: [State]? + let state: [ComponentState]? let value: String? } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/ComponentConfiguration/KeyValue.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/ComponentConfiguration/KeyValue.swift index ec76be588..6df1da867 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/ComponentConfiguration/KeyValue.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/ComponentConfiguration/KeyValue.swift @@ -1,26 +1,69 @@ import Foundation +enum ComponentState: String, Codable, CaseIterable { + case activated + case pressed + case hovered + case checked + case selected + case focused + case indeterminate + case error + case readonly + case collapsed +} + +struct StatefulValueDTO { + struct Item { + let states: Set + let value: T? + } + + let defaultValue: T? + let values: [Item] + + func value(for activeStates: [ComponentState]) -> T? { + let stateSet = Set(activeStates) + if let match = values.first(where: { $0.states.isSubset(of: stateSet) }) { + return match.value + } + return defaultValue ?? values.first(where: { $0.states.isEmpty })?.value ?? values.first?.value + } +} + struct KeyValue: Codable { let type: String? let `default`: Double? let value: T? let states: [ValueState]? - func value(for statesSet: [ValueState.State]) -> ValueState? { - let defaultState = ValueState(state: [], value: value) - return states?.first(where: { $0.state == statesSet }) ?? defaultState + func value(for statesSet: [ComponentState]) -> ValueState? { + let statefulValue = asStatefulValue() + return statefulValue.value(for: statesSet).map { ValueState(state: statesSet, value: $0) } + } + + func value(for state: ComponentState) -> ValueState? { + value(for: [state]) + } + + func value(for statesSet: Set) -> ValueState? { + value(for: Array(statesSet)) + } + + func asStatefulValue() -> StatefulValueDTO { + StatefulValueDTO( + defaultValue: value, + values: (states ?? []).map { + StatefulValueDTO.Item( + states: Set($0.state ?? []), + value: $0.value + ) + } + ) } } struct ValueState: Codable { - enum State: String, Codable { - case activated - case checked - case indeterminate - case focused - case collapsed - } - - let state: [State]? + let state: [ComponentState]? let value: T? } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Button/ButtonAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Button/ButtonAppearance.swift index f7bdf5055..6ae0633f7 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Button/ButtonAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Button/ButtonAppearance.swift @@ -25,31 +25,11 @@ struct ButtonAppearance: CodeGenerationAppearance { self.loadingAlpha = CGFloatContextBuilder(props.loadingAlpha?.value, nullify: true).context self.disabledAlpha = CGFloatContextBuilder(props.disableAlpha?.value, nullify: true).context - self.backgroundColor = ButtonColorContextBuilder( - defaultColor: props.backgroundColor, - highlightedColor: props.backgroundColor?.value(for: [.pressed]), - hoveredColor: props.backgroundColor?.value(for: [.hovered]) - ).context - self.spinnerColor = ButtonColorContextBuilder( - defaultColor: props.spinnerColor, - highlightedColor: props.spinnerColor?.value(for: [.pressed]), - hoveredColor: props.spinnerColor?.value(for: [.hovered]) - ).context - self.iconColor = ButtonColorContextBuilder( - defaultColor: props.iconColor, - highlightedColor: props.iconColor?.value(for: [.pressed]), - hoveredColor: props.iconColor?.value(for: [.hovered]) - ).context - self.titleColor = ButtonColorContextBuilder( - defaultColor: props.labelColor, - highlightedColor: props.labelColor?.value(for: [.pressed]), - hoveredColor: props.labelColor?.value(for: [.hovered]) - ).context - self.subtitleColor = ButtonColorContextBuilder( - defaultColor: props.valueColor, - highlightedColor: props.valueColor?.value(for: [.pressed]), - hoveredColor: props.valueColor?.value(for: [.hovered]) - ).context + self.backgroundColor = ButtonColorContextBuilder(statefulColor: props.backgroundColor).context + self.spinnerColor = ButtonColorContextBuilder(statefulColor: props.spinnerColor).context + self.iconColor = ButtonColorContextBuilder(statefulColor: props.iconColor).context + self.titleColor = ButtonColorContextBuilder(statefulColor: props.labelColor).context + self.subtitleColor = ButtonColorContextBuilder(statefulColor: props.valueColor).context self.subtitleTypography = TypographyTokenContextBuilder(string: props.valueStyle?.value, id: id, component: component).context self.titleTypography = TypographyTokenContextBuilder(string: props.labelStyle?.value, id: id, component: component).context } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Checkbox/CheckboxAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Checkbox/CheckboxAppearance.swift index e94458902..78fbfae02 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Checkbox/CheckboxAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Checkbox/CheckboxAppearance.swift @@ -25,13 +25,13 @@ struct CheckboxAppearance: CodeGenerationAppearance { } self.titleTypography = TypographyTokenContextBuilder(string: props.labelStyle?.value, id: id, component: component).context self.subtitleTypography = TypographyTokenContextBuilder(string: props.descriptionStyle?.value, id: id, component: component).context - self.toggleColor = ColorTokenContextBuilder(props.toggleColor?.value(for: [.checked])).context + self.toggleColor = ColorTokenContextBuilder(props.toggleColor?.value(for: .checked)).context self.borderColor = ColorTokenContextBuilder(props.toggleBorderColor).context self.titleColor = ColorTokenContextBuilder(props.labelColor).context self.subtitleColor = ColorTokenContextBuilder(props.descriptionColor).context self.toggleColorChecked = ColorTokenContextBuilder(props.toggleIconColor).context self.toggleColorIndeterminate = ColorTokenContextBuilder(props.toggleIconColor).context - self.toggleIndeterminateColor = ColorTokenContextBuilder(props.toggleIndeterminateIconColor?.value(for: [.indeterminate])).context + self.toggleIndeterminateColor = ColorTokenContextBuilder(props.toggleIndeterminateIconColor?.value(for: .indeterminate)).context self.disabledAlpha = CGFloatContextBuilder(props.disableAlpha?.value, nullify: true).context } } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Checkbox/CheckboxSize.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Checkbox/CheckboxSize.swift index 2111c73ca..12cba2649 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Checkbox/CheckboxSize.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Checkbox/CheckboxSize.swift @@ -29,10 +29,10 @@ struct CheckboxSize: CodeGenerationSize { self.togglePathDrawer = PathDrawerContextBuilder(shape: props.shape, nullify: nullify).context self.lineWidth = CGFloatContextBuilder(props.toggleBorderWidth?.value, nullify: nullify).context self.togglePaddings = CGFloatContextBuilder(props.togglePadding?.value, nullify: nullify).context - self.toggleCheckedIconWidth = CGFloatContextBuilder(props.toggleIconWidth?.value(for: [.checked]), nullify: nullify).context - self.toggleCheckedIconHeight = CGFloatContextBuilder(props.toggleIconHeight?.value(for: [.checked]), nullify: nullify).context - self.toggleIndeterminateIconWidth = CGFloatContextBuilder(props.toggleIconWidth?.value(for: [.indeterminate]), nullify: nullify).context - self.toggleIndeterminateIconHeight = CGFloatContextBuilder(props.toggleIconHeight?.value(for: [.indeterminate]), nullify: nullify).context + self.toggleCheckedIconWidth = CGFloatContextBuilder(props.toggleIconWidth?.value(for: .checked), nullify: nullify).context + self.toggleCheckedIconHeight = CGFloatContextBuilder(props.toggleIconHeight?.value(for: .checked), nullify: nullify).context + self.toggleIndeterminateIconWidth = CGFloatContextBuilder(props.toggleIconWidth?.value(for: .indeterminate), nullify: nullify).context + self.toggleIndeterminateIconHeight = CGFloatContextBuilder(props.toggleIconHeight?.value(for: .indeterminate), nullify: nullify).context } init() { diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Chip/ChipAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Chip/ChipAppearance.swift index 1bcc67c5d..89caa9bbc 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Chip/ChipAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Chip/ChipAppearance.swift @@ -21,26 +21,10 @@ struct ChipAppearance: CodeGenerationAppearance { } self.disabledAlpha = CGFloatContextBuilder(props.disableAlpha?.value, nullify: true).context - self.backgroundColor = ButtonColorContextBuilder( - defaultColor: props.backgroundColor, - highlightedColor: props.backgroundColor?.value(for: [.pressed]), - hoveredColor: props.backgroundColor?.value(for: [.hovered]) - ).context - self.imageTintColor = ButtonColorContextBuilder( - defaultColor: props.contentStartColor, - highlightedColor: props.contentStartColor?.value(for: [.pressed]), - hoveredColor: props.contentStartColor?.value(for: [.hovered]) - ).context - self.buttonTintColor = ButtonColorContextBuilder( - defaultColor: props.contentEndColor, - highlightedColor: props.contentEndColor?.value(for: [.pressed]), - hoveredColor: props.contentEndColor?.value(for: [.hovered]) - ).context - self.titleColor = ButtonColorContextBuilder( - defaultColor: props.labelColor, - highlightedColor: props.labelColor?.value(for: [.pressed]), - hoveredColor: props.labelColor?.value(for: [.hovered]) - ).context + self.backgroundColor = ButtonColorContextBuilder(statefulColor: props.backgroundColor).context + self.imageTintColor = ButtonColorContextBuilder(statefulColor: props.contentStartColor).context + self.buttonTintColor = ButtonColorContextBuilder(statefulColor: props.contentEndColor).context + self.titleColor = ButtonColorContextBuilder(statefulColor: props.labelColor).context self.titleTypography = TypographyTokenContextBuilder(string: props.labelStyle?.value, id: id, component: component).context } } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CodeField/CodeFieldAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CodeField/CodeFieldAppearance.swift index 56ffa9f01..7c4a9e674 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CodeField/CodeFieldAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CodeField/CodeFieldAppearance.swift @@ -27,15 +27,15 @@ struct CodeFieldAppearance: CodeGenerationAppearance { } self.valueColor = ColorTokenContextBuilder(props.valueColor).context - self.valueColorError = ColorTokenContextBuilder(props.valueColor?.value(for: [.error])).context + self.valueColorError = ColorTokenContextBuilder(props.valueColor?.value(for: .error)).context self.cursorColor = ColorTokenContextBuilder(props.cursorColor).context self.captionColor = ColorTokenContextBuilder(props.captionColor).context - self.captionColorError = ColorTokenContextBuilder(props.captionColor?.value(for: [.error])).context + self.captionColorError = ColorTokenContextBuilder(props.captionColor?.value(for: .error)).context self.dotColor = ColorTokenContextBuilder(props.dotColor).context - self.dotColorError = ColorTokenContextBuilder(props.dotColor?.value(for: [.error])).context + self.dotColorError = ColorTokenContextBuilder(props.dotColor?.value(for: .error)).context self.backgroundColor = ColorTokenContextBuilder(props.backgroundColor).context - self.backgroundColorActivated = ColorTokenContextBuilder(props.backgroundColor?.value(for: [.activated])).context - self.backgroundColorError = ColorTokenContextBuilder(props.backgroundColor?.value(for: [.error])).context + self.backgroundColorActivated = ColorTokenContextBuilder(props.backgroundColor?.value(for: .activated)).context + self.backgroundColorError = ColorTokenContextBuilder(props.backgroundColor?.value(for: .error)).context self.captionTypography = TypographyTokenContextBuilder(string: props.captionStyle?.value, id: id, component: component).context self.valueTypography = TypographyTokenContextBuilder(string: props.valueStyle?.value, id: id, component: component).context } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CodeInput/CodeInputAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CodeInput/CodeInputAppearance.swift index c19c1cff0..1442075c2 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CodeInput/CodeInputAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CodeInput/CodeInputAppearance.swift @@ -26,12 +26,12 @@ struct CodeInputAppearance: CodeGenerationAppearance { } self.codeColor = ColorTokenContextBuilder(props.codeColor).context - self.codeColorError = ColorTokenContextBuilder(props.codeColor?.value(for: [.error])).context + self.codeColorError = ColorTokenContextBuilder(props.codeColor?.value(for: .error)).context self.captionColor = ColorTokenContextBuilder(props.captionColor).context - self.captionColorError = ColorTokenContextBuilder(props.captionColor?.value(for: [.error])).context + self.captionColorError = ColorTokenContextBuilder(props.captionColor?.value(for: .error)).context self.strokeColor = ColorTokenContextBuilder(props.strokeColor).context - self.strokeColorError = ColorTokenContextBuilder(props.strokeColor?.value(for: [.error])).context - self.strokeColorFocused = ColorTokenContextBuilder(props.strokeColor?.value(for: [.focused])).context + self.strokeColorError = ColorTokenContextBuilder(props.strokeColor?.value(for: .error)).context + self.strokeColorFocused = ColorTokenContextBuilder(props.strokeColor?.value(for: .focused)).context self.fillColor = ColorTokenContextBuilder(props.fillColor).context self.fillColorError = ColorTokenContextBuilder(props.fillColorError).context self.codeTypography = TypographyTokenContextBuilder(string: props.codeStyle?.value, id: id, component: component).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarInternalPage/CollapsingNavigationBarInternalPageAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarInternalPage/CollapsingNavigationBarInternalPageAppearance.swift index 6108b591d..e2f144cf6 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarInternalPage/CollapsingNavigationBarInternalPageAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarInternalPage/CollapsingNavigationBarInternalPageAppearance.swift @@ -49,13 +49,13 @@ struct CollapsingNavigationBarInternalPageAppearance: CodeGenerationAppearance { self.textTypography = TypographyTokenContextBuilder(string: props.textStyle?.value, id: id, component: component).context self.titleTypography = TypographyTokenContextBuilder(string: props.titleStyle?.value, id: id, component: component).context self.titleTypographyCollapsed = TypographyTokenContextBuilder( - string: props.titleStyle?.value(for: [.collapsed])?.value, + string: props.titleStyle?.value(for: .collapsed)?.value, id: id, component: component ).context self.descriptionTypography = TypographyTokenContextBuilder(string: props.descriptionStyle?.value, id: id, component: component).context self.descriptionTypographyCollapsed = TypographyTokenContextBuilder( - string: props.descriptionStyle?.value(for: [.collapsed])?.value, + string: props.descriptionStyle?.value(for: .collapsed)?.value, id: id, component: component ).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarInternalPage/CollapsingNavigationBarInternalPageSize.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarInternalPage/CollapsingNavigationBarInternalPageSize.swift index 11e3f60a2..01fd6aa9c 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarInternalPage/CollapsingNavigationBarInternalPageSize.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarInternalPage/CollapsingNavigationBarInternalPageSize.swift @@ -22,7 +22,7 @@ struct CollapsingNavigationBarInternalPageSize: CodeGenerationSize { init(props: CollapsingNavigationBarInternalPageProps, id: String? = nil, nullify: Bool = false) { self.backIconMargin = CGFloatContextBuilder(props.backIconMargin?.value, nullify: nullify).context self.descriptionPadding = CGFloatContextBuilder(props.descriptionPadding?.value, nullify: nullify).context - self.descriptionPaddingCollapsed = CGFloatContextBuilder(props.descriptionPadding?.value(for: [.collapsed])?.value, nullify: nullify).context + self.descriptionPaddingCollapsed = CGFloatContextBuilder(props.descriptionPadding?.value(for: .collapsed)?.value, nullify: nullify).context self.paddingStart = CGFloatContextBuilder(props.paddingStart?.value, nullify: nullify).context self.paddingEnd = CGFloatContextBuilder(props.paddingEnd?.value, nullify: nullify).context self.paddingTop = CGFloatContextBuilder(props.paddingTop?.value, nullify: nullify).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarMainPage/CollapsingNavigationBarMainPageAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarMainPage/CollapsingNavigationBarMainPageAppearance.swift index a68763a30..3859b4125 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarMainPage/CollapsingNavigationBarMainPageAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarMainPage/CollapsingNavigationBarMainPageAppearance.swift @@ -43,13 +43,13 @@ struct CollapsingNavigationBarMainPageAppearance: CodeGenerationAppearance { self.textTypography = TypographyTokenContextBuilder(string: props.textStyle?.value, id: id, component: component).context self.titleTypography = TypographyTokenContextBuilder(string: props.titleStyle?.value, id: id, component: component).context self.titleTypographyCollapsed = TypographyTokenContextBuilder( - string: props.titleStyle?.value(for: [.collapsed])?.value, + string: props.titleStyle?.value(for: .collapsed)?.value, id: id, component: component ).context self.descriptionTypography = TypographyTokenContextBuilder(string: props.descriptionStyle?.value, id: id, component: component).context self.descriptionTypographyCollapsed = TypographyTokenContextBuilder( - string: props.descriptionStyle?.value(for: [.collapsed])?.value, + string: props.descriptionStyle?.value(for: .collapsed)?.value, id: id, component: component ).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarMainPage/CollapsingNavigationBarMainPageSize.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarMainPage/CollapsingNavigationBarMainPageSize.swift index ec8bc61b5..dcc45718e 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarMainPage/CollapsingNavigationBarMainPageSize.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/CollapsingNavigationBarMainPage/CollapsingNavigationBarMainPageSize.swift @@ -20,7 +20,7 @@ struct CollapsingNavigationBarMainPageSize: CodeGenerationSize { init(props: CollapsingNavigationBarMainPageProps, id: String? = nil, nullify: Bool = false) { self.descriptionPadding = CGFloatContextBuilder(props.descriptionPadding?.value, nullify: nullify).context - self.descriptionPaddingCollapsed = CGFloatContextBuilder(props.descriptionPadding?.value(for: [.collapsed])?.value, nullify: nullify).context + self.descriptionPaddingCollapsed = CGFloatContextBuilder(props.descriptionPadding?.value(for: .collapsed)?.value, nullify: nullify).context self.paddingStart = CGFloatContextBuilder(props.paddingStart?.value, nullify: nullify).context self.paddingEnd = CGFloatContextBuilder(props.paddingEnd?.value, nullify: nullify).context self.paddingTop = CGFloatContextBuilder(props.paddingTop?.value, nullify: nullify).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Counter/CounterAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Counter/CounterAppearance.swift index 818513a2b..8ed28f33e 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Counter/CounterAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Counter/CounterAppearance.swift @@ -18,18 +18,8 @@ struct CounterAppearance: CodeGenerationAppearance { } self.textTypography = TypographyTokenContextBuilder(string: props.labelStyle?.value, id: id, component: component).context - self.textColor = ButtonColorContextBuilder( - defaultColor: props.textColor, - highlightedColor: props.textColor?.value(for: [.pressed]), - hoveredColor: props.textColor?.value(for: [.hovered]), - selectedColor: props.textColor?.value(for: [.selected]) - ).context - self.backgroundColor = ButtonColorContextBuilder( - defaultColor: props.backgroundColor, - highlightedColor: props.backgroundColor?.value(for: [.pressed]), - hoveredColor: props.backgroundColor?.value(for: [.hovered]), - selectedColor: props.backgroundColor?.value(for: [.selected]) - ).context + self.textColor = ButtonColorContextBuilder(statefulColor: props.textColor).context + self.backgroundColor = ButtonColorContextBuilder(statefulColor: props.backgroundColor).context } func context(with defaultStyle: String) -> String { diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/ListItem/ListItemAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/ListItem/ListItemAppearance.swift index 956d44cef..ebf1c572a 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/ListItem/ListItemAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/ListItem/ListItemAppearance.swift @@ -34,11 +34,7 @@ struct ListItemAppearance: CodeGenerationAppearance { self.disclosureIconColor = ColorTokenContextBuilder(props.disclosureIconColor).context self.disclosureIcon = ImageContextBuilder(props.disclosureIcon?.value).context self.disabledAlpha = CGFloatContextBuilder(props.disableAlpha?.value, nullify: true).context - self.backgroundColor = ButtonColorContextBuilder( - defaultColor: props.backgroundColor, - highlightedColor: props.backgroundColor?.value(for: [.pressed]), - hoveredColor: props.backgroundColor?.value(for: [.hovered]) - ).context + self.backgroundColor = ButtonColorContextBuilder(statefulColor: props.backgroundColor).context if let counterStyle = props.counterStyle?.value { self.counterAppearance = ComponentStyleContextBuilder(counterStyle).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/PaginationDots/PaginationDotsAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/PaginationDots/PaginationDotsAppearance.swift index 1a5c88f09..44f523f50 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/PaginationDots/PaginationDotsAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/PaginationDots/PaginationDotsAppearance.swift @@ -16,7 +16,7 @@ struct PaginationDotsAppearance: CodeGenerationAppearance { self.dotBackgroundColor = ColorTokenContextBuilder(props.dotBackgroundColor).context self.dotBackgroundColorActivated = ColorTokenContextBuilder( - props.dotBackgroundColor?.value(for: [.activated]) + props.dotBackgroundColor?.value(for: .activated) ).context } } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/PaginationDots/PaginationDotsSize.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/PaginationDots/PaginationDotsSize.swift index f1beb4533..c8b27cccf 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/PaginationDots/PaginationDotsSize.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/PaginationDots/PaginationDotsSize.swift @@ -21,9 +21,9 @@ struct PaginationDotsSize: CodeGenerationSize { self.gap = CGFloatContextBuilder(props.gap?.value, nullify: nullify).context self.edgeShrinkFactor = CGFloatContextBuilder(props.edgeShrinkFactor?.value, nullify: nullify).context self.dotWidth = CGFloatContextBuilder(props.dotWidth?.value, nullify: nullify).context - self.dotWidthActivated = CGFloatContextBuilder(props.dotWidth?.value(for: [.activated]), nullify: nullify).context + self.dotWidthActivated = CGFloatContextBuilder(props.dotWidth?.value(for: .activated), nullify: nullify).context self.dotHeight = CGFloatContextBuilder(props.dotHeight?.value, nullify: nullify).context - self.dotHeightActivated = CGFloatContextBuilder(props.dotHeight?.value(for: [.activated]), nullify: nullify).context + self.dotHeightActivated = CGFloatContextBuilder(props.dotHeight?.value(for: .activated), nullify: nullify).context self.edgeCount = PaginationDotsEdgeCountContextBuilder(value: props.edgeCount?.value, nullify: nullify).context } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Radiobox/RadioboxAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Radiobox/RadioboxAppearance.swift index 9c817b7eb..5d140056d 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Radiobox/RadioboxAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Radiobox/RadioboxAppearance.swift @@ -26,7 +26,7 @@ struct RadioboxAppearance: CodeGenerationAppearance { self.toggleColorChecked = ColorTokenContextBuilder(props.toggleIconColor).context self.titleTypography = TypographyTokenContextBuilder(string: props.labelStyle?.value, id: id, component: component).context self.subtitleTypography = TypographyTokenContextBuilder(string: props.descriptionStyle?.value, id: id, component: component).context - self.toggleColor = ColorTokenContextBuilder(props.toggleColor?.value(for: [.checked])).context + self.toggleColor = ColorTokenContextBuilder(props.toggleColor?.value(for: .checked)).context self.borderColor = ColorTokenContextBuilder(props.toggleBorderColor).context self.titleColor = ColorTokenContextBuilder(props.labelColor).context self.subtitleColor = ColorTokenContextBuilder(props.descriptionColor).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Segment/SegmentAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Segment/SegmentAppearance.swift index 9d099c37a..d9bc9e4d8 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Segment/SegmentAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Segment/SegmentAppearance.swift @@ -18,12 +18,7 @@ struct SegmentAppearance: CodeGenerationAppearance { } self.disabledAlpha = CGFloat.defaultContext - self.backgroundColor = ButtonColorContextBuilder( - defaultColor: props.backgroundColor, - highlightedColor: props.backgroundColor?.value(for: [.pressed]), - hoveredColor: props.backgroundColor?.value(for: [.hovered]), - selectedColor: props.backgroundColor?.value(for: [.selected]) - ).context + self.backgroundColor = ButtonColorContextBuilder(statefulColor: props.backgroundColor).context if let segmentItemStyle = props.segmentItemStyle?.value { self.segmentItemAppearance = ComponentStyleContextBuilder(segmentItemStyle).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/SegmentItem/SegmentItemAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/SegmentItem/SegmentItemAppearance.swift index 6dbec6866..af25551c6 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/SegmentItem/SegmentItemAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/SegmentItem/SegmentItemAppearance.swift @@ -24,36 +24,11 @@ struct SegmentItemAppearance: CodeGenerationAppearance { } self.disabledAlpha = CGFloatContextBuilder(props.disableAlpha?.value, nullify: true).context - self.backgroundColor = ButtonColorContextBuilder( - defaultColor: props.backgroundColor, - highlightedColor: props.backgroundColor?.value(for: [.pressed]), - hoveredColor: props.backgroundColor?.value(for: [.hovered]), - selectedColor: props.backgroundColor?.value(for: [.selected]) - ).context - self.startContentColor = ButtonColorContextBuilder( - defaultColor: props.startContentColor, - highlightedColor: props.startContentColor?.value(for: [.pressed]), - hoveredColor: props.startContentColor?.value(for: [.hovered]), - selectedColor: props.startContentColor?.value(for: [.selected]) - ).context - self.endContentColor = ButtonColorContextBuilder( - defaultColor: props.endContentColor, - highlightedColor: props.endContentColor?.value(for: [.pressed]), - hoveredColor: props.endContentColor?.value(for: [.hovered]), - selectedColor: props.endContentColor?.value(for: [.selected]) - ).context - self.titleColor = ButtonColorContextBuilder( - defaultColor: props.labelColor, - highlightedColor: props.labelColor?.value(for: [.pressed]), - hoveredColor: props.labelColor?.value(for: [.hovered]), - selectedColor: props.labelColor?.value(for: [.selected]) - ).context - self.subtitleColor = ButtonColorContextBuilder( - defaultColor: props.valueColor, - highlightedColor: props.valueColor?.value(for: [.pressed]), - hoveredColor: props.valueColor?.value(for: [.hovered]), - selectedColor: props.valueColor?.value(for: [.selected]) - ).context + self.backgroundColor = ButtonColorContextBuilder(statefulColor: props.backgroundColor).context + self.startContentColor = ButtonColorContextBuilder(statefulColor: props.startContentColor).context + self.endContentColor = ButtonColorContextBuilder(statefulColor: props.endContentColor).context + self.titleColor = ButtonColorContextBuilder(statefulColor: props.labelColor).context + self.subtitleColor = ButtonColorContextBuilder(statefulColor: props.valueColor).context self.subtitleTypography = TypographyTokenContextBuilder(string: props.valueStyle?.value, id: id, component: component).context self.titleTypography = TypographyTokenContextBuilder(string: props.labelStyle?.value, id: id, component: component).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/SelectItem/SelectItemAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/SelectItem/SelectItemAppearance.swift index 3b0ddc58b..722101921 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/SelectItem/SelectItemAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/SelectItem/SelectItemAppearance.swift @@ -24,11 +24,7 @@ struct SelectItemAppearance: CodeGenerationAppearance { self.itemType = props.itemType?.value.map { ".\($0)" } self.iconColor = ColorTokenContextBuilder(props.iconColor).context self.disabledAlpha = CGFloatContextBuilder(props.disableAlpha?.value, nullify: true).context - self.backgroundColor = ButtonColorContextBuilder( - defaultColor: props.backgroundColor, - highlightedColor: props.backgroundColor?.value(for: [.pressed]), - hoveredColor: props.backgroundColor?.value(for: [.hovered]) - ).context + self.backgroundColor = ButtonColorContextBuilder(statefulColor: props.backgroundColor).context if let cellStyle = props.cellStyle?.value { self.cellAppearance = ComponentStyleContextBuilder(cellStyle).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Switch/SwitchAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Switch/SwitchAppearance.swift index 408e2abfc..172c610b3 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Switch/SwitchAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Switch/SwitchAppearance.swift @@ -29,7 +29,7 @@ struct SwitchAppearance: CodeGenerationAppearance { self.titleColor = ColorTokenContextBuilder(props.labelColor).context self.subtitleColor = ColorTokenContextBuilder(props.descriptionColor).context self.toggleTrackColor = ColorTokenContextBuilder(props.toggleTrackColor).context - self.toggleTrackColorChecked = ColorTokenContextBuilder(props.toggleTrackColor?.value(for: [.checked])).context + self.toggleTrackColorChecked = ColorTokenContextBuilder(props.toggleTrackColor?.value(for: .checked)).context self.toggleTrackBorderColor = ColorTokenContextBuilder(props.toggleTrackBorderColor).context self.toggleThumbColor = ColorTokenContextBuilder(props.toggleThumbColor).context self.disabledAlpha = CGFloatContextBuilder(props.disableAlpha?.value, nullify: true).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TabBarItem/TabBarItemAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TabBarItem/TabBarItemAppearance.swift index 95664128a..21c804e2b 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TabBarItem/TabBarItemAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TabBarItem/TabBarItemAppearance.swift @@ -20,24 +20,9 @@ struct TabBarItemAppearance: CodeGenerationAppearance { return } - self.labelColor = ButtonColorContextBuilder( - defaultColor: props.labelColor, - highlightedColor: nil, - hoveredColor: nil, - selectedColor: props.labelColor?.value(for: [.selected]) - ).context - self.iconColor = ButtonColorContextBuilder( - defaultColor: props.iconColor, - highlightedColor: nil, - hoveredColor: nil, - selectedColor: props.iconColor?.value(for: [.selected]) - ).context - self.backgroundColor = ButtonColorContextBuilder( - defaultColor: props.backgroundColor, - highlightedColor: nil, - hoveredColor: nil, - selectedColor: props.backgroundColor?.value(for: [.selected]) - ).context + self.labelColor = ButtonColorContextBuilder(statefulColor: props.labelColor).context + self.iconColor = ButtonColorContextBuilder(statefulColor: props.iconColor).context + self.backgroundColor = ButtonColorContextBuilder(statefulColor: props.backgroundColor).context self.labelTypography = TypographyTokenContextBuilder(string: props.labelStyle?.value, id: id, component: component).context if let counterStyle = props.counterStyle?.value { diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TabItemDefault/TabItemDefaultAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TabItemDefault/TabItemDefaultAppearance.swift index 99494a6cf..0dd8106cd 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TabItemDefault/TabItemDefaultAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TabItemDefault/TabItemDefaultAppearance.swift @@ -25,41 +25,12 @@ struct TabItemDefaultAppearance: CodeGenerationAppearance { return } - // Цвета с состояниями (selected, hovered, pressed) - self.labelColor = ButtonColorContextBuilder( - defaultColor: props.labelColor, - highlightedColor: props.labelColor?.value(for: [.pressed]), - hoveredColor: props.labelColor?.value(for: [.hovered]), - selectedColor: props.labelColor?.value(for: [.selected]) - ).context - - self.valueColor = ButtonColorContextBuilder( - defaultColor: props.valueColor, - highlightedColor: props.valueColor?.value(for: [.pressed]), - hoveredColor: props.valueColor?.value(for: [.hovered]), - selectedColor: props.valueColor?.value(for: [.selected]) - ).context - - self.startContentColor = ButtonColorContextBuilder( - defaultColor: props.startContentColor, - highlightedColor: props.startContentColor?.value(for: [.pressed]), - hoveredColor: props.startContentColor?.value(for: [.hovered]), - selectedColor: props.startContentColor?.value(for: [.selected]) - ).context - - self.endContentColor = ButtonColorContextBuilder( - defaultColor: props.endContentColor, - highlightedColor: props.endContentColor?.value(for: [.pressed]), - hoveredColor: props.endContentColor?.value(for: [.hovered]), - selectedColor: props.endContentColor?.value(for: [.selected]) - ).context - - self.actionColor = ButtonColorContextBuilder( - defaultColor: props.actionColor, - highlightedColor: props.actionColor?.value(for: [.pressed]), - hoveredColor: props.actionColor?.value(for: [.hovered]), - selectedColor: nil - ).context + // Цвета с состояниями + self.labelColor = ButtonColorContextBuilder(statefulColor: props.labelColor).context + self.valueColor = ButtonColorContextBuilder(statefulColor: props.valueColor).context + self.startContentColor = ButtonColorContextBuilder(statefulColor: props.startContentColor).context + self.endContentColor = ButtonColorContextBuilder(statefulColor: props.endContentColor).context + self.actionColor = ButtonColorContextBuilder(statefulColor: props.actionColor).context // Типографика self.labelTypography = TypographyTokenContextBuilder(string: props.labelStyle?.value, id: id, component: component).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TabsDefault/TabsDefaultAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TabsDefault/TabsDefaultAppearance.swift index 902aa73a4..e30081692 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TabsDefault/TabsDefaultAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TabsDefault/TabsDefaultAppearance.swift @@ -28,12 +28,7 @@ struct TabsDefaultAppearance: CodeGenerationAppearance { } // Цвета с состояниями - self.disclosureColor = ButtonColorContextBuilder( - defaultColor: props.disclosureColor, - highlightedColor: props.disclosureColor?.value(for: [.pressed]), - hoveredColor: props.disclosureColor?.value(for: [.hovered]), - selectedColor: nil - ).context + self.disclosureColor = ButtonColorContextBuilder(statefulColor: props.disclosureColor).context // Простые цвета self.indicatorColor = ColorTokenContextBuilder(props.indicatorColor).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TextArea/TextAreaAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TextArea/TextAreaAppearance.swift index fd35bbb7c..790ffd9af 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TextArea/TextAreaAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TextArea/TextAreaAppearance.swift @@ -52,10 +52,10 @@ struct TextAreaAppearance: CodeGenerationAppearance { } self.backgroundColor = ColorTokenContextBuilder(props.backgroundColor).context - self.backgroundColorFocused = ColorTokenContextBuilder(props.backgroundColor?.value(for: [.activated])).context + self.backgroundColorFocused = ColorTokenContextBuilder(props.backgroundColor?.value(for: .activated)).context self.backgroundColorReadOnly = ColorTokenContextBuilder(props.backgroundColorReadOnly).context self.captionColor = ColorTokenContextBuilder(props.captionColor).context - self.captionColorFocused = ColorTokenContextBuilder(props.captionColor?.value(for: [.activated])).context + self.captionColorFocused = ColorTokenContextBuilder(props.captionColor?.value(for: .activated)).context self.captionColorReadOnly = ColorTokenContextBuilder(props.captionColorReadOnly).context self.cursorColor = ColorTokenContextBuilder(props.cursorColor).context self.disabledAlpha = props.disableAlpha?.value @@ -63,17 +63,17 @@ struct TextAreaAppearance: CodeGenerationAppearance { self.endContentColorReadOnly = ColorTokenContextBuilder(props.endContentColorReadOnly).context self.optionalTitleColor = ColorTokenContextBuilder(props.optionalColor).context self.placeholderColor = ColorTokenContextBuilder(props.placeholderColor).context - self.placeholderColorFocused = ColorTokenContextBuilder(props.placeholderColor?.value(for: [.activated])).context + self.placeholderColorFocused = ColorTokenContextBuilder(props.placeholderColor?.value(for: .activated)).context self.placeholderColorReadOnly = ColorTokenContextBuilder(props.placeholderColorReadOnly).context self.requiredIndicatorColor = ColorTokenContextBuilder(props.indicatorColor).context self.startContentColor = ColorTokenContextBuilder(props.startContentColor).context self.textColor = ColorTokenContextBuilder(props.valueColor).context - self.textColorFocused = ColorTokenContextBuilder(props.valueColor?.value(for: [.activated])).context + self.textColorFocused = ColorTokenContextBuilder(props.valueColor?.value(for: .activated)).context self.textColorReadOnly = ColorTokenContextBuilder(props.valueColorReadOnly).context self.titleColor = ColorTokenContextBuilder(props.labelColor).context self.counterColor = ColorTokenContextBuilder(props.counterColor).context self.lineColor = ColorTokenContextBuilder(props.dividerColor).context - self.lineColorFocused = ColorTokenContextBuilder(props.dividerColor?.value(for: [.activated])).context + self.lineColorFocused = ColorTokenContextBuilder(props.dividerColor?.value(for: .activated)).context self.lineColorReadOnly = ColorTokenContextBuilder(props.dividerColorReadOnly).context self.titleTypography = TypographyTokenContextBuilder(string: props.labelStyle?.value, id: id, component: component).context self.textTypography = TypographyTokenContextBuilder(string: props.valueStyle?.value, id: id, component: component).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TextField/TextFieldAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TextField/TextFieldAppearance.swift index 42358deff..c47f9668d 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TextField/TextFieldAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/TextField/TextFieldAppearance.swift @@ -52,28 +52,28 @@ struct TextFieldAppearance: CodeGenerationAppearance { } self.backgroundColor = ColorTokenContextBuilder(props.backgroundColor).context - self.backgroundColorFocused = ColorTokenContextBuilder(props.backgroundColor?.value(for: [.activated])).context + self.backgroundColorFocused = ColorTokenContextBuilder(props.backgroundColor?.value(for: .activated)).context self.backgroundColorReadOnly = ColorTokenContextBuilder(props.backgroundColorReadOnly).context self.captionColor = ColorTokenContextBuilder(props.captionColor).context - self.captionColorFocused = ColorTokenContextBuilder(props.captionColor?.value(for: [.activated])).context + self.captionColorFocused = ColorTokenContextBuilder(props.captionColor?.value(for: .activated)).context self.captionColorReadOnly = ColorTokenContextBuilder(props.captionColorReadOnly).context self.cursorColor = ColorTokenContextBuilder(props.cursorColor).context self.disabledAlpha = props.disableAlpha?.value self.lineColor = ColorTokenContextBuilder(props.dividerColor).context - self.lineColorFocused = ColorTokenContextBuilder(props.dividerColor?.value(for: [.activated])).context + self.lineColorFocused = ColorTokenContextBuilder(props.dividerColor?.value(for: .activated)).context self.lineColorReadOnly = ColorTokenContextBuilder(props.dividerColorReadOnly).context self.endContentColor = ColorTokenContextBuilder(props.endContentColor).context self.endContentColorReadOnly = ColorTokenContextBuilder(props.endContentColorReadOnly).context self.optionalTitleColor = ColorTokenContextBuilder(props.optionalColor).context self.placeholderColor = ColorTokenContextBuilder(props.placeholderColor).context - self.placeholderColorFocused = ColorTokenContextBuilder(props.placeholderColor?.value(for: [.activated])).context + self.placeholderColorFocused = ColorTokenContextBuilder(props.placeholderColor?.value(for: .activated)).context self.placeholderColorReadOnly = ColorTokenContextBuilder(props.placeholderColorReadOnly).context self.requiredIndicatorColor = ColorTokenContextBuilder(props.indicatorColor).context self.startContentColor = ColorTokenContextBuilder(props.startContentColor).context self.startContentColorReadOnly = ColorTokenContextBuilder(props.startContentColorReadOnly).context - self.startContentColorFocused = ColorTokenContextBuilder(props.startContentColor?.value(for: [.activated])).context + self.startContentColorFocused = ColorTokenContextBuilder(props.startContentColor?.value(for: .activated)).context self.textColor = ColorTokenContextBuilder(props.valueColor).context - self.textColorFocused = ColorTokenContextBuilder(props.valueColor?.value(for: [.activated])).context + self.textColorFocused = ColorTokenContextBuilder(props.valueColor?.value(for: .activated)).context self.textColorReadOnly = ColorTokenContextBuilder(props.valueColorReadOnly).context self.titleColor = ColorTokenContextBuilder(props.labelColor).context self.titleTypography = TypographyTokenContextBuilder(string: props.labelStyle?.value, id: id, component: component).context diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Wheel/WheelAppearance.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Wheel/WheelAppearance.swift index 1740216d9..e04e0a3a0 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Wheel/WheelAppearance.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Model/Components/Wheel/WheelAppearance.swift @@ -42,20 +42,9 @@ struct WheelAppearance: CodeGenerationAppearance { self.itemTextAfterColor = ColorTokenContextBuilder(props.itemTextAfterColor).context self.descriptionColor = ColorTokenContextBuilder(props.descriptionColor).context - // Цвета иконок управления (с состоянием focused) - self.controlIconUpColor = ButtonColorContextBuilder( - defaultColor: props.controlIconUpColor, - highlightedColor: nil, - hoveredColor: nil, - selectedColor: props.controlIconUpColor?.value(for: [.focused]) - ).context - - self.controlIconDownColor = ButtonColorContextBuilder( - defaultColor: props.controlIconDownColor, - highlightedColor: nil, - hoveredColor: nil, - selectedColor: props.controlIconDownColor?.value(for: [.focused]) - ).context + // Цвета иконок управления + self.controlIconUpColor = ButtonColorContextBuilder(statefulColor: props.controlIconUpColor).context + self.controlIconDownColor = ButtonColorContextBuilder(statefulColor: props.controlIconDownColor).context // Цвет разделителя self.separatorColor = ColorTokenContextBuilder(props.separatorColor).context diff --git a/SDDSThemeBuilder/SDDSThemeCore/Sources/SDDSThemeCore/Common/StatefulValue.swift b/SDDSThemeBuilder/SDDSThemeCore/Sources/SDDSThemeCore/Common/StatefulValue.swift new file mode 100644 index 000000000..f107f147c --- /dev/null +++ b/SDDSThemeBuilder/SDDSThemeCore/Sources/SDDSThemeCore/Common/StatefulValue.swift @@ -0,0 +1,96 @@ +import Foundation +import SwiftUI + +public protocol ValueState { + var stateKey: String { get } +} + +public enum InteractiveState: String, CaseIterable, Codable, Hashable, ValueState { + case activated + case pressed + case hovered + case checked + case selected + case focused + case indeterminate + case error + case readonly + case collapsed + + public var stateKey: String { rawValue } +} + +public struct StatefulValue { + public struct Item { + public let states: Set + public let value: Value + + public init(states: Set, value: Value) { + self.states = states + self.value = value + } + + public init(states: [S], value: Value) { + self.states = Set(states.map(\.stateKey)) + self.value = value + } + } + + public let values: [Item] + public let defaultValue: Value? + + public init(defaultValue: Value? = nil, values: [Item] = []) { + self.defaultValue = defaultValue + self.values = values + } + + public func isStateful() -> Bool { + values.contains(where: { !$0.states.isEmpty }) + } + + public func resolvedValue(for activeStates: Set, default fallback: Value? = nil) -> Value { + resolvedValue(for: Set(activeStates.map(\.stateKey)), default: fallback) + } + + public func resolvedValue(for activeStates: Set, default fallback: Value? = nil) -> Value { + if let matched = values.first(where: { $0.states.isSubset(of: activeStates) }) { + return matched.value + } + return fallback ?? resolvedDefaultValue() + } + + public func resolvedDefaultValue() -> Value { + if let defaultValue { + return defaultValue + } + if let emptyStateItem = values.first(where: { $0.states.isEmpty }) { + return emptyStateItem.value + } + guard let first = values.first else { + fatalError("StatefulValue requires either defaultValue or non-empty values.") + } + return first.value + } +} + +extension StatefulValue.Item: Equatable where Value: Equatable {} +extension StatefulValue.Item: Hashable where Value: Hashable {} +extension StatefulValue: Equatable where Value: Equatable {} +extension StatefulValue: Hashable where Value: Hashable {} + +public typealias StatefulColor = StatefulValue + +public extension StatefulValue where Value == ColorToken { + init() { + self.init(defaultValue: ColorToken()) + } + + func color( + for activeStates: Set, + colorScheme: ColorScheme, + subtheme: SubthemeData = SubthemeData() + ) -> Color { + _ = subtheme + return resolvedValue(for: activeStates).color(for: colorScheme) + } +} diff --git a/Themes/PlasmaB2CTheme/AccordionClearActionEnd/AccordionClearActionEnd+Variations.swift b/Themes/PlasmaB2CTheme/AccordionClearActionEnd/AccordionClearActionEnd+Variations.swift index eae170df3..d6390db9e 100644 --- a/Themes/PlasmaB2CTheme/AccordionClearActionEnd/AccordionClearActionEnd+Variations.swift +++ b/Themes/PlasmaB2CTheme/AccordionClearActionEnd/AccordionClearActionEnd+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/AccordionClearActionStart/AccordionClearActionStart+Variations.swift b/Themes/PlasmaB2CTheme/AccordionClearActionStart/AccordionClearActionStart+Variations.swift index ec2a5f7fb..5feaa1be5 100644 --- a/Themes/PlasmaB2CTheme/AccordionClearActionStart/AccordionClearActionStart+Variations.swift +++ b/Themes/PlasmaB2CTheme/AccordionClearActionStart/AccordionClearActionStart+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/AccordionItemClearActionEnd/AccordionItemClearActionEnd+Variations.swift b/Themes/PlasmaB2CTheme/AccordionItemClearActionEnd/AccordionItemClearActionEnd+Variations.swift index ac462e52b..3ef3fd8ba 100644 --- a/Themes/PlasmaB2CTheme/AccordionItemClearActionEnd/AccordionItemClearActionEnd+Variations.swift +++ b/Themes/PlasmaB2CTheme/AccordionItemClearActionEnd/AccordionItemClearActionEnd+Variations.swift @@ -4,6 +4,7 @@ import SDDSComponents import SDDSThemeCore import SDDSIcons + public extension GeneralAppearanceVariation { var h2: ComponentAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/AccordionItemClearActionStart/AccordionItemClearActionStart+Variations.swift b/Themes/PlasmaB2CTheme/AccordionItemClearActionStart/AccordionItemClearActionStart+Variations.swift index 422c489dc..fc77eb7fb 100644 --- a/Themes/PlasmaB2CTheme/AccordionItemClearActionStart/AccordionItemClearActionStart+Variations.swift +++ b/Themes/PlasmaB2CTheme/AccordionItemClearActionStart/AccordionItemClearActionStart+Variations.swift @@ -4,6 +4,7 @@ import SDDSComponents import SDDSThemeCore import SDDSIcons + public extension GeneralAppearanceVariation { var h2: ComponentAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/AccordionItemSolidActionEnd/AccordionItemSolidActionEnd+Variations.swift b/Themes/PlasmaB2CTheme/AccordionItemSolidActionEnd/AccordionItemSolidActionEnd+Variations.swift index 3e43024a9..60fd78863 100644 --- a/Themes/PlasmaB2CTheme/AccordionItemSolidActionEnd/AccordionItemSolidActionEnd+Variations.swift +++ b/Themes/PlasmaB2CTheme/AccordionItemSolidActionEnd/AccordionItemSolidActionEnd+Variations.swift @@ -4,6 +4,7 @@ import SDDSComponents import SDDSThemeCore import SDDSIcons + public extension GeneralAppearanceVariation { var h2: ComponentAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/AccordionItemSolidActionStart/AccordionItemSolidActionStart+Variations.swift b/Themes/PlasmaB2CTheme/AccordionItemSolidActionStart/AccordionItemSolidActionStart+Variations.swift index ef1bd4528..da22785a6 100644 --- a/Themes/PlasmaB2CTheme/AccordionItemSolidActionStart/AccordionItemSolidActionStart+Variations.swift +++ b/Themes/PlasmaB2CTheme/AccordionItemSolidActionStart/AccordionItemSolidActionStart+Variations.swift @@ -4,6 +4,7 @@ import SDDSComponents import SDDSThemeCore import SDDSIcons + public extension GeneralAppearanceVariation { var h2: ComponentAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/AccordionSolidActionEnd/AccordionSolidActionEnd+Variations.swift b/Themes/PlasmaB2CTheme/AccordionSolidActionEnd/AccordionSolidActionEnd+Variations.swift index e252af963..6f05bda23 100644 --- a/Themes/PlasmaB2CTheme/AccordionSolidActionEnd/AccordionSolidActionEnd+Variations.swift +++ b/Themes/PlasmaB2CTheme/AccordionSolidActionEnd/AccordionSolidActionEnd+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/AccordionSolidActionStart/AccordionSolidActionStart+Variations.swift b/Themes/PlasmaB2CTheme/AccordionSolidActionStart/AccordionSolidActionStart+Variations.swift index 9e27c2c41..8f4bf38fd 100644 --- a/Themes/PlasmaB2CTheme/AccordionSolidActionStart/AccordionSolidActionStart+Variations.swift +++ b/Themes/PlasmaB2CTheme/AccordionSolidActionStart/AccordionSolidActionStart+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Avatar/Avatar+Variations.swift b/Themes/PlasmaB2CTheme/Avatar/Avatar+Variations.swift index a7a60aa89..bee322df0 100644 --- a/Themes/PlasmaB2CTheme/Avatar/Avatar+Variations.swift +++ b/Themes/PlasmaB2CTheme/Avatar/Avatar+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/AvatarGroup/AvatarGroup+Variations.swift b/Themes/PlasmaB2CTheme/AvatarGroup/AvatarGroup+Variations.swift index a4514ff80..47af0c31f 100644 --- a/Themes/PlasmaB2CTheme/AvatarGroup/AvatarGroup+Variations.swift +++ b/Themes/PlasmaB2CTheme/AvatarGroup/AvatarGroup+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Badge/Badge+Variations.swift b/Themes/PlasmaB2CTheme/Badge/Badge+Variations.swift index e4c51ecfc..2224ee6d6 100644 --- a/Themes/PlasmaB2CTheme/Badge/Badge+Variations.swift +++ b/Themes/PlasmaB2CTheme/Badge/Badge+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/BadgeClear/BadgeClear+Variations.swift b/Themes/PlasmaB2CTheme/BadgeClear/BadgeClear+Variations.swift index 706cab867..9c335822b 100644 --- a/Themes/PlasmaB2CTheme/BadgeClear/BadgeClear+Variations.swift +++ b/Themes/PlasmaB2CTheme/BadgeClear/BadgeClear+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/BadgeTransparent/BadgeTransparent+Variations.swift b/Themes/PlasmaB2CTheme/BadgeTransparent/BadgeTransparent+Variations.swift index 21d7d1e50..9cc90c34f 100644 --- a/Themes/PlasmaB2CTheme/BadgeTransparent/BadgeTransparent+Variations.swift +++ b/Themes/PlasmaB2CTheme/BadgeTransparent/BadgeTransparent+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/BasicButton/BasicButton+Variations.swift b/Themes/PlasmaB2CTheme/BasicButton/BasicButton+Variations.swift index b27055bc9..dc0823115 100644 --- a/Themes/PlasmaB2CTheme/BasicButton/BasicButton+Variations.swift +++ b/Themes/PlasmaB2CTheme/BasicButton/BasicButton+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { @@ -721,111 +722,261 @@ private extension ButtonAppearance { var `default`: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textInverseSecondary, highlightedColor: ColorToken.textInverseSecondaryActive, hoveredColor: ColorToken.textInverseSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInverseSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInverseSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInverseSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) return appearance } var accent: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultAccent, highlightedColor: ColorToken.surfaceDefaultAccentActive, hoveredColor: ColorToken.surfaceDefaultAccentHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultAccentHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var black: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceOnLightSolidDefault, highlightedColor: ColorToken.surfaceOnLightSolidDefaultActive, hoveredColor: ColorToken.surfaceOnLightSolidDefaultHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnLightSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnLightSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnLightSolidDefaultHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var clear: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: ColorToken.surfaceDefaultTransparentSecondaryActive, hoveredColor: ColorToken.surfaceDefaultTransparentSecondaryHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultTransparentSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondaryHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.06) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) return appearance } var dark: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceOnLightTransparentDeep, highlightedColor: ColorToken.surfaceOnLightTransparentDeepActive, hoveredColor: ColorToken.surfaceOnLightTransparentDeepHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnLightTransparentDeep, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnLightTransparentDeepActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnLightTransparentDeepHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var negative: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultNegative, highlightedColor: ColorToken.surfaceDefaultNegativeActive, hoveredColor: ColorToken.surfaceDefaultNegativeHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultNegativeHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var positive: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultPositive, highlightedColor: ColorToken.surfaceDefaultPositiveActive, hoveredColor: ColorToken.surfaceDefaultPositiveHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultPositive, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultPositiveActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultPositiveHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var secondary: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultTransparentSecondary, highlightedColor: ColorToken.surfaceDefaultTransparentSecondaryActive, hoveredColor: ColorToken.surfaceDefaultTransparentSecondaryHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultTransparentSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultTransparentSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondaryHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) return appearance } var warning: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultWarning, highlightedColor: ColorToken.surfaceDefaultWarningActive, hoveredColor: ColorToken.surfaceDefaultWarningHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultWarningHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var white: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceOnDarkSolidDefault, highlightedColor: ColorToken.surfaceOnDarkSolidDefaultActive, hoveredColor: ColorToken.surfaceOnDarkSolidDefaultHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnLightPrimary, highlightedColor: ColorToken.textOnLightPrimaryActive, hoveredColor: ColorToken.textOnLightPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnDarkSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnDarkSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnDarkSolidDefaultHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnLightPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnLightPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnLightPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnLightPrimary, highlightedColor: ColorToken.textOnLightPrimaryActive, hoveredColor: ColorToken.textOnLightPrimaryHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textOnLightSecondary, highlightedColor: ColorToken.textOnLightSecondaryActive, hoveredColor: ColorToken.textOnLightSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnLightPrimary, highlightedColor: ColorToken.textOnLightPrimaryActive, hoveredColor: ColorToken.textOnLightPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnLightPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnLightPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnLightPrimaryHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnLightSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnLightSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnLightSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnLightPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnLightPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnLightPrimaryHover) + ])) return appearance } diff --git a/Themes/PlasmaB2CTheme/BasicButtonGroup/BasicButtonGroup+Variations.swift b/Themes/PlasmaB2CTheme/BasicButtonGroup/BasicButtonGroup+Variations.swift index dd57a5169..b0d193d0c 100644 --- a/Themes/PlasmaB2CTheme/BasicButtonGroup/BasicButtonGroup+Variations.swift +++ b/Themes/PlasmaB2CTheme/BasicButtonGroup/BasicButtonGroup+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/BottomSheet/BottomSheet+Variations.swift b/Themes/PlasmaB2CTheme/BottomSheet/BottomSheet+Variations.swift index 910f2b96d..6dfe92cb6 100644 --- a/Themes/PlasmaB2CTheme/BottomSheet/BottomSheet+Variations.swift +++ b/Themes/PlasmaB2CTheme/BottomSheet/BottomSheet+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/CardClear/CardClear+Variations.swift b/Themes/PlasmaB2CTheme/CardClear/CardClear+Variations.swift index 0dea16ff5..f8c701ba5 100644 --- a/Themes/PlasmaB2CTheme/CardClear/CardClear+Variations.swift +++ b/Themes/PlasmaB2CTheme/CardClear/CardClear+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/CardSolid/CardSolid+Variations.swift b/Themes/PlasmaB2CTheme/CardSolid/CardSolid+Variations.swift index e5cc163b3..52a8cf5bf 100644 --- a/Themes/PlasmaB2CTheme/CardSolid/CardSolid+Variations.swift +++ b/Themes/PlasmaB2CTheme/CardSolid/CardSolid+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Cell/Cell+Variations.swift b/Themes/PlasmaB2CTheme/Cell/Cell+Variations.swift index a4e1d740b..711de942f 100644 --- a/Themes/PlasmaB2CTheme/Cell/Cell+Variations.swift +++ b/Themes/PlasmaB2CTheme/Cell/Cell+Variations.swift @@ -4,6 +4,7 @@ import SDDSComponents import SDDSThemeCore import SDDSIcons + public extension GeneralAppearanceVariation { var l: ComponentAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Checkbox/Checkbox+Variations.swift b/Themes/PlasmaB2CTheme/Checkbox/Checkbox+Variations.swift index 9611a8bbd..3cef161aa 100644 --- a/Themes/PlasmaB2CTheme/Checkbox/Checkbox+Variations.swift +++ b/Themes/PlasmaB2CTheme/Checkbox/Checkbox+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/CheckboxGroup/CheckboxGroup+Variations.swift b/Themes/PlasmaB2CTheme/CheckboxGroup/CheckboxGroup+Variations.swift index 29b3ea992..3b958ffb9 100644 --- a/Themes/PlasmaB2CTheme/CheckboxGroup/CheckboxGroup+Variations.swift +++ b/Themes/PlasmaB2CTheme/CheckboxGroup/CheckboxGroup+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Chip/Chip+Variations.swift b/Themes/PlasmaB2CTheme/Chip/Chip+Variations.swift index 6bbdf2166..7d293dde0 100644 --- a/Themes/PlasmaB2CTheme/Chip/Chip+Variations.swift +++ b/Themes/PlasmaB2CTheme/Chip/Chip+Variations.swift @@ -700,55 +700,127 @@ private extension ChipAppearance { var `default`: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textInverseSecondary, highlightedColor: ColorToken.textInverseSecondaryActive, hoveredColor: ColorToken.textInverseSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInverseSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInverseSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInverseSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) return appearance } var accent: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultAccent, highlightedColor: ColorToken.surfaceDefaultAccentActive, hoveredColor: ColorToken.surfaceDefaultAccentHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultAccentHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var negative: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultNegative, highlightedColor: ColorToken.surfaceDefaultNegativeActive, hoveredColor: ColorToken.surfaceDefaultNegativeHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultNegativeHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var positive: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultPositive, highlightedColor: ColorToken.surfaceDefaultPositiveActive, hoveredColor: ColorToken.surfaceDefaultPositiveHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultPositive, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultPositiveActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultPositiveHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var secondary: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultTransparentSecondary, highlightedColor: ColorToken.surfaceDefaultTransparentSecondaryActive, hoveredColor: ColorToken.surfaceDefaultTransparentSecondaryHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultTransparentSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultTransparentSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondaryHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) return appearance } var warning: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultWarning, highlightedColor: ColorToken.surfaceDefaultWarningActive, hoveredColor: ColorToken.surfaceDefaultWarningHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultWarningHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } diff --git a/Themes/PlasmaB2CTheme/ChipGroupDense/ChipGroupDense+Variations.swift b/Themes/PlasmaB2CTheme/ChipGroupDense/ChipGroupDense+Variations.swift index 32e4e5387..b96fa675a 100644 --- a/Themes/PlasmaB2CTheme/ChipGroupDense/ChipGroupDense+Variations.swift +++ b/Themes/PlasmaB2CTheme/ChipGroupDense/ChipGroupDense+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/ChipGroupWide/ChipGroupWide+Variations.swift b/Themes/PlasmaB2CTheme/ChipGroupWide/ChipGroupWide+Variations.swift index ad179f193..2826d1dfa 100644 --- a/Themes/PlasmaB2CTheme/ChipGroupWide/ChipGroupWide+Variations.swift +++ b/Themes/PlasmaB2CTheme/ChipGroupWide/ChipGroupWide+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/CircularProgressBar/CircularProgressBar+Variations.swift b/Themes/PlasmaB2CTheme/CircularProgressBar/CircularProgressBar+Variations.swift index 923aea769..a6ecc8da4 100644 --- a/Themes/PlasmaB2CTheme/CircularProgressBar/CircularProgressBar+Variations.swift +++ b/Themes/PlasmaB2CTheme/CircularProgressBar/CircularProgressBar+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/CodeField/CodeField+BaseVariations.swift b/Themes/PlasmaB2CTheme/CodeField/CodeField+BaseVariations.swift index 1c1df6488..a2b5d1fa7 100644 --- a/Themes/PlasmaB2CTheme/CodeField/CodeField+BaseVariations.swift +++ b/Themes/PlasmaB2CTheme/CodeField/CodeField+BaseVariations.swift @@ -56,19 +56,6 @@ private extension CodeFieldAppearance { appearance.dotColorError = ColorToken.surfaceDefaultNegative appearance.valueColor = ColorToken.textDefaultPrimary appearance.valueColorError = ColorToken.textDefaultNegative - - /* - appearance.backgroundColor = ColorToken.surfaceDefaultSolidPrimary - appearance.backgroundColorActivated = ColorToken.surfaceDefaultTransparentSecondary - appearance.backgroundColorError = ColorToken.surfaceDefaultTransparentNegative - appearance.captionColor = ColorToken.textDefaultSecondary - appearance.captionColorError = ColorToken.textDefaultNegative - appearance.cursorColor = ColorToken.textDefaultAccent - appearance.dotColor = ColorToken.surfaceDefaultSolidDefault - appearance.dotColorError = ColorToken.surfaceDefaultNegative - appearance.valueColor = ColorToken.textDefaultPrimary - appearance.valueColorError = ColorToken.textDefaultNegative - */ return appearance } } diff --git a/Themes/PlasmaB2CTheme/CodeField/CodeField+Variations.swift b/Themes/PlasmaB2CTheme/CodeField/CodeField+Variations.swift index d9f7770d3..fa6d1d562 100644 --- a/Themes/PlasmaB2CTheme/CodeField/CodeField+Variations.swift +++ b/Themes/PlasmaB2CTheme/CodeField/CodeField+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/CodeInput/CodeInput+Variations.swift b/Themes/PlasmaB2CTheme/CodeInput/CodeInput+Variations.swift index e02236994..a75c8fbd9 100644 --- a/Themes/PlasmaB2CTheme/CodeInput/CodeInput+Variations.swift +++ b/Themes/PlasmaB2CTheme/CodeInput/CodeInput+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Counter/Counter+Variations.swift b/Themes/PlasmaB2CTheme/Counter/Counter+Variations.swift index 8790006bd..6c5cb6230 100644 --- a/Themes/PlasmaB2CTheme/Counter/Counter+Variations.swift +++ b/Themes/PlasmaB2CTheme/Counter/Counter+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { @@ -465,50 +466,92 @@ private extension CounterAppearance { var `default`: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: ColorToken.surfaceDefaultSolidDefault) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: ColorToken.textInversePrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) return appearance } var accent: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultAccent, highlightedColor: ColorToken.surfaceDefaultAccentActive, hoveredColor: ColorToken.surfaceDefaultAccentHover, selectedColor: ColorToken.surfaceDefaultAccent) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: ColorToken.textOnDarkPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultAccentHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var black: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceOnLightSolidDefault, highlightedColor: ColorToken.surfaceOnLightSolidDefaultActive, hoveredColor: ColorToken.surfaceOnLightSolidDefaultHover, selectedColor: ColorToken.surfaceOnLightSolidDefault) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: ColorToken.textOnDarkPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnLightSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnLightSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnLightSolidDefaultHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var negative: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultNegative, highlightedColor: ColorToken.surfaceDefaultNegativeActive, hoveredColor: ColorToken.surfaceDefaultNegativeHover, selectedColor: ColorToken.surfaceDefaultNegative) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: ColorToken.textOnDarkPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultNegativeHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var positive: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultPositive, highlightedColor: ColorToken.surfaceDefaultPositiveActive, hoveredColor: ColorToken.surfaceDefaultPositiveHover, selectedColor: ColorToken.surfaceDefaultPositive) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: ColorToken.textOnDarkPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultPositive, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultPositiveActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultPositiveHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var warning: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultWarning, highlightedColor: ColorToken.surfaceDefaultWarningActive, hoveredColor: ColorToken.surfaceDefaultWarningHover, selectedColor: ColorToken.surfaceDefaultWarning) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: ColorToken.textOnDarkPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultWarningHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var white: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceOnDarkSolidDefault, highlightedColor: ColorToken.surfaceOnDarkSolidDefaultActive, hoveredColor: ColorToken.surfaceOnDarkSolidDefaultHover, selectedColor: ColorToken.surfaceOnDarkSolidDefault) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textOnLightPrimary, highlightedColor: ColorToken.textOnLightPrimaryActive, hoveredColor: ColorToken.textOnLightPrimaryHover, selectedColor: ColorToken.textOnLightPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnDarkSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnDarkSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnDarkSolidDefaultHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnLightPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnLightPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnLightPrimaryHover) + ])) return appearance } diff --git a/Themes/PlasmaB2CTheme/Divider/Divider+Variations.swift b/Themes/PlasmaB2CTheme/Divider/Divider+Variations.swift index daf1bbcf7..539add0e8 100644 --- a/Themes/PlasmaB2CTheme/Divider/Divider+Variations.swift +++ b/Themes/PlasmaB2CTheme/Divider/Divider+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/DropdownMenuItemNormal/DropdownMenuItemNormal+BaseVariations.swift b/Themes/PlasmaB2CTheme/DropdownMenuItemNormal/DropdownMenuItemNormal+BaseVariations.swift index add3f98dd..5fdf1982f 100644 --- a/Themes/PlasmaB2CTheme/DropdownMenuItemNormal/DropdownMenuItemNormal+BaseVariations.swift +++ b/Themes/PlasmaB2CTheme/DropdownMenuItemNormal/DropdownMenuItemNormal+BaseVariations.swift @@ -81,7 +81,9 @@ public struct DropdownMenuItemNormalVariation { private extension ListItemAppearance { static var base: ListItemAppearance { var appearance = ListItemAppearance() - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: ColorToken.surfaceDefaultClear, hoveredColor: ColorToken.surfaceDefaultClear, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [ + .init(states: [InteractiveState.focused], value: ColorToken.surfaceDefaultTransparentSecondary) + ])) appearance.disabledAlpha = CGFloat(0.4) appearance.disclosureIconColor = ColorToken.textDefaultSecondary return appearance diff --git a/Themes/PlasmaB2CTheme/DropdownMenuItemTight/DropdownMenuItemTight+BaseVariations.swift b/Themes/PlasmaB2CTheme/DropdownMenuItemTight/DropdownMenuItemTight+BaseVariations.swift index eb06b8451..10e1d149c 100644 --- a/Themes/PlasmaB2CTheme/DropdownMenuItemTight/DropdownMenuItemTight+BaseVariations.swift +++ b/Themes/PlasmaB2CTheme/DropdownMenuItemTight/DropdownMenuItemTight+BaseVariations.swift @@ -81,7 +81,9 @@ public struct DropdownMenuItemTightVariation { private extension ListItemAppearance { static var base: ListItemAppearance { var appearance = ListItemAppearance() - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: ColorToken.surfaceDefaultClear, hoveredColor: ColorToken.surfaceDefaultClear, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [ + .init(states: [InteractiveState.focused], value: ColorToken.surfaceDefaultTransparentSecondary) + ])) appearance.disabledAlpha = CGFloat(0.4) appearance.disclosureIconColor = ColorToken.textDefaultSecondary return appearance diff --git a/Themes/PlasmaB2CTheme/EmbeddedChip/EmbeddedChip+Variations.swift b/Themes/PlasmaB2CTheme/EmbeddedChip/EmbeddedChip+Variations.swift index 9be1d89c6..2522864ea 100644 --- a/Themes/PlasmaB2CTheme/EmbeddedChip/EmbeddedChip+Variations.swift +++ b/Themes/PlasmaB2CTheme/EmbeddedChip/EmbeddedChip+Variations.swift @@ -449,55 +449,127 @@ private extension ChipAppearance { var `default`: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textInverseSecondary, highlightedColor: ColorToken.textInverseSecondaryActive, hoveredColor: ColorToken.textInverseSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInverseSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInverseSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInverseSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) return appearance } var accent: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultAccent, highlightedColor: ColorToken.surfaceDefaultAccentActive, hoveredColor: ColorToken.surfaceDefaultAccentHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultAccentHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var negative: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultNegative, highlightedColor: ColorToken.surfaceDefaultNegativeActive, hoveredColor: ColorToken.surfaceDefaultNegativeHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultNegativeHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var positive: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultPositive, highlightedColor: ColorToken.surfaceDefaultPositiveActive, hoveredColor: ColorToken.surfaceDefaultPositiveHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultPositive, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultPositiveActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultPositiveHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var secondary: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultTransparentSecondary, highlightedColor: ColorToken.surfaceDefaultTransparentSecondaryActive, hoveredColor: ColorToken.surfaceDefaultTransparentSecondaryHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultTransparentSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultTransparentSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondaryHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) return appearance } var warning: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultWarning, highlightedColor: ColorToken.surfaceDefaultWarningActive, hoveredColor: ColorToken.surfaceDefaultWarningHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultWarningHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } diff --git a/Themes/PlasmaB2CTheme/IconBadge/IconBadge+Variations.swift b/Themes/PlasmaB2CTheme/IconBadge/IconBadge+Variations.swift index b7404e807..8b071769c 100644 --- a/Themes/PlasmaB2CTheme/IconBadge/IconBadge+Variations.swift +++ b/Themes/PlasmaB2CTheme/IconBadge/IconBadge+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/IconBadgeClear/IconBadgeClear+Variations.swift b/Themes/PlasmaB2CTheme/IconBadgeClear/IconBadgeClear+Variations.swift index 8211ea987..ec40ff46b 100644 --- a/Themes/PlasmaB2CTheme/IconBadgeClear/IconBadgeClear+Variations.swift +++ b/Themes/PlasmaB2CTheme/IconBadgeClear/IconBadgeClear+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/IconBadgeTransparent/IconBadgeTransparent+Variations.swift b/Themes/PlasmaB2CTheme/IconBadgeTransparent/IconBadgeTransparent+Variations.swift index b3dbc8b21..44d3ac517 100644 --- a/Themes/PlasmaB2CTheme/IconBadgeTransparent/IconBadgeTransparent+Variations.swift +++ b/Themes/PlasmaB2CTheme/IconBadgeTransparent/IconBadgeTransparent+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/IconButton/IconButton+Variations.swift b/Themes/PlasmaB2CTheme/IconButton/IconButton+Variations.swift index 796072a4e..1c400cfa4 100644 --- a/Themes/PlasmaB2CTheme/IconButton/IconButton+Variations.swift +++ b/Themes/PlasmaB2CTheme/IconButton/IconButton+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { @@ -1357,81 +1358,171 @@ private extension ButtonAppearance { var `default`: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) return appearance } var accent: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultAccent, highlightedColor: ColorToken.surfaceDefaultAccentActive, hoveredColor: ColorToken.surfaceDefaultAccentHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultAccentHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var black: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceOnLightSolidDefault, highlightedColor: ColorToken.surfaceOnLightSolidDefaultActive, hoveredColor: ColorToken.surfaceOnLightSolidDefaultHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnLightSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnLightSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnLightSolidDefaultHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var clear: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: ColorToken.surfaceDefaultTransparentSecondaryActive, hoveredColor: ColorToken.surfaceDefaultTransparentSecondaryHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultTransparentSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondaryHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) return appearance } var dark: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceOnLightTransparentDeep, highlightedColor: ColorToken.surfaceOnLightTransparentDeepActive, hoveredColor: ColorToken.surfaceOnLightTransparentDeepHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnLightTransparentDeep, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnLightTransparentDeepActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnLightTransparentDeepHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var negative: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultNegative, highlightedColor: ColorToken.surfaceDefaultNegativeActive, hoveredColor: ColorToken.surfaceDefaultNegativeHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultNegativeHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var positive: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultPositive, highlightedColor: ColorToken.surfaceDefaultPositiveActive, hoveredColor: ColorToken.surfaceDefaultPositiveHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultPositive, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultPositiveActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultPositiveHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var secondary: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultTransparentSecondary, highlightedColor: ColorToken.surfaceDefaultTransparentSecondaryActive, hoveredColor: ColorToken.surfaceDefaultTransparentSecondaryHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultTransparentSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultTransparentSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondaryHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) return appearance } var warning: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultWarning, highlightedColor: ColorToken.surfaceDefaultWarningActive, hoveredColor: ColorToken.surfaceDefaultWarningHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultWarningHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var white: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceOnDarkSolidDefault, highlightedColor: ColorToken.surfaceOnDarkSolidDefaultActive, hoveredColor: ColorToken.surfaceOnDarkSolidDefaultHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnLightPrimary, highlightedColor: ColorToken.textOnLightPrimaryActive, hoveredColor: ColorToken.textOnLightPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textOnLightPrimary, highlightedColor: ColorToken.textOnLightPrimaryActive, hoveredColor: ColorToken.textOnLightPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnDarkSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnDarkSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnDarkSolidDefaultHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnLightPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnLightPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnLightPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnLightPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnLightPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnLightPrimaryHover) + ])) return appearance } diff --git a/Themes/PlasmaB2CTheme/IconButtonGroup/IconButtonGroup+Variations.swift b/Themes/PlasmaB2CTheme/IconButtonGroup/IconButtonGroup+Variations.swift index 9d37d13e7..cc24d2c4e 100644 --- a/Themes/PlasmaB2CTheme/IconButtonGroup/IconButtonGroup+Variations.swift +++ b/Themes/PlasmaB2CTheme/IconButtonGroup/IconButtonGroup+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Indicator/Indicator+Variations.swift b/Themes/PlasmaB2CTheme/Indicator/Indicator+Variations.swift index dc62ce260..dfd407004 100644 --- a/Themes/PlasmaB2CTheme/Indicator/Indicator+Variations.swift +++ b/Themes/PlasmaB2CTheme/Indicator/Indicator+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/LinkButton/LinkButton+BaseVariations.swift b/Themes/PlasmaB2CTheme/LinkButton/LinkButton+BaseVariations.swift index ab1734de2..c6cfbfe0c 100644 --- a/Themes/PlasmaB2CTheme/LinkButton/LinkButton+BaseVariations.swift +++ b/Themes/PlasmaB2CTheme/LinkButton/LinkButton+BaseVariations.swift @@ -88,7 +88,7 @@ public struct LinkButtonVariation { private extension ButtonAppearance { static var base: ButtonAppearance { var appearance = ButtonAppearance() - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: ColorToken.surfaceDefaultClear, hoveredColor: ColorToken.surfaceDefaultClear, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [])) appearance.disabledAlpha = CGFloat(0.4) appearance.loadingAlpha = CGFloat(0.06) return appearance diff --git a/Themes/PlasmaB2CTheme/LinkButton/LinkButton+Variations.swift b/Themes/PlasmaB2CTheme/LinkButton/LinkButton+Variations.swift index 8157c619f..30529bca9 100644 --- a/Themes/PlasmaB2CTheme/LinkButton/LinkButton+Variations.swift +++ b/Themes/PlasmaB2CTheme/LinkButton/LinkButton+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { @@ -507,49 +508,103 @@ private extension ButtonAppearance { var `default`: ButtonAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) return appearance } var accent: ButtonAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultAccent, highlightedColor: ColorToken.textDefaultAccentActive, hoveredColor: ColorToken.textDefaultAccentHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultAccent, highlightedColor: ColorToken.textDefaultAccentActive, hoveredColor: ColorToken.textDefaultAccentHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultAccent, highlightedColor: ColorToken.textDefaultAccentActive, hoveredColor: ColorToken.textDefaultAccentHover, selectedColor: .clearColor) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultAccentHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultAccentHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultAccentHover) + ])) return appearance } var negative: ButtonAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultNegative, highlightedColor: ColorToken.textDefaultNegativeActive, hoveredColor: ColorToken.textDefaultNegativeHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultNegative, highlightedColor: ColorToken.textDefaultNegativeActive, hoveredColor: ColorToken.textDefaultNegativeHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultNegative, highlightedColor: ColorToken.textDefaultNegativeActive, hoveredColor: ColorToken.textDefaultNegativeHover, selectedColor: .clearColor) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultNegativeHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultNegativeHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultNegativeHover) + ])) return appearance } var positive: ButtonAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPositive, highlightedColor: ColorToken.textDefaultPositiveActive, hoveredColor: ColorToken.textDefaultPositiveHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultPositive, highlightedColor: ColorToken.textDefaultPositiveActive, hoveredColor: ColorToken.textDefaultPositiveHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultPositive, highlightedColor: ColorToken.textDefaultPositiveActive, hoveredColor: ColorToken.textDefaultPositiveHover, selectedColor: .clearColor) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPositive, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPositiveActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPositiveHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPositive, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPositiveActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPositiveHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPositive, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPositiveActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPositiveHover) + ])) return appearance } var secondary: ButtonAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) return appearance } var warning: ButtonAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultWarning, highlightedColor: ColorToken.textDefaultWarningActive, hoveredColor: ColorToken.textDefaultWarningHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultWarning, highlightedColor: ColorToken.textDefaultWarningActive, hoveredColor: ColorToken.textDefaultWarningHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultWarning, highlightedColor: ColorToken.textDefaultWarningActive, hoveredColor: ColorToken.textDefaultWarningHover, selectedColor: .clearColor) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultWarningHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultWarningHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultWarningHover) + ])) return appearance } diff --git a/Themes/PlasmaB2CTheme/ListItemNormal/ListItemNormal+BaseVariations.swift b/Themes/PlasmaB2CTheme/ListItemNormal/ListItemNormal+BaseVariations.swift index 2683d8296..89415b28c 100644 --- a/Themes/PlasmaB2CTheme/ListItemNormal/ListItemNormal+BaseVariations.swift +++ b/Themes/PlasmaB2CTheme/ListItemNormal/ListItemNormal+BaseVariations.swift @@ -91,7 +91,9 @@ public struct ListItemNormalVariation { private extension ListItemAppearance { static var base: ListItemAppearance { var appearance = ListItemAppearance() - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: ColorToken.surfaceDefaultClear, hoveredColor: ColorToken.surfaceDefaultTransparentSecondary, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [ + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondary) + ])) appearance.disabledAlpha = CGFloat(0.4) appearance.disclosureIconColor = ColorToken.textDefaultSecondary appearance.labelColor = ColorToken.textDefaultSecondary diff --git a/Themes/PlasmaB2CTheme/ListItemTight/ListItemTight+BaseVariations.swift b/Themes/PlasmaB2CTheme/ListItemTight/ListItemTight+BaseVariations.swift index 079be7f54..190094ef7 100644 --- a/Themes/PlasmaB2CTheme/ListItemTight/ListItemTight+BaseVariations.swift +++ b/Themes/PlasmaB2CTheme/ListItemTight/ListItemTight+BaseVariations.swift @@ -91,7 +91,9 @@ public struct ListItemTightVariation { private extension ListItemAppearance { static var base: ListItemAppearance { var appearance = ListItemAppearance() - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: ColorToken.surfaceDefaultClear, hoveredColor: ColorToken.surfaceDefaultTransparentSecondary, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [ + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondary) + ])) appearance.disabledAlpha = CGFloat(0.4) appearance.disclosureIconColor = ColorToken.textDefaultSecondary appearance.labelColor = ColorToken.textDefaultSecondary diff --git a/Themes/PlasmaB2CTheme/Loader/Loader+Variations.swift b/Themes/PlasmaB2CTheme/Loader/Loader+Variations.swift index d49c5104c..fb8dae677 100644 --- a/Themes/PlasmaB2CTheme/Loader/Loader+Variations.swift +++ b/Themes/PlasmaB2CTheme/Loader/Loader+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Modal/Modal+Variations.swift b/Themes/PlasmaB2CTheme/Modal/Modal+Variations.swift index ce169023b..e08e063fa 100644 --- a/Themes/PlasmaB2CTheme/Modal/Modal+Variations.swift +++ b/Themes/PlasmaB2CTheme/Modal/Modal+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/NavigationBarInternalPage/NavigationBarInternalPage+BaseVariations.swift b/Themes/PlasmaB2CTheme/NavigationBarInternalPage/NavigationBarInternalPage+BaseVariations.swift new file mode 100644 index 000000000..b4cc2df42 --- /dev/null +++ b/Themes/PlasmaB2CTheme/NavigationBarInternalPage/NavigationBarInternalPage+BaseVariations.swift @@ -0,0 +1,59 @@ +import Foundation +import SwiftUI +import SDDSComponents +import SDDSThemeCore +import SDDSIcons + +public struct NavigationBarInternalPage { + public static var hasBackground: GeneralAppearanceVariation { + var appearance = NavigationBarInternalPageAppearance.base + appearance.size = NavigationBarInternalPageSize.hasBackground + appearance.backgroundColor = ColorToken.surfaceDefaultSolidCard + + return .init( + name: "hasBackground", + appearance: appearance + ) + } + public static var noBackground: GeneralAppearanceVariation { + var appearance = NavigationBarInternalPageAppearance.base + appearance.size = NavigationBarInternalPageSize.noBackground + appearance.backgroundColor = ColorToken.surfaceDefaultClear + + return .init( + name: "noBackground", + appearance: appearance + ) + } + + public static let all: [Variation] = [ + NavigationBarInternalPage.hasBackground.variation, + NavigationBarInternalPage.hasBackground.rounded.variation, + NavigationBarInternalPage.hasBackground.shadow.variation, + NavigationBarInternalPage.hasBackground.shadow.rounded.variation, + NavigationBarInternalPage.noBackground.variation, + NavigationBarInternalPage.noBackground.rounded.variation, + ] +} + +public struct NavigationBarInternalPageVariation { + public struct Hasbackground {} + public struct HasbackgroundRounded {} + public struct HasbackgroundShadow {} + public struct HasbackgroundShadowRounded {} + public struct Nobackground {} + public struct NobackgroundRounded {} +} + +private extension NavigationBarInternalPageAppearance { + static var base: NavigationBarInternalPageAppearance { + var appearance = NavigationBarInternalPageAppearance() + appearance.actionEndColor = ColorToken.textDefaultPrimary + appearance.actionStartColor = ColorToken.textDefaultPrimary + appearance.backIcon = Asset.disclosureLeftOutline24.image + appearance.backIconColor = ColorToken.textDefaultPrimary + appearance.textColor = ColorToken.textDefaultPrimary + appearance.textTypography = NavigationBarInternalPageTypography(oneSize: AdaptiveTypographyToken.bodyLBold.typography).asContainer + return appearance + } +} diff --git a/Themes/PlasmaB2CTheme/NavigationBarInternalPage/NavigationBarInternalPage+Variations.swift b/Themes/PlasmaB2CTheme/NavigationBarInternalPage/NavigationBarInternalPage+Variations.swift new file mode 100644 index 000000000..ea56415b4 --- /dev/null +++ b/Themes/PlasmaB2CTheme/NavigationBarInternalPage/NavigationBarInternalPage+Variations.swift @@ -0,0 +1,237 @@ +import Foundation +import SwiftUI +import SDDSComponents +import SDDSThemeCore +import SDDSIcons + + +public extension GeneralAppearanceVariation { + + var hasBackground: GeneralAppearanceVariation { + var size = NavigationBarInternalPageAnySize(size: appearance.size) + + var appearance = appearance + appearance.size = size + appearance.backgroundColor = ColorToken.surfaceDefaultSolidCard + + return .init( + name: "hasBackground", + appearance: appearance + ) + } + + var rounded: ComponentAppearanceVariation { + var size = NavigationBarInternalPageAnySize(size: appearance.size) + size.bottomShape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundL.cornerRadius) as PathDrawer + + var appearance = appearance + appearance.size = size + + return .init( + name: "hasBackground.rounded", + appearance: appearance + ) + } + + var shadow: GeneralAppearanceVariation { + var size = NavigationBarInternalPageAnySize(size: appearance.size) + + var appearance = appearance + appearance.size = size + appearance.shadow = ShadowToken.downSoftM + + return .init( + name: "hasBackground.shadow", + appearance: appearance + ) + } + + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } + +} + +public extension GeneralAppearanceVariation { + + var rounded: ComponentAppearanceVariation { + var size = NavigationBarInternalPageAnySize(size: appearance.size) + size.bottomShape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundL.cornerRadius) as PathDrawer + + var appearance = appearance + appearance.size = size + + return .init( + name: "hasBackground.rounded", + appearance: appearance + ) + } + + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } + +} + +public extension GeneralAppearanceVariation { + + var rounded: ComponentAppearanceVariation { + var size = NavigationBarInternalPageAnySize(size: appearance.size) + size.bottomShape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundL.cornerRadius) as PathDrawer + + var appearance = appearance + appearance.size = size + + return .init( + name: "hasBackground.shadow.rounded", + appearance: appearance + ) + } + + var shadow: GeneralAppearanceVariation { + var size = NavigationBarInternalPageAnySize(size: appearance.size) + + var appearance = appearance + appearance.size = size + appearance.shadow = ShadowToken.downSoftM + + return .init( + name: "hasBackground.shadow", + appearance: appearance + ) + } + + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } + +} + +public extension GeneralAppearanceVariation { + + var rounded: ComponentAppearanceVariation { + var size = NavigationBarInternalPageAnySize(size: appearance.size) + size.bottomShape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundL.cornerRadius) as PathDrawer + + var appearance = appearance + appearance.size = size + + return .init( + name: "hasBackground.shadow.rounded", + appearance: appearance + ) + } + + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } + +} + +public extension GeneralAppearanceVariation { + + var noBackground: GeneralAppearanceVariation { + var size = NavigationBarInternalPageAnySize(size: appearance.size) + + var appearance = appearance + appearance.size = size + appearance.backgroundColor = ColorToken.surfaceDefaultClear + + return .init( + name: "noBackground", + appearance: appearance + ) + } + + var rounded: ComponentAppearanceVariation { + var size = NavigationBarInternalPageAnySize(size: appearance.size) + size.bottomShape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundL.cornerRadius) as PathDrawer + + var appearance = appearance + appearance.size = size + + return .init( + name: "noBackground.rounded", + appearance: appearance + ) + } + + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } + +} + +public extension GeneralAppearanceVariation { + + var rounded: ComponentAppearanceVariation { + var size = NavigationBarInternalPageAnySize(size: appearance.size) + size.bottomShape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundL.cornerRadius) as PathDrawer + + var appearance = appearance + appearance.size = size + + return .init( + name: "noBackground.rounded", + appearance: appearance + ) + } + + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } + +} + + +public extension ComponentAppearanceVariation { + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } +} + +private extension NavigationBarInternalPageAppearance { + +} diff --git a/Themes/PlasmaB2CTheme/NavigationBarInternalPage/NavigationBarInternalPageSize.swift b/Themes/PlasmaB2CTheme/NavigationBarInternalPage/NavigationBarInternalPageSize.swift new file mode 100644 index 000000000..2d167c71b --- /dev/null +++ b/Themes/PlasmaB2CTheme/NavigationBarInternalPage/NavigationBarInternalPageSize.swift @@ -0,0 +1,65 @@ +import Foundation +import SwiftUI +import SDDSComponents +import SDDSThemeCore + +struct NavigationBarInternalPageSize { + static let hasBackground = NavigationBarInternalPageSizeHasbackground() + static let noBackground = NavigationBarInternalPageSizeNobackground() + + static let all: [NavigationBarInternalPageSizeConfiguration] = [ + NavigationBarInternalPageSize.hasBackground, + NavigationBarInternalPageSize.noBackground, + ] +} +struct NavigationBarInternalPageSizeHasbackground: NavigationBarInternalPageSizeConfiguration { + var backIconMargin = CGFloat(4.0) + var bottomShape = DefaultPathDrawer() as PathDrawer as PathDrawer + var horizontalSpacing = CGFloat(16.0) + var paddingBottom = CGFloat(20.0) + var paddingEnd = CGFloat(20.0) + var paddingStart = CGFloat(20.0) + var paddingTop = CGFloat(20.0) + var textBlockTopMargin = CGFloat(16.0) + public var debugDescription: String { + return "NavigationBarInternalPageSize" + } +} +struct NavigationBarInternalPageSizeNobackground: NavigationBarInternalPageSizeConfiguration { + var backIconMargin = CGFloat(4.0) + var bottomShape = DefaultPathDrawer() as PathDrawer as PathDrawer + var horizontalSpacing = CGFloat(16.0) + var paddingBottom = CGFloat(20.0) + var paddingEnd = CGFloat(20.0) + var paddingStart = CGFloat(20.0) + var paddingTop = CGFloat(20.0) + var textBlockTopMargin = CGFloat(16.0) + public var debugDescription: String { + return "NavigationBarInternalPageSize" + } +} + +struct NavigationBarInternalPageAnySize: NavigationBarInternalPageSizeConfiguration { + var backIconMargin = CGFloat(0) + var bottomShape = DefaultPathDrawer() as PathDrawer + var horizontalSpacing = CGFloat(0) + var paddingBottom = CGFloat(0) + var paddingEnd = CGFloat(0) + var paddingStart = CGFloat(0) + var paddingTop = CGFloat(0) + var textBlockTopMargin = CGFloat(0) + + init(size: NavigationBarInternalPageSizeConfiguration) { + self.backIconMargin = size.backIconMargin + self.bottomShape = size.bottomShape + self.horizontalSpacing = size.horizontalSpacing + self.paddingBottom = size.paddingBottom + self.paddingEnd = size.paddingEnd + self.paddingStart = size.paddingStart + self.paddingTop = size.paddingTop + self.textBlockTopMargin = size.textBlockTopMargin + } + var debugDescription: String { + return "NavigationBarInternalPageAnySize" + } +} diff --git a/Themes/PlasmaB2CTheme/NavigationBarInternalPage/NavigationBarInternalPageTypography.swift b/Themes/PlasmaB2CTheme/NavigationBarInternalPage/NavigationBarInternalPageTypography.swift new file mode 100644 index 000000000..a145cdd0b --- /dev/null +++ b/Themes/PlasmaB2CTheme/NavigationBarInternalPage/NavigationBarInternalPageTypography.swift @@ -0,0 +1,35 @@ +import Foundation +import SwiftUI +import SDDSComponents +import SDDSThemeCore + +struct NavigationBarInternalPageTypography: GeneralTypographyConfiguration { + var hasBackground: TypographyToken? + var noBackground: TypographyToken? + + init( + hasBackground: TypographyToken? = nil, + noBackground: TypographyToken? = nil + ) { + self.hasBackground = hasBackground + self.noBackground = noBackground + } + + init(oneSize: TypographyToken) { + self.hasBackground = oneSize + self.noBackground = oneSize + } + + func typography(with size: NavigationBarInternalPageSizeConfiguration) -> TypographyToken? { + if size is NavigationBarInternalPageAnySize { + return hasBackground + } + if size is NavigationBarInternalPageSizeHasbackground { + return hasBackground + } + if size is NavigationBarInternalPageSizeNobackground { + return noBackground + } + return hasBackground + } +} diff --git a/Themes/PlasmaB2CTheme/NavigationBarMainPage/NavigationBarMainPage+BaseVariations.swift b/Themes/PlasmaB2CTheme/NavigationBarMainPage/NavigationBarMainPage+BaseVariations.swift new file mode 100644 index 000000000..da5a37114 --- /dev/null +++ b/Themes/PlasmaB2CTheme/NavigationBarMainPage/NavigationBarMainPage+BaseVariations.swift @@ -0,0 +1,57 @@ +import Foundation +import SwiftUI +import SDDSComponents +import SDDSThemeCore +import SDDSIcons + +public struct NavigationBarMainPage { + public static var hasBackground: GeneralAppearanceVariation { + var appearance = NavigationBarMainPageAppearance.base + appearance.size = NavigationBarMainPageSize.hasBackground + appearance.backgroundColor = ColorToken.surfaceDefaultSolidCard + + return .init( + name: "hasBackground", + appearance: appearance + ) + } + public static var noBackground: GeneralAppearanceVariation { + var appearance = NavigationBarMainPageAppearance.base + appearance.size = NavigationBarMainPageSize.noBackground + appearance.backgroundColor = ColorToken.surfaceDefaultClear + + return .init( + name: "noBackground", + appearance: appearance + ) + } + + public static let all: [Variation] = [ + NavigationBarMainPage.hasBackground.variation, + NavigationBarMainPage.hasBackground.rounded.variation, + NavigationBarMainPage.hasBackground.shadow.variation, + NavigationBarMainPage.hasBackground.shadow.rounded.variation, + NavigationBarMainPage.noBackground.variation, + NavigationBarMainPage.noBackground.rounded.variation, + ] +} + +public struct NavigationBarMainPageVariation { + public struct Hasbackground {} + public struct HasbackgroundRounded {} + public struct HasbackgroundShadow {} + public struct HasbackgroundShadowRounded {} + public struct Nobackground {} + public struct NobackgroundRounded {} +} + +private extension NavigationBarMainPageAppearance { + static var base: NavigationBarMainPageAppearance { + var appearance = NavigationBarMainPageAppearance() + appearance.actionEndColor = ColorToken.textDefaultPrimary + appearance.actionStartColor = ColorToken.textDefaultPrimary + appearance.textColor = ColorToken.textDefaultPrimary + appearance.textTypography = NavigationBarMainPageTypography(oneSize: AdaptiveTypographyToken.bodyLBold.typography).asContainer + return appearance + } +} diff --git a/Themes/PlasmaB2CTheme/NavigationBarMainPage/NavigationBarMainPage+Variations.swift b/Themes/PlasmaB2CTheme/NavigationBarMainPage/NavigationBarMainPage+Variations.swift new file mode 100644 index 000000000..4f9a8ea3e --- /dev/null +++ b/Themes/PlasmaB2CTheme/NavigationBarMainPage/NavigationBarMainPage+Variations.swift @@ -0,0 +1,237 @@ +import Foundation +import SwiftUI +import SDDSComponents +import SDDSThemeCore +import SDDSIcons + + +public extension GeneralAppearanceVariation { + + var hasBackground: GeneralAppearanceVariation { + var size = NavigationBarMainPageAnySize(size: appearance.size) + + var appearance = appearance + appearance.size = size + appearance.backgroundColor = ColorToken.surfaceDefaultSolidCard + + return .init( + name: "hasBackground", + appearance: appearance + ) + } + + var rounded: ComponentAppearanceVariation { + var size = NavigationBarMainPageAnySize(size: appearance.size) + size.bottomShape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundL.cornerRadius) as PathDrawer + + var appearance = appearance + appearance.size = size + + return .init( + name: "hasBackground.rounded", + appearance: appearance + ) + } + + var shadow: GeneralAppearanceVariation { + var size = NavigationBarMainPageAnySize(size: appearance.size) + + var appearance = appearance + appearance.size = size + appearance.shadow = ShadowToken.downSoftM + + return .init( + name: "hasBackground.shadow", + appearance: appearance + ) + } + + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } + +} + +public extension GeneralAppearanceVariation { + + var rounded: ComponentAppearanceVariation { + var size = NavigationBarMainPageAnySize(size: appearance.size) + size.bottomShape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundL.cornerRadius) as PathDrawer + + var appearance = appearance + appearance.size = size + + return .init( + name: "hasBackground.rounded", + appearance: appearance + ) + } + + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } + +} + +public extension GeneralAppearanceVariation { + + var rounded: ComponentAppearanceVariation { + var size = NavigationBarMainPageAnySize(size: appearance.size) + size.bottomShape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundL.cornerRadius) as PathDrawer + + var appearance = appearance + appearance.size = size + + return .init( + name: "hasBackground.shadow.rounded", + appearance: appearance + ) + } + + var shadow: GeneralAppearanceVariation { + var size = NavigationBarMainPageAnySize(size: appearance.size) + + var appearance = appearance + appearance.size = size + appearance.shadow = ShadowToken.downSoftM + + return .init( + name: "hasBackground.shadow", + appearance: appearance + ) + } + + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } + +} + +public extension GeneralAppearanceVariation { + + var rounded: ComponentAppearanceVariation { + var size = NavigationBarMainPageAnySize(size: appearance.size) + size.bottomShape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundL.cornerRadius) as PathDrawer + + var appearance = appearance + appearance.size = size + + return .init( + name: "hasBackground.shadow.rounded", + appearance: appearance + ) + } + + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } + +} + +public extension GeneralAppearanceVariation { + + var noBackground: GeneralAppearanceVariation { + var size = NavigationBarMainPageAnySize(size: appearance.size) + + var appearance = appearance + appearance.size = size + appearance.backgroundColor = ColorToken.surfaceDefaultClear + + return .init( + name: "noBackground", + appearance: appearance + ) + } + + var rounded: ComponentAppearanceVariation { + var size = NavigationBarMainPageAnySize(size: appearance.size) + size.bottomShape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundL.cornerRadius) as PathDrawer + + var appearance = appearance + appearance.size = size + + return .init( + name: "noBackground.rounded", + appearance: appearance + ) + } + + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } + +} + +public extension GeneralAppearanceVariation { + + var rounded: ComponentAppearanceVariation { + var size = NavigationBarMainPageAnySize(size: appearance.size) + size.bottomShape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundL.cornerRadius) as PathDrawer + + var appearance = appearance + appearance.size = size + + return .init( + name: "noBackground.rounded", + appearance: appearance + ) + } + + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } + +} + + +public extension ComponentAppearanceVariation { + var variation: Variation { + .init( + originalVariation: self, + styles: [ + ], + name: name, + appearance: appearance + ) + } +} + +private extension NavigationBarMainPageAppearance { + +} diff --git a/Themes/PlasmaB2CTheme/NavigationBarMainPage/NavigationBarMainPageSize.swift b/Themes/PlasmaB2CTheme/NavigationBarMainPage/NavigationBarMainPageSize.swift new file mode 100644 index 000000000..145897807 --- /dev/null +++ b/Themes/PlasmaB2CTheme/NavigationBarMainPage/NavigationBarMainPageSize.swift @@ -0,0 +1,61 @@ +import Foundation +import SwiftUI +import SDDSComponents +import SDDSThemeCore + +struct NavigationBarMainPageSize { + static let hasBackground = NavigationBarMainPageSizeHasbackground() + static let noBackground = NavigationBarMainPageSizeNobackground() + + static let all: [NavigationBarMainPageSizeConfiguration] = [ + NavigationBarMainPageSize.hasBackground, + NavigationBarMainPageSize.noBackground, + ] +} +struct NavigationBarMainPageSizeHasbackground: NavigationBarMainPageSizeConfiguration { + var bottomShape = DefaultPathDrawer() as PathDrawer as PathDrawer + var horizontalSpacing = CGFloat(16.0) + var paddingBottom = CGFloat(20.0) + var paddingEnd = CGFloat(20.0) + var paddingStart = CGFloat(20.0) + var paddingTop = CGFloat(20.0) + var textBlockTopMargin = CGFloat(16.0) + public var debugDescription: String { + return "NavigationBarMainPageSize" + } +} +struct NavigationBarMainPageSizeNobackground: NavigationBarMainPageSizeConfiguration { + var bottomShape = DefaultPathDrawer() as PathDrawer as PathDrawer + var horizontalSpacing = CGFloat(16.0) + var paddingBottom = CGFloat(20.0) + var paddingEnd = CGFloat(20.0) + var paddingStart = CGFloat(20.0) + var paddingTop = CGFloat(20.0) + var textBlockTopMargin = CGFloat(16.0) + public var debugDescription: String { + return "NavigationBarMainPageSize" + } +} + +struct NavigationBarMainPageAnySize: NavigationBarMainPageSizeConfiguration { + var bottomShape = DefaultPathDrawer() as PathDrawer + var horizontalSpacing = CGFloat(0) + var paddingBottom = CGFloat(0) + var paddingEnd = CGFloat(0) + var paddingStart = CGFloat(0) + var paddingTop = CGFloat(0) + var textBlockTopMargin = CGFloat(0) + + init(size: NavigationBarMainPageSizeConfiguration) { + self.bottomShape = size.bottomShape + self.horizontalSpacing = size.horizontalSpacing + self.paddingBottom = size.paddingBottom + self.paddingEnd = size.paddingEnd + self.paddingStart = size.paddingStart + self.paddingTop = size.paddingTop + self.textBlockTopMargin = size.textBlockTopMargin + } + var debugDescription: String { + return "NavigationBarMainPageAnySize" + } +} diff --git a/Themes/PlasmaB2CTheme/NavigationBarMainPage/NavigationBarMainPageTypography.swift b/Themes/PlasmaB2CTheme/NavigationBarMainPage/NavigationBarMainPageTypography.swift new file mode 100644 index 000000000..ca48eee47 --- /dev/null +++ b/Themes/PlasmaB2CTheme/NavigationBarMainPage/NavigationBarMainPageTypography.swift @@ -0,0 +1,35 @@ +import Foundation +import SwiftUI +import SDDSComponents +import SDDSThemeCore + +struct NavigationBarMainPageTypography: GeneralTypographyConfiguration { + var hasBackground: TypographyToken? + var noBackground: TypographyToken? + + init( + hasBackground: TypographyToken? = nil, + noBackground: TypographyToken? = nil + ) { + self.hasBackground = hasBackground + self.noBackground = noBackground + } + + init(oneSize: TypographyToken) { + self.hasBackground = oneSize + self.noBackground = oneSize + } + + func typography(with size: NavigationBarMainPageSizeConfiguration) -> TypographyToken? { + if size is NavigationBarMainPageAnySize { + return hasBackground + } + if size is NavigationBarMainPageSizeHasbackground { + return hasBackground + } + if size is NavigationBarMainPageSizeNobackground { + return noBackground + } + return hasBackground + } +} diff --git a/Themes/PlasmaB2CTheme/NotificationCompact/NotificationCompact+Variations.swift b/Themes/PlasmaB2CTheme/NotificationCompact/NotificationCompact+Variations.swift index 979b89348..ff6e8c580 100644 --- a/Themes/PlasmaB2CTheme/NotificationCompact/NotificationCompact+Variations.swift +++ b/Themes/PlasmaB2CTheme/NotificationCompact/NotificationCompact+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/NotificationLoose/NotificationLoose+Variations.swift b/Themes/PlasmaB2CTheme/NotificationLoose/NotificationLoose+Variations.swift index c90e86a3b..0ff76af30 100644 --- a/Themes/PlasmaB2CTheme/NotificationLoose/NotificationLoose+Variations.swift +++ b/Themes/PlasmaB2CTheme/NotificationLoose/NotificationLoose+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Popover/Popover+Variations.swift b/Themes/PlasmaB2CTheme/Popover/Popover+Variations.swift index 05efc7af6..f69129817 100644 --- a/Themes/PlasmaB2CTheme/Popover/Popover+Variations.swift +++ b/Themes/PlasmaB2CTheme/Popover/Popover+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/ProgressBar/ProgressBar+Variations.swift b/Themes/PlasmaB2CTheme/ProgressBar/ProgressBar+Variations.swift index cf4002b0d..cabd70b95 100644 --- a/Themes/PlasmaB2CTheme/ProgressBar/ProgressBar+Variations.swift +++ b/Themes/PlasmaB2CTheme/ProgressBar/ProgressBar+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Radiobox/Radiobox+Variations.swift b/Themes/PlasmaB2CTheme/Radiobox/Radiobox+Variations.swift index 01a6ff849..9c8d9fd67 100644 --- a/Themes/PlasmaB2CTheme/Radiobox/Radiobox+Variations.swift +++ b/Themes/PlasmaB2CTheme/Radiobox/Radiobox+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/RadioboxGroup/RadioboxGroup+Variations.swift b/Themes/PlasmaB2CTheme/RadioboxGroup/RadioboxGroup+Variations.swift index 09ddb4502..3365d8c08 100644 --- a/Themes/PlasmaB2CTheme/RadioboxGroup/RadioboxGroup+Variations.swift +++ b/Themes/PlasmaB2CTheme/RadioboxGroup/RadioboxGroup+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Scrollbar/Scrollbar+Variations.swift b/Themes/PlasmaB2CTheme/Scrollbar/Scrollbar+Variations.swift index 3c43a15c3..c49e504f3 100644 --- a/Themes/PlasmaB2CTheme/Scrollbar/Scrollbar+Variations.swift +++ b/Themes/PlasmaB2CTheme/Scrollbar/Scrollbar+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Spinner/Spinner+Variations.swift b/Themes/PlasmaB2CTheme/Spinner/Spinner+Variations.swift index 9cb27558e..d4a301ef2 100644 --- a/Themes/PlasmaB2CTheme/Spinner/Spinner+Variations.swift +++ b/Themes/PlasmaB2CTheme/Spinner/Spinner+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Switch/Switch+Variations.swift b/Themes/PlasmaB2CTheme/Switch/Switch+Variations.swift index a7dcb7061..c60aa2705 100644 --- a/Themes/PlasmaB2CTheme/Switch/Switch+Variations.swift +++ b/Themes/PlasmaB2CTheme/Switch/Switch+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/TabBarItemClear/TabBarItemClear+BaseVariations.swift b/Themes/PlasmaB2CTheme/TabBarItemClear/TabBarItemClear+BaseVariations.swift index a65c9fdcb..acdd7d3b8 100644 --- a/Themes/PlasmaB2CTheme/TabBarItemClear/TabBarItemClear+BaseVariations.swift +++ b/Themes/PlasmaB2CTheme/TabBarItemClear/TabBarItemClear+BaseVariations.swift @@ -46,7 +46,7 @@ public struct TabBarItemClearVariation { private extension TabBarItemAppearance { static var base: TabBarItemAppearance { var appearance = TabBarItemAppearance() - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.surfaceDefaultClear) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [])) appearance.labelTypography = TabBarItemClearTypography(oneSize: AdaptiveTypographyToken.bodyXxsBold.typography).asContainer return appearance } diff --git a/Themes/PlasmaB2CTheme/TabBarItemClear/TabBarItemClear+Variations.swift b/Themes/PlasmaB2CTheme/TabBarItemClear/TabBarItemClear+Variations.swift index af376ce38..d5f1de6d8 100644 --- a/Themes/PlasmaB2CTheme/TabBarItemClear/TabBarItemClear+Variations.swift +++ b/Themes/PlasmaB2CTheme/TabBarItemClear/TabBarItemClear+Variations.swift @@ -291,22 +291,30 @@ private extension TabBarItemAppearance { var `default`: TabBarItemAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultPrimary) - appearance.labelColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultPrimary) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textDefaultPrimary) + ])) + appearance.labelColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textDefaultPrimary) + ])) return appearance } var accent: TabBarItemAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultAccent) - appearance.labelColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultAccent) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textDefaultAccent) + ])) + appearance.labelColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textDefaultAccent) + ])) return appearance } var secondary: TabBarItemAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultSecondary) - appearance.labelColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultSecondary) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [])) + appearance.labelColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [])) return appearance } diff --git a/Themes/PlasmaB2CTheme/TabBarItemSolid/TabBarItemSolid+Variations.swift b/Themes/PlasmaB2CTheme/TabBarItemSolid/TabBarItemSolid+Variations.swift index d8b1bb6f9..1cab3c763 100644 --- a/Themes/PlasmaB2CTheme/TabBarItemSolid/TabBarItemSolid+Variations.swift +++ b/Themes/PlasmaB2CTheme/TabBarItemSolid/TabBarItemSolid+Variations.swift @@ -291,25 +291,43 @@ private extension TabBarItemAppearance { var `default`: TabBarItemAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.surfaceDefaultSolidDefault) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textInversePrimary) - appearance.labelColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textInversePrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.surfaceDefaultSolidDefault) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textInversePrimary) + ])) + appearance.labelColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textInversePrimary) + ])) return appearance } var accent: TabBarItemAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.surfaceDefaultTransparentAccent) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultAccent) - appearance.labelColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultAccent) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.surfaceDefaultTransparentAccent) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textDefaultAccent) + ])) + appearance.labelColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textDefaultAccent) + ])) return appearance } var secondary: TabBarItemAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.surfaceDefaultTransparentSecondary) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultPrimary) - appearance.labelColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.surfaceDefaultTransparentSecondary) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textDefaultPrimary) + ])) + appearance.labelColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textDefaultPrimary) + ])) return appearance } diff --git a/Themes/PlasmaB2CTheme/TextArea/TextArea+BaseVariations.swift b/Themes/PlasmaB2CTheme/TextArea/TextArea+BaseVariations.swift index db7eb7dfb..62b8f2482 100644 --- a/Themes/PlasmaB2CTheme/TextArea/TextArea+BaseVariations.swift +++ b/Themes/PlasmaB2CTheme/TextArea/TextArea+BaseVariations.swift @@ -41,7 +41,7 @@ public struct TextArea { public static var xl: GeneralAppearanceVariation { var appearance = TextAreaAppearance.base appearance.size = TextAreaSize.xl - appearance.chipGroupAppearance = EmbeddedChipGroupDense.l.secondary.appearance + appearance.chipGroupAppearance = EmbeddedChipGroupDense.xl.secondary.appearance appearance.textTypography = TextAreaTypography(oneSize: AdaptiveTypographyToken.bodyLNormal.typography).asContainer return .init( @@ -167,6 +167,7 @@ private extension TextAreaAppearance { appearance.optionalTitleColor = ColorToken.textDefaultTertiary appearance.placeholderColor = ColorToken.textDefaultSecondary appearance.placeholderColorFocused = ColorToken.textDefaultTertiary + appearance.placeholderColorReadOnly = ColorToken.textDefaultSecondary appearance.requiredIndicatorColor = ColorToken.surfaceDefaultNegative appearance.scrollBarThumbColor = ColorToken.surfaceDefaultTransparentTertiary appearance.scrollBarTrackColor = ColorToken.surfaceDefaultTransparentPrimary diff --git a/Themes/PlasmaB2CTheme/TextArea/TextArea+Variations.swift b/Themes/PlasmaB2CTheme/TextArea/TextArea+Variations.swift index 0c08397ae..fcbff16d3 100644 --- a/Themes/PlasmaB2CTheme/TextArea/TextArea+Variations.swift +++ b/Themes/PlasmaB2CTheme/TextArea/TextArea+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { @@ -1852,7 +1853,7 @@ public extension GeneralAppearanceVariation { var appearance = TextAreaAppearance.base appearance.size = TextAreaClearSize.xl - appearance.chipGroupAppearance = EmbeddedChipGroupDense.l.secondary.appearance + appearance.chipGroupAppearance = EmbeddedChipGroupDense.xl.secondary.appearance appearance.textTypography = TextAreaClearTypography(oneSize: AdaptiveTypographyToken.bodyLNormal.typography).asContainer return .init( diff --git a/Themes/PlasmaB2CTheme/TextAreaClear/TextAreaClear+Variations.swift b/Themes/PlasmaB2CTheme/TextAreaClear/TextAreaClear+Variations.swift index ee3c08d7c..c89b3767a 100644 --- a/Themes/PlasmaB2CTheme/TextAreaClear/TextAreaClear+Variations.swift +++ b/Themes/PlasmaB2CTheme/TextAreaClear/TextAreaClear+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { @@ -1858,7 +1859,7 @@ public extension GeneralAppearanceVariation { var appearance = TextFieldAppearance.base appearance.size = TextFieldClearSize.xl - appearance.chipGroupAppearance = EmbeddedChipGroupDense.l.secondary.appearance + appearance.chipGroupAppearance = EmbeddedChipGroupDense.xl.secondary.appearance appearance.textAfterTypography = TextFieldClearTypography(oneSize: AdaptiveTypographyToken.bodyLNormal.typography).asContainer appearance.textBeforeTypography = TextFieldClearTypography(oneSize: AdaptiveTypographyToken.bodyLNormal.typography).asContainer appearance.textTypography = TextFieldClearTypography(oneSize: AdaptiveTypographyToken.bodyLNormal.typography).asContainer diff --git a/Themes/PlasmaB2CTheme/TextFieldClear/TextFieldClear+Variations.swift b/Themes/PlasmaB2CTheme/TextFieldClear/TextFieldClear+Variations.swift index e2c30174c..9526c8fd1 100644 --- a/Themes/PlasmaB2CTheme/TextFieldClear/TextFieldClear+Variations.swift +++ b/Themes/PlasmaB2CTheme/TextFieldClear/TextFieldClear+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { @@ -2225,7 +2226,7 @@ public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaB2CTheme/Tooltip/Tooltip+Variations.swift b/Themes/PlasmaB2CTheme/Tooltip/Tooltip+Variations.swift index bea1816a0..b4b98edac 100644 --- a/Themes/PlasmaB2CTheme/Tooltip/Tooltip+Variations.swift +++ b/Themes/PlasmaB2CTheme/Tooltip/Tooltip+Variations.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import SDDSComponents import SDDSThemeCore +import SDDSIcons public extension GeneralAppearanceVariation { diff --git a/Themes/PlasmaHomeDSTheme/BasicButton/BasicButton+Variations.swift b/Themes/PlasmaHomeDSTheme/BasicButton/BasicButton+Variations.swift index f45c29dbf..ea6d5b200 100644 --- a/Themes/PlasmaHomeDSTheme/BasicButton/BasicButton+Variations.swift +++ b/Themes/PlasmaHomeDSTheme/BasicButton/BasicButton+Variations.swift @@ -323,78 +323,183 @@ private extension ButtonAppearance { var `default`: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceInverseSolidDefault, highlightedColor: ColorToken.surfaceInverseSolidDefaultActive, hoveredColor: ColorToken.surfaceInverseSolidDefaultHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textInverseSecondary, highlightedColor: ColorToken.textInverseSecondaryActive, hoveredColor: ColorToken.textInverseSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceInverseSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceInverseSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceInverseSolidDefaultHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInverseSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInverseSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInverseSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) return appearance } var accent: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultAccent, highlightedColor: ColorToken.surfaceDefaultAccentActive, hoveredColor: ColorToken.surfaceDefaultAccentHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultAccentHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceOnDarkSolidDefault, highlightedColor: ColorToken.surfaceOnDarkSolidDefaultActive, hoveredColor: ColorToken.surfaceOnDarkSolidDefaultHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnDarkSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnDarkSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnDarkSolidDefaultHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var clear: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: ColorToken.surfaceDefaultTransparentSecondaryActive, hoveredColor: ColorToken.surfaceDefaultTransparentSecondaryHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultTransparentSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondaryHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.06) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) return appearance } var dark: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidSecondary, highlightedColor: ColorToken.surfaceDefaultSolidSecondaryActive, hoveredColor: ColorToken.surfaceDefaultSolidSecondaryHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidSecondaryHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) return appearance } var negative: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultNegative, highlightedColor: ColorToken.surfaceDefaultNegativeActive, hoveredColor: ColorToken.surfaceDefaultNegativeHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultNegativeHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceOnDarkSolidDefault, highlightedColor: ColorToken.surfaceOnDarkSolidDefaultActive, hoveredColor: ColorToken.surfaceOnDarkSolidDefaultHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnDarkSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnDarkSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnDarkSolidDefaultHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var secondary: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultTransparentSecondary, highlightedColor: ColorToken.surfaceDefaultTransparentSecondaryActive, hoveredColor: ColorToken.surfaceDefaultTransparentSecondaryHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultTransparentSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultTransparentSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondaryHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) return appearance } var warning: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultWarning, highlightedColor: ColorToken.surfaceDefaultWarningActive, hoveredColor: ColorToken.surfaceDefaultWarningHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultWarningHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) appearance.loadingAlpha = CGFloat(0.0) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceOnDarkSolidDefault, highlightedColor: ColorToken.surfaceOnDarkSolidDefaultActive, hoveredColor: ColorToken.surfaceOnDarkSolidDefaultHover, selectedColor: .clearColor) - appearance.subtitleColor = ButtonColor(defaultColor: ColorToken.textOnDarkSecondary, highlightedColor: ColorToken.textOnDarkSecondaryActive, hoveredColor: ColorToken.textOnDarkSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnDarkSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnDarkSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnDarkSolidDefaultHover) + ])) + appearance.subtitleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } diff --git a/Themes/PlasmaHomeDSTheme/Chip/Chip+Variations.swift b/Themes/PlasmaHomeDSTheme/Chip/Chip+Variations.swift index 652a7adb1..579eae1c7 100644 --- a/Themes/PlasmaHomeDSTheme/Chip/Chip+Variations.swift +++ b/Themes/PlasmaHomeDSTheme/Chip/Chip+Variations.swift @@ -551,19 +551,43 @@ private extension ChipAppearance { var `default`: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textInverseSecondary, highlightedColor: ColorToken.textInverseSecondaryActive, hoveredColor: ColorToken.textInverseSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInverseSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInverseSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInverseSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) return appearance } var secondary: ChipAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultTransparentSecondary, highlightedColor: ColorToken.surfaceDefaultTransparentSecondaryActive, hoveredColor: ColorToken.surfaceDefaultTransparentSecondaryHover, selectedColor: .clearColor) - appearance.buttonTintColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) - appearance.imageTintColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultTransparentSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultTransparentSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondaryHover) + ])) + appearance.buttonTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) + appearance.imageTintColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) return appearance } diff --git a/Themes/PlasmaHomeDSTheme/Counter/Counter+Variations.swift b/Themes/PlasmaHomeDSTheme/Counter/Counter+Variations.swift index 127f01ba6..1a97d9476 100644 --- a/Themes/PlasmaHomeDSTheme/Counter/Counter+Variations.swift +++ b/Themes/PlasmaHomeDSTheme/Counter/Counter+Variations.swift @@ -508,57 +508,105 @@ private extension CounterAppearance { var `default`: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: ColorToken.surfaceDefaultSolidDefault) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: ColorToken.textInversePrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) return appearance } var accent: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultAccent, highlightedColor: ColorToken.surfaceDefaultAccentActive, hoveredColor: ColorToken.surfaceDefaultAccentHover, selectedColor: ColorToken.surfaceDefaultAccent) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: ColorToken.textOnDarkPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultAccentHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var black: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceOnLightSolidDefault, highlightedColor: ColorToken.surfaceOnLightSolidDefaultActive, hoveredColor: ColorToken.surfaceOnLightSolidDefaultHover, selectedColor: ColorToken.surfaceOnLightSolidDefault) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: ColorToken.textOnDarkPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnLightSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnLightSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnLightSolidDefaultHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var negative: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultNegative, highlightedColor: ColorToken.surfaceDefaultNegativeActive, hoveredColor: ColorToken.surfaceDefaultNegativeHover, selectedColor: ColorToken.surfaceDefaultNegative) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: ColorToken.textOnDarkPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultNegativeHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var positive: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultPositive, highlightedColor: ColorToken.surfaceDefaultPositiveActive, hoveredColor: ColorToken.surfaceDefaultPositiveHover, selectedColor: ColorToken.surfaceDefaultPositive) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: ColorToken.textOnDarkPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultPositive, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultPositiveActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultPositiveHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var secondary: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultTransparentSecondary, highlightedColor: ColorToken.surfaceDefaultTransparentSecondaryActive, hoveredColor: ColorToken.surfaceDefaultTransparentSecondaryHover, selectedColor: ColorToken.surfaceDefaultTransparentSecondary) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: ColorToken.textDefaultPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultTransparentSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultTransparentSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondaryHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) return appearance } var warning: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultWarning, highlightedColor: ColorToken.surfaceDefaultWarningActive, hoveredColor: ColorToken.surfaceDefaultWarningHover, selectedColor: ColorToken.surfaceDefaultWarning) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: ColorToken.textOnDarkPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultWarningHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) return appearance } var white: CounterAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceOnDarkSolidDefault, highlightedColor: ColorToken.surfaceOnDarkSolidDefaultActive, hoveredColor: ColorToken.surfaceOnDarkSolidDefaultHover, selectedColor: ColorToken.surfaceOnDarkSolidDefault) - appearance.textColor = ButtonColor(defaultColor: ColorToken.textOnLightPrimary, highlightedColor: ColorToken.textOnLightPrimaryActive, hoveredColor: ColorToken.textOnLightPrimaryHover, selectedColor: ColorToken.textOnLightPrimary) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnDarkSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnDarkSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnDarkSolidDefaultHover) + ])) + appearance.textColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnLightPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnLightPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnLightPrimaryHover) + ])) return appearance } diff --git a/Themes/PlasmaHomeDSTheme/IconButton/IconButton+Variations.swift b/Themes/PlasmaHomeDSTheme/IconButton/IconButton+Variations.swift index 5c3b32439..1fcd5c2d9 100644 --- a/Themes/PlasmaHomeDSTheme/IconButton/IconButton+Variations.swift +++ b/Themes/PlasmaHomeDSTheme/IconButton/IconButton+Variations.swift @@ -387,57 +387,120 @@ private extension ButtonAppearance { var `default`: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textInversePrimary, highlightedColor: ColorToken.textInversePrimaryActive, hoveredColor: ColorToken.textInversePrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceInverseSolidDefault, highlightedColor: ColorToken.surfaceInverseSolidDefaultActive, hoveredColor: ColorToken.surfaceInverseSolidDefaultHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textInversePrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textInversePrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textInversePrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceInverseSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceInverseSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceInverseSolidDefaultHover) + ])) return appearance } var accent: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultAccent, highlightedColor: ColorToken.surfaceDefaultAccentActive, hoveredColor: ColorToken.surfaceDefaultAccentHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceOnDarkSolidDefault, highlightedColor: ColorToken.surfaceOnDarkSolidDefaultActive, hoveredColor: ColorToken.surfaceOnDarkSolidDefaultHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultAccentHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnDarkSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnDarkSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnDarkSolidDefaultHover) + ])) return appearance } var clear: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: ColorToken.surfaceDefaultTransparentSecondaryActive, hoveredColor: ColorToken.surfaceDefaultTransparentSecondaryHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultTransparentSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondaryHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) return appearance } var dark: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidSecondary, highlightedColor: ColorToken.surfaceDefaultSolidSecondaryActive, hoveredColor: ColorToken.surfaceDefaultSolidSecondaryHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidSecondaryHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) return appearance } var negative: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultNegative, highlightedColor: ColorToken.surfaceDefaultNegativeActive, hoveredColor: ColorToken.surfaceDefaultNegativeHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceOnDarkSolidDefault, highlightedColor: ColorToken.surfaceOnDarkSolidDefaultActive, hoveredColor: ColorToken.surfaceOnDarkSolidDefaultHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultNegativeHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnDarkSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnDarkSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnDarkSolidDefaultHover) + ])) return appearance } var secondary: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultTransparentSecondary, highlightedColor: ColorToken.surfaceDefaultTransparentSecondaryActive, hoveredColor: ColorToken.surfaceDefaultTransparentSecondaryHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultSolidDefault, highlightedColor: ColorToken.surfaceDefaultSolidDefaultActive, hoveredColor: ColorToken.surfaceDefaultSolidDefaultHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultTransparentSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultTransparentSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultTransparentSecondaryHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultSolidDefaultHover) + ])) return appearance } var warning: ButtonAppearance { var appearance = self - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultWarning, highlightedColor: ColorToken.surfaceDefaultWarningActive, hoveredColor: ColorToken.surfaceDefaultWarningHover, selectedColor: .clearColor) - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textOnDarkPrimary, highlightedColor: ColorToken.textOnDarkPrimaryActive, hoveredColor: ColorToken.textOnDarkPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.surfaceOnDarkSolidDefault, highlightedColor: ColorToken.surfaceOnDarkSolidDefaultActive, hoveredColor: ColorToken.surfaceOnDarkSolidDefaultHover, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceDefaultWarningHover) + ])) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textOnDarkPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textOnDarkPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textOnDarkPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceOnDarkSolidDefault, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.surfaceOnDarkSolidDefaultActive), + .init(states: [InteractiveState.hovered], value: ColorToken.surfaceOnDarkSolidDefaultHover) + ])) return appearance } diff --git a/Themes/PlasmaHomeDSTheme/LinkButton/LinkButton+BaseVariations.swift b/Themes/PlasmaHomeDSTheme/LinkButton/LinkButton+BaseVariations.swift index ab1734de2..c6cfbfe0c 100644 --- a/Themes/PlasmaHomeDSTheme/LinkButton/LinkButton+BaseVariations.swift +++ b/Themes/PlasmaHomeDSTheme/LinkButton/LinkButton+BaseVariations.swift @@ -88,7 +88,7 @@ public struct LinkButtonVariation { private extension ButtonAppearance { static var base: ButtonAppearance { var appearance = ButtonAppearance() - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: ColorToken.surfaceDefaultClear, hoveredColor: ColorToken.surfaceDefaultClear, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [])) appearance.disabledAlpha = CGFloat(0.4) appearance.loadingAlpha = CGFloat(0.06) return appearance diff --git a/Themes/PlasmaHomeDSTheme/LinkButton/LinkButton+Variations.swift b/Themes/PlasmaHomeDSTheme/LinkButton/LinkButton+Variations.swift index 003692b95..05143da0a 100644 --- a/Themes/PlasmaHomeDSTheme/LinkButton/LinkButton+Variations.swift +++ b/Themes/PlasmaHomeDSTheme/LinkButton/LinkButton+Variations.swift @@ -557,57 +557,120 @@ private extension ButtonAppearance { var `default`: ButtonAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultPrimary, highlightedColor: ColorToken.textDefaultPrimaryActive, hoveredColor: ColorToken.textDefaultPrimaryHover, selectedColor: .clearColor) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPrimary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPrimaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPrimaryHover) + ])) return appearance } var accent: ButtonAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultAccent, highlightedColor: ColorToken.textDefaultAccentActive, hoveredColor: ColorToken.textDefaultAccentHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultAccent, highlightedColor: ColorToken.textDefaultAccentActive, hoveredColor: ColorToken.textDefaultAccentHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultAccent, highlightedColor: ColorToken.textDefaultAccentActive, hoveredColor: ColorToken.textDefaultAccentHover, selectedColor: .clearColor) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultAccentHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultAccentHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultAccent, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultAccentActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultAccentHover) + ])) return appearance } var info: ButtonAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultInfo, highlightedColor: ColorToken.textDefaultInfoActive, hoveredColor: ColorToken.textDefaultInfoHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultInfo, highlightedColor: ColorToken.textDefaultInfoActive, hoveredColor: ColorToken.textDefaultInfoHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultInfo, highlightedColor: ColorToken.textDefaultInfoActive, hoveredColor: ColorToken.textDefaultInfoHover, selectedColor: .clearColor) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultInfo, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultInfoActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultInfoHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultInfo, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultInfoActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultInfoHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultInfo, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultInfoActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultInfoHover) + ])) return appearance } var negative: ButtonAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultNegative, highlightedColor: ColorToken.textDefaultNegativeActive, hoveredColor: ColorToken.textDefaultNegativeHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultNegative, highlightedColor: ColorToken.textDefaultNegativeActive, hoveredColor: ColorToken.textDefaultNegativeHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultNegative, highlightedColor: ColorToken.textDefaultNegativeActive, hoveredColor: ColorToken.textDefaultNegativeHover, selectedColor: .clearColor) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultNegativeHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultNegativeHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultNegative, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultNegativeActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultNegativeHover) + ])) return appearance } var positive: ButtonAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultPositive, highlightedColor: ColorToken.textDefaultPositiveActive, hoveredColor: ColorToken.textDefaultPositiveHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultPositive, highlightedColor: ColorToken.textDefaultPositiveActive, hoveredColor: ColorToken.textDefaultPositiveHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultPositive, highlightedColor: ColorToken.textDefaultPositiveActive, hoveredColor: ColorToken.textDefaultPositiveHover, selectedColor: .clearColor) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPositive, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPositiveActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPositiveHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPositive, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPositiveActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPositiveHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultPositive, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultPositiveActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultPositiveHover) + ])) return appearance } var secondary: ButtonAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: ColorToken.textDefaultSecondaryActive, hoveredColor: ColorToken.textDefaultSecondaryHover, selectedColor: .clearColor) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultSecondaryActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultSecondaryHover) + ])) return appearance } var warning: ButtonAppearance { var appearance = self - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultWarning, highlightedColor: ColorToken.textDefaultWarningActive, hoveredColor: ColorToken.textDefaultWarningHover, selectedColor: .clearColor) - appearance.spinnerColor = ButtonColor(defaultColor: ColorToken.textDefaultWarning, highlightedColor: ColorToken.textDefaultWarningActive, hoveredColor: ColorToken.textDefaultWarningHover, selectedColor: .clearColor) - appearance.titleColor = ButtonColor(defaultColor: ColorToken.textDefaultWarning, highlightedColor: ColorToken.textDefaultWarningActive, hoveredColor: ColorToken.textDefaultWarningHover, selectedColor: .clearColor) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultWarningHover) + ])) + appearance.spinnerColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultWarningHover) + ])) + appearance.titleColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultWarning, values: [ + .init(states: [InteractiveState.pressed], value: ColorToken.textDefaultWarningActive), + .init(states: [InteractiveState.hovered], value: ColorToken.textDefaultWarningHover) + ])) return appearance } diff --git a/Themes/PlasmaHomeDSTheme/ListItem/ListItem+Variations.swift b/Themes/PlasmaHomeDSTheme/ListItem/ListItem+Variations.swift index 2bdcb40c9..9c56b9e85 100644 --- a/Themes/PlasmaHomeDSTheme/ListItem/ListItem+Variations.swift +++ b/Themes/PlasmaHomeDSTheme/ListItem/ListItem+Variations.swift @@ -9,15 +9,15 @@ public extension GeneralAppearanceVariation { var size = ListItemAnySize(size: appearance.size) - size.paddingBottom = CGFloat(10.0) + size.paddingBottom = CGFloat(12.0) size.paddingEnd = CGFloat(14.0) size.paddingStart = CGFloat(16.0) - size.paddingTop = CGFloat(10.0) + size.paddingTop = CGFloat(12.0) size.shape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundXl.cornerRadius) as PathDrawer var appearance = appearance appearance.size = size - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultTransparentPrimary, highlightedColor: ColorToken.surfaceDefaultTransparentPrimary, hoveredColor: ColorToken.surfaceDefaultTransparentPrimary, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultTransparentPrimary, values: [])) return .init( name: "s.hasBackground", @@ -30,10 +30,10 @@ public extension GeneralAppearanceVariation { var size = ListItemAnySize(size: appearance.size) - size.paddingBottom = CGFloat(10.0) + size.paddingBottom = CGFloat(12.0) size.paddingEnd = CGFloat(14.0) size.paddingStart = CGFloat(16.0) - size.paddingTop = CGFloat(10.0) + size.paddingTop = CGFloat(12.0) size.shape = CornerRadiusDrawer(cornerRadius: ShapeToken.roundXl.cornerRadius) as PathDrawer var appearance = appearance appearance.size = size - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultTransparentPrimary, highlightedColor: ColorToken.surfaceDefaultTransparentPrimary, hoveredColor: ColorToken.surfaceDefaultTransparentPrimary, selectedColor: .clearColor) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultTransparentPrimary, values: [])) return .init( name: "s.hasBackground", diff --git a/Themes/PlasmaHomeDSTheme/ListItem/ListItemSize.swift b/Themes/PlasmaHomeDSTheme/ListItem/ListItemSize.swift index 8699266a3..c381b7d32 100644 --- a/Themes/PlasmaHomeDSTheme/ListItem/ListItemSize.swift +++ b/Themes/PlasmaHomeDSTheme/ListItem/ListItemSize.swift @@ -14,10 +14,10 @@ struct ListItemSizeS: ListItemSizeConfiguration { var contentPaddingEnd = CGFloat(12.0) var contentPaddingStart = CGFloat(12.0) var height = CGFloat(48.0) - var paddingBottom = CGFloat(10.0) + var paddingBottom = CGFloat(12.0) var paddingEnd = CGFloat(0.0) var paddingStart = CGFloat(0.0) - var paddingTop = CGFloat(10.0) + var paddingTop = CGFloat(12.0) var shape = DefaultPathDrawer() as PathDrawer as PathDrawer public var debugDescription: String { return "ListItemSize" diff --git a/Themes/PlasmaHomeDSTheme/NoteCompact/NoteCompact+Variations.swift b/Themes/PlasmaHomeDSTheme/NoteCompact/NoteCompact+Variations.swift index 409140245..e69a08320 100644 --- a/Themes/PlasmaHomeDSTheme/NoteCompact/NoteCompact+Variations.swift +++ b/Themes/PlasmaHomeDSTheme/NoteCompact/NoteCompact+Variations.swift @@ -174,7 +174,6 @@ public extension GeneralAppearanceVariation { var size = NoteCompactAnySize(size: appearance.size) size.actionEndMargin = CGFloat(14.0) - size.contentBeforeArrangement = NoteCompactContentBeforeArrangement.center size.closeSize = CGFloat(24.0) size.closeStartMargin = CGFloat(2.0) size.paddingEnd = CGFloat(10.0) @@ -241,7 +240,6 @@ public extension GeneralAppearanceVariation { var size = NoteCompactAnySize(size: appearance.size) size.actionEndMargin = CGFloat(14.0) - size.contentBeforeArrangement = NoteCompactContentBeforeArrangement.center size.closeSize = CGFloat(24.0) size.closeStartMargin = CGFloat(2.0) size.paddingEnd = CGFloat(10.0) diff --git a/Themes/PlasmaHomeDSTheme/TabBarItem/TabBarItem+BaseVariations.swift b/Themes/PlasmaHomeDSTheme/TabBarItem/TabBarItem+BaseVariations.swift index 0082f5dd2..aab038ec8 100644 --- a/Themes/PlasmaHomeDSTheme/TabBarItem/TabBarItem+BaseVariations.swift +++ b/Themes/PlasmaHomeDSTheme/TabBarItem/TabBarItem+BaseVariations.swift @@ -8,11 +8,15 @@ public struct TabBarItem { public static var `default`: ComponentAppearanceVariation { var appearance = TabBarItemAppearance.base appearance.size = TabBarItemSize.`default` - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.surfaceDefaultClear) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [])) appearance.counterAppearance = Counter.xs.negative.appearance - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultPrimary) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textDefaultPrimary) + ])) appearance.indicatorAppearance = Indicator.m.negative.appearance - appearance.labelColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultPrimary) + appearance.labelColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textDefaultPrimary) + ])) appearance.labelTypography = TabBarItemTypography(oneSize: AdaptiveTypographyToken.bodyXxsBold.typography).asContainer return .init( @@ -33,11 +37,15 @@ public struct TabBarItemVariation { private extension TabBarItemAppearance { static var base: TabBarItemAppearance { var appearance = TabBarItemAppearance() - appearance.backgroundColor = ButtonColor(defaultColor: ColorToken.surfaceDefaultClear, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.surfaceDefaultClear) + appearance.backgroundColor = ButtonColor(StatefulColor(defaultValue: ColorToken.surfaceDefaultClear, values: [])) appearance.counterAppearance = Counter.xs.negative.appearance - appearance.iconColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultPrimary) + appearance.iconColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textDefaultPrimary) + ])) appearance.indicatorAppearance = Indicator.m.negative.appearance - appearance.labelColor = ButtonColor(defaultColor: ColorToken.textDefaultSecondary, highlightedColor: .clearColor, hoveredColor: .clearColor, selectedColor: ColorToken.textDefaultPrimary) + appearance.labelColor = ButtonColor(StatefulColor(defaultValue: ColorToken.textDefaultSecondary, values: [ + .init(states: [InteractiveState.selected], value: ColorToken.textDefaultPrimary) + ])) appearance.labelTypography = TabBarItemTypography(oneSize: AdaptiveTypographyToken.bodyXxsBold.typography).asContainer return appearance } diff --git a/Themes/PlasmaHomeDSTheme/TabBarItem/TabBarItem+Variations.swift b/Themes/PlasmaHomeDSTheme/TabBarItem/TabBarItem+Variations.swift index 833243b5e..003cfe2bf 100644 --- a/Themes/PlasmaHomeDSTheme/TabBarItem/TabBarItem+Variations.swift +++ b/Themes/PlasmaHomeDSTheme/TabBarItem/TabBarItem+Variations.swift @@ -19,11 +19,15 @@ public extension GeneralAppearanceVariation { var appearance = TextAreaAppearance.base appearance.size = TextAreaSize.xl - appearance.chipGroupAppearance = EmbeddedChipGroupDense.l.secondary.appearance + appearance.chipGroupAppearance = EmbeddedChipGroupDense.xl.secondary.appearance appearance.textTypography = TextAreaTypography(oneSize: AdaptiveTypographyToken.bodyLNormal.typography).asContainer return .init( @@ -167,6 +167,7 @@ private extension TextAreaAppearance { appearance.optionalTitleColor = ColorToken.textDefaultTertiary appearance.placeholderColor = ColorToken.textDefaultSecondary appearance.placeholderColorFocused = ColorToken.textDefaultTertiary + appearance.placeholderColorReadOnly = ColorToken.textDefaultSecondary appearance.requiredIndicatorColor = ColorToken.surfaceDefaultNegative appearance.scrollBarThumbColor = ColorToken.surfaceDefaultTransparentTertiary appearance.scrollBarTrackColor = ColorToken.surfaceDefaultTransparentPrimary diff --git a/Themes/SDDSservTheme/TextArea/TextArea+Variations.swift b/Themes/SDDSservTheme/TextArea/TextArea+Variations.swift index 5f19caf43..fcbff16d3 100644 --- a/Themes/SDDSservTheme/TextArea/TextArea+Variations.swift +++ b/Themes/SDDSservTheme/TextArea/TextArea+Variations.swift @@ -1853,7 +1853,7 @@ public extension GeneralAppearanceVariation { var appearance = TextAreaAppearance.base appearance.size = TextAreaClearSize.xl - appearance.chipGroupAppearance = EmbeddedChipGroupDense.l.secondary.appearance + appearance.chipGroupAppearance = EmbeddedChipGroupDense.xl.secondary.appearance appearance.textTypography = TextAreaClearTypography(oneSize: AdaptiveTypographyToken.bodyLNormal.typography).asContainer return .init( diff --git a/Themes/SDDSservTheme/TextAreaClear/TextAreaClear+Variations.swift b/Themes/SDDSservTheme/TextAreaClear/TextAreaClear+Variations.swift index a01d683a5..c89b3767a 100644 --- a/Themes/SDDSservTheme/TextAreaClear/TextAreaClear+Variations.swift +++ b/Themes/SDDSservTheme/TextAreaClear/TextAreaClear+Variations.swift @@ -1859,7 +1859,7 @@ public extension GeneralAppearanceVariation { var appearance = TextFieldAppearance.base appearance.size = TextFieldClearSize.xl - appearance.chipGroupAppearance = EmbeddedChipGroupDense.l.secondary.appearance + appearance.chipGroupAppearance = EmbeddedChipGroupDense.xl.secondary.appearance appearance.textAfterTypography = TextFieldClearTypography(oneSize: AdaptiveTypographyToken.bodyLNormal.typography).asContainer appearance.textBeforeTypography = TextFieldClearTypography(oneSize: AdaptiveTypographyToken.bodyLNormal.typography).asContainer appearance.textTypography = TextFieldClearTypography(oneSize: AdaptiveTypographyToken.bodyLNormal.typography).asContainer diff --git a/Themes/SDDSservTheme/TextFieldClear/TextFieldClear+Variations.swift b/Themes/SDDSservTheme/TextFieldClear/TextFieldClear+Variations.swift index a64b6fb8b..9526c8fd1 100644 --- a/Themes/SDDSservTheme/TextFieldClear/TextFieldClear+Variations.swift +++ b/Themes/SDDSservTheme/TextFieldClear/TextFieldClear+Variations.swift @@ -2226,7 +2226,7 @@ public extension GeneralAppearanceVariation