diff --git a/VDS.xcodeproj/project.pbxproj b/VDS.xcodeproj/project.pbxproj index aea11af8..6c0e23ad 100644 --- a/VDS.xcodeproj/project.pbxproj +++ b/VDS.xcodeproj/project.pbxproj @@ -1163,7 +1163,7 @@ BUILD_LIBRARY_FOR_DISTRIBUTION = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 33; + CURRENT_PROJECT_VERSION = 34; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; @@ -1200,7 +1200,7 @@ BUILD_LIBRARY_FOR_DISTRIBUTION = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 33; + CURRENT_PROJECT_VERSION = 34; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; diff --git a/VDS/Classes/SelectorItemBase.swift b/VDS/Classes/SelectorItemBase.swift index 9575f7a2..b9f659bd 100644 --- a/VDS/Classes/SelectorItemBase.swift +++ b/VDS/Classes/SelectorItemBase.swift @@ -226,6 +226,7 @@ open class SelectorItemBase: Control, Errorable, } } + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Components/Badge/Badge.swift b/VDS/Components/Badge/Badge.swift index da8ff792..321753f9 100644 --- a/VDS/Components/Badge/Badge.swift +++ b/VDS/Components/Badge/Badge.swift @@ -75,6 +75,7 @@ open class Badge: View { } + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Components/BadgeIndicator/BadgeIndicator.swift b/VDS/Components/BadgeIndicator/BadgeIndicator.swift index 748025e2..d35b7187 100644 --- a/VDS/Components/BadgeIndicator/BadgeIndicator.swift +++ b/VDS/Components/BadgeIndicator/BadgeIndicator.swift @@ -278,6 +278,7 @@ open class BadgeIndicator: View { } + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Components/Buttons/Button/Button.swift b/VDS/Components/Buttons/Button/Button.swift index 3ac084fa..be1a7cec 100644 --- a/VDS/Components/Buttons/Button/Button.swift +++ b/VDS/Components/Buttons/Button/Button.swift @@ -130,6 +130,7 @@ open class Button: ButtonBase, Useable { heightConstraint?.isActive = true } + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Components/Buttons/Button/ButtonBase.swift b/VDS/Components/Buttons/Button/ButtonBase.swift index a3bd1941..054c10b3 100644 --- a/VDS/Components/Buttons/Button/ButtonBase.swift +++ b/VDS/Components/Buttons/Button/ButtonBase.swift @@ -135,6 +135,7 @@ open class ButtonBase: UIButton, Buttonable, Handlerable, ViewProtocol, Resettab } + /// Resets back to this objects default settings. open func reset() { shouldUpdateView = false surface = .light diff --git a/VDS/Components/Buttons/TextLink/TextLink.swift b/VDS/Components/Buttons/TextLink/TextLink.swift index f604cad9..573665e0 100644 --- a/VDS/Components/Buttons/TextLink/TextLink.swift +++ b/VDS/Components/Buttons/TextLink/TextLink.swift @@ -87,6 +87,7 @@ open class TextLink: ButtonBase { } } + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Components/Buttons/TextLinkCaret/TextLinkCaret.swift b/VDS/Components/Buttons/TextLinkCaret/TextLinkCaret.swift index ad95a4af..c7c14e74 100644 --- a/VDS/Components/Buttons/TextLinkCaret/TextLinkCaret.swift +++ b/VDS/Components/Buttons/TextLinkCaret/TextLinkCaret.swift @@ -79,6 +79,7 @@ open class TextLinkCaret: ButtonBase { accessibilityTraits = .link } + /// Resets back to this objects default settings. open override func reset() { super.reset() iconPosition = .right diff --git a/VDS/Components/Icon/ButtonIcon/ButtonIcon.swift b/VDS/Components/Icon/ButtonIcon/ButtonIcon.swift index 12db5a56..5d7c63ba 100644 --- a/VDS/Components/Icon/ButtonIcon/ButtonIcon.swift +++ b/VDS/Components/Icon/ButtonIcon/ButtonIcon.swift @@ -253,6 +253,7 @@ open class ButtonIcon: Control { iconLayoutGuide.trailingAnchor.constraint(equalTo: trailingAnchor)]) } + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Components/Icon/Icon.swift b/VDS/Components/Icon/Icon.swift index 7983d7c9..b1cb3c0b 100644 --- a/VDS/Components/Icon/Icon.swift +++ b/VDS/Components/Icon/Icon.swift @@ -62,6 +62,7 @@ open class Icon: View { accessibilityTraits = .image } + /// Resets back to this objects default settings. open override func reset() { super.reset() color = VDSColor.paletteBlack diff --git a/VDS/Components/Label/Label.swift b/VDS/Components/Label/Label.swift index 203e669d..f2f83116 100644 --- a/VDS/Components/Label/Label.swift +++ b/VDS/Components/Label/Label.swift @@ -111,6 +111,7 @@ open class Label: UILabel, Handlerable, ViewProtocol, Resettable, UserInfoable { open func setup() {} + /// Resets back to this objects default settings. open func reset() { shouldUpdateView = false surface = .light diff --git a/VDS/Components/Line/Line.swift b/VDS/Components/Line/Line.swift index 417fb077..18bb485f 100644 --- a/VDS/Components/Line/Line.swift +++ b/VDS/Components/Line/Line.swift @@ -40,6 +40,7 @@ open class Line: View { lineView.pinToSuperView() } + /// Resets back to this objects default settings. open override func reset() { super.reset() style = .primary diff --git a/VDS/Components/Notification/Notification.swift b/VDS/Components/Notification/Notification.swift index 20d39096..de382de3 100644 --- a/VDS/Components/Notification/Notification.swift +++ b/VDS/Components/Notification/Notification.swift @@ -228,6 +228,7 @@ open class Notification: View { subTitleLabel.textColorConfiguration = textColorConfiguration.eraseToAnyColorable() } + /// Resets back to this objects default settings. open override func reset() { super.reset() diff --git a/VDS/Components/RadioBox/RadioBoxItem.swift b/VDS/Components/RadioBox/RadioBoxItem.swift index 380383b9..74e2f574 100644 --- a/VDS/Components/RadioBox/RadioBoxItem.swift +++ b/VDS/Components/RadioBox/RadioBoxItem.swift @@ -200,6 +200,7 @@ open class RadioBoxItem: Control, Changeable { } } + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Components/RadioSwatch/RadioSwatch.swift b/VDS/Components/RadioSwatch/RadioSwatch.swift index 8178f971..465aef71 100644 --- a/VDS/Components/RadioSwatch/RadioSwatch.swift +++ b/VDS/Components/RadioSwatch/RadioSwatch.swift @@ -88,7 +88,8 @@ open class RadioSwatch: Control { fillView.width(fillSize.width) } - + + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Components/TextFields/EntryField/EntryField.swift b/VDS/Components/TextFields/EntryField/EntryField.swift index 0a280ffb..eb43ba49 100644 --- a/VDS/Components/TextFields/EntryField/EntryField.swift +++ b/VDS/Components/TextFields/EntryField/EntryField.swift @@ -228,6 +228,7 @@ open class EntryField: Control, Changeable { return containerView } + /// Resets back to this objects default settings. open override func reset() { super.reset() titleLabel.reset() diff --git a/VDS/Components/TextFields/InputField/InputField.swift b/VDS/Components/TextFields/InputField/InputField.swift index acbec3ec..6b25c7e1 100644 --- a/VDS/Components/TextFields/InputField/InputField.swift +++ b/VDS/Components/TextFields/InputField/InputField.swift @@ -140,6 +140,7 @@ open class InputField: EntryField, UITextFieldDelegate { } + /// Resets back to this objects default settings. open override func reset() { super.reset() textField.text = "" diff --git a/VDS/Components/TextFields/TextArea/TextArea.swift b/VDS/Components/TextFields/TextArea/TextArea.swift index 31ade50c..9064c9fc 100644 --- a/VDS/Components/TextFields/TextArea/TextArea.swift +++ b/VDS/Components/TextFields/TextArea/TextArea.swift @@ -79,6 +79,7 @@ open class TextArea: EntryField { textView.delegate = self } + /// Resets back to this objects default settings. open override func reset() { super.reset() textView.text = "" diff --git a/VDS/Components/TileContainer/TileContainer.swift b/VDS/Components/TileContainer/TileContainer.swift index 0fb735fe..6b5eef20 100644 --- a/VDS/Components/TileContainer/TileContainer.swift +++ b/VDS/Components/TileContainer/TileContainer.swift @@ -189,6 +189,7 @@ open class TileContainer: Control { } + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Components/Tilelet/Tilelet.swift b/VDS/Components/Tilelet/Tilelet.swift index c91c7eba..9cc2e938 100644 --- a/VDS/Components/Tilelet/Tilelet.swift +++ b/VDS/Components/Tilelet/Tilelet.swift @@ -240,6 +240,7 @@ open class Tilelet: TileContainer { } + /// Resets back to this objects default settings. open override func reset() { shouldUpdateView = false aspectRatio = .none diff --git a/VDS/Components/TitleLockup/TitleLockup.swift b/VDS/Components/TitleLockup/TitleLockup.swift index 6381fed5..9fd0f6b6 100644 --- a/VDS/Components/TitleLockup/TitleLockup.swift +++ b/VDS/Components/TitleLockup/TitleLockup.swift @@ -196,6 +196,7 @@ open class TitleLockup: View { } + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Components/Toggle/Toggle.swift b/VDS/Components/Toggle/Toggle.swift index ba718598..1d9b77b0 100644 --- a/VDS/Components/Toggle/Toggle.swift +++ b/VDS/Components/Toggle/Toggle.swift @@ -172,6 +172,7 @@ open class Toggle: Control, Changeable { } + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Components/Toggle/ToggleView.swift b/VDS/Components/Toggle/ToggleView.swift index 917d4676..db07e66d 100644 --- a/VDS/Components/Toggle/ToggleView.swift +++ b/VDS/Components/Toggle/ToggleView.swift @@ -136,6 +136,7 @@ open class ToggleView: Control, Changeable { open override var intrinsicContentSize: CGSize { toggleSize } + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Components/Tooltip/Tooltip.swift b/VDS/Components/Tooltip/Tooltip.swift index fd75c610..585ab355 100644 --- a/VDS/Components/Tooltip/Tooltip.swift +++ b/VDS/Components/Tooltip/Tooltip.swift @@ -139,6 +139,7 @@ open class Tooltip: Control, TooltipLaunchable { }) } + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Components/Tooltip/TrailingTooltipLabel.swift b/VDS/Components/Tooltip/TrailingTooltipLabel.swift index 220cb2f3..00cbc8f3 100644 --- a/VDS/Components/Tooltip/TrailingTooltipLabel.swift +++ b/VDS/Components/Tooltip/TrailingTooltipLabel.swift @@ -77,6 +77,7 @@ open class TrailingTooltipLabel: View, TooltipLaunchable { } } + /// Resets back to this objects default settings. open override func reset() { super.reset() shouldUpdateView = false diff --git a/VDS/Extensions/NSAttributedString.swift b/VDS/Extensions/NSAttributedString.swift index bbbd9a63..4f758762 100644 --- a/VDS/Extensions/NSAttributedString.swift +++ b/VDS/Extensions/NSAttributedString.swift @@ -9,6 +9,10 @@ import Foundation import UIKit extension NSAttributedString { + + /// Spacer in the form of a AttributedString. + /// - Parameter width: size of the space. + /// - Returns: AttributedString with the Space of the width you asked. public static func spacer(for width: CGFloat) -> NSAttributedString { let spacerImage = UIImage() let spacerAttachment = NSTextAttachment() @@ -20,7 +24,18 @@ extension NSAttributedString { extension NSMutableAttributedString { + /// This will used along with mutableText method to determine if you will use a ratio version of the lineHeight within a TextStyle if you have a scaled font being used. public static var useScaledLineHeight: Bool = false + + /// Creates a MutableAttributedString for the text and other properties you have passed into the method. + /// - Parameters: + /// - text: Text you want to draw onscreen. + /// - textStyle: Style of Typography you want to render the Text. + /// - useScaledFont: Determines if you used a scaledFont or a normal Font from the TextStyle. + /// - textColor: Color of Text to render. + /// - alignment: Text alignment. + /// - lineBreakMode: LineBreak Mode. + /// - Returns: MutableAttributedString from al lof the properties you passed in to help render Text using non-standard properties. public static func mutableText(for text: String, textStyle: TextStyle, useScaledFont: Bool = true, textColor: UIColor, alignment: NSTextAlignment = .left, lineBreakMode: NSLineBreakMode) -> NSMutableAttributedString { //var for if you can scale or not diff --git a/VDS/Extensions/UIColor+VDSColor.swift b/VDS/Extensions/UIColor+VDSColor.swift index 9fd177d1..a2b77290 100644 --- a/VDS/Extensions/UIColor+VDSColor.swift +++ b/VDS/Extensions/UIColor+VDSColor.swift @@ -125,6 +125,8 @@ extension UIColor { return true } + /// Convert your UIColor to a VDSColor + /// - Returns: VDSColor enum that matches the hexString for this UIColor public func toVDSColor() -> VDSColor? { guard let hex = hexString else { return nil } let found = VDSColor.allCases.first{ $0.uiColor.hexString == hex } diff --git a/VDS/Extensions/UIControl.swift b/VDS/Extensions/UIControl.swift index ce32dcad..e978bed9 100644 --- a/VDS/Extensions/UIControl.swift +++ b/VDS/Extensions/UIControl.swift @@ -9,6 +9,10 @@ import Foundation import UIKit extension UIControl.State { + + /// State for Error public static var error = UIControl.State(rawValue: 1 << 16) + + /// State for Success public static var success = UIControl.State(rawValue: 1 << 17) } diff --git a/VDS/Extensions/UIView+CALayer.swift b/VDS/Extensions/UIView+CALayer.swift index a9525598..05e60113 100644 --- a/VDS/Extensions/UIView+CALayer.swift +++ b/VDS/Extensions/UIView+CALayer.swift @@ -72,6 +72,9 @@ extension UIView { // MARK: - CALayer //-------------------------------------------------- extension CALayer { + + /// Removes a sublayer of a specific name. + /// - Parameter layerName: Layer with the name you want to remove. public func remove(layerName: String) { guard let sublayers = sublayers else { return @@ -90,6 +93,12 @@ extension CALayer { //-------------------------------------------------- extension UIView { + /// Adds a border to a specific sides with the parameters. + /// - Parameters: + /// - side: Side in which to add the border. + /// - width: Width of the border. + /// - color: Color of the border. + /// - offset: offset of the border. public func addBorder(side: UIRectEdge, width: CGFloat, color: UIColor, offset: CGFloat = 0) { let layerName = borderLayerName(for: side) layer.remove(layerName: layerName) @@ -113,7 +122,8 @@ extension UIView { layer.addSublayer(borderLayer) } - + + /// Removes all of the borders addeding using the addBorder method. public func removeBorders() { layer.borderWidth = 0 layer.borderColor = nil diff --git a/VDS/Extensions/UIView.swift b/VDS/Extensions/UIView.swift index 62ed355a..8bc4f28f 100644 --- a/VDS/Extensions/UIView.swift +++ b/VDS/Extensions/UIView.swift @@ -21,6 +21,11 @@ extension UIView { //-------------------------------------------------- extension UIView { @discardableResult + /// Pins each to the all 4 anchor points to a view. + /// - Parameters: + /// - view: View that you will be pinned within. + /// - edges: Insets for each side. + /// - Returns: Yourself. public func pin(_ view: UIView, with edges: UIEdgeInsets = UIEdgeInsets.zero) -> Self { pinLeading(view.leadingAnchor, edges.left) pinTrailing(view.trailingAnchor, edges.right) @@ -30,6 +35,10 @@ extension UIView { } @discardableResult + + /// Pins each to the all 4 anchor points to the view you are set within. + /// - Parameter edges: Insets for each side. + /// - Returns: Yourself. public func pinToSuperView(_ edges: UIEdgeInsets = UIEdgeInsets.zero) -> Self { if let superview { pin(superview, with: edges) @@ -44,34 +53,52 @@ extension UIView { extension UIView { @discardableResult + /// Adds a heightAnchor. + /// - Parameter constant: Constant size. + /// - Returns: Yourself. public func height(_ constant: CGFloat) -> Self { height(constant: constant) return self } @discardableResult + /// Adds a heightAnchor where the height constant passed in using a greaterThanOrEqualTo Constraint. + /// - Parameter constant: Constant size. + /// - Returns: Yourself. public func heightGreaterThanEqualTo(_ constant: CGFloat) -> Self { heightGreaterThanEqualTo(constant: constant) return self } @discardableResult + /// Adds a heightAnchor where the height constant passed in using a lessThanOrEqualTo Constraint. + /// - Parameter constant: Constant size. + /// - Returns: Yourself. public func heightLessThanEqualTo(_ constant: CGFloat) -> Self { heightLessThanEqualTo(constant: constant) return self } @discardableResult + /// Adds a heightAnchor for the constant passed into the method. + /// - Parameter constant: Constant size. + /// - Returns: The Constraint that was created. public func height(constant: CGFloat) -> NSLayoutConstraint { heightAnchor.constraint(equalToConstant: constant).activate() } @discardableResult + /// Adds a heightAnchor where the constant passed in using a greaterThanOrEqualTo Constraint. + /// - Parameter constant: Constant size. + /// - Returns: The Constraint that was created. public func heightGreaterThanEqualTo(constant: CGFloat) -> NSLayoutConstraint { heightAnchor.constraint(greaterThanOrEqualToConstant: constant).activate() } @discardableResult + /// Adds a heightAnchor where the constant passed in using a lessThanOrEqualTo Constraint. + /// - Parameter constant: Constant size. + /// - Returns: The Constraint that was created. public func heightLessThanEqualTo(constant: CGFloat) -> NSLayoutConstraint { heightAnchor.constraint(lessThanOrEqualToConstant: constant).activate() } @@ -84,34 +111,52 @@ extension UIView { extension UIView { @discardableResult + /// Adds a widthAnchor. + /// - Parameter constant: Width Constant size. + /// - Returns: Yourself. public func width(_ constant: CGFloat) -> Self { width(constant: constant) return self } @discardableResult + /// Adds a widthAnchor where the constant passed in using a greaterThanOrEqualTo Constraint. + /// - Parameter constant: Constant size. + /// - Returns: Yourself. public func widthGreaterThanEqualTo(_ constant: CGFloat) -> Self { widthGreaterThanEqualTo(constant: constant) return self } @discardableResult + /// Adds a widthAnchor where the constant passed in using a lessThanOrEqualTo Constraint. + /// - Parameter constant: Constant size. + /// - Returns: Yourself. public func widthLessThanEqualTo(_ constant: CGFloat) -> Self { widthLessThanEqualTo(constant: constant) return self } @discardableResult + /// Adds a widthAnchor for the constant passed into the method. + /// - Parameter constant: Constant size. + /// - Returns: The Constraint that was created. public func width(constant: CGFloat) -> NSLayoutConstraint { widthAnchor.constraint(equalToConstant: constant).activate() } @discardableResult + /// Adds a widthAnchor with the constant passed in using a greaterThanOrEqualTo Constraint. + /// - Parameter constant: Constant size. + /// - Returns: The Constraint that was created. public func widthGreaterThanEqualTo(constant: CGFloat) -> NSLayoutConstraint { widthAnchor.constraint(greaterThanOrEqualToConstant: constant).activate() } @discardableResult + /// Adds a widthAnchor with the constant passed in using a lessThanOrEqualTo Constraint. + /// - Parameter constant: Constant size. + /// - Returns: The Constraint that was created. public func widthLessThanEqualTo(constant: CGFloat) -> NSLayoutConstraint { widthAnchor.constraint(lessThanOrEqualToConstant: constant).activate() } @@ -123,29 +168,48 @@ extension UIView { extension UIView { @discardableResult + /// Adds a topAnchor. + /// - Parameter constant: Constant size. + /// - Returns: Yourself. public func pinTop(_ constant: CGFloat = 0.0) -> Self { return pinTop(nil, constant) } @discardableResult + /// Adds a topAnchor to a specific YAxisAnchor. + /// - Parameter anchor:The anchor in which to attach the topAnchor + /// - constant: Constant size. + /// - Returns: Yourself. public func pinTop(_ anchor: NSLayoutYAxisAnchor? = nil, _ constant: CGFloat = 0.0) -> Self { pinTop(anchor: anchor, constant: constant) return self } @discardableResult + /// Adds a topAnchor to a specific YAxisAnchor passed in using a lessThanOrEqualTo Constraint + /// - Parameter anchor:The anchor in which to attach the topAnchor + /// - constant: Constant size. + /// - Returns: Yourself. public func pinTopLessThanOrEqualTo(_ anchor: NSLayoutYAxisAnchor? = nil, _ constant: CGFloat = 0.0) -> Self { - pinBottomLessThanOrEqualTo(anchor: anchor, constant: constant) + pinTopLessThanOrEqualTo(anchor: anchor, constant: constant) return self } @discardableResult + /// Adds a topAnchor to a specific YAxisAnchor passed in using a greaterThanOrEqualTo Constraint + /// - Parameter anchor:The anchor in which to attach the topAnchor + /// - constant: Constant size. + /// - Returns: Yourself. public func pinTopGreaterThanOrEqualTo(_ anchor: NSLayoutYAxisAnchor? = nil, _ constant: CGFloat = 0.0) -> Self { pinTopGreaterThanOrEqualTo(anchor: anchor, constant: constant) return self } @discardableResult + /// Adds a topAnchor for the constant passed into the method. + /// - Parameter anchor:The anchor in which to attach the topAnchor + /// - constant: Constant size. + /// - Returns: The Constraint that was created. public func pinTop(anchor: NSLayoutYAxisAnchor?, constant: CGFloat = 0.0) -> NSLayoutConstraint? { let found: NSLayoutYAxisAnchor? = anchor ?? superview?.topAnchor guard let found else { return nil } @@ -153,6 +217,10 @@ extension UIView { } @discardableResult + /// Adds a topAnchor with the constant passed in using a lessThanOrEqualTo Constraint. + /// - Parameter anchor:The anchor in which to attach the topAnchor + /// - constant: Constant size. + /// - Returns: The Constraint that was created. public func pinTopLessThanOrEqualTo(anchor: NSLayoutYAxisAnchor?, constant: CGFloat = 0.0) -> NSLayoutConstraint? { let found: NSLayoutYAxisAnchor? = anchor ?? superview?.topAnchor guard let found else { return nil } @@ -160,6 +228,10 @@ extension UIView { } @discardableResult + /// Adds a topAnchor with the constant passed in using a greaterThanOrEqualTo Constraint. + /// - Parameter anchor:The anchor in which to attach the topAnchor + /// - constant: Constant size. + /// - Returns: The Constraint that was created. public func pinTopGreaterThanOrEqualTo(anchor: NSLayoutYAxisAnchor?, constant: CGFloat = 0.0) -> NSLayoutConstraint? { let found: NSLayoutYAxisAnchor? = anchor ?? superview?.topAnchor guard let found else { return nil } @@ -173,29 +245,48 @@ extension UIView { //-------------------------------------------------- extension UIView { @discardableResult + /// Adds a bottomAnchor. + /// - Parameter constant: Constant size. + /// - Returns: Yourself. public func pinBottom(_ constant: CGFloat = 0.0) -> Self { return pinBottom(nil, constant) } @discardableResult + /// Adds a bottomAnchor to a specific YAxisAnchor. + /// - Parameter anchor:The anchor in which to attach the bottomAnchor + /// - constant: Constant size. + /// - Returns: Yourself. public func pinBottom(_ anchor: NSLayoutYAxisAnchor? = nil, _ constant: CGFloat = 0.0) -> Self { pinBottom(anchor: anchor, constant: constant) return self } @discardableResult + /// Adds a bottomAnchor to a specific YAxisAnchor passed in using a lessThanOrEqualTo Constraint + /// - Parameter anchor:The anchor in which to attach the bottomAnchor + /// - constant: Constant size. + /// - Returns: Yourself. public func pinBottomLessThanOrEqualTo(_ anchor: NSLayoutYAxisAnchor? = nil, _ constant: CGFloat = 0.0) -> Self { pinBottomLessThanOrEqualTo(anchor: anchor, constant: constant) return self } @discardableResult + /// Adds a bottomAnchor to a specific YAxisAnchor passed in using a greaterThanOrEqualTo Constraint + /// - Parameter anchor:The anchor in which to attach the bottomAnchor + /// - constant: Constant size. + /// - Returns: Yourself. public func pinBottomGreaterThanOrEqualTo(_ anchor: NSLayoutYAxisAnchor? = nil, _ constant: CGFloat = 0.0) -> Self { pinBottomGreaterThanOrEqualTo(anchor: anchor, constant: constant) return self } @discardableResult + /// Adds a bottomAnchor for the constant passed into the method. + /// - Parameter anchor:The anchor in which to attach the bottomAnchor + /// - constant: Constant size. + /// - Returns: The Constraint that was created. public func pinBottom(anchor: NSLayoutYAxisAnchor?, constant: CGFloat = 0.0) -> NSLayoutConstraint? { let found: NSLayoutYAxisAnchor? = anchor ?? superview?.bottomAnchor guard let found else { return nil } @@ -203,6 +294,10 @@ extension UIView { } @discardableResult + /// Adds a bottomAnchor with the constant passed in using a lessThanOrEqualTo Constraint. + /// - Parameter anchor:The anchor in which to attach the bottomAnchor + /// - constant: Constant size. + /// - Returns: The Constraint that was created. public func pinBottomLessThanOrEqualTo(anchor: NSLayoutYAxisAnchor?, constant: CGFloat = 0.0) -> NSLayoutConstraint? { let found: NSLayoutYAxisAnchor? = anchor ?? superview?.bottomAnchor guard let found else { return nil } @@ -210,6 +305,10 @@ extension UIView { } @discardableResult + /// Adds a bottomAnchor with the constant passed in using a greaterThanOrEqualTo Constraint. + /// - Parameter anchor:The anchor in which to attach the bottomAnchor + /// - constant: Constant size. + /// - Returns: The Constraint that was created. public func pinBottomGreaterThanOrEqualTo(anchor: NSLayoutYAxisAnchor?, constant: CGFloat = 0.0) -> NSLayoutConstraint? { let found: NSLayoutYAxisAnchor? = anchor ?? superview?.bottomAnchor guard let found else { return nil } @@ -223,29 +322,48 @@ extension UIView { extension UIView { @discardableResult + /// Adds a leadingAnchor. + /// - Parameter constant: Constant size. + /// - Returns: Yourself. public func pinLeading(_ constant: CGFloat = 0.0) -> Self { return pinLeading(nil, constant) } @discardableResult + /// Adds a leadingAnchor to a specific XAxisAnchor. + /// - Parameter anchor:The anchor in which to attach the leadingAnchor. + /// - constant: Constant size. + /// - Returns: Yourself. public func pinLeading(_ anchor: NSLayoutXAxisAnchor? = nil, _ constant: CGFloat = 0.0) -> Self { pinLeading(anchor: anchor, constant: constant) return self } @discardableResult + /// Adds a leadingAnchor to a specific XAxisAnchor passed in using a greaterThanOrEqualTo Constraint + /// - Parameter anchor:The anchor in which to attach the leadingAnchor + /// - constant: Constant size. + /// - Returns: Yourself. public func pinLeadingLessThanOrEqualTo(_ anchor: NSLayoutXAxisAnchor? = nil, _ constant: CGFloat = 0.0) -> Self { pinLeadingLessThanOrEqualTo(anchor: anchor, constant: constant) return self } @discardableResult + /// Adds a leadingAnchor to a specific XAxisAnchor passed in using a greaterThanOrEqualTo Constraint + /// - Parameter anchor:The anchor in which to attach the leadingAnchor + /// - constant: Constant size. + /// - Returns: Yourself. public func pinLeadingGreaterThanOrEqualTo(_ anchor: NSLayoutXAxisAnchor? = nil, _ constant: CGFloat = 0.0) -> Self { pinLeadingGreaterThanOrEqualTo(anchor: anchor, constant: constant) return self } @discardableResult + /// Adds a leadingAnchor for the constant passed into the method. + /// - Parameter anchor:The anchor in which to attach the leadingAnchor + /// - constant: Constant size. + /// - Returns: The Constraint that was created. public func pinLeading(anchor: NSLayoutXAxisAnchor?, constant: CGFloat = 0.0) -> NSLayoutConstraint? { let found: NSLayoutXAxisAnchor? = anchor ?? superview?.leadingAnchor guard let found else { return nil } @@ -253,6 +371,10 @@ extension UIView { } @discardableResult + /// Adds a leadingAnchor with the constant passed in using a lessThanOrEqualTo Constraint. + /// - Parameter anchor:The anchor in which to attach the leadingAnchor + /// - constant: Constant size. + /// - Returns: The Constraint that was created. public func pinLeadingLessThanOrEqualTo(anchor: NSLayoutXAxisAnchor?, constant: CGFloat = 0.0) -> NSLayoutConstraint? { let found: NSLayoutXAxisAnchor? = anchor ?? superview?.leadingAnchor guard let found else { return nil } @@ -260,6 +382,10 @@ extension UIView { } @discardableResult + /// Adds a leadingAnchor with the constant passed in using a greaterThanOrEqualTo Constraint. + /// - Parameter anchor:The anchor in which to attach the leadingAnchor + /// - constant: Constant size. + /// - Returns: The Constraint that was created. public func pinLeadingGreaterThanOrEqualTo(anchor: NSLayoutXAxisAnchor?, constant: CGFloat = 0.0) -> NSLayoutConstraint? { let found: NSLayoutXAxisAnchor? = anchor ?? superview?.leadingAnchor guard let found else { return nil } @@ -273,29 +399,48 @@ extension UIView { extension UIView { @discardableResult + /// Adds a trailingAnchor. + /// - Parameter constant: Constant size. + /// - Returns: Yourself. public func pinTrailing(_ constant: CGFloat = 0.0) -> Self { pinTrailing(nil, constant) } @discardableResult + /// Adds a trailingAnchor to a specific XAxisAnchor. + /// - Parameter anchor:The anchor in which to attach the trailingAnchor. + /// - constant: Constant size. + /// - Returns: Yourself. public func pinTrailing(_ anchor: NSLayoutXAxisAnchor? = nil, _ constant: CGFloat = 0.0) -> Self { pinTrailing(anchor: anchor, constant: constant) return self } @discardableResult + /// Adds a trailingAnchor to a specific XAxisAnchor passed in using a lessThanOrEqualTo Constraint + /// - Parameter anchor:The anchor in which to attach the trailingAnchor + /// - constant: Constant size. + /// - Returns: Yourself. public func pinTrailingLessThanOrEqualTo(_ anchor: NSLayoutXAxisAnchor? = nil, _ constant: CGFloat = 0.0) -> Self { pinTrailingLessThanOrEqualTo(anchor: anchor, constant: constant) return self } @discardableResult + /// Adds a trailingAnchor to a specific XAxisAnchor passed in using a greaterThanOrEqualTo Constraint + /// - Parameter anchor:The anchor in which to attach the trailingAnchor + /// - constant: Constant size. + /// - Returns: Yourself. public func pinTrailingGreaterThanOrEqualTo(_ anchor: NSLayoutXAxisAnchor? = nil, _ constant: CGFloat = 0.0) -> Self { pinTrailingGreaterThanOrEqualTo(anchor: anchor, constant: constant) return self } @discardableResult + /// Adds a trailingAnchor for the constant passed into the method. + /// - Parameter anchor:The anchor in which to attach the trailingAnchor + /// - constant: Constant size. + /// - Returns: The Constraint that was created. public func pinTrailing(anchor: NSLayoutXAxisAnchor?, constant: CGFloat = 0.0) -> NSLayoutConstraint? { let found: NSLayoutXAxisAnchor? = anchor ?? superview?.trailingAnchor guard let found else { return nil } @@ -303,6 +448,10 @@ extension UIView { } @discardableResult + /// Adds a trailingAnchor with the constant passed in using a lessThanOrEqualTo Constraint. + /// - Parameter anchor:The anchor in which to attach the trailingAnchor + /// - constant: Constant size. + /// - Returns: The Constraint that was created. public func pinTrailingLessThanOrEqualTo(anchor: NSLayoutXAxisAnchor?, constant: CGFloat = 0.0) -> NSLayoutConstraint? { let found: NSLayoutXAxisAnchor? = anchor ?? superview?.trailingAnchor guard let found else { return nil } @@ -310,6 +459,10 @@ extension UIView { } @discardableResult + /// Adds a trailingAnchor with the constant passed in using a greaterThanOrEqualTo Constraint. + /// - Parameter anchor:The anchor in which to attach the trailingAnchor + /// - constant: Constant size. + /// - Returns: The Constraint that was created. public func pinTrailingGreaterThanOrEqualTo(anchor: NSLayoutXAxisAnchor?, constant: CGFloat = 0.0) -> NSLayoutConstraint? { let found: NSLayoutXAxisAnchor? = anchor ?? superview?.trailingAnchor guard let found else { return nil } @@ -320,17 +473,22 @@ extension UIView { extension NSLayoutConstraint { @discardableResult + /// Activates yourself + /// - Returns: Self public func activate() -> Self{ isActive = true return self } @discardableResult + /// Deactivates yourself + /// - Returns: Self public func deactivate() -> Self{ isActive = false return self } - + + /// Helper class that holds onto all types of Contraints. public class Container { public var topConstraint: NSLayoutConstraint? public var leadingConstraint: NSLayoutConstraint? diff --git a/VDS/Fonts/Font.swift b/VDS/Fonts/Font.swift index 57ad5962..ecd692de 100644 --- a/VDS/Fonts/Font.swift +++ b/VDS/Fonts/Font.swift @@ -7,6 +7,7 @@ import Foundation +/// Enum that is matched up for the Verizon fonts. public enum Font: String, FontProtocol { case dsBold case dsRegular @@ -29,6 +30,7 @@ public enum Font: String, FontProtocol { } } + /// File Extension for each of the Font enums. public var fontFileExtension: String { return "otf" } diff --git a/VDS/Fonts/FontProtocol.swift b/VDS/Fonts/FontProtocol.swift index 74ad8701..9ee21939 100644 --- a/VDS/Fonts/FontProtocol.swift +++ b/VDS/Fonts/FontProtocol.swift @@ -8,12 +8,15 @@ import Foundation import UIKit +/// Used in Classes that require Fonts public protocol FontProtocol: CaseIterable, RawRepresentable, Hashable { var fontFileExtension: String { get } var fontName: String { get } } extension FontProtocol { + + /// Registers the fonts used in the VDS Framework. public func register() { guard let bundle = Bundle(identifier: "com.vzw.vds") else { return } Self.allCases.forEach{ font in @@ -29,6 +32,8 @@ extension FontProtocol { } } + /// Registers a font from a fileLocation + /// - Parameter url: URL of the file location. public static func register(from url: URL) throws { guard let fontDataProvider = CGDataProvider(url: url as CFURL) else { throw NSError(domain: "www.verizon.com", code: 123, userInfo: ["description":"Could not create font data provider for \(url)."]) @@ -40,7 +45,11 @@ extension FontProtocol { } } - public func font(ofSize size: CGFloat, isScaled: Bool = true) -> UIFont{ + /// Returns a UIFont for the fontName and size given. + /// - Parameters: + /// - size: Size of the font + /// - Returns: UIFont for the fontName and Size. + public func font(ofSize size: CGFloat) -> UIFont{ DispatchQueue.once(block: { self.register() }) guard let found = UIFont(name: self.fontName, size: size) else { return .systemFont(ofSize: size) } return found diff --git a/VDS/Protocols/Changeable.swift b/VDS/Protocols/Changeable.swift index 38f9cd03..d51c734b 100644 --- a/VDS/Protocols/Changeable.swift +++ b/VDS/Protocols/Changeable.swift @@ -14,6 +14,8 @@ public protocol Changeable: Handlerable where Self: UIControl { } extension Changeable { + /// Allows the setting of a completion block against the onChangeSubscriber cancellable. This will + /// completion block will get executed against the UIControl publisher for the 'valueChange' action. public var onChange: ((Self) -> ())? { get { return nil } set { diff --git a/VDS/Protocols/Clickable.swift b/VDS/Protocols/Clickable.swift index a202850a..f98dd1c7 100644 --- a/VDS/Protocols/Clickable.swift +++ b/VDS/Protocols/Clickable.swift @@ -15,6 +15,8 @@ public protocol Clickable: Handlerable where Self: UIControl { } extension Clickable { + /// Allows the setting of a completion block against the onClickSubscriber cancellable. This will + /// completion block will get executed against the UIControl publisher for the 'touchUpInside' action. public var onClick: ((Self) -> ())? { get { return nil } set { diff --git a/VDS/Protocols/EnumSubset.swift b/VDS/Protocols/EnumSubset.swift index 5f92a1cd..a690fca3 100644 --- a/VDS/Protocols/EnumSubset.swift +++ b/VDS/Protocols/EnumSubset.swift @@ -13,6 +13,8 @@ public protocol EnumSubset: RawRepresentable, CaseIterable { } extension EnumSubset where RawValue == T.RawValue { + + /// Will either return the Generic RawRepresentable object or the defaultValue public var value: T { T(rawValue: rawValue) ?? defaultValue } diff --git a/VDS/Protocols/Errorable.swift b/VDS/Protocols/Errorable.swift index bd9b41de..5323dd17 100644 --- a/VDS/Protocols/Errorable.swift +++ b/VDS/Protocols/Errorable.swift @@ -7,7 +7,12 @@ import Foundation +/// Protocol used for objects that require to show an error public protocol Errorable { + + /// Whether not to show the errorText var showError: Bool { get set } + + /// Text that needs to be shown if showError is true var errorText: String? { get set } } diff --git a/VDS/Protocols/FormFieldable.swift b/VDS/Protocols/FormFieldable.swift index 41017204..935b3d53 100644 --- a/VDS/Protocols/FormFieldable.swift +++ b/VDS/Protocols/FormFieldable.swift @@ -7,7 +7,12 @@ import Foundation +/// Protocol used for a FormField object public protocol FormFieldable { + + /// Unique Id for the Form Field object within a Form var inputId: String? { get set } + + /// Value for the Form Field var value: AnyHashable? { get set } } diff --git a/VDS/Protocols/Resetable.swift b/VDS/Protocols/Resetable.swift index 6dde1028..528cba1d 100644 --- a/VDS/Protocols/Resetable.swift +++ b/VDS/Protocols/Resetable.swift @@ -8,5 +8,6 @@ import Foundation public protocol Resettable { + /// Called to reset back an objects default settings. func reset() } diff --git a/VDS/SupportingFiles/ReleaseNotes.txt b/VDS/SupportingFiles/ReleaseNotes.txt index c05fd2f4..418fbd1e 100644 --- a/VDS/SupportingFiles/ReleaseNotes.txt +++ b/VDS/SupportingFiles/ReleaseNotes.txt @@ -1,3 +1,7 @@ +1.0.34 +======= +- Added new spec for Bottom Inset for TextStyle + 1.0.33 ======= - Add test variable to use ratio line height or not diff --git a/VDS/Typography/Typogprahy+Styles.swift b/VDS/Typography/Typogprahy+Styles.swift index 3894b3f7..b593f33b 100644 --- a/VDS/Typography/Typogprahy+Styles.swift +++ b/VDS/Typography/Typogprahy+Styles.swift @@ -16,73 +16,86 @@ extension TextStyle { fontFace: .dsLight, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature144 : VDSTypography.fontSizeFeature96, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature136 : VDSTypography.lineHeightFeature88, - letterSpacing: VDSTypography.letterSpacingSemiWide) - + letterSpacing: VDSTypography.letterSpacingSemiWide, + edgeInsets: .init(bottom: UIDevice.isIPad ? -6: -4)) + public static let boldFeatureXLarge = TextStyle(rawValue: "boldFeatureXLarge", fontFace: .dsBold, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature144 : VDSTypography.fontSizeFeature96, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature136 : VDSTypography.lineHeightFeature88, - letterSpacing: 0) + letterSpacing: 0, + edgeInsets: .init(bottom: UIDevice.isIPad ? -6: -4)) public static let featureLarge = TextStyle(rawValue: "featureLarge", fontFace: .dsLight, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature128 : VDSTypography.fontSizeFeature80, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature120 : VDSTypography.lineHeightFeature76, - letterSpacing: VDSTypography.letterSpacingSemiWide) + letterSpacing: VDSTypography.letterSpacingSemiWide, + edgeInsets: .init(bottom: UIDevice.isIPad ? -6: -2)) + public static let boldFeatureLarge = TextStyle(rawValue: "boldFeatureLarge", fontFace: .dsBold, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature128 : VDSTypography.fontSizeFeature80, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature120 : VDSTypography.lineHeightFeature76, - letterSpacing: 0) + letterSpacing: 0, + edgeInsets: .init(bottom: UIDevice.isIPad ? -6: -2)) public static let featureMedium = TextStyle(rawValue: "featureMedium", fontFace: .dsLight, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature96 : VDSTypography.fontSizeFeature64, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature88 : VDSTypography.lineHeightFeature64, - letterSpacing: VDSTypography.letterSpacingSemiWide) + letterSpacing: VDSTypography.letterSpacingSemiWide, + edgeInsets: .init(bottom: UIDevice.isIPad ? -4: -2)) public static let boldFeatureMedium = TextStyle(rawValue: "boldFeatureMedium", fontFace: .dsBold, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature96 : VDSTypography.fontSizeFeature64, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature88 : VDSTypography.lineHeightFeature64, - letterSpacing: 0) + letterSpacing: 0, + edgeInsets: .init(bottom: UIDevice.isIPad ? -4: -2)) public static let featureSmall = TextStyle(rawValue: "featureSmall", fontFace: .dsLight, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature80 : VDSTypography.fontSizeFeature48, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature76 : VDSTypography.lineHeightFeature48, - letterSpacing: VDSTypography.letterSpacingSemiWide) + letterSpacing: VDSTypography.letterSpacingSemiWide, + edgeInsets: .init(bottom: UIDevice.isIPad ? -2: 0)) public static let boldFeatureSmall = TextStyle(rawValue: "boldFeatureSmall", fontFace: .dsBold, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature80 : VDSTypography.fontSizeFeature48, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature76 : VDSTypography.lineHeightFeature48, - letterSpacing: 0) + letterSpacing: 0, + edgeInsets: .init(bottom: UIDevice.isIPad ? -2: 0)) public static let featureXSmall = TextStyle(rawValue: "featureXSmall", fontFace: .dsLight, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature64 : VDSTypography.fontSizeFeature40, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature64 : VDSTypography.lineHeightFeature40, - letterSpacing: VDSTypography.letterSpacingSemiWide) + letterSpacing: VDSTypography.letterSpacingSemiWide, + edgeInsets: .init(bottom: UIDevice.isIPad ? -2: 0)) public static let boldFeatureXSmall = TextStyle(rawValue: "boldFeatureXSmall", fontFace: .dsBold, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature64 : VDSTypography.fontSizeFeature40, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature64 : VDSTypography.lineHeightFeature40, - letterSpacing: 0) + letterSpacing: 0, + edgeInsets: .init(bottom: UIDevice.isIPad ? -2: 0)) public static let title2XLarge = TextStyle(rawValue: "title2XLarge", fontFace: .dsLight, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle64 : VDSTypography.fontSizeTitle40, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle64 : VDSTypography.lineHeightTitle40, - letterSpacing: VDSTypography.letterSpacingSemiWide) + letterSpacing: VDSTypography.letterSpacingSemiWide, + edgeInsets: .init(bottom: UIDevice.isIPad ? -2: 0)) public static let boldTitle2XLarge = TextStyle(rawValue: "boldTitle2XLarge", fontFace: .dsBold, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle64 : VDSTypography.fontSizeTitle40, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle64 : VDSTypography.lineHeightTitle40, - letterSpacing: 0) + letterSpacing: 0, + edgeInsets: .init(bottom: UIDevice.isIPad ? -2: 0)) public static let titleXLarge = TextStyle(rawValue: "titleXLarge", fontFace: .dsLight, @@ -214,6 +227,12 @@ extension TextStyle { } } +extension UIEdgeInsets { + public init(bottom: CGFloat) { + self.init(top: 0, left: 0, bottom: bottom, right: 0) + } +} + extension TextStyle { public enum StandardStyle: String, CaseIterable { case featureXLarge,