diff --git a/README.md b/README.md index af89bf5..8f99d78 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,7 @@ func recapScreenStartIndex(_ startIndex: RecapScreenStartIndex) -> some View func recapScreenTitleStyle(_ style: some ShapeStyle) -> some View func recapScreenDismissButtonStyle(_ style: some ShapeStyle) -> some View func recapScreenDismissButtonStyle(_ backgroundStyle: some ShapeStyle, _ foregroundStyle: some ShapeStyle) -> some View +func recapScreenDismissButtonTitle(_ title: LocalizedStringResource) -> some View func recapScreenIconFillMode(_ style: IconFillMode) -> some View func recapScreenIconAlignment(_ alignment: VerticalAlignment) -> some View func recapScreenPageIndicatorColors(selected: Color, deselected: Color) -> some View diff --git a/Sources/Recap/Public/RecapScreen.swift b/Sources/Recap/Public/RecapScreen.swift index 6d4235b..2023344 100644 --- a/Sources/Recap/Public/RecapScreen.swift +++ b/Sources/Recap/Public/RecapScreen.swift @@ -27,6 +27,7 @@ public struct RecapScreen: View { @Environment(\.recapScreenSelectedPageIndicatorColor) private var selectedPageIndicatorColor @Environment(\.recapScreenDeselectedPageIndicatorColor) private var deselectedPageIndicatorColor @Environment(\.recapScreenDismissButtonStyle) private var dismissButtonStyle + @Environment(\.recapScreenDismissButtonTitle) private var dismissButtonTitle @Environment(\.recapScreenDismissAction) private var dismissAction @State private var originalSelectedPageIndicatorColor: UIColor? @@ -69,7 +70,7 @@ public struct RecapScreen: View { HStack { Spacer(minLength: 0.0) - Text("RECAP.SCREEN.DISMISS.BUTTON.TITLE", bundle: .module) + Text(dismissButtonTitle) .font(.system(.title3, weight: .bold)) .padding(8.0) .padding(.vertical, 4.0) diff --git a/Sources/Recap/Public/View+Recap.swift b/Sources/Recap/Public/View+Recap.swift index 806881e..b80a261 100644 --- a/Sources/Recap/Public/View+Recap.swift +++ b/Sources/Recap/Public/View+Recap.swift @@ -33,6 +33,11 @@ public extension View { ) } + /// Configures a custom localized title for the `RecapScreen` dismiss button. + func recapScreenDismissButtonTitle(_ title: LocalizedStringResource) -> some View { + self.environment(\.recapScreenDismissButtonTitle, title) + } + /// Configures an `IconFillMode` for the icons displayed on the `RecapScreen`. func recapScreenIconFillMode(_ style: IconFillMode) -> some View { self.environment(\.recapScreenIconFillMode, style) @@ -125,6 +130,20 @@ internal extension EnvironmentValues { ) } + // MARK: DismissButtonTitle + + var recapScreenDismissButtonTitle: LocalizedStringResource { + get { self[DismissButtonLocalizedKeyTitle.self] } + set { self[DismissButtonLocalizedKeyTitle.self] = newValue } + } + + private struct DismissButtonLocalizedKeyTitle: @preconcurrency EnvironmentKey { + @MainActor static let defaultValue = LocalizedStringResource( + "RECAP.SCREEN.DISMISS.BUTTON.TITLE", + bundle: .atURL(Bundle.module.bundleURL) + ) + } + // MARK: DismissAction var recapScreenDismissAction: RecapScreenDismissAction? {