Skip to content

Commit 032555b

Browse files
committed
fix dismiss button
1 parent f10106c commit 032555b

9 files changed

Lines changed: 57 additions & 84 deletions

File tree

Sample/Sample/ContentView.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,19 +116,19 @@ struct ContentView: View {
116116
.navigationTitle("OnboardingUI")
117117
.formStyle(.grouped)
118118
}
119-
.sheet(isPresented: $appVersionManager.isTheFirstLaunch) {
119+
.sheet(isPresented: $appVersionManager.isTheFirstActivation) {
120120
WelcomeOnboardingSheetView(action: {
121-
appVersionManager.isTheFirstLaunch = false
121+
appVersionManager.isTheFirstActivation = false
122122
})
123123
}
124124
.sheet(isPresented: $appVersionManager.isMajorVersionUpdated) {
125125
NewFeatureOnboardingSheetView(action: {
126126
appVersionManager.isMajorVersionUpdated = false
127127
})
128128
}
129-
.sheet(isPresented: $appVersionManager.isMinorVersionUpdated) {
129+
.sheet(isPresented: $appVersionManager.isMinorOrPatchVersionUpdated) {
130130
NewFeatureOnboardingSheetView(action: {
131-
appVersionManager.isMinorVersionUpdated = false
131+
appVersionManager.isMinorOrPatchVersionUpdated = false
132132
})
133133
}
134134
.onboardingSheet(isPresented: $isOpenSheet, WelcomeOnboarding())

Sources/OnboardingUI/Processing/Onboarding.swift

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -175,48 +175,3 @@ public struct Feature: Identifiable, Sendable {
175175
.init(title: self.title, image: self.image, message: Text(key, tableName: tableName, bundle: bundle, comment: comment))
176176
}
177177
}
178-
/// Result builder that allows you to freely build Feature structures
179-
@available(iOS 17.0,macOS 14.0,tvOS 17.0,visionOS 1.0,*)
180-
/// A result builder to construct onboarding features.
181-
@resultBuilder
182-
public struct FeatureBuilder {
183-
/// Required in resultBuilder
184-
/// Combines multiple Features into an array.
185-
/// - Parameter parts: A variadic list of Features.
186-
/// - Returns: An array of Features.
187-
public static func buildBlock(_ parts: Feature...) -> Array<Feature> {
188-
parts
189-
}
190-
/// Enable if
191-
/// Handles optional Feature arrays.
192-
/// - Parameter parts: An optional array of Features.
193-
/// - Returns: The first Feature or a default Feature.
194-
public static func buildOptional(_ parts: [Feature]?) -> Feature {
195-
parts?.first ?? Feature()
196-
}
197-
/// Enable if-else (first branch)
198-
/// - Parameter parts: An array of Features.
199-
/// - Returns: The first Feature or a default Feature.
200-
public static func buildEither(first parts: [Feature]) -> Feature {
201-
parts.first ?? Feature()
202-
}
203-
/// Enable if-else (second branch)
204-
/// - Parameter parts: An array of Features.
205-
/// - Returns: The first Feature or a default Feature.
206-
public static func buildEither(second parts: [Feature]) -> Feature {
207-
parts.first ?? Feature()
208-
}
209-
/// Enable for-in
210-
/// - Parameter parts: An array of Feature arrays.
211-
/// - Returns: The first Feature from the first array or a default Feature.
212-
public static func buildArray(_ parts: [[Feature]]) -> Feature {
213-
parts.first?.first ?? Feature()
214-
}
215-
/// Enable #if
216-
/// - Parameter parts: An array of Features.
217-
/// - Returns: The array of Features.
218-
public static func buildLimitedAvailability(_ parts: [Feature]) -> Array<Feature> {
219-
parts
220-
}
221-
}
222-

Sources/OnboardingUI/UI/Style/OnboardingViewStyle.swift

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,20 @@ public struct OnboardingViewStyleConfiguration: Sendable {
4545

4646
var footer: Footer
4747

48-
var dismissButton: DismissButton
48+
var dismissLabel: DismissLabel
4949

5050
init(
5151
dynamicTypeSize: DynamicTypeSize,
5252
title: Title,
5353
content: Content,
5454
footer: Footer ,
55-
dismissButton: DismissButton
55+
dismissLabel: DismissLabel
5656
) {
5757
self.dynamicTypeSize = dynamicTypeSize
5858
self.title = title
5959
self.content = content
6060
self.footer = footer
61-
self.dismissButton = dismissButton
61+
self.dismissLabel = dismissLabel
6262
}
6363

6464
struct Title: View, Sendable {
@@ -157,7 +157,7 @@ public struct OnboardingViewStyleConfiguration: Sendable {
157157
}
158158
}
159159

160-
@preconcurrency public struct DismissButton: View, Sendable {
160+
@preconcurrency public struct DismissLabel: View, Sendable {
161161
@Environment(\.dismiss) var dismiss
162162

163163
var text: Text
@@ -167,21 +167,7 @@ public struct OnboardingViewStyleConfiguration: Sendable {
167167
}
168168

169169
public var body: some View {
170-
Button {
171-
dismiss()
172-
} label: {
173-
text
174-
}
175-
}
176-
177-
public func callAsFunction<V: View>(
178-
@ViewBuilder content: (Text) -> V
179-
) -> some View {
180-
Button {
181-
dismiss()
182-
} label: {
183-
content(text)
184-
}
170+
text
185171
}
186172
}
187173
}

Sources/OnboardingUI/UI/Style/OnboardingViewStyle/BasicOnboardingViewStyle.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,13 @@ public struct BasicOnboardingViewStyle: OnboardingViewStyle {
8787
if configuration.dynamicTypeSize > .xxxLarge {
8888
configuration.footer
8989

90-
configuration.dismissButton { text in
91-
text
90+
DismissButton {
91+
configuration.dismissLabel
9292
.frame(maxWidth: .infinity)
9393
.padding(.vertical, 10)
9494
}
9595
.buttonStyle(.borderedProminent)
96+
.padding(.horizontal, 40)
9697
}
9798
}
9899
.frame(maxWidth: .infinity, maxHeight: .infinity)
@@ -104,8 +105,8 @@ public struct BasicOnboardingViewStyle: OnboardingViewStyle {
104105
VStack(alignment: .center, spacing: 25) {
105106
configuration.footer
106107

107-
configuration.dismissButton { text in
108-
text
108+
DismissButton {
109+
configuration.dismissLabel
109110
.frame(maxWidth: .infinity)
110111
.padding(.vertical, 10)
111112
}

Sources/OnboardingUI/UI/Style/OnboardingViewStyle/ClassicOnboardingViewStyle.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ public struct ClassicOnboardingViewStyle: OnboardingViewStyle {
7171
if configuration.dynamicTypeSize > .xxxLarge {
7272
configuration.footer
7373

74-
configuration.dismissButton
74+
DismissButton {
75+
configuration.dismissLabel
76+
}
7577
.buttonStyle(ColorButtonStyle())
7678
#if os(iOS)
7779
.padding(
@@ -106,7 +108,9 @@ public struct ClassicOnboardingViewStyle: OnboardingViewStyle {
106108
#endif
107109
#endif
108110

109-
configuration.dismissButton
111+
DismissButton {
112+
configuration.dismissLabel
113+
}
110114
.buttonStyle(ColorButtonStyle())
111115
#if os(iOS)
112116
.padding(

Sources/OnboardingUI/UI/Style/OnboardingViewStyle/ColoredGlassOnboardingViewStyle.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,13 @@ public struct ColoredGlassOnboardingViewStyle: OnboardingViewStyle {
8787
if configuration.dynamicTypeSize > .xxxLarge {
8888
configuration.footer
8989

90-
configuration.dismissButton { text in
91-
text
90+
DismissButton {
91+
configuration.dismissLabel
9292
.frame(maxWidth: .infinity)
9393
.padding(.vertical, 10)
9494
}
9595
.buttonStyle(.glassProminent)
96+
.padding(.horizontal, 40)
9697
}
9798
}
9899
.frame(maxWidth: .infinity, maxHeight: .infinity)
@@ -104,8 +105,8 @@ public struct ColoredGlassOnboardingViewStyle: OnboardingViewStyle {
104105
VStack(alignment: .center, spacing: 25) {
105106
configuration.footer
106107

107-
configuration.dismissButton { text in
108-
text
108+
DismissButton {
109+
configuration.dismissLabel
109110
.frame(maxWidth: .infinity)
110111
.padding(.vertical, 10)
111112
}

Sources/OnboardingUI/UI/Style/OnboardingViewStyle/GlassOnboardingViewStyle.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,13 @@ public struct GlassOnboardingViewStyle: OnboardingViewStyle {
8686

8787
if configuration.dynamicTypeSize > .xxxLarge {
8888
configuration.footer
89-
90-
configuration.dismissButton { text in
91-
text
89+
DismissButton {
90+
configuration.dismissLabel
9291
.frame(maxWidth: .infinity)
9392
.padding(.vertical, 10)
9493
}
9594
.buttonStyle(.glass)
95+
.padding(.horizontal, 40)
9696
}
9797
}
9898
.frame(maxWidth: .infinity, maxHeight: .infinity)
@@ -104,8 +104,8 @@ public struct GlassOnboardingViewStyle: OnboardingViewStyle {
104104
VStack(alignment: .center, spacing: 25) {
105105
configuration.footer
106106

107-
configuration.dismissButton { text in
108-
text
107+
DismissButton {
108+
configuration.dismissLabel
109109
.frame(maxWidth: .infinity)
110110
.padding(.vertical, 10)
111111
}

Sources/OnboardingUI/UI/View/OnboardingView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public struct OnboardingView<O: Onboarding>: View {
3434
link
3535
}
3636
},
37-
dismissButton: .init(text: Text("Continue", bundle: .module))
37+
dismissLabel: .init(text: Text("Continue", bundle: .module))
3838
)
3939
)
4040
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//
2+
// DismissButton.swift
3+
// OnboardingUI
4+
//
5+
// Created by 茅根 啓介 on 2025/07/30.
6+
//
7+
8+
import SwiftUI
9+
10+
public struct DismissButton<V: View>: View {
11+
@Environment(\.dismiss) private var dismiss
12+
13+
var label: V
14+
15+
init(@ViewBuilder label: () -> V) {
16+
self.label = label()
17+
}
18+
19+
public var body: some View {
20+
Button {
21+
dismiss()
22+
} label: {
23+
label
24+
}
25+
}
26+
}

0 commit comments

Comments
 (0)