From 021bd170212a3e21109f40b1a0de3babd90126c3 Mon Sep 17 00:00:00 2001 From: zuopengchi Date: Fri, 27 Dec 2024 11:12:42 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20[HCPSDKFIORIUIKIT-28?= =?UTF-8?q?79]=20KeyValueItem=20Refactor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Examples.xcodeproj/project.pbxproj | 4 + .../Views/KeyValueItemExample.swift | 125 ++++++++++++------ .../Views/OtherViewExamples.swift | 5 + .../Views/_KeyValueItemExample.swift | 50 +++++++ .../sr-Latn-RS.lproj/Localizable.strings | 3 - .../Models/ModelDefinitions.swift | 5 +- ...em+View.swift => _KeyValueItem+View.swift} | 4 +- .../BaseComponentProtocols.swift | 6 + .../CompositeComponentProtocols.swift | 16 +++ .../_FioriStyles/KeyStyle.fiori.swift | 35 +++++ .../KeyValueItemStyle.fiori.swift | 79 +++++++++++ .../Key/Key.generated.swift | 63 +++++++++ .../Key/KeyStyle.generated.swift | 28 ++++ .../KeyValueItem/KeyValueItem.generated.swift | 107 +++++++++++++++ .../KeyValueItemStyle.generated.swift | 46 +++++++ ...entStyleProtocol+Extension.generated.swift | 112 ++++++++++++++++ .../EnvironmentVariables.generated.swift | 42 ++++++ .../ModifiedStyle.generated.swift | 56 ++++++++ .../ResolvedStyle.generated.swift | 32 +++++ ...yleConfiguration+Extension.generated.swift | 8 ++ .../View+Extension_.generated.swift | 34 +++++ ...iewEmptyChecking+Extension.generated.swift | 14 ++ .../API/KPIProgressItem+API.generated.swift | 2 +- .../API/ObjectHeader+API.generated.swift | 6 +- .../OptionListPickerItem+API.generated.swift | 2 +- .../SearchListPickerItem+API.generated.swift | 16 +-- .../SignatureCaptureView+API.generated.swift | 40 +++--- .../API/SortFilterView+API.generated.swift | 2 +- .../API/UserConsentForm+API.generated.swift | 2 +- .../API/UserConsentView+API.generated.swift | 2 +- ...wift => _KeyValueItem+API.generated.swift} | 14 +- .../API/_SingleStep+API.generated.swift | 10 +- ..._StepProgressIndicator+API.generated.swift | 4 +- ...ift => _KeyValueItem+View.generated.swift} | 16 +-- ...ift => _KeyValueItem+Init.generated.swift} | 2 +- ...ValueItemModel+Extensions.generated.swift} | 2 +- .../.lib/Sources/utils/Type+Extensions.swift | 3 +- 37 files changed, 891 insertions(+), 106 deletions(-) create mode 100644 Apps/Examples/Examples/FioriSwiftUICore/Views/_KeyValueItemExample.swift delete mode 100644 Sources/FioriCharts/Resources/sr-Latn-RS.lproj/Localizable.strings rename Sources/FioriSwiftUICore/Views/{KeyValueItem+View.swift => _KeyValueItem+View.swift} (95%) create mode 100644 Sources/FioriSwiftUICore/_FioriStyles/KeyStyle.fiori.swift create mode 100644 Sources/FioriSwiftUICore/_FioriStyles/KeyValueItemStyle.fiori.swift create mode 100644 Sources/FioriSwiftUICore/_generated/StyleableComponents/Key/Key.generated.swift create mode 100644 Sources/FioriSwiftUICore/_generated/StyleableComponents/Key/KeyStyle.generated.swift create mode 100644 Sources/FioriSwiftUICore/_generated/StyleableComponents/KeyValueItem/KeyValueItem.generated.swift create mode 100644 Sources/FioriSwiftUICore/_generated/StyleableComponents/KeyValueItem/KeyValueItemStyle.generated.swift rename Sources/FioriSwiftUICore/_generated/ViewModels/API/{KeyValueItem+API.generated.swift => _KeyValueItem+API.generated.swift} (72%) rename Sources/FioriSwiftUICore/_generated/ViewModels/Boilerplate/{KeyValueItem+View.generated.swift => _KeyValueItem+View.generated.swift} (81%) rename Sources/FioriSwiftUICore/_generated/ViewModels/Init+Extensions/{KeyValueItem+Init.generated.swift => _KeyValueItem+Init.generated.swift} (85%) rename Sources/FioriSwiftUICore/_generated/ViewModels/Model+Extensions/{KeyValueItemModel+Extensions.generated.swift => _KeyValueItemModel+Extensions.generated.swift} (81%) diff --git a/Apps/Examples/Examples.xcodeproj/project.pbxproj b/Apps/Examples/Examples.xcodeproj/project.pbxproj index 9e6046183..7b4219489 100644 --- a/Apps/Examples/Examples.xcodeproj/project.pbxproj +++ b/Apps/Examples/Examples.xcodeproj/project.pbxproj @@ -29,6 +29,7 @@ 3CC870962CB6F4F30081909C /* ToastMessageExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CC870952CB6F4F30081909C /* ToastMessageExample.swift */; }; 3CD71F292CDB627300B037EB /* CheckoutIndicatorExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CD71F282CDB626900B037EB /* CheckoutIndicatorExample.swift */; }; 3CDD6ECD2CE4277300DDAE7D /* CheckoutIndicatorModalExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CDD6ECC2CE4277300DDAE7D /* CheckoutIndicatorModalExample.swift */; }; + 553FD8FA2D1E37FA005A6DE7 /* _KeyValueItemExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 553FD8F92D1E37FA005A6DE7 /* _KeyValueItemExample.swift */; }; 55598FAD2CDDB4F6007CFFBB /* ValuePickerExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55598FAC2CDDB4F6007CFFBB /* ValuePickerExample.swift */; }; 6432FFA02C5164F8008ECE89 /* SegmentedControlExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6432FF9F2C5164F8008ECE89 /* SegmentedControlExample.swift */; }; 6439F5142CEE892200EF1B42 /* ProcessingIndicatorExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6439F5132CEE892200EF1B42 /* ProcessingIndicatorExample.swift */; }; @@ -252,6 +253,7 @@ 3CC870952CB6F4F30081909C /* ToastMessageExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToastMessageExample.swift; sourceTree = ""; }; 3CD71F282CDB626900B037EB /* CheckoutIndicatorExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckoutIndicatorExample.swift; sourceTree = ""; }; 3CDD6ECC2CE4277300DDAE7D /* CheckoutIndicatorModalExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckoutIndicatorModalExample.swift; sourceTree = ""; }; + 553FD8F92D1E37FA005A6DE7 /* _KeyValueItemExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = _KeyValueItemExample.swift; sourceTree = ""; }; 55598FAC2CDDB4F6007CFFBB /* ValuePickerExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValuePickerExample.swift; sourceTree = ""; }; 6432FF9F2C5164F8008ECE89 /* SegmentedControlExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SegmentedControlExample.swift; sourceTree = ""; }; 6439F5132CEE892200EF1B42 /* ProcessingIndicatorExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProcessingIndicatorExample.swift; sourceTree = ""; }; @@ -810,6 +812,7 @@ 9DEC27B32C3F3D750070B571 /* Views */ = { isa = PBXGroup; children = ( + 553FD8F92D1E37FA005A6DE7 /* _KeyValueItemExample.swift */, 9DEC27B42C3F3DB30070B571 /* KeyValueItemExample.swift */, 9DEC27B62C3F3DE70070B571 /* OtherViewExamples.swift */, B1A78D972C88388B00432B0D /* ShadowEffectExample.swift */, @@ -1205,6 +1208,7 @@ 8A5579D124C1293C0098003A /* Settings.swift in Sources */, 8AD9DFB025D49967007448EC /* ContactItemActionItemsExample.swift in Sources */, 8A6D64B125AE658300D2D76C /* ExpHeaderView.swift in Sources */, + 553FD8FA2D1E37FA005A6DE7 /* _KeyValueItemExample.swift in Sources */, E99A025F2B9EC055008A4B77 /* SearchIconAndPlaceholder.swift in Sources */, B1A98FF52C12E9A000FC9998 /* BannerMessageModifierExample.swift in Sources */, B1BA1F922B19AAEE00E6C052 /* TabViewDetailView.swift in Sources */, diff --git a/Apps/Examples/Examples/FioriSwiftUICore/Views/KeyValueItemExample.swift b/Apps/Examples/Examples/FioriSwiftUICore/Views/KeyValueItemExample.swift index 108e814ab..212c6cd54 100644 --- a/Apps/Examples/Examples/FioriSwiftUICore/Views/KeyValueItemExample.swift +++ b/Apps/Examples/Examples/FioriSwiftUICore/Views/KeyValueItemExample.swift @@ -2,49 +2,96 @@ import FioriSwiftUICore import SwiftUI struct KeyValueItemExample: View { + @State var isRequired: Bool = false + @State var isEmptyValue: Bool = false + @State var showsErrorMessage = false + @State var state: ControlState = .normal + @State var axis: Axis = .horizontal + + struct CustomKeyValueItemStyle: KeyValueItemStyle { + func makeBody(_ configuration: KeyValueItemConfiguration) -> some View { + KeyValueItem(configuration) + .keyStyle { c in + c.key + .lineLimit(2) + .font(.fiori(forTextStyle: .callout)) + .foregroundStyle(Color.preferredColor(.green7)) + } + .valueStyle { c in + c.value + .lineLimit(2) + .font(.fiori(forTextStyle: .title3)) + .foregroundStyle(Color.preferredColor(.indigo7)) + .background(Color.preferredColor(.red3)) + } + .mandatoryFieldIndicatorStyle { c in + c.mandatoryFieldIndicator + .font(.fiori(forTextStyle: .largeTitle)) + .foregroundStyle(Color.preferredColor(.blue8)) + } + } + } + var body: some View { - Text("KeyValueItemExample") List { - Text("Default Horizontal") - KeyValueItem { - Text("Key 1") - - } value: { - Text("Value 1") + Section { + Toggle("Allow Empty Value", isOn: self.$isEmptyValue) + Toggle("Mandatory Field", isOn: self.$isRequired) + Picker("Control State", selection: self.$state) { + Text("Normal").tag(ControlState.normal) + Text("Disabled").tag(ControlState.disabled) + Text("Readonly").tag(ControlState.readOnly) + } + Picker("Axis", selection: self.$axis) { + Text("Horizontal").tag(Axis.horizontal) + Text("Vertical").tag(Axis.vertical) + } } - - Text("Vertical") - KeyValueItem(key: { - Text("Vertical Axis") - }, value: { - Text("Value 2") - }, axis: .vertical) - - Text("Custom Color and Font") - KeyValueItem { - Text("Custom Color") - .foregroundStyle(.red) - .font(.fiori(forTextStyle: .title1)) - } value: { - Text("Value 3") - .foregroundStyle(.brown) - .font(.fiori(forTextStyle: .footnote)) + Section { + Text("Key Value Item (Default Style)") + KeyValueItem( + key: { Text("Key 1") }, + value: { self.valueView("Value 1") }, + isRequired: self.isRequired, + controlState: self.state, + axis: self.axis + ) + + Divider().background(Color.gray) + Text("Key Value Item (Long String)") + KeyValueItem( + key: { Text("Long long long long long long long long long long long long long long long long long long Key") }, + value: { self.valueView("Long long long long long long Value") }, + isRequired: self.isRequired, + controlState: self.state, + axis: self.axis + ) + + Divider().background(Color.gray) + Text("Key Value Item 2 lines (Custom Style)") + KeyValueItem( + key: { Text("Long long long long long long long long long long long long long long long long long long long long long Key") }, + value: { self.valueView("Value") }, + isRequired: self.isRequired, + controlState: self.state, + axis: self.axis + ).keyValueItemStyle(CustomKeyValueItemStyle()) } - - Text("Verticle Custom Color and Font") - KeyValueItem(key: { - Text("Custom Color and Font Vertical Axis") - .foregroundStyle(.red) - .font(.fiori(forTextStyle: .title1)) - }, value: { - Text("Value 4") - .foregroundStyle(.brown) - .font(.fiori(forTextStyle: .footnote)) - }, axis: .vertical) } } -} - -#Preview { - KeyValueItemExample() + + @ViewBuilder + func valueView(_ valueString: String) -> some View { + if self.isEmptyValue { + EmptyView() + } else { + Text(valueString) + } + } + + struct KeyValueItemExample_Previews: PreviewProvider { + static var previews: some View { + KeyValueItemExample() + } + } } diff --git a/Apps/Examples/Examples/FioriSwiftUICore/Views/OtherViewExamples.swift b/Apps/Examples/Examples/FioriSwiftUICore/Views/OtherViewExamples.swift index f55f3a408..18e609314 100644 --- a/Apps/Examples/Examples/FioriSwiftUICore/Views/OtherViewExamples.swift +++ b/Apps/Examples/Examples/FioriSwiftUICore/Views/OtherViewExamples.swift @@ -9,6 +9,11 @@ struct OtherViewExamples: View { { Text("KeyValueItem Example") } + NavigationLink( + destination: _KeyValueItemExample()) + { + Text("_KeyValueItem Example") + } } } } diff --git a/Apps/Examples/Examples/FioriSwiftUICore/Views/_KeyValueItemExample.swift b/Apps/Examples/Examples/FioriSwiftUICore/Views/_KeyValueItemExample.swift new file mode 100644 index 000000000..a4e68bc15 --- /dev/null +++ b/Apps/Examples/Examples/FioriSwiftUICore/Views/_KeyValueItemExample.swift @@ -0,0 +1,50 @@ +import FioriSwiftUICore +import SwiftUI + +struct _KeyValueItemExample: View { + var body: some View { + Text("_KeyValueItemExample") + List { + Text("Default Horizontal") + _KeyValueItem { + Text("Key 1") + + } value: { + Text("Value 1") + } + + Text("Vertical") + _KeyValueItem(key: { + Text("Vertical Axis") + }, value: { + Text("Value 2") + }, axis: .vertical) + + Text("Custom Color and Font") + _KeyValueItem { + Text("Custom Color") + .foregroundStyle(.red) + .font(.fiori(forTextStyle: .title1)) + } value: { + Text("Value 3") + .foregroundStyle(.brown) + .font(.fiori(forTextStyle: .footnote)) + } + + Text("Verticle Custom Color and Font") + _KeyValueItem(key: { + Text("Custom Color and Font Vertical Axis") + .foregroundStyle(.red) + .font(.fiori(forTextStyle: .title1)) + }, value: { + Text("Value 4") + .foregroundStyle(.brown) + .font(.fiori(forTextStyle: .footnote)) + }, axis: .vertical) + } + } +} + +#Preview { + _KeyValueItemExample() +} diff --git a/Sources/FioriCharts/Resources/sr-Latn-RS.lproj/Localizable.strings b/Sources/FioriCharts/Resources/sr-Latn-RS.lproj/Localizable.strings deleted file mode 100644 index 05edd0e2e..000000000 --- a/Sources/FioriCharts/Resources/sr-Latn-RS.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* XMSG: Placeholder text in chart when there is no data */ -"No Data" = "Nema podataka"; - diff --git a/Sources/FioriSwiftUICore/Models/ModelDefinitions.swift b/Sources/FioriSwiftUICore/Models/ModelDefinitions.swift index 26a40302b..6f65183c6 100644 --- a/Sources/FioriSwiftUICore/Models/ModelDefinitions.swift +++ b/Sources/FioriSwiftUICore/Models/ModelDefinitions.swift @@ -80,12 +80,15 @@ public protocol KPIItemModel: KpiComponent, SubtitleComponent, KPIHeaderItemMode public protocol KPIProgressItemModel: KpiProgressComponent, SubtitleComponent, FootnoteComponent, KPIHeaderItemModel {} // sourcery: generated_component -public protocol KeyValueItemModel: KeyComponent, ValueComponent { +public protocol _KeyValueItemModel: KeyComponent, ValueComponent { // sourcery: default.value = .horizontal // sourcery: no_view var axis: Axis { get } } +@available(*, unavailable, renamed: "_KeyValueItemModel", message: "Will be removed in the future release. Please create KeyValueItem with other initializers instead.") +public protocol KeyValueItemModel {} + // sourcery: add_env_props = "sharedAction" // sourcery: generated_component_not_configurable public protocol _ActionModel: ActionComponent {} diff --git a/Sources/FioriSwiftUICore/Views/KeyValueItem+View.swift b/Sources/FioriSwiftUICore/Views/_KeyValueItem+View.swift similarity index 95% rename from Sources/FioriSwiftUICore/Views/KeyValueItem+View.swift rename to Sources/FioriSwiftUICore/Views/_KeyValueItem+View.swift index 36b889c37..3498c6cce 100644 --- a/Sources/FioriSwiftUICore/Views/KeyValueItem+View.swift +++ b/Sources/FioriSwiftUICore/Views/_KeyValueItem+View.swift @@ -2,7 +2,7 @@ import Foundation import SwiftUI extension Fiori { - enum KeyValueItem { + enum _KeyValueItem { typealias KeyCumulative = EmptyModifier typealias ValueCumulative = EmptyModifier @@ -30,7 +30,7 @@ extension Fiori { } } -extension KeyValueItem: View { +extension _KeyValueItem: View { public var body: some View { CompactVStack(alignment: .leading) { if _axis == .horizontal { diff --git a/Sources/FioriSwiftUICore/_ComponentProtocols/BaseComponentProtocols.swift b/Sources/FioriSwiftUICore/_ComponentProtocols/BaseComponentProtocols.swift index 25880422b..b9b814aeb 100755 --- a/Sources/FioriSwiftUICore/_ComponentProtocols/BaseComponentProtocols.swift +++ b/Sources/FioriSwiftUICore/_ComponentProtocols/BaseComponentProtocols.swift @@ -534,3 +534,9 @@ protocol _LineComponent { @ViewBuilder var line: (() -> any View)? { get } } + +// sourcery: BaseComponent +protocol _KeyComponent { + // sourcery: @ViewBuilder + var key: AttributedString { get } +} diff --git a/Sources/FioriSwiftUICore/_ComponentProtocols/CompositeComponentProtocols.swift b/Sources/FioriSwiftUICore/_ComponentProtocols/CompositeComponentProtocols.swift index 54c4a851f..70f4d2a6e 100755 --- a/Sources/FioriSwiftUICore/_ComponentProtocols/CompositeComponentProtocols.swift +++ b/Sources/FioriSwiftUICore/_ComponentProtocols/CompositeComponentProtocols.swift @@ -1002,3 +1002,19 @@ protocol _StepProgressIndicatorComponent: _TitleComponent, _ActionComponent, _Ca // sourcery: resultBuilder.returnType = any IndexedViewContainer var steps: [StepItem] { get } } + +/// `KeyValueItem` provides a customizable activity item with a key and a value. +/// +/// ## Usage +/// ```swift +/// KeyValueItem(key: { +/// Text("key 1") +/// }, value: { +/// Text("value 1") +/// }, axis: .vertical) +/// ``` +// sourcery: CompositeComponent +protocol _KeyValueItemComponent: _KeyComponent, _ValueComponent, _MandatoryField, _FormViewComponent { + // sourcery: defaultValue = .horizontal + var axis: Axis { get } +} diff --git a/Sources/FioriSwiftUICore/_FioriStyles/KeyStyle.fiori.swift b/Sources/FioriSwiftUICore/_FioriStyles/KeyStyle.fiori.swift new file mode 100644 index 000000000..935f044eb --- /dev/null +++ b/Sources/FioriSwiftUICore/_FioriStyles/KeyStyle.fiori.swift @@ -0,0 +1,35 @@ +import FioriThemeManager + +// Generated using Sourcery 2.1.7 — https://github.com/krzysztofzablocki/Sourcery +// DO NOT EDIT +import Foundation +import SwiftUI + +/// ** +// This file provides default fiori style for the component. +// +// 1. Uncomment the following code. +// 2. Implement layout and style in corresponding places. +// 3. Delete `.generated` from file name. +// 4. Move this file to `_FioriStyles` folder under `FioriSwiftUICore`. +// */ +// +// Base Layout style +public struct KeyBaseStyle: KeyStyle { + @ViewBuilder + public func makeBody(_ configuration: KeyConfiguration) -> some View { + // Add default layout here + configuration.key + } +} + +// Default fiori styles +public struct KeyFioriStyle: KeyStyle { + @ViewBuilder + public func makeBody(_ configuration: KeyConfiguration) -> some View { + Key(configuration) + // Add default style here + // .foregroundStyle(Color.preferredColor(<#fiori color#>)) + // .font(.fiori(forTextStyle: <#fiori font#>)) + } +} diff --git a/Sources/FioriSwiftUICore/_FioriStyles/KeyValueItemStyle.fiori.swift b/Sources/FioriSwiftUICore/_FioriStyles/KeyValueItemStyle.fiori.swift new file mode 100644 index 000000000..de1d9d001 --- /dev/null +++ b/Sources/FioriSwiftUICore/_FioriStyles/KeyValueItemStyle.fiori.swift @@ -0,0 +1,79 @@ +import FioriThemeManager + +// Generated using Sourcery 2.1.7 — https://github.com/krzysztofzablocki/Sourcery +// DO NOT EDIT +import Foundation +import SwiftUI + +// Base Layout style +public struct KeyValueItemBaseStyle: KeyValueItemStyle { + public func makeBody(_ configuration: KeyValueItemConfiguration) -> some View { + CompactVStack(alignment: .leading) { + switch configuration.axis { + case .horizontal: + HStack(spacing: 0) { + configuration.key + if configuration.isRequired { + configuration.mandatoryFieldIndicator + } + Spacer() + configuration.value + } + .frame(maxWidth: .infinity) + case .vertical: + HStack(spacing: 0) { + configuration.key + if configuration.isRequired { + configuration.mandatoryFieldIndicator + } + } + configuration.value + } + }.accessibilityElement(children: .combine) + } +} + +// Default fiori styles +extension KeyValueItemFioriStyle { + struct ContentFioriStyle: KeyValueItemStyle { + func makeBody(_ configuration: KeyValueItemConfiguration) -> some View { + KeyValueItem(configuration) + .disabled(configuration.controlState == .disabled || configuration.controlState == .readOnly) + } + } + + public struct KeyFioriStyle: KeyStyle { + let keyValueItemConfiguration: KeyValueItemConfiguration + + public func makeBody(_ configuration: KeyConfiguration) -> some View { + Key(configuration) + .foregroundStyle(Color.preferredColor(self.keyValueItemConfiguration.controlState == .disabled ? .separator : .primaryLabel)) + } + } + + struct ValueFioriStyle: ValueStyle { + let keyValueItemConfiguration: KeyValueItemConfiguration + + func makeBody(_ configuration: ValueConfiguration) -> some View { + Value(configuration) + .foregroundStyle(Color.preferredColor(self.keyValueItemConfiguration.controlState == .disabled ? .separator : .primaryLabel)) + } + } + + struct MandatoryFieldIndicatorFioriStyle: MandatoryFieldIndicatorStyle { + let keyValueItemConfiguration: KeyValueItemConfiguration + func makeBody(_ configuration: MandatoryFieldIndicatorConfiguration) -> some View { + MandatoryFieldIndicator(configuration) + .font(.fiori(forTextStyle: .subheadline, weight: .semibold)) + .foregroundStyle(Color.preferredColor(self.keyValueItemConfiguration.controlState == .disabled ? .separator : .primaryLabel)) + } + } + + struct FormViewFioriStyle: FormViewStyle { + let keyValueItemConfiguration: KeyValueItemConfiguration + + func makeBody(_ configuration: FormViewConfiguration) -> some View { + FormView(configuration) + } + } +} diff --git a/Sources/FioriSwiftUICore/_generated/StyleableComponents/Key/Key.generated.swift b/Sources/FioriSwiftUICore/_generated/StyleableComponents/Key/Key.generated.swift new file mode 100644 index 000000000..ab6ae3645 --- /dev/null +++ b/Sources/FioriSwiftUICore/_generated/StyleableComponents/Key/Key.generated.swift @@ -0,0 +1,63 @@ +// Generated using Sourcery 2.1.7 — https://github.com/krzysztofzablocki/Sourcery +// DO NOT EDIT +import Foundation +import SwiftUI + +public struct Key { + let key: any View + + @Environment(\.keyStyle) var style + + fileprivate var _shouldApplyDefaultStyle = true + + public init(@ViewBuilder key: () -> any View) { + self.key = key() + } +} + +public extension Key { + init(key: AttributedString) { + self.init(key: { Text(key) }) + } +} + +public extension Key { + init(_ configuration: KeyConfiguration) { + self.init(configuration, shouldApplyDefaultStyle: false) + } + + internal init(_ configuration: KeyConfiguration, shouldApplyDefaultStyle: Bool) { + self.key = configuration.key + self._shouldApplyDefaultStyle = shouldApplyDefaultStyle + } +} + +extension Key: View { + public var body: some View { + if self._shouldApplyDefaultStyle { + self.defaultStyle() + } else { + self.style.resolve(configuration: .init(key: .init(self.key))).typeErased + .transformEnvironment(\.keyStyleStack) { stack in + if !stack.isEmpty { + stack.removeLast() + } + } + } + } +} + +private extension Key { + func shouldApplyDefaultStyle(_ bool: Bool) -> some View { + var s = self + s._shouldApplyDefaultStyle = bool + return s + } + + func defaultStyle() -> some View { + Key(.init(key: .init(self.key))) + .shouldApplyDefaultStyle(false) + .keyStyle(.fiori) + .typeErased + } +} diff --git a/Sources/FioriSwiftUICore/_generated/StyleableComponents/Key/KeyStyle.generated.swift b/Sources/FioriSwiftUICore/_generated/StyleableComponents/Key/KeyStyle.generated.swift new file mode 100644 index 000000000..fd3b72f23 --- /dev/null +++ b/Sources/FioriSwiftUICore/_generated/StyleableComponents/Key/KeyStyle.generated.swift @@ -0,0 +1,28 @@ +// Generated using Sourcery 2.1.7 — https://github.com/krzysztofzablocki/Sourcery +// DO NOT EDIT +import Foundation +import SwiftUI + +public protocol KeyStyle: DynamicProperty { + associatedtype Body: View + + func makeBody(_ configuration: KeyConfiguration) -> Body +} + +struct AnyKeyStyle: KeyStyle { + let content: (KeyConfiguration) -> any View + + init(@ViewBuilder _ content: @escaping (KeyConfiguration) -> any View) { + self.content = content + } + + public func makeBody(_ configuration: KeyConfiguration) -> some View { + self.content(configuration).typeErased + } +} + +public struct KeyConfiguration { + public let key: Key + + public typealias Key = ConfigurationViewWrapper +} diff --git a/Sources/FioriSwiftUICore/_generated/StyleableComponents/KeyValueItem/KeyValueItem.generated.swift b/Sources/FioriSwiftUICore/_generated/StyleableComponents/KeyValueItem/KeyValueItem.generated.swift new file mode 100644 index 000000000..97ad4f273 --- /dev/null +++ b/Sources/FioriSwiftUICore/_generated/StyleableComponents/KeyValueItem/KeyValueItem.generated.swift @@ -0,0 +1,107 @@ +// Generated using Sourcery 2.1.7 — https://github.com/krzysztofzablocki/Sourcery +// DO NOT EDIT +import Foundation +import SwiftUI + +/// `KeyValueItem` provides a customizable activity item with a key and a value. +/// +/// ## Usage +/// ```swift +/// KeyValueItem(key: { +/// Text("key 1") +/// }, value: { +/// Text("value 1") +/// }, axis: .vertical) +/// ``` +public struct KeyValueItem { + let key: any View + let value: any View + let mandatoryFieldIndicator: any View + let isRequired: Bool + /// The `ControlState` of the form view. The default is `normal` + let controlState: ControlState + /// The error message of the form view. + let errorMessage: AttributedString? + let axis: Axis + + @Environment(\.keyValueItemStyle) var style + + fileprivate var _shouldApplyDefaultStyle = true + + public init(@ViewBuilder key: () -> any View, + @ViewBuilder value: () -> any View = { EmptyView() }, + @ViewBuilder mandatoryFieldIndicator: () -> any View = { Text("*") }, + isRequired: Bool = false, + controlState: ControlState = .normal, + errorMessage: AttributedString? = nil, + axis: Axis = .horizontal) + { + self.key = Key(key: key) + self.value = Value(value: value) + self.mandatoryFieldIndicator = MandatoryFieldIndicator(mandatoryFieldIndicator: mandatoryFieldIndicator) + self.isRequired = isRequired + self.controlState = controlState + self.errorMessage = errorMessage + self.axis = axis + } +} + +public extension KeyValueItem { + init(key: AttributedString, + value: AttributedString? = nil, + mandatoryFieldIndicator: TextOrIcon? = .text("*"), + isRequired: Bool = false, + controlState: ControlState = .normal, + errorMessage: AttributedString? = nil, + axis: Axis = .horizontal) + { + self.init(key: { Text(key) }, value: { OptionalText(value) }, mandatoryFieldIndicator: { TextOrIconView(mandatoryFieldIndicator) }, isRequired: isRequired, controlState: controlState, errorMessage: errorMessage, axis: axis) + } +} + +public extension KeyValueItem { + init(_ configuration: KeyValueItemConfiguration) { + self.init(configuration, shouldApplyDefaultStyle: false) + } + + internal init(_ configuration: KeyValueItemConfiguration, shouldApplyDefaultStyle: Bool) { + self.key = configuration.key + self.value = configuration.value + self.mandatoryFieldIndicator = configuration.mandatoryFieldIndicator + self.isRequired = configuration.isRequired + self.controlState = configuration.controlState + self.errorMessage = configuration.errorMessage + self.axis = configuration.axis + self._shouldApplyDefaultStyle = shouldApplyDefaultStyle + } +} + +extension KeyValueItem: View { + public var body: some View { + if self._shouldApplyDefaultStyle { + self.defaultStyle() + } else { + self.style.resolve(configuration: .init(key: .init(self.key), value: .init(self.value), mandatoryFieldIndicator: .init(self.mandatoryFieldIndicator), isRequired: self.isRequired, controlState: self.controlState, errorMessage: self.errorMessage, axis: self.axis)).typeErased + .transformEnvironment(\.keyValueItemStyleStack) { stack in + if !stack.isEmpty { + stack.removeLast() + } + } + } + } +} + +private extension KeyValueItem { + func shouldApplyDefaultStyle(_ bool: Bool) -> some View { + var s = self + s._shouldApplyDefaultStyle = bool + return s + } + + func defaultStyle() -> some View { + KeyValueItem(.init(key: .init(self.key), value: .init(self.value), mandatoryFieldIndicator: .init(self.mandatoryFieldIndicator), isRequired: self.isRequired, controlState: self.controlState, errorMessage: self.errorMessage, axis: self.axis)) + .shouldApplyDefaultStyle(false) + .keyValueItemStyle(KeyValueItemFioriStyle.ContentFioriStyle()) + .typeErased + } +} diff --git a/Sources/FioriSwiftUICore/_generated/StyleableComponents/KeyValueItem/KeyValueItemStyle.generated.swift b/Sources/FioriSwiftUICore/_generated/StyleableComponents/KeyValueItem/KeyValueItemStyle.generated.swift new file mode 100644 index 000000000..ee0a3b4e7 --- /dev/null +++ b/Sources/FioriSwiftUICore/_generated/StyleableComponents/KeyValueItem/KeyValueItemStyle.generated.swift @@ -0,0 +1,46 @@ +// Generated using Sourcery 2.1.7 — https://github.com/krzysztofzablocki/Sourcery +// DO NOT EDIT +import Foundation +import SwiftUI + +public protocol KeyValueItemStyle: DynamicProperty { + associatedtype Body: View + + func makeBody(_ configuration: KeyValueItemConfiguration) -> Body +} + +struct AnyKeyValueItemStyle: KeyValueItemStyle { + let content: (KeyValueItemConfiguration) -> any View + + init(@ViewBuilder _ content: @escaping (KeyValueItemConfiguration) -> any View) { + self.content = content + } + + public func makeBody(_ configuration: KeyValueItemConfiguration) -> some View { + self.content(configuration).typeErased + } +} + +public struct KeyValueItemConfiguration { + public let key: Key + public let value: Value + public let mandatoryFieldIndicator: MandatoryFieldIndicator + public let isRequired: Bool + public let controlState: ControlState + public let errorMessage: AttributedString? + public let axis: Axis + + public typealias Key = ConfigurationViewWrapper + public typealias Value = ConfigurationViewWrapper + public typealias MandatoryFieldIndicator = ConfigurationViewWrapper +} + +public struct KeyValueItemFioriStyle: KeyValueItemStyle { + public func makeBody(_ configuration: KeyValueItemConfiguration) -> some View { + KeyValueItem(configuration) + .keyStyle(KeyFioriStyle(keyValueItemConfiguration: configuration)) + .valueStyle(ValueFioriStyle(keyValueItemConfiguration: configuration)) + .mandatoryFieldIndicatorStyle(MandatoryFieldIndicatorFioriStyle(keyValueItemConfiguration: configuration)) + .formViewStyle(FormViewFioriStyle(keyValueItemConfiguration: configuration)) + } +} diff --git a/Sources/FioriSwiftUICore/_generated/SupportingFiles/ComponentStyleProtocol+Extension.generated.swift b/Sources/FioriSwiftUICore/_generated/SupportingFiles/ComponentStyleProtocol+Extension.generated.swift index 86dff0b7d..736d56bb5 100755 --- a/Sources/FioriSwiftUICore/_generated/SupportingFiles/ComponentStyleProtocol+Extension.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/SupportingFiles/ComponentStyleProtocol+Extension.generated.swift @@ -2677,6 +2677,20 @@ public extension JouleWelcomeScreenStyle where Self == JouleWelcomeScreenMessage } } +// MARK: KeyStyle + +public extension KeyStyle where Self == KeyBaseStyle { + static var base: KeyBaseStyle { + KeyBaseStyle() + } +} + +public extension KeyStyle where Self == KeyFioriStyle { + static var fiori: KeyFioriStyle { + KeyFioriStyle() + } +} + // MARK: KeyValueFormViewStyle public extension KeyValueFormViewStyle where Self == KeyValueFormViewBaseStyle { @@ -2796,6 +2810,104 @@ public extension KeyValueFormViewStyle where Self == KeyValueFormViewNoteFormVie } } +// MARK: KeyValueItemStyle + +public extension KeyValueItemStyle where Self == KeyValueItemBaseStyle { + static var base: KeyValueItemBaseStyle { + KeyValueItemBaseStyle() + } +} + +public extension KeyValueItemStyle where Self == KeyValueItemFioriStyle { + static var fiori: KeyValueItemFioriStyle { + KeyValueItemFioriStyle() + } +} + +public struct KeyValueItemKeyStyle: KeyValueItemStyle { + let style: any KeyStyle + + public func makeBody(_ configuration: KeyValueItemConfiguration) -> some View { + KeyValueItem(configuration) + .keyStyle(self.style) + .typeErased + } +} + +public extension KeyValueItemStyle where Self == KeyValueItemKeyStyle { + static func keyStyle(_ style: some KeyStyle) -> KeyValueItemKeyStyle { + KeyValueItemKeyStyle(style: style) + } + + static func keyStyle(@ViewBuilder content: @escaping (KeyConfiguration) -> some View) -> KeyValueItemKeyStyle { + let style = AnyKeyStyle(content) + return KeyValueItemKeyStyle(style: style) + } +} + +public struct KeyValueItemValueStyle: KeyValueItemStyle { + let style: any ValueStyle + + public func makeBody(_ configuration: KeyValueItemConfiguration) -> some View { + KeyValueItem(configuration) + .valueStyle(self.style) + .typeErased + } +} + +public extension KeyValueItemStyle where Self == KeyValueItemValueStyle { + static func valueStyle(_ style: some ValueStyle) -> KeyValueItemValueStyle { + KeyValueItemValueStyle(style: style) + } + + static func valueStyle(@ViewBuilder content: @escaping (ValueConfiguration) -> some View) -> KeyValueItemValueStyle { + let style = AnyValueStyle(content) + return KeyValueItemValueStyle(style: style) + } +} + +public struct KeyValueItemMandatoryFieldIndicatorStyle: KeyValueItemStyle { + let style: any MandatoryFieldIndicatorStyle + + public func makeBody(_ configuration: KeyValueItemConfiguration) -> some View { + KeyValueItem(configuration) + .mandatoryFieldIndicatorStyle(self.style) + .typeErased + } +} + +public extension KeyValueItemStyle where Self == KeyValueItemMandatoryFieldIndicatorStyle { + static func mandatoryFieldIndicatorStyle(_ style: some MandatoryFieldIndicatorStyle) -> KeyValueItemMandatoryFieldIndicatorStyle { + KeyValueItemMandatoryFieldIndicatorStyle(style: style) + } + + static func mandatoryFieldIndicatorStyle(@ViewBuilder content: @escaping (MandatoryFieldIndicatorConfiguration) -> some View) -> KeyValueItemMandatoryFieldIndicatorStyle { + let style = AnyMandatoryFieldIndicatorStyle(content) + return KeyValueItemMandatoryFieldIndicatorStyle(style: style) + } +} + +public struct KeyValueItemFormViewStyle: KeyValueItemStyle { + let style: any FormViewStyle + + public func makeBody(_ configuration: KeyValueItemConfiguration) -> some View { + KeyValueItem(configuration) + .formViewStyle(self.style) + .typeErased + } +} + +public extension KeyValueItemStyle where Self == KeyValueItemFormViewStyle { + static func formViewStyle(_ style: some FormViewStyle) -> KeyValueItemFormViewStyle { + KeyValueItemFormViewStyle(style: style) + } + + static func formViewStyle(@ViewBuilder content: @escaping (FormViewConfiguration) -> some View) -> KeyValueItemFormViewStyle { + let style = AnyFormViewStyle(content) + return KeyValueItemFormViewStyle(style: style) + } +} + // MARK: KpiCaptionStyle public extension KpiCaptionStyle where Self == KpiCaptionBaseStyle { diff --git a/Sources/FioriSwiftUICore/_generated/SupportingFiles/EnvironmentVariables.generated.swift b/Sources/FioriSwiftUICore/_generated/SupportingFiles/EnvironmentVariables.generated.swift index 57433252a..896991b04 100755 --- a/Sources/FioriSwiftUICore/_generated/SupportingFiles/EnvironmentVariables.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/SupportingFiles/EnvironmentVariables.generated.swift @@ -990,6 +990,27 @@ extension EnvironmentValues { } } +// MARK: KeyStyle + +struct KeyStyleStackKey: EnvironmentKey { + static let defaultValue: [any KeyStyle] = [] +} + +extension EnvironmentValues { + var keyStyle: any KeyStyle { + self.keyStyleStack.last ?? .base + } + + var keyStyleStack: [any KeyStyle] { + get { + self[KeyStyleStackKey.self] + } + set { + self[KeyStyleStackKey.self] = newValue + } + } +} + // MARK: KeyValueFormViewStyle struct KeyValueFormViewStyleStackKey: EnvironmentKey { @@ -1011,6 +1032,27 @@ extension EnvironmentValues { } } +// MARK: KeyValueItemStyle + +struct KeyValueItemStyleStackKey: EnvironmentKey { + static let defaultValue: [any KeyValueItemStyle] = [] +} + +extension EnvironmentValues { + var keyValueItemStyle: any KeyValueItemStyle { + self.keyValueItemStyleStack.last ?? .base.concat(.fiori) + } + + var keyValueItemStyleStack: [any KeyValueItemStyle] { + get { + self[KeyValueItemStyleStackKey.self] + } + set { + self[KeyValueItemStyleStackKey.self] = newValue + } + } +} + // MARK: KpiCaptionStyle struct KpiCaptionStyleStackKey: EnvironmentKey { diff --git a/Sources/FioriSwiftUICore/_generated/SupportingFiles/ModifiedStyle.generated.swift b/Sources/FioriSwiftUICore/_generated/SupportingFiles/ModifiedStyle.generated.swift index efec6ecc3..0beee7e93 100755 --- a/Sources/FioriSwiftUICore/_generated/SupportingFiles/ModifiedStyle.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/SupportingFiles/ModifiedStyle.generated.swift @@ -1324,6 +1324,34 @@ public extension JouleWelcomeScreenStyle { } } +// MARK: KeyStyle + +extension ModifiedStyle: KeyStyle where Style: KeyStyle { + public func makeBody(_ configuration: KeyConfiguration) -> some View { + Key(configuration) + .keyStyle(self.style) + .modifier(self.modifier) + } +} + +public struct KeyStyleModifier: ViewModifier { + let style: Style + + public func body(content: Content) -> some View { + content.keyStyle(self.style) + } +} + +public extension KeyStyle { + func modifier(_ modifier: some ViewModifier) -> some KeyStyle { + ModifiedStyle(style: self, modifier: modifier) + } + + func concat(_ style: some KeyStyle) -> some KeyStyle { + style.modifier(KeyStyleModifier(style: self)) + } +} + // MARK: KeyValueFormViewStyle extension ModifiedStyle: KeyValueFormViewStyle where Style: KeyValueFormViewStyle { @@ -1352,6 +1380,34 @@ public extension KeyValueFormViewStyle { } } +// MARK: KeyValueItemStyle + +extension ModifiedStyle: KeyValueItemStyle where Style: KeyValueItemStyle { + public func makeBody(_ configuration: KeyValueItemConfiguration) -> some View { + KeyValueItem(configuration) + .keyValueItemStyle(self.style) + .modifier(self.modifier) + } +} + +public struct KeyValueItemStyleModifier: ViewModifier { + let style: Style + + public func body(content: Content) -> some View { + content.keyValueItemStyle(self.style) + } +} + +public extension KeyValueItemStyle { + func modifier(_ modifier: some ViewModifier) -> some KeyValueItemStyle { + ModifiedStyle(style: self, modifier: modifier) + } + + func concat(_ style: some KeyValueItemStyle) -> some KeyValueItemStyle { + style.modifier(KeyValueItemStyleModifier(style: self)) + } +} + // MARK: KpiCaptionStyle extension ModifiedStyle: KpiCaptionStyle where Style: KpiCaptionStyle { diff --git a/Sources/FioriSwiftUICore/_generated/SupportingFiles/ResolvedStyle.generated.swift b/Sources/FioriSwiftUICore/_generated/SupportingFiles/ResolvedStyle.generated.swift index 8641adcd2..8dca19f8f 100755 --- a/Sources/FioriSwiftUICore/_generated/SupportingFiles/ResolvedStyle.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/SupportingFiles/ResolvedStyle.generated.swift @@ -755,6 +755,22 @@ extension JouleWelcomeScreenStyle { } } +// MARK: KeyStyle + +struct ResolvedKeyStyle: View { + let style: Style + let configuration: KeyConfiguration + var body: some View { + self.style.makeBody(self.configuration) + } +} + +extension KeyStyle { + func resolve(configuration: KeyConfiguration) -> some View { + ResolvedKeyStyle(style: self, configuration: configuration) + } +} + // MARK: KeyValueFormViewStyle struct ResolvedKeyValueFormViewStyle: View { @@ -771,6 +787,22 @@ extension KeyValueFormViewStyle { } } +// MARK: KeyValueItemStyle + +struct ResolvedKeyValueItemStyle: View { + let style: Style + let configuration: KeyValueItemConfiguration + var body: some View { + self.style.makeBody(self.configuration) + } +} + +extension KeyValueItemStyle { + func resolve(configuration: KeyValueItemConfiguration) -> some View { + ResolvedKeyValueItemStyle(style: self, configuration: configuration) + } +} + // MARK: KpiCaptionStyle struct ResolvedKpiCaptionStyle: View { diff --git a/Sources/FioriSwiftUICore/_generated/SupportingFiles/StyleConfiguration+Extension.generated.swift b/Sources/FioriSwiftUICore/_generated/SupportingFiles/StyleConfiguration+Extension.generated.swift index 5ed6a2cd3..79979adf3 100755 --- a/Sources/FioriSwiftUICore/_generated/SupportingFiles/StyleConfiguration+Extension.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/SupportingFiles/StyleConfiguration+Extension.generated.swift @@ -69,6 +69,14 @@ extension KeyValueFormViewConfiguration { } } +// MARK: KeyValueItemConfiguration + +extension KeyValueItemConfiguration { + var _formView: FormView { + FormView(.init(controlState: self.controlState, errorMessage: self.errorMessage), shouldApplyDefaultStyle: true) + } +} + // MARK: LinearProgressIndicatorViewConfiguration extension LinearProgressIndicatorViewConfiguration { diff --git a/Sources/FioriSwiftUICore/_generated/SupportingFiles/View+Extension_.generated.swift b/Sources/FioriSwiftUICore/_generated/SupportingFiles/View+Extension_.generated.swift index fa6bbe327..fb4154710 100755 --- a/Sources/FioriSwiftUICore/_generated/SupportingFiles/View+Extension_.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/SupportingFiles/View+Extension_.generated.swift @@ -802,6 +802,23 @@ public extension View { } } +// MARK: KeyStyle + +public extension View { + func keyStyle(_ style: some KeyStyle) -> some View { + self.transformEnvironment(\.keyStyleStack) { stack in + stack.append(style) + } + } + + func keyStyle(@ViewBuilder content: @escaping (KeyConfiguration) -> some View) -> some View { + self.transformEnvironment(\.keyStyleStack) { stack in + let style = AnyKeyStyle(content) + stack.append(style) + } + } +} + // MARK: KeyValueFormViewStyle public extension View { @@ -819,6 +836,23 @@ public extension View { } } +// MARK: KeyValueItemStyle + +public extension View { + func keyValueItemStyle(_ style: some KeyValueItemStyle) -> some View { + self.transformEnvironment(\.keyValueItemStyleStack) { stack in + stack.append(style) + } + } + + func keyValueItemStyle(@ViewBuilder content: @escaping (KeyValueItemConfiguration) -> some View) -> some View { + self.transformEnvironment(\.keyValueItemStyleStack) { stack in + let style = AnyKeyValueItemStyle(content) + stack.append(style) + } + } +} + // MARK: KpiCaptionStyle public extension View { diff --git a/Sources/FioriSwiftUICore/_generated/SupportingFiles/ViewEmptyChecking+Extension.generated.swift b/Sources/FioriSwiftUICore/_generated/SupportingFiles/ViewEmptyChecking+Extension.generated.swift index 14caff301..6a17de75d 100755 --- a/Sources/FioriSwiftUICore/_generated/SupportingFiles/ViewEmptyChecking+Extension.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/SupportingFiles/ViewEmptyChecking+Extension.generated.swift @@ -356,6 +356,12 @@ extension JouleWelcomeScreen: _ViewEmptyChecking { } } +extension Key: _ViewEmptyChecking { + public var isEmpty: Bool { + key.isEmpty + } +} + extension KeyValueFormView: _ViewEmptyChecking { public var isEmpty: Bool { title.isEmpty && @@ -364,6 +370,14 @@ extension KeyValueFormView: _ViewEmptyChecking { } } +extension KeyValueItem: _ViewEmptyChecking { + public var isEmpty: Bool { + key.isEmpty && + value.isEmpty && + mandatoryFieldIndicator.isEmpty + } +} + extension KpiCaption: _ViewEmptyChecking { public var isEmpty: Bool { kpiCaption.isEmpty diff --git a/Sources/FioriSwiftUICore/_generated/ViewModels/API/KPIProgressItem+API.generated.swift b/Sources/FioriSwiftUICore/_generated/ViewModels/API/KPIProgressItem+API.generated.swift index b50de1fa7..3f9ee850d 100644 --- a/Sources/FioriSwiftUICore/_generated/ViewModels/API/KPIProgressItem+API.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/ViewModels/API/KPIProgressItem+API.generated.swift @@ -13,8 +13,8 @@ public struct KPIProgressItem { let _fraction: Double? let _subtitle: Subtitle let _footnote: Footnote - var action: (() -> Void)? = nil @State var isPressed: Bool = false + var action: (() -> Void)? = nil private var isModelInit: Bool = false private var isKpiNil: Bool = false private var isSubtitleNil: Bool = false diff --git a/Sources/FioriSwiftUICore/_generated/ViewModels/API/ObjectHeader+API.generated.swift b/Sources/FioriSwiftUICore/_generated/ViewModels/API/ObjectHeader+API.generated.swift index c629f96c7..1302f965c 100644 --- a/Sources/FioriSwiftUICore/_generated/ViewModels/API/ObjectHeader+API.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/ViewModels/API/ObjectHeader+API.generated.swift @@ -25,12 +25,12 @@ public struct ObjectHeader Void)? = nil @State var _height: CGFloat = 0 - var barItemFrame: CGRect = .zero var updateSearchListPickerHeight: ((CGFloat) -> ())? = nil + var barItemFrame: CGRect = .zero public init(model: OptionListPickerItemModel) { self.init(value: Binding<[Int]>(get: { model.value }, set: { model.value = $0 }), valueOptions: model.valueOptions, hint: model.hint, itemLayout: model.itemLayout, onTap: model.onTap) } diff --git a/Sources/FioriSwiftUICore/_generated/ViewModels/API/SearchListPickerItem+API.generated.swift b/Sources/FioriSwiftUICore/_generated/ViewModels/API/SearchListPickerItem+API.generated.swift index 063c2a925..7ed646ed7 100644 --- a/Sources/FioriSwiftUICore/_generated/ViewModels/API/SearchListPickerItem+API.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/ViewModels/API/SearchListPickerItem+API.generated.swift @@ -9,19 +9,19 @@ public struct SearchListPickerItem { var _valueOptions: [String] var _hint: String? = nil var _onTap: ((_ index: Int) -> Void)? = nil - var allowsEmptySelection: Bool = false - @State var _searchText: String = "" - var updateSearchListPickerHeight: ((CGFloat) -> ())? = nil + var barItemFrame: CGRect = .zero var allowsDisplaySelectionCount: Bool = true - @State var _height: CGFloat = 44 + var updateSearchListPickerHeight: ((CGFloat) -> ())? = nil + var allowsEmptySelection: Bool = false + @State var _keyboardHeight: CGFloat = 0.0 @State var _searchViewCornerRadius: CGFloat = 18 + var isSearchBarHidden: Bool = false var allowsMultipleSelection: Bool = false var disableListEntriesSection: Bool = false - var barItemFrame: CGRect = .zero - var selectAll: ((Bool) -> ())? = nil - var isSearchBarHidden: Bool = false - @State var _keyboardHeight: CGFloat = 0.0 + @State var _height: CGFloat = 44 let popoverWidth = 393.0 + var selectAll: ((Bool) -> ())? = nil + @State var _searchText: String = "" public init(model: SearchListPickerItemModel) { self.init(value: Binding<[Int]>(get: { model.value }, set: { model.value = $0 }), valueOptions: model.valueOptions, hint: model.hint, onTap: model.onTap) } diff --git a/Sources/FioriSwiftUICore/_generated/ViewModels/API/SignatureCaptureView+API.generated.swift b/Sources/FioriSwiftUICore/_generated/ViewModels/API/SignatureCaptureView+API.generated.swift index 3bd73cd1c..da824e315 100644 --- a/Sources/FioriSwiftUICore/_generated/ViewModels/API/SignatureCaptureView+API.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/ViewModels/API/SignatureCaptureView+API.generated.swift @@ -20,35 +20,35 @@ public struct SignatureCaptureView Void)? let _onDelete: (() -> Void)? - var indicatorColor = Color.preferredColor(.primaryLabel) @State var isSaved = false - var appliesTintColorToImage = true + @State var fullSignatureImage: UIImage? + @State var currentDrawing = Drawing() + var watermarkTextColor: Color = .preferredColor(.tertiaryLabel) + var watermarkText: String? + var hidesXmark = false + var timestampFormatter: DateFormatter? var drawingViewBackgroundColor = Color.preferredColor(.primaryBackground) + var watermarkTextAlignment: NSTextAlignment = .natural + @State var isEditing = false var indicatorFont = Font.fiori(forTextStyle: .subheadline).weight(.semibold) - @State var currentDrawing = Drawing() - let _drawingViewMinHeight: CGFloat = 256 + var addsTimestampInImage: Bool = false var signatureLineColor = Color.preferredColor(.quaternaryLabel) - @State var drawings = [Drawing]() - var timestampFormatter: DateFormatter? - var watermarkTextColor: Color = .preferredColor(.tertiaryLabel) + var watermarkTextFont: UIFont = .preferredFont(forTextStyle: .caption1) + var appliesTintColorToImage = true + let _drawingViewMinHeight: CGFloat = 256 + var indicatorColor = Color.preferredColor(.primaryLabel) + @State var isReenterTapped = false + var isRequired = false var titleFont = Font.fiori(forTextStyle: .subheadline).weight(.semibold) - var hidesXmark = false var hidesSignatureLine = false + @State var drawings = [Drawing]() + var _drawingViewMaxHeight: CGFloat? + var strokeColor = Color.preferredColor(.primaryLabel) var cropsImage = false - @State var isReenterTapped = false - var isRequired = false - var xmarkColor = Color.preferredColor(.quaternaryLabel) - @State var fullSignatureImage: UIImage? - var strokeWidth: CGFloat = 3.0 - var addsTimestampInImage: Bool = false - var watermarkText: String? - var watermarkTextAlignment: NSTextAlignment = .natural - var watermarkTextFont: UIFont = .preferredFont(forTextStyle: .caption1) var titleColor = Color.preferredColor(.primaryLabel) - var _drawingViewMaxHeight: CGFloat? + var strokeWidth: CGFloat = 3.0 public private(set) var _heightDidChangePublisher = CurrentValueSubject(0) - @State var isEditing = false - var strokeColor = Color.preferredColor(.primaryLabel) + var xmarkColor = Color.preferredColor(.quaternaryLabel) private var isModelInit: Bool = false private var isTitleNil: Bool = false diff --git a/Sources/FioriSwiftUICore/_generated/ViewModels/API/SortFilterView+API.generated.swift b/Sources/FioriSwiftUICore/_generated/ViewModels/API/SortFilterView+API.generated.swift index f6c4a594b..d128eaa64 100644 --- a/Sources/FioriSwiftUICore/_generated/ViewModels/API/SortFilterView+API.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/ViewModels/API/SortFilterView+API.generated.swift @@ -16,8 +16,8 @@ public struct SortFilterView Void)? - let popoverWidth = 393.0 @State var size: CGSize = .zero + let popoverWidth = 393.0 @StateObject var context: SortFilterContext = SortFilterContext() private var isModelInit: Bool = false diff --git a/Sources/FioriSwiftUICore/_generated/ViewModels/API/UserConsentForm+API.generated.swift b/Sources/FioriSwiftUICore/_generated/ViewModels/API/UserConsentForm+API.generated.swift index a0eb2f6c4..dae061027 100644 --- a/Sources/FioriSwiftUICore/_generated/ViewModels/API/UserConsentForm+API.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/ViewModels/API/UserConsentForm+API.generated.swift @@ -23,8 +23,8 @@ public struct UserConsentForm Void)? let _didDeny: ((Bool) -> Void)? let _didCancel: (() -> Void)? - @State var _showAlert: (Bool, UserConsentAlertType) = (false, .deny) @State var _pageIndex = 0 + @State var _showAlert: (Bool, UserConsentAlertType) = (false, .deny) private var isModelInit: Bool = false private var isNextActionNil: Bool = false diff --git a/Sources/FioriSwiftUICore/_generated/ViewModels/API/UserConsentView+API.generated.swift b/Sources/FioriSwiftUICore/_generated/ViewModels/API/UserConsentView+API.generated.swift index 54eff7dbf..9ec153cdf 100644 --- a/Sources/FioriSwiftUICore/_generated/ViewModels/API/UserConsentView+API.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/ViewModels/API/UserConsentView+API.generated.swift @@ -10,8 +10,8 @@ public struct UserConsentView { let _didDeny: ((Int, Bool) -> Void)? let _didCancel: ((Int) -> Void)? let _didFinish: (([Int]) -> Void)? - @State var _allowedFormIndexes: [Int] = [] @State var _formIndex = 0 + @State var _allowedFormIndexes: [Int] = [] private var isModelInit: Bool = false private var isDidAllowNil: Bool = false diff --git a/Sources/FioriSwiftUICore/_generated/ViewModels/API/KeyValueItem+API.generated.swift b/Sources/FioriSwiftUICore/_generated/ViewModels/API/_KeyValueItem+API.generated.swift similarity index 72% rename from Sources/FioriSwiftUICore/_generated/ViewModels/API/KeyValueItem+API.generated.swift rename to Sources/FioriSwiftUICore/_generated/ViewModels/API/_KeyValueItem+API.generated.swift index a455d006f..4ed964654 100644 --- a/Sources/FioriSwiftUICore/_generated/ViewModels/API/KeyValueItem+API.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/ViewModels/API/_KeyValueItem+API.generated.swift @@ -2,7 +2,7 @@ // DO NOT EDIT import SwiftUI -public struct KeyValueItem { +public struct _KeyValueItem { @Environment(\.keyModifier) private var keyModifier @Environment(\.valueModifier) private var valueModifier @@ -25,16 +25,16 @@ public struct KeyValueItem { @ViewBuilder var key: some View { if isModelInit { - _key.modifier(keyModifier.concat(Fiori.KeyValueItem.key).concat(Fiori.KeyValueItem.keyCumulative)) + _key.modifier(keyModifier.concat(Fiori._KeyValueItem.key).concat(Fiori._KeyValueItem.keyCumulative)) } else { - _key.modifier(keyModifier.concat(Fiori.KeyValueItem.key)) + _key.modifier(keyModifier.concat(Fiori._KeyValueItem.key)) } } @ViewBuilder var value: some View { if isModelInit { - _value.modifier(valueModifier.concat(Fiori.KeyValueItem.value).concat(Fiori.KeyValueItem.valueCumulative)) + _value.modifier(valueModifier.concat(Fiori._KeyValueItem.value).concat(Fiori._KeyValueItem.valueCumulative)) } else { - _value.modifier(valueModifier.concat(Fiori.KeyValueItem.value)) + _value.modifier(valueModifier.concat(Fiori._KeyValueItem.value)) } } @@ -43,10 +43,10 @@ public struct KeyValueItem { } } -extension KeyValueItem where Key == Text, +extension _KeyValueItem where Key == Text, Value == _ConditionalContent { - public init(model: KeyValueItemModel) { + public init(model: _KeyValueItemModel) { self.init(key: model.key, value: model.value, axis: model.axis) } diff --git a/Sources/FioriSwiftUICore/_generated/ViewModels/API/_SingleStep+API.generated.swift b/Sources/FioriSwiftUICore/_generated/ViewModels/API/_SingleStep+API.generated.swift index 63bdfd7b2..531e3d8ec 100644 --- a/Sources/FioriSwiftUICore/_generated/ViewModels/API/_SingleStep+API.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/ViewModels/API/_SingleStep+API.generated.swift @@ -14,15 +14,15 @@ public struct _SingleStep } } -// FIXME: - Implement KeyValueItem specific LibraryContentProvider +// FIXME: - Implement _KeyValueItem specific LibraryContentProvider @available(iOS 14.0, macOS 11.0, *) -struct KeyValueItemLibraryContent: LibraryContentProvider { +struct _KeyValueItemLibraryContent: LibraryContentProvider { @LibraryContentBuilder var views: [LibraryItem] { - LibraryItem(KeyValueItem(model: LibraryPreviewData.Person.laurelosborn), + LibraryItem(_KeyValueItem(model: LibraryPreviewData.Person.laurelosborn), category: .control) } } diff --git a/Sources/FioriSwiftUICore/_generated/ViewModels/Init+Extensions/KeyValueItem+Init.generated.swift b/Sources/FioriSwiftUICore/_generated/ViewModels/Init+Extensions/_KeyValueItem+Init.generated.swift similarity index 85% rename from Sources/FioriSwiftUICore/_generated/ViewModels/Init+Extensions/KeyValueItem+Init.generated.swift rename to Sources/FioriSwiftUICore/_generated/ViewModels/Init+Extensions/_KeyValueItem+Init.generated.swift index 32ac8468e..1f92f2733 100644 --- a/Sources/FioriSwiftUICore/_generated/ViewModels/Init+Extensions/KeyValueItem+Init.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/ViewModels/Init+Extensions/_KeyValueItem+Init.generated.swift @@ -2,7 +2,7 @@ // DO NOT EDIT import SwiftUI -extension KeyValueItem where Value == EmptyView { +extension _KeyValueItem where Value == EmptyView { public init( @ViewBuilder key: () -> Key, axis: Axis = .horizontal diff --git a/Sources/FioriSwiftUICore/_generated/ViewModels/Model+Extensions/KeyValueItemModel+Extensions.generated.swift b/Sources/FioriSwiftUICore/_generated/ViewModels/Model+Extensions/_KeyValueItemModel+Extensions.generated.swift similarity index 81% rename from Sources/FioriSwiftUICore/_generated/ViewModels/Model+Extensions/KeyValueItemModel+Extensions.generated.swift rename to Sources/FioriSwiftUICore/_generated/ViewModels/Model+Extensions/_KeyValueItemModel+Extensions.generated.swift index 69c2710e9..3491b9e36 100644 --- a/Sources/FioriSwiftUICore/_generated/ViewModels/Model+Extensions/KeyValueItemModel+Extensions.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/ViewModels/Model+Extensions/_KeyValueItemModel+Extensions.generated.swift @@ -2,7 +2,7 @@ // DO NOT EDIT import SwiftUI -public extension KeyValueItemModel { +public extension _KeyValueItemModel { var axis: Axis { return .horizontal } diff --git a/sourcery/.lib/Sources/utils/Type+Extensions.swift b/sourcery/.lib/Sources/utils/Type+Extensions.swift index 2ea7c67f0..3fc29ba13 100644 --- a/sourcery/.lib/Sources/utils/Type+Extensions.swift +++ b/sourcery/.lib/Sources/utils/Type+Extensions.swift @@ -76,7 +76,8 @@ public extension Type { "_ActivityItemModel", "_ProgressIndicatorModel", "_SingleStepModel", - "_StepProgressIndicatorModel"] + "_StepProgressIndicatorModel", + "_KeyValueItemModel"] if deprecatedComponents.contains(name) { return name.replacingOccurrences(of: "Model", with: "")