From 86a105ed69a98b68e8d287a6f0a80daa0f71a6fa Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Mon, 15 May 2023 11:36:31 -0500 Subject: [PATCH 1/4] added buttonIcon Signed-off-by: Matt Bruce --- VDSSample.xcodeproj/project.pbxproj | 4 + .../ButtonIconViewController.swift | 118 ++++++++++++++++++ .../ViewControllers/MenuViewController.swift | 1 + 3 files changed, 123 insertions(+) create mode 100644 VDSSample/ViewControllers/ButtonIconViewController.swift diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index eea63d5..a4bfff5 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -48,6 +48,7 @@ EA5E3050294D11540082B959 /* TileContainerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5E304F294D11540082B959 /* TileContainerViewController.swift */; }; EA5E30552950EA6E0082B959 /* TitleLockupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5E30542950EA6E0082B959 /* TitleLockupViewController.swift */; }; EA5E305C295111050082B959 /* TileletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5E305B295111050082B959 /* TileletViewController.swift */; }; + EA81410E2A0ED8DC004F60D2 /* ButtonIconViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA81410D2A0ED8DC004F60D2 /* ButtonIconViewController.swift */; }; EA84F76228BE4AE500D67ABC /* RadioSwatchGroupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA84F76128BE4AE500D67ABC /* RadioSwatchGroupViewController.swift */; }; EA89201928B56DF5006B9984 /* RadioBoxGroupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89201828B56DF5006B9984 /* RadioBoxGroupViewController.swift */; }; EA89204628B66CE2006B9984 /* ScrollViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89203F28B66CE2006B9984 /* ScrollViewController.swift */; }; @@ -135,6 +136,7 @@ EA5E304F294D11540082B959 /* TileContainerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TileContainerViewController.swift; sourceTree = ""; }; EA5E30542950EA6E0082B959 /* TitleLockupViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleLockupViewController.swift; sourceTree = ""; }; EA5E305B295111050082B959 /* TileletViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TileletViewController.swift; sourceTree = ""; }; + EA81410D2A0ED8DC004F60D2 /* ButtonIconViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonIconViewController.swift; sourceTree = ""; }; EA84F76128BE4AE500D67ABC /* RadioSwatchGroupViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioSwatchGroupViewController.swift; sourceTree = ""; }; EA89201828B56DF5006B9984 /* RadioBoxGroupViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioBoxGroupViewController.swift; sourceTree = ""; }; EA89203F28B66CE2006B9984 /* ScrollViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScrollViewController.swift; sourceTree = ""; }; @@ -288,6 +290,7 @@ EA3C3BB228996775000CA526 /* MenuViewController.swift */, EAB1D2C828AAAA1D00DAE764 /* BaseViewController.swift */, EA4DB30328DCD25B00103EE3 /* BadgeViewController.swift */, + EA81410D2A0ED8DC004F60D2 /* ButtonIconViewController.swift */, EAB5FEEE2927E28400998C17 /* ButtonGroupViewController.swift */, 5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */, EA89204D28B67332006B9984 /* CheckBoxGroupViewController.swift */, @@ -485,6 +488,7 @@ EA89204E28B67332006B9984 /* CheckBoxGroupViewController.swift in Sources */, EAA5EEAD28EB6924003B3210 /* InputFieldViewController.swift in Sources */, EA985C25296E06EA00F2FF2E /* TextAreaViewController.swift in Sources */, + EA81410E2A0ED8DC004F60D2 /* ButtonIconViewController.swift in Sources */, EA985C20296DECF600F2FF2E /* IconName.swift in Sources */, EA89204928B66CE2006B9984 /* KeyboardFrameChangeListening.swift in Sources */, EA985C01296CC21C00F2FF2E /* IconViewController.swift in Sources */, diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift new file mode 100644 index 0000000..9ed2b1d --- /dev/null +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -0,0 +1,118 @@ +// +// ButtonIconViewController.swift +// VDSSample +// +// Created by Matt Bruce on 5/12/23. +// + +import Foundation +import UIKit +import VDS +import Combine +import VDSColorTokens + +class ButtonIconViewController: BaseViewController { + + lazy var colorPickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: VDSColor.Color.allCases) + }() + + lazy var namePickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: Icon.Name.all.sorted{ $0.rawValue < $1.rawValue }) + }() + + lazy var sizePickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: ButtonIcon.Size.allCases) + }() + + var customSizeField = TextField() + var centerX = TextField() + var centerY = TextField() + + override func allTextFields() -> [TextField]? { [customSizeField, centerX, centerY] } + + override func viewDidLoad() { + super.viewDidLoad() + addContentTopView(view: .makeWrapper(for: component)) + setupPicker() + setupModel() + } + + override func setupForm(){ + super.setupForm() + addFormRow(label: "Surface", view: surfacePickerSelectorView) + addFormRow(label: "Size", view: sizePickerSelectorView) + addFormRow(label: "Custom Size", view: customSizeField) + addFormRow(label: "Name", view: namePickerSelectorView) + addFormRow(label: "X Offset", view: centerX) + addFormRow(label: "Y Offset", view: centerY) + + customSizeField.textPublisher.sink { [weak self] value in + if let intValue = Int(value) { + self?.component.customSize = intValue + } else if value.isEmpty { + self?.component.customSize = nil + } + }.store(in: &subscribers) + + centerX.textPublisher.sink { [weak self] value in + self?.updateOffset() + }.store(in: &subscribers) + + centerY.textPublisher.sink { [weak self] value in + self?.updateOffset() + }.store(in: &subscribers) + } + + func setupModel() { + let name = Icon.Name.addToFavorite + + component.iconName = name + //setup UI + surfacePickerSelectorView.text = component.surface.rawValue + sizePickerSelectorView.text = component.size.rawValue + namePickerSelectorView.text = name.rawValue + } + + func updateOffset() { + if let x = centerX.floatValue, let y = centerY.floatValue { + component.iconOffset = .init(x: x, y: y) + } else if let x = centerX.floatValue { + component.iconOffset = .init(x: x, y: 0) + } else if let y = centerY.floatValue { + component.iconOffset = .init(x: 0, y: y) + } else { + component.iconOffset = .init(x: 0, y: 0) + } + } + + + func setupPicker(){ + + surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.surface = item + self?.contentTopView.backgroundColor = item.color + } + + sizePickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.size = item + } + + namePickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.iconName = item + } + } +} + +extension UITextField { + public var floatValue: CGFloat? { + guard let text, let double = Double(text) else { return nil } + return CGFloat(double) + } +} diff --git a/VDSSample/ViewControllers/MenuViewController.swift b/VDSSample/ViewControllers/MenuViewController.swift index 45c1b29..7d19262 100644 --- a/VDSSample/ViewControllers/MenuViewController.swift +++ b/VDSSample/ViewControllers/MenuViewController.swift @@ -74,6 +74,7 @@ class MenuViewController: UITableViewController { MenuComponent(title: "Badge", completed: true, viewController: BadgeViewController.self), MenuComponent(title: "Button", completed: true, viewController: ButtonViewController.self), MenuComponent(title: "ButtonGroup", completed: true, viewController: ButtonGroupViewController.self), + MenuComponent(title: "ButtonIcon", completed: false, viewController: ButtonIconViewController.self), MenuComponent(title: "Checkbox", completed: true, viewController: CheckboxViewController.self), MenuComponent(title: "CheckboxGroup", completed: true, viewController: CheckboxGroupViewController.self), MenuComponent(title: "Icon", completed: true, viewController: IconViewController.self), From 3b5bc40de02282f3bf3247e3b34a8971e8fe0c7f Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Mon, 15 May 2023 11:36:39 -0500 Subject: [PATCH 2/4] fixed IconColor bugs Signed-off-by: Matt Bruce --- VDSSample/ViewControllers/IconViewController.swift | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/VDSSample/ViewControllers/IconViewController.swift b/VDSSample/ViewControllers/IconViewController.swift index 6f8a691..2cef10b 100644 --- a/VDSSample/ViewControllers/IconViewController.swift +++ b/VDSSample/ViewControllers/IconViewController.swift @@ -8,6 +8,7 @@ import Foundation import UIKit import VDS +import VDSColorTokens import Combine class IconViewController: BaseViewController { @@ -15,7 +16,7 @@ class IconViewController: BaseViewController { lazy var colorPickerSelectorView = { PickerSelectorView(title: "", picker: self.picker, - items: Icon.Color.allCases) + items: VDSColor.Color.allCases) }() lazy var namePickerSelectorView = { @@ -60,13 +61,14 @@ class IconViewController: BaseViewController { func setupModel() { let name = Icon.Name.accessibility - component.color = .black + let color = VDSColor.Color.paletteBlack + component.color = color.uiColor component.name = name //setup UI surfacePickerSelectorView.text = component.surface.rawValue sizePickerSelectorView.text = component.size.rawValue - colorPickerSelectorView.text = component.color.rawValue + colorPickerSelectorView.text = color.rawValue namePickerSelectorView.text = name.rawValue } func setupPicker(){ @@ -81,7 +83,7 @@ class IconViewController: BaseViewController { } colorPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.color = item + self?.component.color = item.uiColor } namePickerSelectorView.onPickerDidSelect = { [weak self] item in From 31fc9938e284b4d4e7f0dcd933d9dbe77ee1cca3 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 16 May 2023 15:32:12 -0500 Subject: [PATCH 3/4] added more properties Signed-off-by: Matt Bruce --- .../ButtonIconViewController.swift | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index 9ed2b1d..12cd437 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -13,6 +13,18 @@ import VDSColorTokens class ButtonIconViewController: BaseViewController { + lazy var kindPickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: ButtonIcon.Kind.allCases) + }() + + lazy var surfaceTypePickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: ButtonIcon.SurfaceType.allCases) + }() + lazy var colorPickerSelectorView = { PickerSelectorView(title: "", picker: self.picker, @@ -34,12 +46,15 @@ class ButtonIconViewController: BaseViewController { var customSizeField = TextField() var centerX = TextField() var centerY = TextField() + var fitToIcon = Toggle() + var floating = Toggle() + var hideBorder = Toggle() override func allTextFields() -> [TextField]? { [customSizeField, centerX, centerY] } override func viewDidLoad() { super.viewDidLoad() - addContentTopView(view: .makeWrapper(for: component)) + addContentTopView(view: .makeWrapper(for: component, edgeSpacing: 16.0), edgeSpacing: 0.0) setupPicker() setupModel() } @@ -47,12 +62,33 @@ class ButtonIconViewController: BaseViewController { override func setupForm(){ super.setupForm() addFormRow(label: "Surface", view: surfacePickerSelectorView) + addFormRow(label: "Surface Type", view: surfaceTypePickerSelectorView) addFormRow(label: "Size", view: sizePickerSelectorView) + addFormRow(label: "Kind", view: kindPickerSelectorView) + addFormRow(label: "Floating", view: .makeWrapper(for: floating)) + addFormRow(label: "Hide Border", view: .makeWrapper(for: hideBorder)) + addFormRow(label: "Fit To Icon", view: .makeWrapper(for: fitToIcon)) addFormRow(label: "Custom Size", view: customSizeField) addFormRow(label: "Name", view: namePickerSelectorView) addFormRow(label: "X Offset", view: centerX) addFormRow(label: "Y Offset", view: centerY) + component.onClick = { sender in + print("Button Icon was clicked") + } + + floating.onChange = { [weak self] sender in + self?.component.fitToIcon = sender.isOn + } + + hideBorder.onChange = { [weak self] sender in + self?.component.hideBorder = sender.isOn + } + + fitToIcon.onChange = { [weak self] sender in + self?.component.fitToIcon = sender.isOn + } + customSizeField.textPublisher.sink { [weak self] value in if let intValue = Int(value) { self?.component.customSize = intValue @@ -76,6 +112,8 @@ class ButtonIconViewController: BaseViewController { component.iconName = name //setup UI surfacePickerSelectorView.text = component.surface.rawValue + surfaceTypePickerSelectorView.text = component.surfaceType.rawValue + kindPickerSelectorView.text = component.kind.rawValue sizePickerSelectorView.text = component.size.rawValue namePickerSelectorView.text = name.rawValue } @@ -99,6 +137,15 @@ class ButtonIconViewController: BaseViewController { self?.component.surface = item self?.contentTopView.backgroundColor = item.color } + + surfaceTypePickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.surfaceType = item + } + + + kindPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.kind = item + } sizePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.size = item From 54fc0e89fa69ad16a54ab4f917e0e32cb5992a42 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 17 May 2023 09:25:24 -0500 Subject: [PATCH 4/4] added disabled Signed-off-by: Matt Bruce --- VDSSample/ViewControllers/ButtonIconViewController.swift | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index 12cd437..0b9e273 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -49,7 +49,8 @@ class ButtonIconViewController: BaseViewController { var fitToIcon = Toggle() var floating = Toggle() var hideBorder = Toggle() - + var disabledSwitch = Toggle() + override func allTextFields() -> [TextField]? { [customSizeField, centerX, centerY] } override func viewDidLoad() { @@ -61,6 +62,7 @@ class ButtonIconViewController: BaseViewController { override func setupForm(){ super.setupForm() + addFormRow(label: "Disabled", view: .makeWrapper(for: disabledSwitch)) addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Surface Type", view: surfaceTypePickerSelectorView) addFormRow(label: "Size", view: sizePickerSelectorView) @@ -72,6 +74,10 @@ class ButtonIconViewController: BaseViewController { addFormRow(label: "Name", view: namePickerSelectorView) addFormRow(label: "X Offset", view: centerX) addFormRow(label: "Y Offset", view: centerY) + + disabledSwitch.onChange = { [weak self] sender in + self?.component.disabled = sender.isOn + } component.onClick = { sender in print("Button Icon was clicked") @@ -116,6 +122,7 @@ class ButtonIconViewController: BaseViewController { kindPickerSelectorView.text = component.kind.rawValue sizePickerSelectorView.text = component.size.rawValue namePickerSelectorView.text = name.rawValue + disabledSwitch.isOn = component.disabled } func updateOffset() {