This commit is contained in:
Daniel Arantes Loverde
2026-06-03 14:31:11 -03:00
parent 69dd67b8a5
commit 74848192a0
28 changed files with 134 additions and 617 deletions

View File

@@ -39,6 +39,7 @@ struct PrimaryButtonLabel: View {
.frame(height: 56)
.background(AppColors.primary)
.clipShape(RoundedRectangle(cornerRadius: AppLayout.radiusLG, style: .continuous))
.labelStyle(.titleOnly)
}
}

View File

@@ -1,54 +1,9 @@
import SwiftUI
struct SnackbarOverlay: View {
#if os(Android)
let center: SnackbarCenter
@State var current: SnackbarMessage?
@State var observer: Any?
#else
@ObservedObject var center: SnackbarCenter
#endif
var body: some View {
#if os(Android)
VStack {
if let message = current {
HStack(spacing: 10) {
if let icon = message.iconSystemName, !icon.isEmpty {
Image(systemName: icon)
.font(.system(size: 16, weight: .semibold))
}
Text(message.title)
.font(AppTypography.heading3)
.multilineTextAlignment(.leading)
.lineLimit(3)
Spacer(minLength: 0)
}
.foregroundStyle(Color.white)
.padding(.top, 14)
.padding(.horizontal, 16)
.padding(.bottom, 16)
.frame(maxWidth: .infinity, alignment: .leading)
.background(message.style.backgroundColor)
.appContentShape(Rectangle())
.onTapGesture {
center.handleTap()
}
.transition(.move(edge: .top).combined(with: .opacity))
.zIndex(999)
}
Spacer()
}
.animation(.spring(response: 0.3, dampingFraction: 0.9), value: current?.id)
.allowsHitTesting(current != nil)
.onAppear {
current = center.current
attachObserverIfNeeded()
}
.onDisappear {
detachObserver()
}
#else
VStack {
if let message = center.current {
HStack(spacing: 10) {
@@ -79,27 +34,5 @@ struct SnackbarOverlay: View {
}
.animation(.spring(response: 0.3, dampingFraction: 0.9), value: center.current?.id)
.allowsHitTesting(center.current != nil)
#endif
}
#if os(Android)
private func attachObserverIfNeeded() {
guard observer == nil else { return }
observer = NotificationCenter.default.addObserver(
forName: .snackbarDidChange,
object: nil,
queue: nil
) { _ in
Task { @MainActor in
current = center.current
}
}
}
private func detachObserver() {
guard let observer else { return }
NotificationCenter.default.removeObserver(observer)
self.observer = nil
}
#endif
}

View File

@@ -95,21 +95,12 @@ struct FeaturedStoreCard: View {
private var storeIconPlaceholder: some View {
ZStack {
#if os(Android)
SwiftUI.Image("placeholder-product", bundle: .module)
.resizable()
.scaledToFill()
.opacity(0.7)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.clipped()
#else
Image("placeholder-product")
.resizable()
.scaledToFill()
.opacity(0.7)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.clipped()
#endif
Circle()
.fill(AppColors.surface.opacity(0.92))
@@ -129,6 +120,7 @@ struct FeaturedStoreCardModel: Identifiable {
let rating: Double
let reviews: String
let distance: String
let deliveryFee: Double?
let category: String
let promoText: String?
let isFavorite: Bool