diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index 58bf04e..f1a937c 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -696,7 +696,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 60; + CURRENT_PROJECT_VERSION = 61; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = FCMA4QKS77; GENERATE_INFOPLIST_FILE = YES; @@ -731,7 +731,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 60; + CURRENT_PROJECT_VERSION = 61; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = FCMA4QKS77; GENERATE_INFOPLIST_FILE = YES; diff --git a/VDSSample/ViewControllers/BadgeIndicatorViewController.swift b/VDSSample/ViewControllers/BadgeIndicatorViewController.swift index f3e57f0..69f662a 100644 --- a/VDSSample/ViewControllers/BadgeIndicatorViewController.swift +++ b/VDSSample/ViewControllers/BadgeIndicatorViewController.swift @@ -52,6 +52,7 @@ class BadgeIndicatorViewController: BaseViewController { var textField = NumericField() var leadingCharacterTextField = TextField() + var accessibilityTextField = TextField() var trailingTextField = TextField() var hideDotSwitch = Toggle() var hideBorderSwitch = Toggle() @@ -85,7 +86,8 @@ class BadgeIndicatorViewController: BaseViewController { addFormRow(label: "Border Light", view: borderColorLightPickerSelectorView) addFormRow(label: "Border Dark", view: borderColorDarkPickerSelectorView) addFormRow(label: "Size", view: textSizePickerSelectorView) - + addFormRow(label: "Accessiblity Text", view: accessibilityTextField) + dotForm.addFormRow(label: "Hide Dot", view: hideDotSwitch) dotForm.addFormRow(label: "Dot Size", view: dotSizeTextField) numberedForm.addFormRow(label: "Leading Character", view: leadingCharacterTextField) @@ -122,6 +124,11 @@ class BadgeIndicatorViewController: BaseViewController { self?.component.trailingText = text }.store(in: &subscribers) + accessibilityTextField.textPublisher + .sink { [weak self] text in + self?.component.accessibilityText = text + }.store(in: &subscribers) + heightTextField .numberPublisher .sink { [weak self] number in diff --git a/VDSSample/ViewControllers/BaseViewController.swift b/VDSSample/ViewControllers/BaseViewController.swift index 46526d9..631eeac 100644 --- a/VDSSample/ViewControllers/BaseViewController.swift +++ b/VDSSample/ViewControllers/BaseViewController.swift @@ -43,7 +43,7 @@ public class FormSection: UIStackView { } @discardableResult - open func addFormRow(label: String, view: UIView) -> UIView { + open func addFormRow(label: String, tooltip: Tooltip.TooltipModel? = nil, view: UIView) -> UIView { let formRow = UIStackView().with { $0.translatesAutoresizingMaskIntoConstraints = false $0.alignment = .fill @@ -56,6 +56,10 @@ public class FormSection: UIStackView { $0.tag = 1 $0.text = label $0.textStyle = .bodyLarge + $0.numberOfLines = 0 + if let tooltip { + $0.addTooltip(tooltip) + } } formRow.addArrangedSubview(label) @@ -333,10 +337,10 @@ public class BaseViewController: UIViewController, Initable , } @discardableResult - open func addFormRow(label: String, view: UIView) -> UIView { - return formStackView.addFormRow(label: label, view: view) + open func addFormRow(label: String, tooltip: Tooltip.TooltipModel? = nil, view: UIView) -> UIView { + return formStackView.addFormRow(label: label,tooltip: tooltip, view: view) } - + var activeTextField: UITextField? /// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations. diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index d7f17ed..1fae6a2 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -241,12 +241,12 @@ class ButtonIconViewController: BaseViewController { func setBadgeIndicatorModel() { if variantOneSwitch.isOn { if badgeIndicatorSwitch.isOn { - component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.simple, size: BadgeIndicator.Size.small) + component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.simple, size: BadgeIndicator.Size.small, accessibilityText: "Custom Text would go here by the developer") } else { component.badgeIndicatorModel = nil } } else { - component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.numbered, expandDirection: badgeIndicatorExpandDirectionPickerSelectorView.selectedItem, size: BadgeIndicator.Size.small, maximumDigits: BadgeIndicator.MaximumDigits.two, number: 999) + component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.numbered, expandDirection: badgeIndicatorExpandDirectionPickerSelectorView.selectedItem, size: BadgeIndicator.Size.small, maximumDigits: BadgeIndicator.MaximumDigits.two, number: 999, accessibilityText: "Custom Text would go here by the developer for the 999") } } } diff --git a/VDSSample/ViewControllers/DropShawdowViewController.swift b/VDSSample/ViewControllers/DropShawdowViewController.swift index 17d3733..9ef0b5d 100644 --- a/VDSSample/ViewControllers/DropShawdowViewController.swift +++ b/VDSSample/ViewControllers/DropShawdowViewController.swift @@ -34,9 +34,13 @@ class DropShadowViewController: BaseViewController { var componentWrapper: UIView! var componentConstraints: NSLayoutConstraint.Container! - var secondView = View() - var thirdView = View() + var secondView = ShadowView() + var thirdView = ShadowView() + var shadowViews: [ShadowView] { + [component, secondView, thirdView] + } + lazy var backgroundColorPickerSelectorView = { PickerSelectorView(title: "paletteWhite", picker: self.picker, @@ -125,8 +129,8 @@ class DropShadowViewController: BaseViewController { thirdView.width(viewSize).height(viewSize) componentWrapper.pinTop().pinLeading() - secondView.pinTop() - thirdView.pinLeading().pinBottom() + secondView.pinTop(VDSLayout.space2X) + thirdView.pinLeading(VDSLayout.space2X).pinBottom(VDSLayout.space2X) secondView.pinTrailingLessThanOrEqualTo(contentTopView.trailingAnchor) secondView.pinBottomLessThanOrEqualTo(contentTopView.bottomAnchor) @@ -194,7 +198,7 @@ class DropShadowViewController: BaseViewController { //shadow1 showShadow.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in - self?.component.showShadow = slider.isOn + self?.shadowViews.forEach { $0.showShadow = slider.isOn } self?.updateView() }).store(in: &subscribers) @@ -202,7 +206,7 @@ class DropShadowViewController: BaseViewController { opacityRange.minimumValue = 0.0 opacityRange.value = 1.0 opacityRange.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in - self?.component.opacityRange = CGFloat(slider.value) + self?.shadowViews.forEach { $0.opacityRange = CGFloat(slider.value) } self?.updateView() }).store(in: &subscribers) @@ -210,7 +214,7 @@ class DropShadowViewController: BaseViewController { radiusRange.minimumValue = 0.0 radiusRange.value = 2.0 radiusRange.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in - self?.component.radiusRange = CGFloat(slider.value) + self?.shadowViews.forEach { $0.radiusRange = CGFloat(slider.value) } self?.updateView() }).store(in: &subscribers) @@ -218,7 +222,7 @@ class DropShadowViewController: BaseViewController { offsetXRange.minimumValue = -20 offsetXRange.value = 2.0 offsetXRange.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in - self?.component.offsetXRange = CGFloat(slider.value) + self?.shadowViews.forEach { $0.offsetXRange = CGFloat(slider.value) } self?.updateView() }).store(in: &subscribers) @@ -226,13 +230,13 @@ class DropShadowViewController: BaseViewController { offsetYRange.minimumValue = -20 offsetYRange.value = 2.0 offsetYRange.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in - self?.component.offsetYRange = CGFloat(slider.value) + self?.shadowViews.forEach { $0.offsetYRange = CGFloat(slider.value) } self?.updateView() }).store(in: &subscribers) //shadow2 showShadow2.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in - self?.component.showShadow2 = slider.isOn + self?.shadowViews.forEach { $0.showShadow2 = slider.isOn } self?.updateView() }).store(in: &subscribers) @@ -240,7 +244,7 @@ class DropShadowViewController: BaseViewController { opacityRange2.minimumValue = 0.0 opacityRange2.value = 1.0 opacityRange2.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in - self?.component.opacityRange2 = CGFloat(slider.value) + self?.shadowViews.forEach { $0.opacityRange2 = CGFloat(slider.value) } self?.updateView() }).store(in: &subscribers) @@ -248,7 +252,7 @@ class DropShadowViewController: BaseViewController { radiusRange2.minimumValue = 0.0 radiusRange2.value = 2.0 radiusRange2.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in - self?.component.radiusRange2 = CGFloat(slider.value) + self?.shadowViews.forEach { $0.radiusRange2 = CGFloat(slider.value) } self?.updateView() }).store(in: &subscribers) @@ -256,7 +260,7 @@ class DropShadowViewController: BaseViewController { offsetXRange2.minimumValue = -20 offsetXRange2.value = 2.0 offsetXRange2.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in - self?.component.offsetXRange2 = CGFloat(slider.value) + self?.shadowViews.forEach { $0.offsetXRange2 = CGFloat(slider.value) } self?.updateView() }).store(in: &subscribers) @@ -264,7 +268,7 @@ class DropShadowViewController: BaseViewController { offsetYRange2.minimumValue = -20 offsetYRange2.value = 2.0 offsetYRange2.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in - self?.component.offsetYRange2 = CGFloat(slider.value) + self?.shadowViews.forEach { $0.offsetYRange2 = CGFloat(slider.value) } self?.updateView() }).store(in: &subscribers) @@ -281,7 +285,7 @@ class DropShadowViewController: BaseViewController { viewRadiusRange.minimumValue = 0 viewRadiusRange.value = 8.0 viewRadiusRange.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in - self?.component.viewRadiusRange = CGFloat(slider.value) + self?.shadowViews.forEach { $0.viewRadiusRange = CGFloat(slider.value) } self?.updateView() }).store(in: &subscribers) @@ -310,8 +314,8 @@ class DropShadowViewController: BaseViewController { } override func updateView() { - secondView.backgroundColor = .red - thirdView.backgroundColor = .purple + secondView.viewLightColor = .paletteYellow53 + thirdView.viewLightColor = .paletteBlue46 } func setupPicker(){ @@ -322,20 +326,21 @@ class DropShadowViewController: BaseViewController { } dropShadowDarkColorPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.shadowDarkColor = item + self?.shadowViews.forEach { $0.shadowDarkColor = item } } dropShadowLightColorPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.shadowLightColor = item + self?.shadowViews.forEach { $0.shadowLightColor = item } } dropShadow2DarkColorPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.shadowDarkColor2 = item + self?.shadowViews.forEach { $0.shadowDarkColor2 = item } } dropShadow2LightColorPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.shadowLightColor2 = item + self?.shadowViews.forEach { $0.shadowLightColor2 = item } } + viewLightColorPickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.viewLightColor = item } diff --git a/VDSSample/ViewControllers/DropdownSelectViewController.swift b/VDSSample/ViewControllers/DropdownSelectViewController.swift index 52552c3..5d03dbe 100644 --- a/VDSSample/ViewControllers/DropdownSelectViewController.swift +++ b/VDSSample/ViewControllers/DropdownSelectViewController.swift @@ -75,7 +75,7 @@ class DropdownSelectViewController: BaseViewController { } requiredSwitch.onChange = { [weak self] sender in - self?.component.required = sender.isOn + self?.component.isRequired = sender.isOn } optionsSwitch.onChange = { [weak self] sender in @@ -84,7 +84,7 @@ class DropdownSelectViewController: BaseViewController { } readonlySwitch.onChange = { [weak self] sender in - self?.component.readOnly = sender.isOn + self?.component.isReadOnly = sender.isOn } transparentBgSwitch.onChange = { [weak self] sender in @@ -158,7 +158,7 @@ class DropdownSelectViewController: BaseViewController { //setup UI disabledSwitch.isOn = !component.isEnabled - requiredSwitch.isOn = component.required + requiredSwitch.isOn = component.isRequired surfacePickerSelectorView.text = component.surface.rawValue labelTextField.text = component.labelText helperTextField.text = component.helperText diff --git a/VDSSample/ViewControllers/InputFieldViewController.swift b/VDSSample/ViewControllers/InputFieldViewController.swift index 61d5350..71fbf7e 100644 --- a/VDSSample/ViewControllers/InputFieldViewController.swift +++ b/VDSSample/ViewControllers/InputFieldViewController.swift @@ -19,6 +19,12 @@ class InputFieldViewController: BaseViewController { items: InputField.HelperTextPlacement.allCases) }() + lazy var inputTypePickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: InputField.FieldType.allCases) + }() + var disabledSwitch = Toggle() var requiredSwitch = Toggle() var labelTextField = TextField() @@ -31,6 +37,31 @@ class InputFieldViewController: BaseViewController { var tooltipTitleTextField = TextField() var tooltipContentTextField = TextField() + //FieldType sections + + //password + var hidePasswordButtonTextField = TextField() + var showPasswordButtonTextField = TextField() + lazy var passwordSection = FormSection().with { + $0.title = "Password Settings" + $0.addFormRow(label: "Hide Button", view: hidePasswordButtonTextField) + $0.addFormRow(label: "Show Button", view: showPasswordButtonTextField) + $0.isHidden = true + } + + //date + lazy var dateFormatPickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: InputField.DateFormat.allCases) + }() + + lazy var dateSection = FormSection().with { + $0.title = "Date Settings" + $0.addFormRow(label: "Date Format", view: dateFormatPickerSelectorView) + $0.isHidden = true + } + override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: component) @@ -53,9 +84,13 @@ class InputFieldViewController: BaseViewController { addFormRow(label: "Width", view: widthTextField) addFormRow(label: "ToolTip Title", view: tooltipTitleTextField) addFormRow(label: "ToolTip Content", view: tooltipContentTextField) + addFormRow(label: "Field Type", view: inputTypePickerSelectorView) + append(section: passwordSection) + append(section: dateSection) + requiredSwitch.onChange = { [weak self] sender in - self?.component.required = sender.isOn + self?.component.isRequired = sender.isOn } showErrorSwitch.onChange = { [weak self] sender in @@ -114,12 +149,24 @@ class InputFieldViewController: BaseViewController { self?.updateTooltip() }.store(in: &subscribers) + //field types + //password + hidePasswordButtonTextField + .textPublisher + .sink { [weak self] text in + self?.component.hidePasswordButtonText = text + }.store(in: &subscribers) + + showPasswordButtonTextField + .textPublisher + .sink { [weak self] text in + self?.component.showPasswordButtonText = text + }.store(in: &subscribers) } func setupModel() { component.fieldType = .text component.width = 328 - component.text = "Starting Text" component.labelText = "Street Address" component.helperText = "For example: 123 Verizon St" component.errorText = "Enter a valid address." @@ -137,8 +184,9 @@ class InputFieldViewController: BaseViewController { //setup UI surfacePickerSelectorView.text = component.surface.rawValue helperTextPlacementPickerSelectorView.text = component.helperTextPlacement.rawValue + inputTypePickerSelectorView.text = component.fieldType.rawValue disabledSwitch.isOn = !component.isEnabled - requiredSwitch.isOn = component.required + requiredSwitch.isOn = component.isRequired labelTextField.text = component.labelText helperTextField.text = component.helperText showErrorSwitch.isOn = component.showError @@ -162,6 +210,16 @@ class InputFieldViewController: BaseViewController { helperTextPlacementPickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.helperTextPlacement = item } + + inputTypePickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.fieldType = item + self?.updateFormSections() + } + + dateFormatPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.dateFormat = item + self?.updateFormSections() + } } func updateTooltip() { @@ -171,6 +229,38 @@ class InputFieldViewController: BaseViewController { component.tooltipModel = !title.isEmpty || !content.isEmpty ? .init(title: title, content: content) : nil } + + func updateFormSections() { + [passwordSection, dateSection].forEach { $0.isHidden = true } + switch component.fieldType { + case .text: + break + + case .number: + break + + case .inlineAction: + break + + case .password: + passwordSection.isHidden = false + + case .creditCard: + break + + case .tel: + break + + case .date: + dateSection.isHidden = false + + case .securityCode: + break + + @unknown default: + break + } + } } diff --git a/VDSSample/ViewControllers/TableViewTestController.swift b/VDSSample/ViewControllers/TableViewTestController.swift index b7b1ddd..8de4507 100644 --- a/VDSSample/ViewControllers/TableViewTestController.swift +++ b/VDSSample/ViewControllers/TableViewTestController.swift @@ -172,30 +172,8 @@ public class TableViewTestController: UIViewController, Initable, Surfaceable { } var items: [MenuComponent] { - all - } - - var all: [MenuComponent] { MenuViewController.items - } - - var batch1: [MenuComponent] { - [ - 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: "Icon", completed: true, viewController: IconViewController.self), - MenuComponent(title: "Label", completed: true, viewController: LabelViewController.self), - MenuComponent(title: "Line", completed: true, viewController: LineViewController.self), - MenuComponent(title: "Loader", completed: true, viewController: LoaderViewController.self), - MenuComponent(title: "Tabs", completed: true, viewController: TabsViewController.self), - MenuComponent(title: "TextLink", completed: true, viewController: TextLinkViewController.self), - MenuComponent(title: "TextLinkCaret", completed: true, viewController: TextLinkCaretViewController.self), - MenuComponent(title: "TitleLockup", completed: true, viewController: TitleLockupViewController.self), - MenuComponent(title: "Tooltip", completed: true, viewController: TooltipViewController.self), - MenuComponent(title: "TrailingTooltip", completed: true, viewController: TrailingTooltipLabelViewController.self), - ] - } + } } extension TableViewTestController : UITableViewDelegate, UITableViewDataSource { diff --git a/VDSSample/ViewControllers/TextAreaViewController.swift b/VDSSample/ViewControllers/TextAreaViewController.swift index 9769795..22dc701 100644 --- a/VDSSample/ViewControllers/TextAreaViewController.swift +++ b/VDSSample/ViewControllers/TextAreaViewController.swift @@ -55,7 +55,7 @@ class TextAreaViewController: BaseViewController