|
|
@@ -10,9 +10,11 @@ struct WidgetsRootView: View {
|
|
|
@Binding var selectedAppID: UUID?
|
|
|
@Binding var widgetLibraryIDsData: String
|
|
|
|
|
|
+ @ObservedObject private var premiumStore = PremiumStore.shared
|
|
|
@State private var query = ""
|
|
|
@State private var toastMessage: String?
|
|
|
@State private var toastTask: Task<Void, Never>?
|
|
|
+ @State private var showingPremiumScreen = false
|
|
|
|
|
|
private var filteredApps: [LauncherApp] {
|
|
|
let q = query.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
|
@@ -51,6 +53,11 @@ struct WidgetsRootView: View {
|
|
|
}
|
|
|
}
|
|
|
.animation(.spring(response: 0.28, dampingFraction: 0.9), value: toastMessage != nil)
|
|
|
+ .sheet(isPresented: $showingPremiumScreen) {
|
|
|
+ PremiumFeaturesView()
|
|
|
+ .environmentObject(premiumStore)
|
|
|
+ .frame(minWidth: 560, minHeight: 690)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private var sidebar: some View {
|
|
|
@@ -121,7 +128,8 @@ struct WidgetsRootView: View {
|
|
|
WidgetPreviewAddCard(
|
|
|
app: selectedApp,
|
|
|
variant: variant,
|
|
|
- onAdd: { addToDesktop(app: selectedApp, variant: variant) }
|
|
|
+ isPremiumUnlocked: premiumStore.isPremiumUnlocked,
|
|
|
+ onAdd: { handleAddWidgetTap(app: selectedApp, variant: variant) }
|
|
|
)
|
|
|
}
|
|
|
Spacer(minLength: 0)
|
|
|
@@ -195,6 +203,14 @@ struct WidgetsRootView: View {
|
|
|
showAddedToast(for: app)
|
|
|
}
|
|
|
|
|
|
+ private func handleAddWidgetTap(app: LauncherApp, variant: WidgetVariant) {
|
|
|
+ guard premiumStore.isPremiumUnlocked else {
|
|
|
+ showingPremiumScreen = true
|
|
|
+ return
|
|
|
+ }
|
|
|
+ addToDesktop(app: app, variant: variant)
|
|
|
+ }
|
|
|
+
|
|
|
private func showAddedToast(for app: LauncherApp) {
|
|
|
toastTask?.cancel()
|
|
|
toastMessage = "The \"\(app.name)\" widget has been added to the desktop."
|
|
|
@@ -248,6 +264,7 @@ private struct WidgetSidebarRow: View {
|
|
|
private struct WidgetPreviewAddCard: View {
|
|
|
let app: LauncherApp
|
|
|
let variant: WidgetVariant
|
|
|
+ let isPremiumUnlocked: Bool
|
|
|
let onAdd: () -> Void
|
|
|
|
|
|
@State private var hovering = false
|
|
|
@@ -258,9 +275,12 @@ private struct WidgetPreviewAddCard: View {
|
|
|
Button(action: onAdd) {
|
|
|
Image(systemName: "plus")
|
|
|
.font(.system(size: 12, weight: .bold))
|
|
|
- .foregroundStyle(.black.opacity(0.85))
|
|
|
+ .foregroundStyle(isPremiumUnlocked ? .black.opacity(0.85) : .white.opacity(0.82))
|
|
|
.frame(width: 26, height: 26)
|
|
|
- .background(Circle().fill(Color.green.opacity(0.95)))
|
|
|
+ .background(
|
|
|
+ Circle()
|
|
|
+ .fill(isPremiumUnlocked ? Color.green.opacity(0.95) : Color.gray.opacity(0.7))
|
|
|
+ )
|
|
|
.shadow(color: .black.opacity(0.28), radius: 10, x: 0, y: 6)
|
|
|
}
|
|
|
.buttonStyle(.plain)
|