From d6e6bb86a1e7b2737eeca7c9023247c63969e614 Mon Sep 17 00:00:00 2001 From: Katherine Bertelsen Date: Tue, 30 Sep 2025 13:16:24 -0500 Subject: [PATCH 1/6] Move Appearance wholesale --- .../Modifiers/BitwardenMenuFooterTextModifier.swift | 0 .../Appearance/Modifiers/ImageStyle.swift | 0 .../Modifiers/NavigationBarViewModifier.swift | 0 .../Appearance/Modifiers/ReviewModifier.swift | 0 .../Appearance/Modifiers/ScaledFrame.swift | 0 .../Appearance/Modifiers/ScrollViewModifier.swift | 0 .../Modifiers/SmoothTransitionModifier.swift | 0 .../Modifiers/TextFieldConfiguration.swift | 0 .../Application/Appearance/StyleGuideFont.swift | 0 .../Appearance/StyleGuideFontTests.swift | 2 +- .../Appearance/Styles/AccessoryButtonStyle.swift | 0 .../Styles/BitwardenBorderlessButtonStyle.swift | 0 .../Appearance/Styles/BitwardenToggleStyle.swift | 0 .../Appearance/Styles/ButtonStyleSize.swift | 0 .../Appearance/Styles/ButtonStylesTests.swift | 2 +- .../Appearance/Styles/CircleButtonStyle.swift | 0 .../Appearance/Styles/CircleMenuStyle.swift | 0 .../Styles/FieldLabelIconButtonStyle.swift | 0 .../Appearance/Styles/InlineButtonStyle.swift | 0 .../Appearance/Styles/PrimaryButtonStyle.swift | 0 .../Appearance/Styles/PrimaryMenuStyle.swift | 0 .../Appearance/Styles/SecondaryButtonStyle.swift | 0 .../Appearance/Styles/ToolbarButtonStyle.swift | 0 .../test_snapshot_buttonStyles.1.png | Bin .../UI/Platform/Application/Appearance/UI.swift | 10 ---------- .../Platform/Application/Appearance/UITests.swift | 2 +- .../test_snapshot_styleGuideFont.1.png | Bin .../test_snapshot_styleGuideFont.2.png | Bin .../test_snapshot_styleGuideFont.3.png | Bin .../test_snapshot_styleGuideFont.4.png | Bin .../test_snapshot_styleGuideFont_largeText.1.png | Bin .../test_snapshot_styleGuideFont_largeText.2.png | Bin .../test_snapshot_styleGuideFont_largeText.3.png | Bin .../test_snapshot_styleGuideFont_largeText.4.png | Bin .../UI/Platform/Application/Extensions/Label.swift | 0 35 files changed, 3 insertions(+), 13 deletions(-) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Modifiers/BitwardenMenuFooterTextModifier.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Modifiers/ImageStyle.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Modifiers/NavigationBarViewModifier.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Modifiers/ReviewModifier.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Modifiers/ScaledFrame.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Modifiers/ScrollViewModifier.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Modifiers/SmoothTransitionModifier.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Modifiers/TextFieldConfiguration.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/StyleGuideFont.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/StyleGuideFontTests.swift (95%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/AccessoryButtonStyle.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/BitwardenBorderlessButtonStyle.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/BitwardenToggleStyle.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/ButtonStyleSize.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/ButtonStylesTests.swift (98%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/CircleButtonStyle.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/CircleMenuStyle.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/FieldLabelIconButtonStyle.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/InlineButtonStyle.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/PrimaryButtonStyle.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/PrimaryMenuStyle.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/SecondaryButtonStyle.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/ToolbarButtonStyle.swift (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/Styles/__Snapshots__/ButtonStylesTests/test_snapshot_buttonStyles.1.png (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/UI.swift (92%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/UITests.swift (96%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.1.png (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.2.png (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.3.png (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.4.png (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.1.png (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.2.png (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.3.png (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.4.png (100%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Extensions/Label.swift (100%) diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Modifiers/BitwardenMenuFooterTextModifier.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/BitwardenMenuFooterTextModifier.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Modifiers/BitwardenMenuFooterTextModifier.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Modifiers/BitwardenMenuFooterTextModifier.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Modifiers/ImageStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ImageStyle.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Modifiers/ImageStyle.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ImageStyle.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Modifiers/NavigationBarViewModifier.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/NavigationBarViewModifier.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Modifiers/NavigationBarViewModifier.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Modifiers/NavigationBarViewModifier.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Modifiers/ReviewModifier.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ReviewModifier.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Modifiers/ReviewModifier.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ReviewModifier.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Modifiers/ScaledFrame.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ScaledFrame.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Modifiers/ScaledFrame.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ScaledFrame.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Modifiers/ScrollViewModifier.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ScrollViewModifier.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Modifiers/ScrollViewModifier.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ScrollViewModifier.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Modifiers/SmoothTransitionModifier.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/SmoothTransitionModifier.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Modifiers/SmoothTransitionModifier.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Modifiers/SmoothTransitionModifier.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Modifiers/TextFieldConfiguration.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/TextFieldConfiguration.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Modifiers/TextFieldConfiguration.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Modifiers/TextFieldConfiguration.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/StyleGuideFont.swift b/BitwardenKit/UI/Platform/Application/Appearance/StyleGuideFont.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/StyleGuideFont.swift rename to BitwardenKit/UI/Platform/Application/Appearance/StyleGuideFont.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/StyleGuideFontTests.swift b/BitwardenKit/UI/Platform/Application/Appearance/StyleGuideFontTests.swift similarity index 95% rename from BitwardenShared/UI/Platform/Application/Appearance/StyleGuideFontTests.swift rename to BitwardenKit/UI/Platform/Application/Appearance/StyleGuideFontTests.swift index 468a36e9e8..cbfdb65c48 100644 --- a/BitwardenShared/UI/Platform/Application/Appearance/StyleGuideFontTests.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/StyleGuideFontTests.swift @@ -1,7 +1,7 @@ import SnapshotTesting import XCTest -@testable import BitwardenShared +@testable import BitwardenKit final class StyleGuideFontTests: BitwardenTestCase { // MARK: Tests diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/AccessoryButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/AccessoryButtonStyle.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/AccessoryButtonStyle.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/AccessoryButtonStyle.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/BitwardenBorderlessButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/BitwardenBorderlessButtonStyle.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/BitwardenBorderlessButtonStyle.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/BitwardenBorderlessButtonStyle.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/BitwardenToggleStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/BitwardenToggleStyle.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/BitwardenToggleStyle.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/BitwardenToggleStyle.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/ButtonStyleSize.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/ButtonStyleSize.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/ButtonStyleSize.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/ButtonStyleSize.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/ButtonStylesTests.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/ButtonStylesTests.swift similarity index 98% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/ButtonStylesTests.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/ButtonStylesTests.swift index 2408dbe46a..07a604df52 100644 --- a/BitwardenShared/UI/Platform/Application/Appearance/Styles/ButtonStylesTests.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/ButtonStylesTests.swift @@ -3,7 +3,7 @@ import SnapshotTesting import SwiftUI import XCTest -@testable import BitwardenShared +@testable import BitwardenKit final class ButtonStylesTests: BitwardenTestCase { // MARK: Types diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/CircleButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/CircleButtonStyle.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/CircleButtonStyle.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/CircleButtonStyle.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/CircleMenuStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/CircleMenuStyle.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/CircleMenuStyle.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/CircleMenuStyle.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/FieldLabelIconButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/FieldLabelIconButtonStyle.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/FieldLabelIconButtonStyle.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/FieldLabelIconButtonStyle.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/InlineButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/InlineButtonStyle.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/InlineButtonStyle.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/InlineButtonStyle.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/PrimaryButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/PrimaryButtonStyle.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/PrimaryButtonStyle.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/PrimaryButtonStyle.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/PrimaryMenuStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/PrimaryMenuStyle.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/PrimaryMenuStyle.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/PrimaryMenuStyle.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/SecondaryButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/SecondaryButtonStyle.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/SecondaryButtonStyle.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/SecondaryButtonStyle.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/ToolbarButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/ToolbarButtonStyle.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/ToolbarButtonStyle.swift rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/ToolbarButtonStyle.swift diff --git a/BitwardenShared/UI/Platform/Application/Appearance/Styles/__Snapshots__/ButtonStylesTests/test_snapshot_buttonStyles.1.png b/BitwardenKit/UI/Platform/Application/Appearance/Styles/__Snapshots__/ButtonStylesTests/test_snapshot_buttonStyles.1.png similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/Styles/__Snapshots__/ButtonStylesTests/test_snapshot_buttonStyles.1.png rename to BitwardenKit/UI/Platform/Application/Appearance/Styles/__Snapshots__/ButtonStylesTests/test_snapshot_buttonStyles.1.png diff --git a/BitwardenShared/UI/Platform/Application/Appearance/UI.swift b/BitwardenKit/UI/Platform/Application/Appearance/UI.swift similarity index 92% rename from BitwardenShared/UI/Platform/Application/Appearance/UI.swift rename to BitwardenKit/UI/Platform/Application/Appearance/UI.swift index cc2009abca..cd4a2f857e 100644 --- a/BitwardenShared/UI/Platform/Application/Appearance/UI.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/UI.swift @@ -140,16 +140,6 @@ public enum UI { UITextView.appearance().textContainerInset = .zero UITextView.appearance().textContainer.lineFragmentPadding = 0 } - - /// Override SwiftGen's lookup function in order to determine the language manually. - public static func localizationFunction(key: String, table: String, fallbackValue: String) -> String { - if let languageCode = initialLanguageCode, - let path = Bundle(for: AppProcessor.self).path(forResource: languageCode, ofType: "lproj"), - let bundle = Bundle(path: path) { - return bundle.localizedString(forKey: key, value: fallbackValue, table: table) - } - return Bundle.main.localizedString(forKey: key, value: fallbackValue, table: table) - } } // swiftlint:enable type_name diff --git a/BitwardenShared/UI/Platform/Application/Appearance/UITests.swift b/BitwardenKit/UI/Platform/Application/Appearance/UITests.swift similarity index 96% rename from BitwardenShared/UI/Platform/Application/Appearance/UITests.swift rename to BitwardenKit/UI/Platform/Application/Appearance/UITests.swift index 734d052963..9ad02c68cc 100644 --- a/BitwardenShared/UI/Platform/Application/Appearance/UITests.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/UITests.swift @@ -1,7 +1,7 @@ import Foundation import XCTest -@testable import BitwardenShared +@testable import BitwardenKit // MARK: - UITests diff --git a/BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.1.png b/BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.1.png similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.1.png rename to BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.1.png diff --git a/BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.2.png b/BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.2.png similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.2.png rename to BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.2.png diff --git a/BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.3.png b/BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.3.png similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.3.png rename to BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.3.png diff --git a/BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.4.png b/BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.4.png similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.4.png rename to BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont.4.png diff --git a/BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.1.png b/BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.1.png similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.1.png rename to BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.1.png diff --git a/BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.2.png b/BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.2.png similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.2.png rename to BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.2.png diff --git a/BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.3.png b/BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.3.png similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.3.png rename to BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.3.png diff --git a/BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.4.png b/BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.4.png similarity index 100% rename from BitwardenShared/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.4.png rename to BitwardenKit/UI/Platform/Application/Appearance/__Snapshots__/StyleGuideFontTests/test_snapshot_styleGuideFont_largeText.4.png diff --git a/BitwardenShared/UI/Platform/Application/Extensions/Label.swift b/BitwardenKit/UI/Platform/Application/Extensions/Label.swift similarity index 100% rename from BitwardenShared/UI/Platform/Application/Extensions/Label.swift rename to BitwardenKit/UI/Platform/Application/Extensions/Label.swift From d6803b0f505a4b46c0df681f93b107f9f9b4a966 Mon Sep 17 00:00:00 2001 From: Katherine Bertelsen Date: Tue, 30 Sep 2025 16:11:50 -0500 Subject: [PATCH 2/6] Get to build with PM --- Bitwarden/Application/SceneDelegate.swift | 1 + .../BitwardenMenuFooterTextModifier.swift | 6 +++--- .../Appearance/Modifiers/ImageStyle.swift | 8 ++++---- .../Modifiers/NavigationBarViewModifier.swift | 17 +++++++++++++++-- .../Appearance/Modifiers/ReviewModifier.swift | 2 +- .../Appearance/Modifiers/ScaledFrame.swift | 4 ++-- .../Modifiers/ScrollViewModifier.swift | 2 +- .../Modifiers/SmoothTransitionModifier.swift | 2 +- .../Modifiers/TextFieldConfiguration.swift | 8 ++++---- .../Application/Appearance/StyleGuideFont.swift | 10 +++++----- .../Styles/AccessoryButtonStyle.swift | 6 +++--- .../Styles/BitwardenBorderlessButtonStyle.swift | 6 +++--- .../Styles/BitwardenToggleStyle.swift | 6 +++--- .../Appearance/Styles/ButtonStyleSize.swift | 2 +- .../Appearance/Styles/ButtonStylesTests.swift | 3 +-- .../Appearance/Styles/CircleButtonStyle.swift | 13 +++++++++++-- .../Appearance/Styles/CircleMenuStyle.swift | 12 ++++++++++-- .../Styles/FieldLabelIconButtonStyle.swift | 6 +++--- .../Appearance/Styles/InlineButtonStyle.swift | 8 ++++++-- .../Appearance/Styles/PrimaryButtonStyle.swift | 6 +++--- .../Appearance/Styles/PrimaryMenuStyle.swift | 6 +++--- .../Styles/SecondaryButtonStyle.swift | 6 +++--- .../Appearance/Styles/ToolbarButtonStyle.swift | 6 +++--- .../Platform/Application/Extensions/Label.swift | 2 +- .../LoginWithDeviceProcessor.swift | 1 + .../SingleSignOn/SingleSignOnProcessor.swift | 1 + .../UI/Platform/Application/AppProcessor.swift | 1 + .../Extensions/UIViewController.swift | 1 + .../Extensions/View+Background.swift | 1 + .../Alert/Alert/AlertPresentable.swift | 1 + .../Application/Utilities/Navigator.swift | 1 + .../Application/Utilities/StackNavigator.swift | 1 + .../Application/Views/BitwardenStepper.swift | 1 + .../Application/Views/BitwardenUITextView.swift | 1 + .../Application/Views/FloatingActionMenu.swift | 1 + .../Views/GuidedTourView/GuidedTourView.swift | 1 + .../Views/IllustratedMessageView.swift | 1 + .../Views/LoadingOverlayDisplayHelper.swift | 1 + .../Application/Views/ToastDisplayHelper.swift | 1 + .../UI/Vault/Vault/VaultCoordinator.swift | 1 + .../UI/Vault/Vault/VaultCoordinatorTests.swift | 1 + .../AuthenticatorKeyCapture/ScanCodeView.swift | 1 + .../Support/BitwardenTestCase.swift | 1 + 43 files changed, 110 insertions(+), 57 deletions(-) diff --git a/Bitwarden/Application/SceneDelegate.swift b/Bitwarden/Application/SceneDelegate.swift index 1134345ce1..d5bae5508c 100644 --- a/Bitwarden/Application/SceneDelegate.swift +++ b/Bitwarden/Application/SceneDelegate.swift @@ -1,4 +1,5 @@ import AuthenticationServices +import BitwardenKit import BitwardenShared import SwiftUI import UIKit diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/BitwardenMenuFooterTextModifier.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/BitwardenMenuFooterTextModifier.swift index 8c7621d41f..c47a40e1e3 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/BitwardenMenuFooterTextModifier.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/BitwardenMenuFooterTextModifier.swift @@ -5,7 +5,7 @@ import SwiftUI /// A modifier for the footer on BitwardenMenu /// -struct BitwardenMenuFooterTextModifier: ViewModifier { +public struct BitwardenMenuFooterTextModifier: ViewModifier { /// The bottom padding of the modifier. var topPadding: CGFloat @@ -14,7 +14,7 @@ struct BitwardenMenuFooterTextModifier: ViewModifier { // MARK: View - func body(content: Content) -> some View { + public func body(content: Content) -> some View { content .styleGuide(.footnote, includeLinePadding: false, includeLineSpacing: false) .foregroundColor(SharedAsset.Colors.textSecondary.swiftUIColor) @@ -24,7 +24,7 @@ struct BitwardenMenuFooterTextModifier: ViewModifier { } } -extension View { +public extension View { func bitwardenMenuFooterText(topPadding: CGFloat = 0, bottomPadding: CGFloat = 12) -> some View { modifier(BitwardenMenuFooterTextModifier(topPadding: topPadding, bottomPadding: bottomPadding)) } diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ImageStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ImageStyle.swift index 29a2f6f891..93788d1c88 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ImageStyle.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ImageStyle.swift @@ -7,7 +7,7 @@ import SwiftUI /// A struct containing configuration properties for applying common properties to images across /// the app. /// -struct ImageStyle { +public struct ImageStyle { // MARK: Properties /// The foreground color of the image. @@ -23,7 +23,7 @@ struct ImageStyle { let height: CGFloat } -extension ImageStyle { +public extension ImageStyle { /// An `ImageStyle` for applying common properties to a circular accessory icon. /// /// - Size: 16x16pt @@ -134,7 +134,7 @@ extension ImageStyle { // MARK: - Image -extension Image { +public extension Image { /// A view extension that applies common image properties based on a style. /// /// - Parameter style: The configuration used to set common image properties. @@ -149,7 +149,7 @@ extension Image { // MARK: - View -extension View { +public extension View { /// A view extension that applies common image properties based on a style. /// /// Note: Since this is an extension on `View`, this can't mark the image as resizable, so that diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/NavigationBarViewModifier.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/NavigationBarViewModifier.swift index c76b2d23c7..049a29b4d6 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/NavigationBarViewModifier.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/NavigationBarViewModifier.swift @@ -4,7 +4,7 @@ import SwiftUI /// A modifier that customizes a navigation bar's title and title display mode. /// -struct NavigationBarViewModifier: ViewModifier { +public struct NavigationBarViewModifier: ViewModifier { // MARK: Properties /// The navigation bar title. @@ -13,9 +13,22 @@ struct NavigationBarViewModifier: ViewModifier { /// The navigation bar title display mode. var navigationBarTitleDisplayMode: NavigationBarItem.TitleDisplayMode + // MARK: Initializer + + /// Public version of synthesized initializer + /// + /// - Parameters: + /// - title: The navigation bar title. + /// - navigationBarTitleDisplayMode: The display mode of the navigation bar. + /// + public init(title: String, navigationBarTitleDisplayMode: NavigationBarItem.TitleDisplayMode) { + self.title = title + self.navigationBarTitleDisplayMode = navigationBarTitleDisplayMode + } + // MARK: View - func body(content: Content) -> some View { + public func body(content: Content) -> some View { content .navigationBarTitleDisplayMode(navigationBarTitleDisplayMode) .navigationTitle(title) diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ReviewModifier.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ReviewModifier.swift index e3b98830c0..edf9936e28 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ReviewModifier.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ReviewModifier.swift @@ -47,7 +47,7 @@ struct RequestReviewLegacyModifier: ViewModifier { } /// A view extension that requests a review when the view appears. -extension View { +public extension View { func requestReview(windowScene: UIWindowScene?, isEligible: Bool, afterClosure: @escaping () -> Void) -> some View { apply { view in if #available(iOS 16.0, *) { diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ScaledFrame.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ScaledFrame.swift index 87886c1fe7..df9af3937a 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ScaledFrame.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ScaledFrame.swift @@ -52,7 +52,7 @@ struct ScaledFrame: ViewModifier { // MARK: View -extension View { +public extension View { /// Sets the frame of a `View` to width/height values that can optionally be scaled with /// dynamic font size. /// @@ -83,7 +83,7 @@ extension View { // MARK: Image + ScaledFrame -extension Image { +public extension Image { /// Set the frame of an `Image` to width/height values that will scale with dynamic font size. /// /// - Parameters: diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ScrollViewModifier.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ScrollViewModifier.swift index 57933cd87d..102adea8bd 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ScrollViewModifier.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/ScrollViewModifier.swift @@ -51,7 +51,7 @@ struct ScrollViewModifier: ViewModifier { // MARK: - View + ScrollViewModifier -extension View { +public extension View { /// Applies the `ScrollViewModifier` to a view. /// /// - Parameters: diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/SmoothTransitionModifier.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/SmoothTransitionModifier.swift index 94abaa20cf..84a68d7f38 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/SmoothTransitionModifier.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/SmoothTransitionModifier.swift @@ -39,7 +39,7 @@ struct SmoothTransitionEffect: GeometryEffect { // MARK: - Extensions -extension View { +public extension View { /// A view modifier that applies a smooth transition effect to the view. /// func smoothTransition(animation: Animation, value: V) -> some View { diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/TextFieldConfiguration.swift b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/TextFieldConfiguration.swift index c891fa7893..8bccb88143 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/TextFieldConfiguration.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Modifiers/TextFieldConfiguration.swift @@ -5,7 +5,7 @@ import SwiftUI /// A struct containing several `TextField` configuration properties that are commonly set on text /// fields in the app. /// -struct TextFieldConfiguration { +public struct TextFieldConfiguration { // MARK: Properties /// Whether autocorrect is disabled in the text field. @@ -21,7 +21,7 @@ struct TextFieldConfiguration { let textInputAutocapitalization: TextInputAutocapitalization? } -extension TextFieldConfiguration { +public extension TextFieldConfiguration { /// A `TextFieldConfiguration` for applying common properties to email text fields. static let email = TextFieldConfiguration( isAutocorrectionDisabled: true, @@ -83,7 +83,7 @@ extension TextFieldConfiguration { } } -extension UITextContentType { +public extension UITextContentType { /// A `.creditCardExpirationYear` value that falls back to `.dateTime`. static var creditCardExpirationYearOrDateTime: UITextContentType { if #available(iOSApplicationExtension 17.0, *) { @@ -114,7 +114,7 @@ extension UITextContentType { // MARK: - View -extension View { +public extension View { /// A view extension that applies common text field properties based on a configuration. /// /// - Parameter configuration: The configuration used to set common text field properties. diff --git a/BitwardenKit/UI/Platform/Application/Appearance/StyleGuideFont.swift b/BitwardenKit/UI/Platform/Application/Appearance/StyleGuideFont.swift index 57bcbfbb50..0e7973aa91 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/StyleGuideFont.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/StyleGuideFont.swift @@ -5,7 +5,7 @@ import SwiftUI /// A `StyleGuideFont` contains the font to use for a specific style. /// -struct StyleGuideFont { +public struct StyleGuideFont { // MARK: Properties /// The font to use for the style. @@ -15,7 +15,7 @@ struct StyleGuideFont { let lineHeight: CGFloat /// The default font size for this style, in px - let size: CGFloat + public let size: CGFloat /// The text style for the font, used to determine how the font scales with dynamic type. let textStyle: SwiftUI.Font.TextStyle @@ -84,7 +84,7 @@ extension StyleGuideFont { // MARK: - StyleGuideFont Constants -extension StyleGuideFont { +public extension StyleGuideFont { /// The font for the huge title style. static let hugeTitle = StyleGuideFont.dmSans(lineHeight: 41, size: 34, textStyle: .largeTitle) @@ -157,7 +157,7 @@ private extension SwiftUI.Font { } /// An extension to simplify adding font & line height to a View. -extension View { +public extension View { /// Sets the font and line height for the view. /// /// - Parameters: @@ -210,7 +210,7 @@ extension View { } /// An extension to simplify adding font & line height to Text. -extension Text { +public extension Text { /// Sets the font and line height for the text. /// /// - Parameters: diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Styles/AccessoryButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/AccessoryButtonStyle.swift index 4081124fcb..fbbb09e1f4 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Styles/AccessoryButtonStyle.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/AccessoryButtonStyle.swift @@ -5,11 +5,11 @@ import SwiftUI /// The style for an accessory button. /// -struct AccessoryButtonStyle: ButtonStyle { +public struct AccessoryButtonStyle: ButtonStyle { /// A value indicating whether the button is currently enabled or disabled. @Environment(\.isEnabled) var isEnabled - func makeBody(configuration: Configuration) -> some View { + public func makeBody(configuration: Configuration) -> some View { configuration.label .frame(width: 24, height: 24) .foregroundColor( @@ -24,7 +24,7 @@ struct AccessoryButtonStyle: ButtonStyle { // MARK: ButtonStyle -extension ButtonStyle where Self == AccessoryButtonStyle { +public extension ButtonStyle where Self == AccessoryButtonStyle { /// The style for an accessory buttons in this application. /// static var accessory: AccessoryButtonStyle { diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Styles/BitwardenBorderlessButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/BitwardenBorderlessButtonStyle.swift index f0b9f74557..de629528d6 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Styles/BitwardenBorderlessButtonStyle.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/BitwardenBorderlessButtonStyle.swift @@ -5,7 +5,7 @@ import SwiftUI /// The style for a borderless button in this application. /// -struct BitwardenBorderlessButtonStyle: ButtonStyle { +public struct BitwardenBorderlessButtonStyle: ButtonStyle { // MARK: Properties /// A value indicating whether the button is currently enabled or disabled. @@ -20,7 +20,7 @@ struct BitwardenBorderlessButtonStyle: ButtonStyle { // MARK: ButtonStyle - func makeBody(configuration: Configuration) -> some View { + public func makeBody(configuration: Configuration) -> some View { configuration.label .foregroundStyle(foregroundColor) .styleGuide(.subheadlineSemibold) @@ -30,7 +30,7 @@ struct BitwardenBorderlessButtonStyle: ButtonStyle { // MARK: ButtonStyle -extension ButtonStyle where Self == BitwardenBorderlessButtonStyle { +public extension ButtonStyle where Self == BitwardenBorderlessButtonStyle { /// The style for a borderless button in this application. /// static var bitwardenBorderless: BitwardenBorderlessButtonStyle { diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Styles/BitwardenToggleStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/BitwardenToggleStyle.swift index a718d0d30f..92bfd7995c 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Styles/BitwardenToggleStyle.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/BitwardenToggleStyle.swift @@ -5,11 +5,11 @@ import SwiftUI /// A tinted toggle style. /// -struct BitwardenToggleStyle: ToggleStyle { +public struct BitwardenToggleStyle: ToggleStyle { /// A value indicating whether the toggle is currently enabled or disabled. @Environment(\.isEnabled) var isEnabled - func makeBody(configuration: Configuration) -> some View { + public func makeBody(configuration: Configuration) -> some View { Toggle(configuration) .styleGuide(.body) .foregroundColor( @@ -23,7 +23,7 @@ struct BitwardenToggleStyle: ToggleStyle { // MARK: ToggleStyle -extension ToggleStyle where Self == BitwardenToggleStyle { +public extension ToggleStyle where Self == BitwardenToggleStyle { /// The style for toggles used in this application. static var bitwarden: BitwardenToggleStyle { BitwardenToggleStyle() } } diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Styles/ButtonStyleSize.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/ButtonStyleSize.swift index 464b7dd100..548262e71d 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Styles/ButtonStyleSize.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/ButtonStyleSize.swift @@ -4,7 +4,7 @@ import Foundation /// The different size buttons which can be supported by button styles. /// -enum ButtonStyleSize { +public enum ButtonStyleSize { case small case medium case large diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Styles/ButtonStylesTests.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/ButtonStylesTests.swift index 07a604df52..f20c6d6e77 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Styles/ButtonStylesTests.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/ButtonStylesTests.swift @@ -1,10 +1,9 @@ +import BitwardenKit import BitwardenResources import SnapshotTesting import SwiftUI import XCTest -@testable import BitwardenKit - final class ButtonStylesTests: BitwardenTestCase { // MARK: Types diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Styles/CircleButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/CircleButtonStyle.swift index 2815e39cac..e0297d742c 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Styles/CircleButtonStyle.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/CircleButtonStyle.swift @@ -5,7 +5,7 @@ import SwiftUI /// The style for all circle buttons in this application. /// -struct CircleButtonStyle: ButtonStyle { +public struct CircleButtonStyle: ButtonStyle { // MARK: Properties /// A Boolean value indicating whether the button is currently enabled or disabled. @@ -28,7 +28,16 @@ struct CircleButtonStyle: ButtonStyle { : SharedAsset.Colors.buttonFilledDisabledForeground.swiftUIColor } - func makeBody(configuration: Configuration) -> some View { + /// Public version of synthesized initializer. + /// + /// - Parameters: + /// - diameter: The diameter of the button. + /// + public init(diameter: CGFloat) { + self.diameter = diameter + } + + public func makeBody(configuration: Configuration) -> some View { configuration.label .foregroundColor(foregroundColor) .frame(width: diameter, height: diameter) diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Styles/CircleMenuStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/CircleMenuStyle.swift index f2769e1464..edfedb0428 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Styles/CircleMenuStyle.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/CircleMenuStyle.swift @@ -9,7 +9,7 @@ import SwiftUI /// the pressed state. /// @available(iOS, deprecated: 17, message: "Prefer using CircleButtonStyle to style Menu buttons on iOS 17+") -struct CircleMenuStyle: MenuStyle { +public struct CircleMenuStyle: MenuStyle { // MARK: Properties /// A Boolean value indicating whether the button is currently enabled or disabled. @@ -32,7 +32,15 @@ struct CircleMenuStyle: MenuStyle { : SharedAsset.Colors.buttonFilledDisabledForeground.swiftUIColor } - func makeBody(configuration: Configuration) -> some View { + /// Public version of synthesized initializer. + /// + /// - Parameters: + /// - diameter: The diameter of the button. + public init(diameter: CGFloat) { + self.diameter = diameter + } + + public func makeBody(configuration: Configuration) -> some View { Menu(configuration) .foregroundColor(foregroundColor) .frame(width: diameter, height: diameter) diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Styles/FieldLabelIconButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/FieldLabelIconButtonStyle.swift index 283aeaab91..8393194a8b 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Styles/FieldLabelIconButtonStyle.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/FieldLabelIconButtonStyle.swift @@ -5,7 +5,7 @@ import SwiftUI /// The style for a button containing an icon displayed next to a label in a form field. /// -struct FieldLabelIconButtonStyle: ButtonStyle { +public struct FieldLabelIconButtonStyle: ButtonStyle { // MARK: Properties /// A value indicating whether the button is currently enabled or disabled. @@ -20,7 +20,7 @@ struct FieldLabelIconButtonStyle: ButtonStyle { // MARK: ButtonStyle - func makeBody(configuration: Configuration) -> some View { + public func makeBody(configuration: Configuration) -> some View { configuration.label .frame(width: 16, height: 16) .foregroundColor(foregroundColor) @@ -31,7 +31,7 @@ struct FieldLabelIconButtonStyle: ButtonStyle { // MARK: ButtonStyle -extension ButtonStyle where Self == FieldLabelIconButtonStyle { +public extension ButtonStyle where Self == FieldLabelIconButtonStyle { /// The style for a field label icon button in this application. /// static var fieldLabelIcon: FieldLabelIconButtonStyle { diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Styles/InlineButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/InlineButtonStyle.swift index decc299210..7fc82ec659 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Styles/InlineButtonStyle.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/InlineButtonStyle.swift @@ -4,8 +4,12 @@ import SwiftUI /// The style for all inline buttons in this application. /// -struct InlineButtonStyle: ButtonStyle { - func makeBody(configuration: Configuration) -> some View { +public struct InlineButtonStyle: ButtonStyle { + + /// Public version of synthesized initializer. + public init() {} + + public func makeBody(configuration: Configuration) -> some View { configuration.label .opacity(configuration.isPressed ? 0.5 : 1) } diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Styles/PrimaryButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/PrimaryButtonStyle.swift index 0efd4f8f3b..6b6973f7ed 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Styles/PrimaryButtonStyle.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/PrimaryButtonStyle.swift @@ -5,7 +5,7 @@ import SwiftUI /// The style for all primary buttons in this application. /// -struct PrimaryButtonStyle: ButtonStyle { +public struct PrimaryButtonStyle: ButtonStyle { // MARK: Properties @Environment(\.isEnabled) var isEnabled: Bool @@ -37,7 +37,7 @@ struct PrimaryButtonStyle: ButtonStyle { : SharedAsset.Colors.buttonFilledDisabledForeground.swiftUIColor } - func makeBody(configuration: Configuration) -> some View { + public func makeBody(configuration: Configuration) -> some View { configuration.label .foregroundColor(foregroundColor) .multilineTextAlignment(.center) @@ -53,7 +53,7 @@ struct PrimaryButtonStyle: ButtonStyle { // MARK: ButtonStyle -extension ButtonStyle where Self == PrimaryButtonStyle { +public extension ButtonStyle where Self == PrimaryButtonStyle { /// The style for all primary buttons in this application. /// /// - Parameters: diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Styles/PrimaryMenuStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/PrimaryMenuStyle.swift index d8e235ab10..ad2975ce21 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Styles/PrimaryMenuStyle.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/PrimaryMenuStyle.swift @@ -9,7 +9,7 @@ import SwiftUI /// the pressed state. /// @available(iOS, deprecated: 17, message: "Prefer using PrimaryButtonStyle to style Menu buttons on iOS 17+") -struct PrimaryMenuStyle: MenuStyle { +public struct PrimaryMenuStyle: MenuStyle { // MARK: Properties @Environment(\.isEnabled) var isEnabled: Bool @@ -35,7 +35,7 @@ struct PrimaryMenuStyle: MenuStyle { : SharedAsset.Colors.buttonFilledDisabledForeground.swiftUIColor } - func makeBody(configuration: Configuration) -> some View { + public func makeBody(configuration: Configuration) -> some View { Menu(configuration) .foregroundColor(foregroundColor) .multilineTextAlignment(.center) @@ -50,7 +50,7 @@ struct PrimaryMenuStyle: MenuStyle { // MARK: - MenuStyle -extension MenuStyle where Self == PrimaryMenuStyle { +public extension MenuStyle where Self == PrimaryMenuStyle { /// The style for all primary menus in this application. /// /// - Parameters: diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Styles/SecondaryButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/SecondaryButtonStyle.swift index 81cd3723dc..8bf00e85ca 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Styles/SecondaryButtonStyle.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/SecondaryButtonStyle.swift @@ -5,7 +5,7 @@ import SwiftUI /// The style for all secondary buttons in this application. /// -struct SecondaryButtonStyle: ButtonStyle { +public struct SecondaryButtonStyle: ButtonStyle { // MARK: Properties @Environment(\.isEnabled) var isEnabled: Bool @@ -53,7 +53,7 @@ struct SecondaryButtonStyle: ButtonStyle { // MARK: ButtonStyle - func makeBody(configuration: Configuration) -> some View { + public func makeBody(configuration: Configuration) -> some View { configuration.label .foregroundColor(foregroundColor) .multilineTextAlignment(.center) @@ -73,7 +73,7 @@ struct SecondaryButtonStyle: ButtonStyle { // MARK: ButtonStyle -extension ButtonStyle where Self == SecondaryButtonStyle { +public extension ButtonStyle where Self == SecondaryButtonStyle { /// The style for all secondary buttons in this application. /// /// - Parameters: diff --git a/BitwardenKit/UI/Platform/Application/Appearance/Styles/ToolbarButtonStyle.swift b/BitwardenKit/UI/Platform/Application/Appearance/Styles/ToolbarButtonStyle.swift index a33bb42546..c0437169f3 100644 --- a/BitwardenKit/UI/Platform/Application/Appearance/Styles/ToolbarButtonStyle.swift +++ b/BitwardenKit/UI/Platform/Application/Appearance/Styles/ToolbarButtonStyle.swift @@ -5,7 +5,7 @@ import SwiftUI /// The style for all toolbar buttons in this application. /// -struct ToolbarButtonStyle: ButtonStyle { +public struct ToolbarButtonStyle: ButtonStyle { @Environment(\.isEnabled) var isEnabled: Bool /// The color of the foreground elements in this button, including text and template @@ -16,7 +16,7 @@ struct ToolbarButtonStyle: ButtonStyle { : SharedAsset.Colors.buttonFilledDisabledForeground.swiftUIColor } - func makeBody(configuration: Configuration) -> some View { + public func makeBody(configuration: Configuration) -> some View { configuration.label .foregroundColor(foregroundColor) .styleGuide(.body) @@ -27,7 +27,7 @@ struct ToolbarButtonStyle: ButtonStyle { // MARK: ButtonStyle -extension ButtonStyle where Self == ToolbarButtonStyle { +public extension ButtonStyle where Self == ToolbarButtonStyle { /// The style for all toolbar buttons in this application. /// static var toolbar: ToolbarButtonStyle { diff --git a/BitwardenKit/UI/Platform/Application/Extensions/Label.swift b/BitwardenKit/UI/Platform/Application/Extensions/Label.swift index e3dbc6afef..174574dec6 100644 --- a/BitwardenKit/UI/Platform/Application/Extensions/Label.swift +++ b/BitwardenKit/UI/Platform/Application/Extensions/Label.swift @@ -1,6 +1,6 @@ import SwiftUI -extension Label { +public extension Label { /// Initialize a label with a title and image. /// /// - Parameters: diff --git a/BitwardenShared/UI/Auth/Login/LoginWithDevice/LoginWithDeviceProcessor.swift b/BitwardenShared/UI/Auth/Login/LoginWithDevice/LoginWithDeviceProcessor.swift index e97486a94f..31485a404c 100644 --- a/BitwardenShared/UI/Auth/Login/LoginWithDevice/LoginWithDeviceProcessor.swift +++ b/BitwardenShared/UI/Auth/Login/LoginWithDevice/LoginWithDeviceProcessor.swift @@ -1,4 +1,5 @@ import AuthenticationServices +import BitwardenKit import BitwardenResources @preconcurrency import BitwardenSdk import Foundation diff --git a/BitwardenShared/UI/Auth/Login/SingleSignOn/SingleSignOnProcessor.swift b/BitwardenShared/UI/Auth/Login/SingleSignOn/SingleSignOnProcessor.swift index c3d3db96c8..ff6e6461e3 100644 --- a/BitwardenShared/UI/Auth/Login/SingleSignOn/SingleSignOnProcessor.swift +++ b/BitwardenShared/UI/Auth/Login/SingleSignOn/SingleSignOnProcessor.swift @@ -1,4 +1,5 @@ import AuthenticationServices +import BitwardenKit import BitwardenResources import Foundation diff --git a/BitwardenShared/UI/Platform/Application/AppProcessor.swift b/BitwardenShared/UI/Platform/Application/AppProcessor.swift index 8d4cd7d298..663a491c52 100644 --- a/BitwardenShared/UI/Platform/Application/AppProcessor.swift +++ b/BitwardenShared/UI/Platform/Application/AppProcessor.swift @@ -1,4 +1,5 @@ import AuthenticationServices +import BitwardenKit import BitwardenResources import BitwardenSdk import Combine diff --git a/BitwardenShared/UI/Platform/Application/Extensions/UIViewController.swift b/BitwardenShared/UI/Platform/Application/Extensions/UIViewController.swift index 89a165e4c2..4139e2a525 100644 --- a/BitwardenShared/UI/Platform/Application/Extensions/UIViewController.swift +++ b/BitwardenShared/UI/Platform/Application/Extensions/UIViewController.swift @@ -1,3 +1,4 @@ +import BitwardenKit import UIKit extension UIViewController { diff --git a/BitwardenShared/UI/Platform/Application/Extensions/View+Background.swift b/BitwardenShared/UI/Platform/Application/Extensions/View+Background.swift index fbe095744e..bfd031618c 100644 --- a/BitwardenShared/UI/Platform/Application/Extensions/View+Background.swift +++ b/BitwardenShared/UI/Platform/Application/Extensions/View+Background.swift @@ -1,3 +1,4 @@ +import BitwardenKit import SwiftUI /// Helper functions extended from the `View` protocol diff --git a/BitwardenShared/UI/Platform/Application/Utilities/Alert/Alert/AlertPresentable.swift b/BitwardenShared/UI/Platform/Application/Utilities/Alert/Alert/AlertPresentable.swift index 9d7f06ecc5..8d062b0b2a 100644 --- a/BitwardenShared/UI/Platform/Application/Utilities/Alert/Alert/AlertPresentable.swift +++ b/BitwardenShared/UI/Platform/Application/Utilities/Alert/Alert/AlertPresentable.swift @@ -1,3 +1,4 @@ +import BitwardenKit import OSLog import UIKit diff --git a/BitwardenShared/UI/Platform/Application/Utilities/Navigator.swift b/BitwardenShared/UI/Platform/Application/Utilities/Navigator.swift index 964e47c7ab..8c309013ee 100644 --- a/BitwardenShared/UI/Platform/Application/Utilities/Navigator.swift +++ b/BitwardenShared/UI/Platform/Application/Utilities/Navigator.swift @@ -1,3 +1,4 @@ +import BitwardenKit import SwiftUI // MARK: - Navigator diff --git a/BitwardenShared/UI/Platform/Application/Utilities/StackNavigator.swift b/BitwardenShared/UI/Platform/Application/Utilities/StackNavigator.swift index 5213ca9d59..30e32abedf 100644 --- a/BitwardenShared/UI/Platform/Application/Utilities/StackNavigator.swift +++ b/BitwardenShared/UI/Platform/Application/Utilities/StackNavigator.swift @@ -1,3 +1,4 @@ +import BitwardenKit import SwiftUI // MARK: - StackNavigator diff --git a/BitwardenShared/UI/Platform/Application/Views/BitwardenStepper.swift b/BitwardenShared/UI/Platform/Application/Views/BitwardenStepper.swift index a26e9db9d7..337a246724 100644 --- a/BitwardenShared/UI/Platform/Application/Views/BitwardenStepper.swift +++ b/BitwardenShared/UI/Platform/Application/Views/BitwardenStepper.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import SwiftUI diff --git a/BitwardenShared/UI/Platform/Application/Views/BitwardenUITextView.swift b/BitwardenShared/UI/Platform/Application/Views/BitwardenUITextView.swift index 668ca9c843..72d38b2ff8 100644 --- a/BitwardenShared/UI/Platform/Application/Views/BitwardenUITextView.swift +++ b/BitwardenShared/UI/Platform/Application/Views/BitwardenUITextView.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import SwiftUI import UIKit diff --git a/BitwardenShared/UI/Platform/Application/Views/FloatingActionMenu.swift b/BitwardenShared/UI/Platform/Application/Views/FloatingActionMenu.swift index 4e6674bd3f..a1ab1b39de 100644 --- a/BitwardenShared/UI/Platform/Application/Views/FloatingActionMenu.swift +++ b/BitwardenShared/UI/Platform/Application/Views/FloatingActionMenu.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import SwiftUI diff --git a/BitwardenShared/UI/Platform/Application/Views/GuidedTourView/GuidedTourView.swift b/BitwardenShared/UI/Platform/Application/Views/GuidedTourView/GuidedTourView.swift index d27fd83812..dcfeadd35d 100644 --- a/BitwardenShared/UI/Platform/Application/Views/GuidedTourView/GuidedTourView.swift +++ b/BitwardenShared/UI/Platform/Application/Views/GuidedTourView/GuidedTourView.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import SwiftUI diff --git a/BitwardenShared/UI/Platform/Application/Views/IllustratedMessageView.swift b/BitwardenShared/UI/Platform/Application/Views/IllustratedMessageView.swift index 3c61e042c1..e745b75dc2 100644 --- a/BitwardenShared/UI/Platform/Application/Views/IllustratedMessageView.swift +++ b/BitwardenShared/UI/Platform/Application/Views/IllustratedMessageView.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import SwiftUI diff --git a/BitwardenShared/UI/Platform/Application/Views/LoadingOverlayDisplayHelper.swift b/BitwardenShared/UI/Platform/Application/Views/LoadingOverlayDisplayHelper.swift index 484289ce60..0eb39bf84d 100644 --- a/BitwardenShared/UI/Platform/Application/Views/LoadingOverlayDisplayHelper.swift +++ b/BitwardenShared/UI/Platform/Application/Views/LoadingOverlayDisplayHelper.swift @@ -1,3 +1,4 @@ +import BitwardenKit import SwiftUI import UIKit diff --git a/BitwardenShared/UI/Platform/Application/Views/ToastDisplayHelper.swift b/BitwardenShared/UI/Platform/Application/Views/ToastDisplayHelper.swift index c3995a8667..1bfb411c24 100644 --- a/BitwardenShared/UI/Platform/Application/Views/ToastDisplayHelper.swift +++ b/BitwardenShared/UI/Platform/Application/Views/ToastDisplayHelper.swift @@ -1,3 +1,4 @@ +import BitwardenKit import SwiftUI import UIKit diff --git a/BitwardenShared/UI/Vault/Vault/VaultCoordinator.swift b/BitwardenShared/UI/Vault/Vault/VaultCoordinator.swift index 7ba4c21211..3e6c3d912d 100644 --- a/BitwardenShared/UI/Vault/Vault/VaultCoordinator.swift +++ b/BitwardenShared/UI/Vault/Vault/VaultCoordinator.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import BitwardenSdk import SwiftUI diff --git a/BitwardenShared/UI/Vault/Vault/VaultCoordinatorTests.swift b/BitwardenShared/UI/Vault/Vault/VaultCoordinatorTests.swift index cbd11bbcd6..1963b3c368 100644 --- a/BitwardenShared/UI/Vault/Vault/VaultCoordinatorTests.swift +++ b/BitwardenShared/UI/Vault/Vault/VaultCoordinatorTests.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenKitMocks import SwiftUI import TestHelpers diff --git a/BitwardenShared/UI/Vault/VaultItem/AuthenticatorKeyCapture/ScanCodeView.swift b/BitwardenShared/UI/Vault/VaultItem/AuthenticatorKeyCapture/ScanCodeView.swift index 7aeb1332fa..f76bf3571c 100644 --- a/BitwardenShared/UI/Vault/VaultItem/AuthenticatorKeyCapture/ScanCodeView.swift +++ b/BitwardenShared/UI/Vault/VaultItem/AuthenticatorKeyCapture/ScanCodeView.swift @@ -1,4 +1,5 @@ import AVFoundation +import BitwardenKit import BitwardenResources import SwiftUI diff --git a/GlobalTestHelpers/Support/BitwardenTestCase.swift b/GlobalTestHelpers/Support/BitwardenTestCase.swift index 748e77094a..d420ad0821 100644 --- a/GlobalTestHelpers/Support/BitwardenTestCase.swift +++ b/GlobalTestHelpers/Support/BitwardenTestCase.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenShared import TestHelpers import XCTest From f8d07eb8932750a570ec1cad27ad8c1db8c9b27d Mon Sep 17 00:00:00 2001 From: Katherine Bertelsen Date: Wed, 1 Oct 2025 10:55:07 -0500 Subject: [PATCH 3/6] Get to build on BWA --- .../Appearance/Modifiers/ImageStyle.swift | 35 ----- .../Appearance/Modifiers/ScaledFrame.swift | 124 ------------------ .../Modifiers/TextFieldConfiguration.swift | 16 --- .../Styles/AccessoryButtonStyle.swift | 47 ------- .../BitwardenBorderlessButtonStyle.swift | 47 ------- .../Styles/BitwardenToggleStyle.swift | 21 --- 6 files changed, 290 deletions(-) delete mode 100644 AuthenticatorShared/UI/Platform/Application/Appearance/Modifiers/ScaledFrame.swift delete mode 100644 AuthenticatorShared/UI/Platform/Application/Appearance/Styles/AccessoryButtonStyle.swift delete mode 100644 AuthenticatorShared/UI/Platform/Application/Appearance/Styles/BitwardenBorderlessButtonStyle.swift delete mode 100644 AuthenticatorShared/UI/Platform/Application/Appearance/Styles/BitwardenToggleStyle.swift diff --git a/AuthenticatorShared/UI/Platform/Application/Appearance/Modifiers/ImageStyle.swift b/AuthenticatorShared/UI/Platform/Application/Appearance/Modifiers/ImageStyle.swift index 7626370f80..4236391953 100644 --- a/AuthenticatorShared/UI/Platform/Application/Appearance/Modifiers/ImageStyle.swift +++ b/AuthenticatorShared/UI/Platform/Application/Appearance/Modifiers/ImageStyle.swift @@ -30,25 +30,6 @@ extension ImageStyle { /// static let accessoryIcon = accessoryIcon() - /// An `ImageStyle` for applying common properties for icons within a row. - /// - /// - Size: 22x22pt - /// - Color: `Asset.Colors.textSecondary` - /// - static let rowIcon = rowIcon() - - /// An `ImageStyle` for applying common properties for icons within a toolbar. - /// - /// - Size: 19x19pt - /// - Color: `Asset.Colors.primaryBitwarden` - /// - static let toolbarIcon = ImageStyle( - color: Asset.Colors.primaryBitwarden.swiftUIColor, - scaleWithFont: false, - width: 19, - height: 19 - ) - /// An `ImageStyle` for applying common properties to a circular accessory icon. /// /// - Size: 16x16pt @@ -64,22 +45,6 @@ extension ImageStyle { ) -> ImageStyle { ImageStyle(color: color, scaleWithFont: scaleWithFont, width: 16, height: 16) } - - /// An `ImageStyle` for applying common properties for icons within a row. - /// - /// - Size: 22x22pt - /// - Color: Defaults to `Asset.Colors.textSecondary` - /// - /// - Parameters: - /// - color: The foreground color of the image. Defaults to `Asset.Colors.textSecondary`. - /// - scaleWithFont: Whether the image should scale with font size changes. - /// - static func rowIcon( - color: Color = Asset.Colors.textSecondary.swiftUIColor, - scaleWithFont: Bool = true - ) -> ImageStyle { - ImageStyle(color: color, scaleWithFont: scaleWithFont, width: 22, height: 22) - } } // MARK: - Image diff --git a/AuthenticatorShared/UI/Platform/Application/Appearance/Modifiers/ScaledFrame.swift b/AuthenticatorShared/UI/Platform/Application/Appearance/Modifiers/ScaledFrame.swift deleted file mode 100644 index 6dce938549..0000000000 --- a/AuthenticatorShared/UI/Platform/Application/Appearance/Modifiers/ScaledFrame.swift +++ /dev/null @@ -1,124 +0,0 @@ -import SwiftUI - -/// A `ViewModifier` that causes a `View`'s `frame` to scale with dynamic font size. -/// -struct ScaledFrame: ViewModifier { - // MARK: Private Properties - - /// The current scale to use when calculating the actual frame size. - /// - /// This value is a `ScaledMetric`, which bases the scaling on the current DynamicType setting. - @ScaledMetric private var scale = 1.0 - - /// The scaled representation of ``height``. - private var scaledHeight: CGFloat { height * scale } - - /// The scaled representation of ``width``. - private var scaledWidth: CGFloat { width * scale } - - // MARK: Properties - - /// The height of the frame before scaling. - let height: CGFloat - - /// The width of the frame before scaling. - let width: CGFloat - - // MARK: Initialization - - /// Creates a new `ScaledFrame` modifier that sets the frame of the view to a scaled - /// representation of the `height` and `width`, based on the user's current Dynamic - /// Type setting. - /// - /// - Parameters: - /// - width: The width of the frame before scaling. - /// - height: The height of the frame before scaling. - /// - init( - width: CGFloat, - height: CGFloat - ) { - self.width = width - self.height = height - } - - // MARK: View - - func body(content: Content) -> some View { - content - .frame(width: scaledWidth, height: scaledHeight) - } -} - -// MARK: View - -extension View { - /// Sets the frame of a `View` to width/height values that can optionally be scaled with - /// dynamic font size. - /// - /// - Parameters: - /// - width: The width of the view before scaling. - /// - height: The height of the view before scaling. - /// - scaleWithFont: Whether to scale the frame with dynamic font size. - /// - @ViewBuilder - func frame(width: CGFloat, height: CGFloat, scaleWithFont: Bool) -> some View { - if scaleWithFont { - scaledFrame(width: width, height: height) - } else { - frame(width: width, height: height) - } - } - - /// Set the frame of a `View` to width/height values that will scale with dynamic font size. - /// - /// - Parameters: - /// - width: The width of the image before scaling - /// - height: The height of the image before scaling. - /// - func scaledFrame(width: CGFloat, height: CGFloat) -> some View { - modifier(ScaledFrame(width: width, height: height)) - } -} - -// MARK: Image + ScaledFrame - -extension Image { - /// Set the frame of an `Image` to width/height values that will scale with dynamic font size. - /// - /// - Parameters: - /// - width: The width of the image before scaling - /// - height: The height of the image before scaling. - /// - func scaledFrame(width: CGFloat, height: CGFloat) -> some View { - resizable() - .modifier(ScaledFrame(width: width, height: height)) - } -} - -#if DEBUG -@available(iOS 17, *) -#Preview(traits: .sizeThatFitsLayout) { - VStack { - Image(systemName: "ruler.fill") - .aspectRatio(contentMode: .fit) - .scaledFrame(width: 24, height: 24) - .environment(\.sizeCategory, .extraSmall) - - Image(systemName: "ruler.fill") - .aspectRatio(contentMode: .fit) - .scaledFrame(width: 24, height: 24) - .environment(\.sizeCategory, .extraExtraLarge) - - Image(systemName: "ruler.fill") - .aspectRatio(contentMode: .fit) - .scaledFrame(width: 24, height: 24) - .environment(\.sizeCategory, .accessibilityMedium) - - Image(systemName: "ruler.fill") - .aspectRatio(contentMode: .fit) - .scaledFrame(width: 24, height: 24) - .environment(\.sizeCategory, .accessibilityExtraLarge) - } -} -#endif diff --git a/AuthenticatorShared/UI/Platform/Application/Appearance/Modifiers/TextFieldConfiguration.swift b/AuthenticatorShared/UI/Platform/Application/Appearance/Modifiers/TextFieldConfiguration.swift index 6d238ad986..82b837fb4c 100644 --- a/AuthenticatorShared/UI/Platform/Application/Appearance/Modifiers/TextFieldConfiguration.swift +++ b/AuthenticatorShared/UI/Platform/Application/Appearance/Modifiers/TextFieldConfiguration.swift @@ -30,14 +30,6 @@ extension TextFieldConfiguration { textInputAutocapitalization: .never ) - /// A `TextFieldConfiguration` for applying common properties to password text fields. - static let password = TextFieldConfiguration( - isAutocorrectionDisabled: true, - keyboardType: .default, - textContentType: .password, - textInputAutocapitalization: .never - ) - /// A `TextFieldConfiguration` for applying common properties to URL text fields. static let url = TextFieldConfiguration( isAutocorrectionDisabled: true, @@ -46,14 +38,6 @@ extension TextFieldConfiguration { textInputAutocapitalization: .never ) - /// A `TextFieldConfiguration` for applying common properties to username text fields. - static let username = TextFieldConfiguration( - isAutocorrectionDisabled: true, - keyboardType: .default, - textContentType: .username, - textInputAutocapitalization: .never - ) - /// A `TextFieldConfiguration` for applying common properties to numeric text fields. static func numeric(_ textContentType: UITextContentType) -> TextFieldConfiguration { TextFieldConfiguration( diff --git a/AuthenticatorShared/UI/Platform/Application/Appearance/Styles/AccessoryButtonStyle.swift b/AuthenticatorShared/UI/Platform/Application/Appearance/Styles/AccessoryButtonStyle.swift deleted file mode 100644 index 0460ee26b7..0000000000 --- a/AuthenticatorShared/UI/Platform/Application/Appearance/Styles/AccessoryButtonStyle.swift +++ /dev/null @@ -1,47 +0,0 @@ -import BitwardenResources -import SwiftUI - -// MARK: - AccessoryButtonStyle - -/// The style for an accessory button. -/// -struct AccessoryButtonStyle: ButtonStyle { - func makeBody(configuration: Configuration) -> some View { - configuration.label - .frame(width: 14, height: 14) - .padding(10) - .foregroundColor(Asset.Colors.primaryBitwarden.swiftUIColor) - .background(Asset.Colors.fillTertiary.swiftUIColor) - .clipShape(Circle()) - .opacity(configuration.isPressed ? 0.5 : 1) - } -} - -// MARK: ButtonStyle - -extension ButtonStyle where Self == AccessoryButtonStyle { - /// The style for an accessory buttons in this application. - /// - static var accessory: AccessoryButtonStyle { - AccessoryButtonStyle() - } -} - -// MARK: Previews - -#if DEBUG -#Preview("Enabled") { - Button {} label: { - SharedAsset.Icons.copy24.swiftUIImage - } - .buttonStyle(.accessory) -} - -#Preview("Disabled") { - Button {} label: { - SharedAsset.Icons.copy24.swiftUIImage - } - .buttonStyle(.accessory) - .disabled(true) -} -#endif diff --git a/AuthenticatorShared/UI/Platform/Application/Appearance/Styles/BitwardenBorderlessButtonStyle.swift b/AuthenticatorShared/UI/Platform/Application/Appearance/Styles/BitwardenBorderlessButtonStyle.swift deleted file mode 100644 index a697a3b50d..0000000000 --- a/AuthenticatorShared/UI/Platform/Application/Appearance/Styles/BitwardenBorderlessButtonStyle.swift +++ /dev/null @@ -1,47 +0,0 @@ -import SwiftUI - -// MARK: - BitwardenBorderlessButtonStyle - -/// The style for a borderless button in this application. -/// -struct BitwardenBorderlessButtonStyle: ButtonStyle { - // MARK: Properties - - /// A value indicating whether the button is currently enabled or disabled. - @Environment(\.isEnabled) var isEnabled: Bool - - // MARK: ButtonStyle - - func makeBody(configuration: Configuration) -> some View { - configuration.label - .foregroundStyle(Asset.Colors.primaryBitwarden.swiftUIColor) - .padding(.vertical, 14) - .padding(.horizontal, 20) - .opacity(configuration.isPressed ? 0.5 : 1) - } -} - -// MARK: ButtonStyle - -extension ButtonStyle where Self == BitwardenBorderlessButtonStyle { - /// The style for a borderless button in this application. - /// - static var bitwardenBorderless: BitwardenBorderlessButtonStyle { - BitwardenBorderlessButtonStyle() - } -} - -// MARK: Previews - -#if DEBUG -#Preview() { - VStack { - Button("Bitwarden") {} - - Button("Bitwarden") {} - .disabled(true) - } - .buttonStyle(.bitwardenBorderless) - .padding(.vertical, 14) -} -#endif diff --git a/AuthenticatorShared/UI/Platform/Application/Appearance/Styles/BitwardenToggleStyle.swift b/AuthenticatorShared/UI/Platform/Application/Appearance/Styles/BitwardenToggleStyle.swift deleted file mode 100644 index 75b3925945..0000000000 --- a/AuthenticatorShared/UI/Platform/Application/Appearance/Styles/BitwardenToggleStyle.swift +++ /dev/null @@ -1,21 +0,0 @@ -import SwiftUI - -// MARK: - BitwardenToggleStyle - -/// A tinted toggle style. -/// -struct BitwardenToggleStyle: ToggleStyle { - func makeBody(configuration: Configuration) -> some View { - Toggle(configuration) - .styleGuide(.body) - .foregroundColor(Asset.Colors.textPrimary.swiftUIColor) - .tint(Asset.Colors.primaryBitwarden.swiftUIColor) - } -} - -// MARK: ToggleStyle - -extension ToggleStyle where Self == BitwardenToggleStyle { - /// The style for toggles used in this application. - static var bitwarden: BitwardenToggleStyle { BitwardenToggleStyle() } -} From 8eb4b95177532e969f362651f8a101f6c5253811 Mon Sep 17 00:00:00 2001 From: Katherine Bertelsen Date: Wed, 1 Oct 2025 15:00:00 -0500 Subject: [PATCH 4/6] Move text field --- .../Platform/Application/Views/AccessoryButton.swift | 9 ++++----- .../Views/BitwardenFloatingTextLabel.swift | 8 ++++---- .../Application/Views/BitwardenTextField.swift | 12 ++++++------ .../UI/Auth/Landing/SelfHosted/SelfHostedView.swift | 1 + .../Auth/Login/SingleSignOn/SingleSignOnView.swift | 1 + .../UI/Auth/PasswordHint/PasswordHintView.swift | 1 + .../StartRegistration/StartRegistrationView.swift | 1 + .../Application/Views/BitwardenTextValueField.swift | 1 + .../Application/Views/BitwardenTextView.swift | 1 + .../Views/FormFields/FormTextFieldView.swift | 1 + .../UI/Platform/Application/Views/SectionView.swift | 1 + .../AddEditCustomFieldsView.swift | 1 + GlobalTestHelpers/Extensions/InspectableView.swift | 2 +- project-bwk.yml | 1 + project-pm.yml | 5 ----- 15 files changed, 25 insertions(+), 21 deletions(-) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Views/AccessoryButton.swift (95%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Views/BitwardenFloatingTextLabel.swift (97%) rename {BitwardenShared => BitwardenKit}/UI/Platform/Application/Views/BitwardenTextField.swift (98%) diff --git a/BitwardenShared/UI/Platform/Application/Views/AccessoryButton.swift b/BitwardenKit/UI/Platform/Application/Views/AccessoryButton.swift similarity index 95% rename from BitwardenShared/UI/Platform/Application/Views/AccessoryButton.swift rename to BitwardenKit/UI/Platform/Application/Views/AccessoryButton.swift index c60115b729..e67216cd8e 100644 --- a/BitwardenShared/UI/Platform/Application/Views/AccessoryButton.swift +++ b/BitwardenKit/UI/Platform/Application/Views/AccessoryButton.swift @@ -1,10 +1,9 @@ -import BitwardenKit import BitwardenResources import SwiftUI /// A view that displays a button for use as an accessory to a field. /// -struct AccessoryButton: View { +public struct AccessoryButton: View { // MARK: Types /// A type that wraps a synchrounous or asynchrounous block that is executed by this button. @@ -31,7 +30,7 @@ struct AccessoryButton: View { /// The image to display in the button. var asset: SharedImageAsset - var body: some View { + public var body: some View { switch action { case let .async(action): AsyncButton(action: action) { @@ -64,7 +63,7 @@ struct AccessoryButton: View { /// - accessibilityLabel: The accessibility label of the button. /// - action: The action to perform when the user triggers the button. /// - init(asset: SharedImageAsset, + public init(asset: SharedImageAsset, accessibilityLabel: String, accessibilityIdentifier: String = "", action: @escaping () -> Void) { @@ -83,7 +82,7 @@ struct AccessoryButton: View { /// - accessibilityIdentifier: The accessibility identifier of the button. /// - action: The action to perform when the user triggers the button. /// - init(asset: SharedImageAsset, + public init(asset: SharedImageAsset, accessibilityLabel: String, accessibilityIdentifier: String = "", action: @escaping () async -> Void) { diff --git a/BitwardenShared/UI/Platform/Application/Views/BitwardenFloatingTextLabel.swift b/BitwardenKit/UI/Platform/Application/Views/BitwardenFloatingTextLabel.swift similarity index 97% rename from BitwardenShared/UI/Platform/Application/Views/BitwardenFloatingTextLabel.swift rename to BitwardenKit/UI/Platform/Application/Views/BitwardenFloatingTextLabel.swift index 07f9dab3d8..cbe905e57e 100644 --- a/BitwardenShared/UI/Platform/Application/Views/BitwardenFloatingTextLabel.swift +++ b/BitwardenKit/UI/Platform/Application/Views/BitwardenFloatingTextLabel.swift @@ -8,7 +8,7 @@ import SwiftUI /// contains a value. At that point, the text label will float up above the input field. This is /// primarily meant to wrap a text field or view. /// -struct BitwardenFloatingTextLabel: View { +public struct BitwardenFloatingTextLabel: View { // MARK: Properties /// The primary content containing the text input field for the label. @@ -31,7 +31,7 @@ struct BitwardenFloatingTextLabel: View { // MARK: View - var body: some View { + public var body: some View { HStack(spacing: 8) { ZStack(alignment: showPlaceholder ? .leading : .topLeading) { // The placeholder and title text which is vertically centered in the view when the @@ -77,7 +77,7 @@ struct BitwardenFloatingTextLabel: View { /// - trailingContent: Optional trailing content to display on the trailing edge of the label /// and text input field. /// - init( + public init( title: String?, isTextFieldDisabled: Bool = false, showPlaceholder: Bool, @@ -100,7 +100,7 @@ struct BitwardenFloatingTextLabel: View { /// the field. /// - content: The primary content containing the text input field for the label. /// - init( + public init( title: String?, isTextFieldDisabled: Bool = false, showPlaceholder: Bool, diff --git a/BitwardenShared/UI/Platform/Application/Views/BitwardenTextField.swift b/BitwardenKit/UI/Platform/Application/Views/BitwardenTextField.swift similarity index 98% rename from BitwardenShared/UI/Platform/Application/Views/BitwardenTextField.swift rename to BitwardenKit/UI/Platform/Application/Views/BitwardenTextField.swift index 7cb19a56ae..083e588f9c 100644 --- a/BitwardenShared/UI/Platform/Application/Views/BitwardenTextField.swift +++ b/BitwardenKit/UI/Platform/Application/Views/BitwardenTextField.swift @@ -11,7 +11,7 @@ import SwiftUIIntrospect /// displaying additional content on the trailing edge of the text field. /// @MainActor -struct BitwardenTextField: View { +public struct BitwardenTextField: View { // MARK: Private Properties /// A value indicating whether the textfield is currently enabled or disabled. @@ -68,7 +68,7 @@ struct BitwardenTextField: View { // MARK: View - var body: some View { + public var body: some View { VStack(spacing: 0) { contentView @@ -215,7 +215,7 @@ struct BitwardenTextField: View { /// - isTextFieldDisabled: Whether the text field is disabled. /// - trailingContent: Optional content view that is displayed on the trailing edge of the field. /// - init( + public init( title: String? = nil, text: Binding, footer: String? = nil, @@ -254,7 +254,7 @@ struct BitwardenTextField: View { /// - trailingContent: Optional content view that is displayed on the trailing edge of the field. /// - footerContent: The (optional) footer content to display underneath the field. /// - init( + public init( title: String? = nil, text: Binding, accessibilityIdentifier: String? = nil, @@ -280,7 +280,7 @@ struct BitwardenTextField: View { } } -extension BitwardenTextField where TrailingContent == EmptyView { +public extension BitwardenTextField where TrailingContent == EmptyView { /// Initializes a new `BitwardenTextField`. /// /// - Parameters: @@ -321,7 +321,7 @@ extension BitwardenTextField where TrailingContent == EmptyView { } } -extension BitwardenTextField where FooterContent == EmptyView, TrailingContent == EmptyView { +public extension BitwardenTextField where FooterContent == EmptyView, TrailingContent == EmptyView { /// Initializes a new `BitwardenTextField`. /// /// - Parameters: diff --git a/BitwardenShared/UI/Auth/Landing/SelfHosted/SelfHostedView.swift b/BitwardenShared/UI/Auth/Landing/SelfHosted/SelfHostedView.swift index 99f051f503..9e3706e825 100644 --- a/BitwardenShared/UI/Auth/Landing/SelfHosted/SelfHostedView.swift +++ b/BitwardenShared/UI/Auth/Landing/SelfHosted/SelfHostedView.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import SwiftUI diff --git a/BitwardenShared/UI/Auth/Login/SingleSignOn/SingleSignOnView.swift b/BitwardenShared/UI/Auth/Login/SingleSignOn/SingleSignOnView.swift index 12968ffaaa..8118f4d5d1 100644 --- a/BitwardenShared/UI/Auth/Login/SingleSignOn/SingleSignOnView.swift +++ b/BitwardenShared/UI/Auth/Login/SingleSignOn/SingleSignOnView.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import SwiftUI diff --git a/BitwardenShared/UI/Auth/PasswordHint/PasswordHintView.swift b/BitwardenShared/UI/Auth/PasswordHint/PasswordHintView.swift index 174f3f3dc1..cb6e7e92cf 100644 --- a/BitwardenShared/UI/Auth/PasswordHint/PasswordHintView.swift +++ b/BitwardenShared/UI/Auth/PasswordHint/PasswordHintView.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import SwiftUI diff --git a/BitwardenShared/UI/Auth/StartRegistration/StartRegistrationView.swift b/BitwardenShared/UI/Auth/StartRegistration/StartRegistrationView.swift index 8c38785ca2..68880902be 100644 --- a/BitwardenShared/UI/Auth/StartRegistration/StartRegistrationView.swift +++ b/BitwardenShared/UI/Auth/StartRegistration/StartRegistrationView.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import SwiftUI diff --git a/BitwardenShared/UI/Platform/Application/Views/BitwardenTextValueField.swift b/BitwardenShared/UI/Platform/Application/Views/BitwardenTextValueField.swift index 392de90813..fdaf318fc4 100644 --- a/BitwardenShared/UI/Platform/Application/Views/BitwardenTextValueField.swift +++ b/BitwardenShared/UI/Platform/Application/Views/BitwardenTextValueField.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import SwiftUI diff --git a/BitwardenShared/UI/Platform/Application/Views/BitwardenTextView.swift b/BitwardenShared/UI/Platform/Application/Views/BitwardenTextView.swift index 93e770796e..e817c51302 100644 --- a/BitwardenShared/UI/Platform/Application/Views/BitwardenTextView.swift +++ b/BitwardenShared/UI/Platform/Application/Views/BitwardenTextView.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import SwiftUI diff --git a/BitwardenShared/UI/Platform/Application/Views/FormFields/FormTextFieldView.swift b/BitwardenShared/UI/Platform/Application/Views/FormFields/FormTextFieldView.swift index efdeb950e0..ffed316185 100644 --- a/BitwardenShared/UI/Platform/Application/Views/FormFields/FormTextFieldView.swift +++ b/BitwardenShared/UI/Platform/Application/Views/FormFields/FormTextFieldView.swift @@ -1,3 +1,4 @@ +import BitwardenKit import SwiftUI // MARK: - FormTextField diff --git a/BitwardenShared/UI/Platform/Application/Views/SectionView.swift b/BitwardenShared/UI/Platform/Application/Views/SectionView.swift index 1a76eebd98..342c1eb5a0 100644 --- a/BitwardenShared/UI/Platform/Application/Views/SectionView.swift +++ b/BitwardenShared/UI/Platform/Application/Views/SectionView.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import SwiftUI diff --git a/BitwardenShared/UI/Vault/VaultItem/AddEditItem/AddEditCustomFields/AddEditCustomFieldsView.swift b/BitwardenShared/UI/Vault/VaultItem/AddEditItem/AddEditCustomFields/AddEditCustomFieldsView.swift index 44c88b3026..43ce9db0b4 100644 --- a/BitwardenShared/UI/Vault/VaultItem/AddEditItem/AddEditCustomFields/AddEditCustomFieldsView.swift +++ b/BitwardenShared/UI/Vault/VaultItem/AddEditItem/AddEditCustomFields/AddEditCustomFieldsView.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import BitwardenSdk import SwiftUI diff --git a/GlobalTestHelpers/Extensions/InspectableView.swift b/GlobalTestHelpers/Extensions/InspectableView.swift index bc2fd4a3a4..5d6f3e6811 100644 --- a/GlobalTestHelpers/Extensions/InspectableView.swift +++ b/GlobalTestHelpers/Extensions/InspectableView.swift @@ -56,7 +56,7 @@ struct BitwardenTextFieldType: BaseViewType { static var typePrefix: String = "BitwardenTextField" static var namespacedPrefixes: [String] = [ - "BitwardenShared.BitwardenTextField", + "BitwardenKit.BitwardenTextField", ] } diff --git a/project-bwk.yml b/project-bwk.yml index 9491eadbf6..44bb778807 100644 --- a/project-bwk.yml +++ b/project-bwk.yml @@ -125,6 +125,7 @@ targets: - "**/GoogleService-Info.*.plist" buildPhase: none dependencies: + - package: SwiftUIIntrospect - target: BitwardenResources - target: Networking BitwardenKitMocks: diff --git a/project-pm.yml b/project-pm.yml index 9c50dddce6..ae691bd02a 100644 --- a/project-pm.yml +++ b/project-pm.yml @@ -14,10 +14,6 @@ options: settings: MARKETING_VERSION: 2024.6.0 # Bump this for a new version update. CURRENT_PROJECT_VERSION: 1 -packages: - SwiftUIIntrospect: - url: https://github.com/siteline/SwiftUI-Introspect - exactVersion: 1.3.0 projectReferences: BitwardenKit: path: BitwardenKit.xcodeproj @@ -350,7 +346,6 @@ targets: buildPhase: none dependencies: - package: BitwardenSdk - - package: SwiftUIIntrospect - target: BitwardenKit/AuthenticatorBridgeKit - target: BitwardenKit/BitwardenKit - target: BitwardenKit/BitwardenResources From e0e2f3b18177e33222ec432f7b5d7a4b44befd83 Mon Sep 17 00:00:00 2001 From: Katherine Bertelsen Date: Thu, 2 Oct 2025 08:51:40 -0500 Subject: [PATCH 5/6] Remove textfield from BWA --- .../Views/BitwardenTextField.swift | 263 ------------------ .../Views/FormFields/FormTextFieldView.swift | 1 + .../Application/Views/SectionView.swift | 1 + 3 files changed, 2 insertions(+), 263 deletions(-) delete mode 100644 AuthenticatorShared/UI/Platform/Application/Views/BitwardenTextField.swift diff --git a/AuthenticatorShared/UI/Platform/Application/Views/BitwardenTextField.swift b/AuthenticatorShared/UI/Platform/Application/Views/BitwardenTextField.swift deleted file mode 100644 index 9921190a43..0000000000 --- a/AuthenticatorShared/UI/Platform/Application/Views/BitwardenTextField.swift +++ /dev/null @@ -1,263 +0,0 @@ -import BitwardenResources -import SwiftUI - -// MARK: - BitwardenTextField - -/// The standard text field used within this application. The text field can be -/// configured to act as a password field with visibility toggling, and supports -/// displaying additional content on the trailing edge of the text field. -/// -struct BitwardenTextField: View { - // MARK: Private Properties - - /// A flag indicating if this field is currently focused. - private var isFocused: Bool { isTextFieldFocused || isSecureFieldFocused } - - /// A flag indicating if the secure field is currently focused. - @FocusState private var isSecureFieldFocused - - /// A flag indicating if the text field is currently focused. - @FocusState private var isTextFieldFocused - - // MARK: Properties - - /// The accessibility identifier for the text field. - let accessibilityIdentifier: String? - - /// Whether the password can be viewed (only applies if a password exists in the field). - let canViewPassword: Bool - - /// The footer text displayed below the text field. - let footer: String? - - /// Whether a password in this text field is visible. - let isPasswordVisible: Binding? - - /// The accessibility identifier for the button to toggle password visibility. - let passwordVisibilityAccessibilityId: String? - - /// The placeholder that is displayed in the textfield. - let placeholder: String - - /// The text entered into the text field. - @Binding var text: String - - /// The title of the text field. - let title: String? - - /// Optional content view that is displayed on the trailing edge of the menu value. - let trailingContent: TrailingContent? - - // MARK: View - - var body: some View { - let isTrailingContentShown = isPasswordVisible != nil || trailingContent != nil - if isTrailingContentShown { - BitwardenField(title: title, footer: footer) { - textField - } accessoryContent: { - if let isPasswordVisible, canViewPassword { - AccessoryButton( - asset: isPasswordVisible.wrappedValue - ? SharedAsset.Icons.eyeSlash24 - : SharedAsset.Icons.eye24, - accessibilityLabel: isPasswordVisible.wrappedValue - ? Localizations.passwordIsVisibleTapToHide - : Localizations.passwordIsNotVisibleTapToShow - ) { - isPasswordVisible.wrappedValue.toggle() - } - .accessibilityIdentifier(passwordVisibilityAccessibilityId ?? "TextVisibilityToggle") - - if let trailingContent { - trailingContent - } - } else if let trailingContent { - trailingContent - } - } - } else { - BitwardenField(title: title, footer: footer) { - textField - } - } - } - - // MARK: Private views - - /// The text field. - private var textField: some View { - HStack(spacing: 8) { - ZStack { - let isPassword = isPasswordVisible != nil - let isPasswordVisible = isPasswordVisible?.wrappedValue ?? false - - TextField(placeholder, text: $text) - .focused($isTextFieldFocused) - .styleGuide(isPassword ? .bodyMonospaced : .body, includeLineSpacing: false) - .hidden(!isPasswordVisible && isPassword) - .id(title) - if isPassword, !isPasswordVisible { - SecureField(placeholder, text: $text) - .focused($isSecureFieldFocused) - .styleGuide(.bodyMonospaced, includeLineSpacing: false) - .id(title) - } - } - .frame(maxWidth: .infinity, minHeight: 28) - .accessibilityIdentifier(accessibilityIdentifier ?? "BitwardenTextField") - - Button { - text = "" - } label: { - SharedAsset.Icons.circleX16.swiftUIImage - .foregroundColor(Asset.Colors.primaryBitwarden.swiftUIColor) - .frame(width: 14, height: 14) - } - .padding(.vertical, 5) - .hidden(text.isEmpty || !isFocused) - } - .tint(Asset.Colors.primaryBitwarden.swiftUIColor) - } - - // MARK: Initialization - - /// Initializes a new `BitwardenTextField`. - /// - /// - Parameters: - /// - title: The title of the text field. - /// - footer: The footer text displayed below the text field. - /// - text: The text entered into the text field. - /// - accessibilityIdentifier: The accessibility identifier for the text field. - /// - passwordVisibilityAccessibilityId: The accessibility ID for the button to toggle password visibility. - /// - canViewPassword: Whether the password can be viewed. - /// - isPasswordVisible: Whether the password is visible. - /// - placeholder: An optional placeholder to display in the text field. - /// - init( - title: String? = nil, - text: Binding, - footer: String? = nil, - accessibilityIdentifier: String? = nil, - passwordVisibilityAccessibilityId: String? = nil, - canViewPassword: Bool = true, - isPasswordVisible: Binding? = nil, - placeholder: String? = nil, - @ViewBuilder trailingContent: () -> TrailingContent - ) { - self.accessibilityIdentifier = accessibilityIdentifier - self.isPasswordVisible = isPasswordVisible - self.footer = footer - self.canViewPassword = canViewPassword - self.passwordVisibilityAccessibilityId = passwordVisibilityAccessibilityId - self.placeholder = placeholder ?? "" - _text = text - self.title = title - self.trailingContent = trailingContent() - } -} - -extension BitwardenTextField where TrailingContent == EmptyView { - /// Initializes a new `BitwardenTextField`. - /// - /// - Parameters: - /// - title: The title of the text field. - /// - footer: The footer text displayed below the text field. - /// - text: The text entered into the text field. - /// - accessibilityIdentifier: The accessibility identifier for the text field. - /// - passwordVisibilityAccessibilityId: The accessibility ID for the button to toggle password visibility. - /// - canViewPassword: Whether the password can be viewed. - /// - isPasswordVisible: Whether the password is visible. - /// - placeholder: An optional placeholder to display in the text field. - /// - init( - title: String? = nil, - text: Binding, - footer: String? = nil, - accessibilityIdentifier: String? = nil, - passwordVisibilityAccessibilityId: String? = nil, - canViewPassword: Bool = true, - isPasswordVisible: Binding? = nil, - placeholder: String? = nil - ) { - self.accessibilityIdentifier = accessibilityIdentifier - self.canViewPassword = canViewPassword - self.footer = footer - self.isPasswordVisible = isPasswordVisible - self.passwordVisibilityAccessibilityId = passwordVisibilityAccessibilityId - self.placeholder = placeholder ?? "" - _text = text - self.title = title - trailingContent = nil - } -} - -// MARK: Previews - -#if DEBUG -#Preview("No buttons") { - VStack { - BitwardenTextField( - title: "Title", - text: .constant("Text field text") - ) - .textContentType(.emailAddress) - .padding() - } - .background(Color(.systemGroupedBackground)) -} - -#Preview("Password button") { - VStack { - BitwardenTextField( - title: "Title", - text: .constant("Text field text"), - isPasswordVisible: .constant(false) - ) - .textContentType(.password) - .padding() - } - .background(Color(.systemGroupedBackground)) -} - -#Preview("Password revealed") { - VStack { - BitwardenTextField( - title: "Title", - text: .constant("Password"), - isPasswordVisible: .constant(true) - ) - .textContentType(.password) - .padding() - } - .background(Color(.systemGroupedBackground)) -} - -#Preview("Additional buttons") { - VStack { - BitwardenTextField( - title: "Title", - text: .constant("Text field text") - ) { - AccessoryButton(asset: SharedAsset.Icons.cog16, accessibilityLabel: "") {} - } - .padding() - } - .background(Color(.systemGroupedBackground)) -} - -#Preview("Footer text") { - VStack { - BitwardenTextField( - title: "Title", - text: .constant("Text field text"), - footer: "Text field footer", - isPasswordVisible: .constant(false) - ) { - AccessoryButton(asset: SharedAsset.Icons.cog16, accessibilityLabel: "") {} - } - .padding() - } - .background(Color(.systemGroupedBackground)) -} -#endif diff --git a/AuthenticatorShared/UI/Platform/Application/Views/FormFields/FormTextFieldView.swift b/AuthenticatorShared/UI/Platform/Application/Views/FormFields/FormTextFieldView.swift index efdeb950e0..ffed316185 100644 --- a/AuthenticatorShared/UI/Platform/Application/Views/FormFields/FormTextFieldView.swift +++ b/AuthenticatorShared/UI/Platform/Application/Views/FormFields/FormTextFieldView.swift @@ -1,3 +1,4 @@ +import BitwardenKit import SwiftUI // MARK: - FormTextField diff --git a/AuthenticatorShared/UI/Platform/Application/Views/SectionView.swift b/AuthenticatorShared/UI/Platform/Application/Views/SectionView.swift index 962142a6d9..43f47f76c4 100644 --- a/AuthenticatorShared/UI/Platform/Application/Views/SectionView.swift +++ b/AuthenticatorShared/UI/Platform/Application/Views/SectionView.swift @@ -1,3 +1,4 @@ +import BitwardenKit import BitwardenResources import SwiftUI From cd30aad318fd2da3185c34ec91ea0da6e7708ba0 Mon Sep 17 00:00:00 2001 From: Katherine Bertelsen Date: Thu, 2 Oct 2025 11:07:23 -0500 Subject: [PATCH 6/6] Fix tests --- GlobalTestHelpers-bwa/Extensions/InspectableView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GlobalTestHelpers-bwa/Extensions/InspectableView.swift b/GlobalTestHelpers-bwa/Extensions/InspectableView.swift index a6b3c58af1..c690f41329 100644 --- a/GlobalTestHelpers-bwa/Extensions/InspectableView.swift +++ b/GlobalTestHelpers-bwa/Extensions/InspectableView.swift @@ -20,7 +20,7 @@ struct BitwardenTextFieldType: BaseViewType { static var typePrefix: String = "BitwardenTextField" static var namespacedPrefixes: [String] = [ - "AuthenticatorShared.BitwardenTextField", + "BitwardenKit.BitwardenTextField", ] }