mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Move compound-ios package into the project.
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
//
|
||||
// Copyright 2024 New Vector Ltd
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
/// The button component for sending messages and media.
|
||||
public struct SendButton: View {
|
||||
@Environment(\.isEnabled) private var isEnabled
|
||||
@Environment(\.colorScheme) private var colorScheme
|
||||
|
||||
/// The action to perform when the user triggers the button.
|
||||
public let action: () -> Void
|
||||
|
||||
private var iconColor: Color {
|
||||
guard isEnabled else { return .compound.iconQuaternary }
|
||||
return colorScheme == .light ? .compound.iconOnSolidPrimary : .compound.iconPrimary
|
||||
}
|
||||
|
||||
private var gradient: Gradient { isEnabled ? .compound.action : .init(colors: [.clear]) }
|
||||
|
||||
/// Creates a send button that performs the provided action.
|
||||
public init(action: @escaping () -> Void) {
|
||||
self.action = action
|
||||
}
|
||||
|
||||
public var body: some View {
|
||||
Button(action: action) {
|
||||
CompoundIcon(\.sendSolid, size: .medium, relativeTo: .compound.headingLG)
|
||||
.foregroundStyle(iconColor)
|
||||
.scaledPadding(6, relativeTo: .compound.headingLG)
|
||||
.background { buttonShape }
|
||||
.compositingGroup()
|
||||
}
|
||||
}
|
||||
|
||||
var buttonShape: some View {
|
||||
Circle()
|
||||
.fill(LinearGradient(gradient: gradient, startPoint: .top, endPoint: .bottom))
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Previews
|
||||
|
||||
public struct SendButton_Previews: PreviewProvider, TestablePreview {
|
||||
public static var previews: some View {
|
||||
VStack(spacing: 0) {
|
||||
states
|
||||
.padding(20)
|
||||
.background(.compound.bgCanvasDefault)
|
||||
states
|
||||
.padding(20)
|
||||
.background(.compound.bgCanvasDefault)
|
||||
.environment(\.colorScheme, .dark)
|
||||
}
|
||||
.cornerRadius(20)
|
||||
}
|
||||
|
||||
public static var states: some View {
|
||||
HStack(spacing: 30) {
|
||||
SendButton { }
|
||||
.disabled(true)
|
||||
SendButton { }
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user