Merge branch 'mbruce/bugfixes' into 'develop'

bug fix merge

See merge request BPHV_MIPS/vds_ios!106
This commit is contained in:
Bruce, Matt R 2023-09-08 13:35:45 +00:00
commit 0a35fd22ad
21 changed files with 189 additions and 93 deletions

View File

@ -15,6 +15,7 @@
EA0B18022A9E236900F2D0CD /* SelectorGroupBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0B18012A9E236900F2D0CD /* SelectorGroupBase.swift */; }; EA0B18022A9E236900F2D0CD /* SelectorGroupBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0B18012A9E236900F2D0CD /* SelectorGroupBase.swift */; };
EA0B18052A9E2D2D00F2D0CD /* SelectorBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0B18032A9E2D2D00F2D0CD /* SelectorBase.swift */; }; EA0B18052A9E2D2D00F2D0CD /* SelectorBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0B18032A9E2D2D00F2D0CD /* SelectorBase.swift */; };
EA0B18062A9E2D2D00F2D0CD /* SelectorItemBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0B18042A9E2D2D00F2D0CD /* SelectorItemBase.swift */; }; EA0B18062A9E2D2D00F2D0CD /* SelectorItemBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0B18042A9E2D2D00F2D0CD /* SelectorItemBase.swift */; };
EA0B180A2AA78F9000F2D0CD /* UIEdgeInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0B18092AA78F9000F2D0CD /* UIEdgeInsets.swift */; };
EA0D1C372A681CCE00E5C127 /* ToggleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0D1C362A681CCE00E5C127 /* ToggleView.swift */; }; EA0D1C372A681CCE00E5C127 /* ToggleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0D1C362A681CCE00E5C127 /* ToggleView.swift */; };
EA0D1C392A6AD4DF00E5C127 /* Typography+SpacingConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0D1C382A6AD4DF00E5C127 /* Typography+SpacingConfig.swift */; }; EA0D1C392A6AD4DF00E5C127 /* Typography+SpacingConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0D1C382A6AD4DF00E5C127 /* Typography+SpacingConfig.swift */; };
EA0D1C3B2A6AD51B00E5C127 /* Typogprahy+Styles.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0D1C3A2A6AD51B00E5C127 /* Typogprahy+Styles.swift */; }; EA0D1C3B2A6AD51B00E5C127 /* Typogprahy+Styles.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0D1C3A2A6AD51B00E5C127 /* Typogprahy+Styles.swift */; };
@ -160,6 +161,7 @@
EA0B18012A9E236900F2D0CD /* SelectorGroupBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectorGroupBase.swift; sourceTree = "<group>"; }; EA0B18012A9E236900F2D0CD /* SelectorGroupBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectorGroupBase.swift; sourceTree = "<group>"; };
EA0B18032A9E2D2D00F2D0CD /* SelectorBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectorBase.swift; sourceTree = "<group>"; }; EA0B18032A9E2D2D00F2D0CD /* SelectorBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectorBase.swift; sourceTree = "<group>"; };
EA0B18042A9E2D2D00F2D0CD /* SelectorItemBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectorItemBase.swift; sourceTree = "<group>"; }; EA0B18042A9E2D2D00F2D0CD /* SelectorItemBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectorItemBase.swift; sourceTree = "<group>"; };
EA0B18092AA78F9000F2D0CD /* UIEdgeInsets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIEdgeInsets.swift; sourceTree = "<group>"; };
EA0D1C362A681CCE00E5C127 /* ToggleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleView.swift; sourceTree = "<group>"; }; EA0D1C362A681CCE00E5C127 /* ToggleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleView.swift; sourceTree = "<group>"; };
EA0D1C382A6AD4DF00E5C127 /* Typography+SpacingConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Typography+SpacingConfig.swift"; sourceTree = "<group>"; }; EA0D1C382A6AD4DF00E5C127 /* Typography+SpacingConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Typography+SpacingConfig.swift"; sourceTree = "<group>"; };
EA0D1C3A2A6AD51B00E5C127 /* Typogprahy+Styles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Typogprahy+Styles.swift"; sourceTree = "<group>"; }; EA0D1C3A2A6AD51B00E5C127 /* Typogprahy+Styles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Typogprahy+Styles.swift"; sourceTree = "<group>"; };
@ -478,6 +480,7 @@
EA3361A7288B23300071C351 /* UIColor.swift */, EA3361A7288B23300071C351 /* UIColor.swift */,
EA81410F2A127066004F60D2 /* UIColor+VDSColor.swift */, EA81410F2A127066004F60D2 /* UIColor+VDSColor.swift */,
EA33623D2892EE950071C351 /* UIDevice.swift */, EA33623D2892EE950071C351 /* UIDevice.swift */,
EA0B18092AA78F9000F2D0CD /* UIEdgeInsets.swift */,
EAF7F0B6289C12A600B287F5 /* UITapGestureRecognizer.swift */, EAF7F0B6289C12A600B287F5 /* UITapGestureRecognizer.swift */,
EA8E40902A7D3F6300934ED3 /* UIView+Accessibility.swift */, EA8E40902A7D3F6300934ED3 /* UIView+Accessibility.swift */,
EAB5FED329267EB300998C17 /* UIView+NSLayoutConstraint.swift */, EAB5FED329267EB300998C17 /* UIView+NSLayoutConstraint.swift */,
@ -982,6 +985,7 @@
EAF978212A99035B00C2FEA9 /* Enabling.swift in Sources */, EAF978212A99035B00C2FEA9 /* Enabling.swift in Sources */,
EA5E3058295105A40082B959 /* Tilelet.swift in Sources */, EA5E3058295105A40082B959 /* Tilelet.swift in Sources */,
EA89201528B56CF4006B9984 /* RadioBoxGroup.swift in Sources */, EA89201528B56CF4006B9984 /* RadioBoxGroup.swift in Sources */,
EA0B180A2AA78F9000F2D0CD /* UIEdgeInsets.swift in Sources */,
EA985C1D296CD13600F2FF2E /* BundleManager.swift in Sources */, EA985C1D296CD13600F2FF2E /* BundleManager.swift in Sources */,
EA0B18052A9E2D2D00F2D0CD /* SelectorBase.swift in Sources */, EA0B18052A9E2D2D00F2D0CD /* SelectorBase.swift in Sources */,
EAC71A1D2A2E155A00E47A9F /* Checkbox.swift in Sources */, EAC71A1D2A2E155A00E47A9F /* Checkbox.swift in Sources */,
@ -1167,7 +1171,7 @@
BUILD_LIBRARY_FOR_DISTRIBUTION = YES; BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
CODE_SIGN_IDENTITY = ""; CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 40; CURRENT_PROJECT_VERSION = 41;
DEFINES_MODULE = YES; DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = ""; DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_COMPATIBILITY_VERSION = 1;
@ -1204,7 +1208,7 @@
BUILD_LIBRARY_FOR_DISTRIBUTION = YES; BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
CODE_SIGN_IDENTITY = ""; CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 40; CURRENT_PROJECT_VERSION = 41;
DEFINES_MODULE = YES; DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = ""; DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_COMPATIBILITY_VERSION = 1;

View File

@ -106,7 +106,11 @@ open class SelectorGroupBase<SelectorItemType: Control>: Control, SelectorGroup,
super.setup() super.setup()
addSubview(mainStackView) addSubview(mainStackView)
mainStackView.pinToSuperView() mainStackView
.pinTop()
.pinLeading()
.pinTrailing()
.pinBottom(0, .defaultHigh)
} }
/// Handler for the Group to override on a select event. /// Handler for the Group to override on a select event.

View File

@ -178,7 +178,11 @@ open class SelectorItemBase<Selector: SelectorControlable>: Control, Errorable,
selectorStackView.addArrangedSubview(selectorLabelStackView) selectorStackView.addArrangedSubview(selectorLabelStackView)
selectorLabelStackView.addArrangedSubview(label) selectorLabelStackView.addArrangedSubview(label)
selectorLabelStackView.addArrangedSubview(childLabel) selectorLabelStackView.addArrangedSubview(childLabel)
mainStackView.pinToSuperView() mainStackView
.pinTop()
.pinLeading()
.pinTrailing()
.pinBottom(0, .defaultHigh)
} }
/// Used to make changes to the View based off a change events or from local properties. /// Used to make changes to the View based off a change events or from local properties.

View File

@ -126,7 +126,7 @@ open class BadgeIndicator: View {
case .small: case .small:
break break
} }
return .init(top: verticalPadding, left: horizontalPadding, bottom: verticalPadding, right: horizontalPadding) return .axis(horizontal: horizontalPadding, vertical: verticalPadding)
} }
} }
@ -193,7 +193,7 @@ open class BadgeIndicator: View {
open var verticalPadding: CGFloat? { didSet { setNeedsUpdate() } } open var verticalPadding: CGFloat? { didSet { setNeedsUpdate() } }
/// Sets the padding at the left/right of the label. /// Sets the padding at the left/right of the label.
open var horitonalPadding: CGFloat? { didSet { setNeedsUpdate() } } open var horizontalPadding: CGFloat? { didSet { setNeedsUpdate() } }
/// Hides the dot when you are in Kind.simple mode. /// Hides the dot when you are in Kind.simple mode.
open var hideDot: Bool = false { didSet { setNeedsUpdate() } } open var hideDot: Bool = false { didSet { setNeedsUpdate() } }
@ -217,12 +217,13 @@ open class BadgeIndicator: View {
private var badgeSize: CGFloat { max(minSize, size.textStyle.font.lineHeight) } private var badgeSize: CGFloat { max(minSize, size.textStyle.font.lineHeight) }
private var labelEdgeInset: UIEdgeInsets { private var labelEdgeInset: UIEdgeInsets {
var newInset = size.edgeInset var newInset = size.edgeInset
if let verticalPadding, let horitonalPadding { if let verticalPadding, let horizontalPadding {
newInset = .init(top: verticalPadding, left: horitonalPadding, bottom: verticalPadding, right: horitonalPadding) newInset = .init(top: verticalPadding, left: horizontalPadding, bottom: verticalPadding, right: horizontalPadding)
newInset = .axis(horizontal: horizontalPadding, vertical: verticalPadding)
} else if let verticalPadding { } else if let verticalPadding {
newInset = .init(top: verticalPadding, left: newInset.left, bottom: verticalPadding, right: newInset.right) newInset = .init(top: verticalPadding, left: newInset.left, bottom: verticalPadding, right: newInset.right)
} else if let horitonalPadding { } else if let horizontalPadding {
newInset = .init(top: newInset.top, left: horitonalPadding, bottom: newInset.bottom, right: horitonalPadding) newInset = .init(top: newInset.top, left: horizontalPadding, bottom: newInset.bottom, right: horizontalPadding)
} }
return newInset return newInset
@ -276,8 +277,12 @@ open class BadgeIndicator: View {
widthConstraint = badgeView.widthGreaterThanEqualTo(constant: badgeSize) widthConstraint = badgeView.widthGreaterThanEqualTo(constant: badgeSize)
//we are insetting the padding to compensate for the border //we are insetting the padding to compensate for the border
badgeView.pinToSuperView(.init(top: borderWidth, left: borderWidth, bottom: borderWidth, right: borderWidth)) badgeView
.pinTop(borderWidth)
.pinLeading(borderWidth)
.pinTrailing(borderWidth, .defaultHigh)
.pinBottom(borderWidth, .defaultHigh)
labelContraints.topConstraint = label.pinTopGreaterThanOrEqualTo(anchor: badgeView.topAnchor) labelContraints.topConstraint = label.pinTopGreaterThanOrEqualTo(anchor: badgeView.topAnchor)
labelContraints.bottomConstraint = label.pinBottomGreaterThanOrEqualTo(anchor: badgeView.bottomAnchor) labelContraints.bottomConstraint = label.pinBottomGreaterThanOrEqualTo(anchor: badgeView.bottomAnchor)
labelContraints.leadingConstraint = label.pinLeadingGreaterThanOrEqualTo(anchor: badgeView.leadingAnchor) labelContraints.leadingConstraint = label.pinLeadingGreaterThanOrEqualTo(anchor: badgeView.leadingAnchor)

View File

@ -126,7 +126,7 @@ extension TextLinkCaret {
} }
func setAttribute(on attributedString: NSMutableAttributedString) { func setAttribute(on attributedString: NSMutableAttributedString) {
let imageAttr = ImageLabelAttribute(location: location, imageName: "\(position.rawValue)-caret-bold", frame: .init(x: 0, y: 0, width: caretSize.width, height: caretSize.height), tintColor: tintColor, accessibleText: "Caret") let imageAttr = ImageLabelAttribute(location: location, imageName: "\(position.rawValue)-caret-bold", frame: .init(x: 0, y: 0, width: caretSize.width, height: caretSize.height), tintColor: tintColor)
let spacer = NSAttributedString.spacer(for: spacerWidth) let spacer = NSAttributedString.spacer(for: spacerWidth)
guard let image = try? imageAttr.getAttachment() else { return } guard let image = try? imageAttr.getAttachment() else { return }

View File

@ -264,7 +264,11 @@ open class ButtonIcon: Control {
layoutGuideHeightConstraint = iconLayoutGuide.height(constant: size.containerSize) layoutGuideHeightConstraint = iconLayoutGuide.height(constant: size.containerSize)
//pin layout guide //pin layout guide
iconLayoutGuide.pinToSuperView() iconLayoutGuide
.pinTop()
.pinLeading()
.pinTrailing(0, .defaultHigh)
.pinBottom(0, .defaultHigh)
//determines the center point of the icon //determines the center point of the icon
centerXConstraint = icon.centerXAnchor.constraint(equalTo: iconLayoutGuide.centerXAnchor, constant: 0) centerXConstraint = icon.centerXAnchor.constraint(equalTo: iconLayoutGuide.centerXAnchor, constant: 0)

View File

@ -221,15 +221,24 @@ open class Notification: View {
/// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations. /// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations.
open override func setup() { open override func setup() {
super.setup() super.setup()
addSubview(mainStackView)
mainStackView.pinToSuperView(.init(top: edgeSpacing, left: edgeSpacing, bottom: edgeSpacing, right: edgeSpacing))
let layoutGuide = UILayoutGuide()
addLayoutGuide(layoutGuide)
layoutGuide
.pinTop(0)
.pinLeading(0)
.pinTrailing(0, .defaultHigh)
.pinBottom(0, .defaultHigh)
addSubview(mainStackView)
mainStackView.pin(layoutGuide, with: .uniform(edgeSpacing))
NSLayoutConstraint.activate([ NSLayoutConstraint.activate([
heightAnchor.constraint(greaterThanOrEqualToConstant: minViewHeight), layoutGuide.heightAnchor.constraint(greaterThanOrEqualToConstant: minViewHeight),
mainStackView.heightAnchor.constraint(greaterThanOrEqualToConstant: minContentHeight), mainStackView.heightAnchor.constraint(greaterThanOrEqualToConstant: minContentHeight),
widthAnchor.constraint(greaterThanOrEqualToConstant: minViewWidth) layoutGuide.widthAnchor.constraint(greaterThanOrEqualToConstant: minViewWidth)
]) ])
maxWidthConstraint = widthAnchor.constraint(lessThanOrEqualToConstant: maxViewWidth) maxWidthConstraint = layoutGuide.widthAnchor.constraint(lessThanOrEqualToConstant: maxViewWidth)
labelButtonView.addArrangedSubview(labelsView) labelButtonView.addArrangedSubview(labelsView)

View File

@ -194,8 +194,13 @@ open class RadioBoxItem: Control, Changeable, FormFieldable {
selectorLeftLabelStackView.addArrangedSubview(textLabel) selectorLeftLabelStackView.addArrangedSubview(textLabel)
selectorLeftLabelStackView.addArrangedSubview(subTextLabel) selectorLeftLabelStackView.addArrangedSubview(subTextLabel)
selectorView.pinToSuperView() selectorView
mainStackView.pinToSuperView(.init(top: 16, left: 16, bottom: 16, right: 16)) .pinTop()
.pinLeading()
.pinTrailing(0, .defaultHigh)
.pinBottom(0, .defaultHigh)
mainStackView.pinToSuperView(.uniform(16))
} }
/// Resets to default settings. /// Resets to default settings.

View File

@ -73,18 +73,6 @@ open class RadioButtonGroup: SelectorGroupBase<RadioButtonItem>, SelectorGroupSi
} }
} }
//--------------------------------------------------
// MARK: - Overrides
//--------------------------------------------------
/// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations.
open override func setup() {
super.setup()
addSubview(mainStackView)
mainStackView.pinToSuperView()
}
public override func didSelect(_ selectedControl: RadioButtonItem) { public override func didSelect(_ selectedControl: RadioButtonItem) {
if let selectedItem { if let selectedItem {
updateToggle(selectedItem) updateToggle(selectedItem)

View File

@ -189,10 +189,12 @@ open class EntryFieldBase: Control, Changeable {
//create the wrapping view //create the wrapping view
heightConstraint = containerView.heightAnchor.constraint(greaterThanOrEqualToConstant: containerSize.height) heightConstraint = containerView.heightAnchor.constraint(greaterThanOrEqualToConstant: containerSize.height)
widthConstraint?.priority = .defaultHigh
heightConstraint?.isActive = true heightConstraint?.isActive = true
widthConstraint = containerView.widthAnchor.constraint(equalToConstant: 0) widthConstraint = containerView.widthAnchor.constraint(equalToConstant: 0)
widthConstraint?.priority = .defaultHigh
//get the container this is what is color //get the container this is what is color
//border, internal, etc... //border, internal, etc...
let container = getContainer() let container = getContainer()
@ -201,7 +203,7 @@ open class EntryFieldBase: Control, Changeable {
//this is the horizontal stack that contains //this is the horizontal stack that contains
//the left, InputContainer, Icons, Buttons //the left, InputContainer, Icons, Buttons
container.addSubview(containerStackView) container.addSubview(containerStackView)
containerStackView.pinToSuperView(.init(top: 12, left: 12, bottom: 12, right: 12)) containerStackView.pinToSuperView(.uniform(12))
//add the view to add input fields //add the view to add input fields
containerStackView.addArrangedSubview(controlContainerView) containerStackView.addArrangedSubview(controlContainerView)
@ -218,9 +220,9 @@ open class EntryFieldBase: Control, Changeable {
stackView stackView
.pinTop() .pinTop()
.pinBottom()
.pinLeading() .pinLeading()
.trailingAnchor.constraint(lessThanOrEqualTo: trailingAnchor).isActive = true .pinTrailing(0, .defaultHigh)
.pinBottom(0, .defaultHigh)
titleLabel.textColorConfiguration = primaryColorConfiguration.eraseToAnyColorable() titleLabel.textColorConfiguration = primaryColorConfiguration.eraseToAnyColorable()
errorLabel.textColorConfiguration = primaryColorConfiguration.eraseToAnyColorable() errorLabel.textColorConfiguration = primaryColorConfiguration.eraseToAnyColorable()

View File

@ -129,7 +129,12 @@ open class InputField: EntryFieldBase, UITextFieldDelegate {
minWidthConstraint?.isActive = true minWidthConstraint?.isActive = true
controlContainerView.addSubview(textField) controlContainerView.addSubview(textField)
textField.pinToSuperView() textField
.pinTop()
.pinLeading()
.pinTrailingLessThanOrEqualTo(nil, 0, .defaultHigh)
.pinBottom(0, .defaultHigh)
textField.heightAnchor.constraint(equalToConstant: 20).isActive = true textField.heightAnchor.constraint(equalToConstant: 20).isActive = true
textField textField
.textPublisher .textPublisher

View File

@ -76,7 +76,12 @@ open class TextArea: EntryFieldBase {
minWidthConstraint?.isActive = true minWidthConstraint?.isActive = true
controlContainerView.addSubview(textView) controlContainerView.addSubview(textView)
textView.pinToSuperView() textView
.pinTop()
.pinLeading()
.pinTrailingLessThanOrEqualTo(nil, 0, .defaultHigh)
.pinBottom(0, .defaultHigh)
textViewHeightConstraint = textView.heightAnchor.constraint(greaterThanOrEqualToConstant: 64) textViewHeightConstraint = textView.heightAnchor.constraint(greaterThanOrEqualToConstant: 64)
textViewHeightConstraint?.isActive = true textViewHeightConstraint?.isActive = true
backgroundColorConfiguration.setSurfaceColors(VDSColor.feedbackSuccessBackgroundOnlight, VDSColor.feedbackSuccessBackgroundOndark, forState: .success) backgroundColorConfiguration.setSurfaceColors(VDSColor.feedbackSuccessBackgroundOnlight, VDSColor.feedbackSuccessBackgroundOndark, forState: .success)

View File

@ -187,29 +187,40 @@ open class TileContainer: Control {
/// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations. /// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations.
open override func setup() { open override func setup() {
super.setup() super.setup()
let layoutGuide = UILayoutGuide()
addLayoutGuide(layoutGuide)
layoutGuide
.pinTop()
.pinLeading()
.pinTrailing(0, .defaultHigh)
.pinBottom(0, .defaultHigh)
addSubview(backgroundImageView) addSubview(backgroundImageView)
addSubview(containerView) addSubview(containerView)
addSubview(highlightView) addSubview(highlightView)
widthConstraint = widthAnchor.constraint(equalToConstant: 0) widthConstraint = layoutGuide.widthAnchor.constraint(equalToConstant: 0)
widthConstraint?.priority = .defaultHigh
heightGreaterThanConstraint = heightAnchor.constraint(greaterThanOrEqualToConstant: 44.0) heightGreaterThanConstraint = layoutGuide.heightAnchor.constraint(greaterThanOrEqualToConstant: 44.0)
heightGreaterThanConstraint?.isActive = false heightGreaterThanConstraint?.isActive = false
heightConstraint = heightAnchor.constraint(equalToConstant: 0) heightConstraint = layoutGuide.heightAnchor.constraint(equalToConstant: 0)
heightConstraint?.priority = .defaultHigh
backgroundImageView.pinToSuperView()
backgroundImageView.pin(layoutGuide)
backgroundImageView.isUserInteractionEnabled = false backgroundImageView.isUserInteractionEnabled = false
backgroundImageView.isHidden = true backgroundImageView.isHidden = true
containerView.backgroundColor = .clear containerView.backgroundColor = .clear
containerTopConstraint = containerView.pinTop(anchor: topAnchor, constant: padding.value) containerTopConstraint = containerView.pinTop(anchor: layoutGuide.topAnchor, constant: padding.value)
containerBottomConstraint = containerView.pinBottom(anchor: bottomAnchor, constant: padding.value) containerBottomConstraint = containerView.pinBottom(anchor: layoutGuide.bottomAnchor, constant: padding.value)
containerLeadingConstraint = containerView.pinLeading(anchor: leadingAnchor, constant: padding.value) containerLeadingConstraint = containerView.pinLeading(anchor: layoutGuide.leadingAnchor, constant: padding.value)
containerTrailingConstraint = containerView.pinTrailing(anchor: trailingAnchor, constant: padding.value) containerTrailingConstraint = containerView.pinTrailing(anchor: layoutGuide.trailingAnchor, constant: padding.value)
highlightView.pinToSuperView() highlightView.pin(layoutGuide)
highlightView.isHidden = true highlightView.isHidden = true
highlightView.backgroundColor = .clear highlightView.backgroundColor = .clear

View File

@ -213,7 +213,6 @@ open class Tilelet: TileContainer {
/// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations. /// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations.
open override func setup() { open override func setup() {
super.setup() super.setup()
width = 100
aspectRatio = .none aspectRatio = .none
color = .black color = .black
addContentView(stackView) addContentView(stackView)

View File

@ -191,20 +191,20 @@ open class ToggleView: Control, Changeable, FormFieldable {
shadowLayer1.frame = knobView.bounds shadowLayer1.frame = knobView.bounds
shadowLayer2.frame = knobView.bounds shadowLayer2.frame = knobView.bounds
let shadowColor = isEnabled ? VDSColor.paletteBlack.cgColor : VDSColor.paletteGray95.cgColor let shadowColor = VDSColor.paletteBlack.cgColor
shadowLayer1.cornerRadius = knobView.layer.cornerRadius shadowLayer1.cornerRadius = knobView.layer.cornerRadius
shadowLayer1.shadowColor = shadowColor shadowLayer1.shadowColor = shadowColor
shadowLayer1.shadowOpacity = isEnabled ? 0.24 : 0.1 shadowLayer1.shadowRadius = 10.0
shadowLayer1.shadowOffset = .init(width: 0, height: 1) shadowLayer1.shadowOffset = .init(width: 0, height: 1)
shadowLayer1.shadowRadius = isEnabled ? 5.0 : 10.0 shadowLayer1.shadowOpacity = isEnabled ? 0.24 : 0.12
shadowLayer2.cornerRadius = knobView.layer.cornerRadius shadowLayer2.cornerRadius = knobView.layer.cornerRadius
shadowLayer2.shadowColor = shadowColor shadowLayer2.shadowColor = shadowColor
shadowLayer2.shadowOpacity = isEnabled ? 0.08 : 0.04
shadowLayer2.shadowOffset = .init(width: 0, height: 2)
shadowLayer2.shadowRadius = 2.0 shadowLayer2.shadowRadius = 2.0
shadowLayer2.shadowOffset = .init(width: 0, height: 2)
shadowLayer2.shadowOpacity = isEnabled ? 0.08 : 0.04
} }
//-------------------------------------------------- //--------------------------------------------------

View File

@ -177,9 +177,9 @@ open class Tooltip: Control, TooltipLaunchable {
if let label, !label.isEmpty { if let label, !label.isEmpty {
accessibilityLabel = label accessibilityLabel = label
} else { } else {
accessibilityLabel = "Tooltip" accessibilityLabel = "Modal"
} }
accessibilityHint = isEnabled ? "Click to open Tooltip." : "" accessibilityHint = isEnabled ? "Double tap to open." : ""
accessibilityValue = "collapsed" accessibilityValue = "collapsed"
} }

View File

@ -46,7 +46,7 @@ open class TooltipDialog: View, UIScrollViewDelegate {
} }
lazy var primaryAccessibilityElement = UIAccessibilityElement(accessibilityContainer: self).with { lazy var primaryAccessibilityElement = UIAccessibilityElement(accessibilityContainer: self).with {
$0.accessibilityLabel = "Tooltip" $0.accessibilityLabel = "Modal"
$0.accessibilityValue = "expanded" $0.accessibilityValue = "expanded"
$0.accessibilityFrameInContainerSpace = .init(origin: .zero, size: .init(width: fullWidth, height: VDSLayout.Spacing.space1X.value)) $0.accessibilityFrameInContainerSpace = .init(origin: .zero, size: .init(width: fullWidth, height: VDSLayout.Spacing.space1X.value))
} }
@ -181,10 +181,12 @@ open class TooltipDialog: View, UIScrollViewDelegate {
} }
let wrapper = View() let wrapper = View()
wrapper.addSubview(contentView) wrapper.addSubview(contentView)
contentView.pinTop() contentView
contentView.pinLeading() .pinTop()
contentView.pinBottom() .pinLeading()
contentView.pinTrailingLessThanOrEqualTo() .pinBottom()
.pinTrailingLessThanOrEqualTo()
contentView.setNeedsLayout() contentView.setNeedsLayout()
contentStackView.addArrangedSubview(wrapper) contentStackView.addArrangedSubview(wrapper)
addedContent = true addedContent = true
@ -232,7 +234,7 @@ open class TooltipDialog: View, UIScrollViewDelegate {
open override func updateAccessibility() { open override func updateAccessibility() {
super.updateAccessibility() super.updateAccessibility()
primaryAccessibilityElement.accessibilityHint = "Click on the \(closeButtonText) button to close." primaryAccessibilityElement.accessibilityHint = "Double tap on the \(closeButtonText) button to close."
var elements: [Any] = [primaryAccessibilityElement] var elements: [Any] = [primaryAccessibilityElement]
contentStackView.arrangedSubviews.forEach{ elements.append($0) } contentStackView.arrangedSubviews.forEach{ elements.append($0) }

View File

@ -0,0 +1,49 @@
//
// UIEdgeInset.swift
// VDS
//
// Created by Matt Bruce on 9/5/23.
//
import Foundation
import UIKit
extension UIEdgeInsets {
public static func uniform(_ value: CGFloat) -> UIEdgeInsets {
return UIEdgeInsets(top: value, left: value, bottom: value, right: value)
}
public static func top(_ value: CGFloat) -> UIEdgeInsets {
return UIEdgeInsets(top: value, left: 0, bottom: 0, right: 0)
}
public static func left(_ value: CGFloat) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: value, bottom: 0, right: 0)
}
public static func bottom(_ value: CGFloat) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 0, bottom: value, right: 0)
}
public static func right(_ value: CGFloat) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: value)
}
public static func horizontal(_ value: CGFloat) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: value, bottom: 0, right: value)
}
public static func vertical(_ value: CGFloat) -> UIEdgeInsets {
return UIEdgeInsets(top: value, left: 0, bottom: value, right: 0)
}
public static func axis(horizontal: CGFloat, vertical: CGFloat) -> UIEdgeInsets {
return UIEdgeInsets(top: vertical, left: horizontal, bottom: vertical, right: horizontal)
}
}
public func + (lhs: UIEdgeInsets, rhs: UIEdgeInsets) -> UIEdgeInsets {
return .init(top: lhs.top + rhs.top, left: lhs.left + rhs.left, bottom: lhs.bottom + rhs.bottom, right: lhs.right + rhs.right)
}

View File

@ -31,19 +31,19 @@ extension LayoutConstraintable {
@discardableResult @discardableResult
/// Pins each to the all 4 anchor points to a view. /// Pins each to the all 4 anchor points to a view.
/// - Parameters: /// - Parameters:
/// - view: View that you will be pinned within. /// - layoutConstrainable: LayoutConstrainable that you will be pinned within.
/// - edges: Insets for each side. /// - edges: Insets for each side.
/// - Returns: Yourself. /// - Returns: Yourself.
public func pin(_ view: UIView, with edges: UIEdgeInsets = UIEdgeInsets.zero) -> Self { public func pin(_ layoutConstrainable: LayoutConstraintable, with edges: UIEdgeInsets = UIEdgeInsets.zero) -> Self {
pinLeading(view.leadingAnchor, edges.left) pinLeading(layoutConstrainable.leadingAnchor, edges.left)
pinTrailing(view.trailingAnchor, edges.right) pinTrailing(layoutConstrainable.trailingAnchor, edges.right)
pinTop(view.topAnchor, edges.top) pinTop(layoutConstrainable.topAnchor, edges.top)
pinBottom(view.bottomAnchor, edges.bottom) pinBottom(layoutConstrainable.bottomAnchor, edges.bottom)
return self return self
} }
@discardableResult @discardableResult
/// Pins each to the all 4 anchor points to the view you are set within. /// Pins each to the all 4 anchor points to the view you are set within.
/// - Parameter edges: Insets for each side. /// - Parameter edges: Insets for each side.
/// - Returns: Yourself. /// - Returns: Yourself.

View File

@ -1,6 +1,12 @@
1.0.41 1.0.41
======= =======
- CXTDT-457899 - Tabs - Incorrect nonselected color on Dark surface - CXTDT-457899 - Tabs - Incorrect nonselected color on Dark surface
- ONEAPP-4652 - TextLinkCaret - Caret anouncement removed
- Fixed ToggleView Disabled Shadow Color
- Fixed several component layout issues
- Fixed bug in label for ActionLabelAttribute
- Updated naming conventions for TextPosition to TextAlignment in regards to alignment properties
- Added a ton of Code Documentation
1.0.40 1.0.40
======= =======

View File

@ -17,79 +17,79 @@ extension TextStyle {
fontFace: .edsBold, fontFace: .edsBold,
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature144 : VDSTypography.fontSizeFeature96, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature144 : VDSTypography.fontSizeFeature96,
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature136 : VDSTypography.lineHeightFeature88, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature136 : VDSTypography.lineHeightFeature88,
edgeInsets: .init(bottom: UIDevice.isIPad ? -6: -4)) edgeInsets: .bottom(UIDevice.isIPad ? -6: -4))
public static let featureXLarge = TextStyle(rawValue: "featureXLarge", public static let featureXLarge = TextStyle(rawValue: "featureXLarge",
fontFace: .dsLight, fontFace: .dsLight,
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature144 : VDSTypography.fontSizeFeature96, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature144 : VDSTypography.fontSizeFeature96,
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature136 : VDSTypography.lineHeightFeature88, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature136 : VDSTypography.lineHeightFeature88,
letterSpacing: VDSTypography.letterSpacingSemiWide, letterSpacing: VDSTypography.letterSpacingSemiWide,
edgeInsets: .init(bottom: UIDevice.isIPad ? -6: -4)) edgeInsets: .bottom(UIDevice.isIPad ? -6: -4))
public static let boldFeatureLarge = TextStyle(rawValue: "boldFeatureLarge", public static let boldFeatureLarge = TextStyle(rawValue: "boldFeatureLarge",
fontFace: .edsBold, fontFace: .edsBold,
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature128 : VDSTypography.fontSizeFeature80, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature128 : VDSTypography.fontSizeFeature80,
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature120 : VDSTypography.lineHeightFeature76, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature120 : VDSTypography.lineHeightFeature76,
edgeInsets: .init(bottom: UIDevice.isIPad ? -6: -2)) edgeInsets: .bottom(UIDevice.isIPad ? -6: -2))
public static let featureLarge = TextStyle(rawValue: "featureLarge", public static let featureLarge = TextStyle(rawValue: "featureLarge",
fontFace: .dsLight, fontFace: .dsLight,
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature128 : VDSTypography.fontSizeFeature80, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature128 : VDSTypography.fontSizeFeature80,
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature120 : VDSTypography.lineHeightFeature76, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature120 : VDSTypography.lineHeightFeature76,
letterSpacing: VDSTypography.letterSpacingSemiWide, letterSpacing: VDSTypography.letterSpacingSemiWide,
edgeInsets: .init(bottom: UIDevice.isIPad ? -6: -2)) edgeInsets: .bottom(UIDevice.isIPad ? -6: -2))
public static let boldFeatureMedium = TextStyle(rawValue: "boldFeatureMedium", public static let boldFeatureMedium = TextStyle(rawValue: "boldFeatureMedium",
fontFace: .edsBold, fontFace: .edsBold,
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature96 : VDSTypography.fontSizeFeature64, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature96 : VDSTypography.fontSizeFeature64,
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature88 : VDSTypography.lineHeightFeature64, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature88 : VDSTypography.lineHeightFeature64,
edgeInsets: .init(bottom: UIDevice.isIPad ? -4: -2)) edgeInsets: .bottom(UIDevice.isIPad ? -4: -2))
public static let featureMedium = TextStyle(rawValue: "featureMedium", public static let featureMedium = TextStyle(rawValue: "featureMedium",
fontFace: .dsLight, fontFace: .dsLight,
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature96 : VDSTypography.fontSizeFeature64, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature96 : VDSTypography.fontSizeFeature64,
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature88 : VDSTypography.lineHeightFeature64, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature88 : VDSTypography.lineHeightFeature64,
letterSpacing: VDSTypography.letterSpacingSemiWide, letterSpacing: VDSTypography.letterSpacingSemiWide,
edgeInsets: .init(bottom: UIDevice.isIPad ? -4: -2)) edgeInsets: .bottom(UIDevice.isIPad ? -4: -2))
public static let boldFeatureSmall = TextStyle(rawValue: "boldFeatureSmall", public static let boldFeatureSmall = TextStyle(rawValue: "boldFeatureSmall",
fontFace: .edsBold, fontFace: .edsBold,
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature80 : VDSTypography.fontSizeFeature48, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature80 : VDSTypography.fontSizeFeature48,
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature76 : VDSTypography.lineHeightFeature48, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature76 : VDSTypography.lineHeightFeature48,
edgeInsets: .init(bottom: UIDevice.isIPad ? -2: 0)) edgeInsets: .bottom(UIDevice.isIPad ? -2: 0))
public static let featureSmall = TextStyle(rawValue: "featureSmall", public static let featureSmall = TextStyle(rawValue: "featureSmall",
fontFace: .dsLight, fontFace: .dsLight,
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature80 : VDSTypography.fontSizeFeature48, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature80 : VDSTypography.fontSizeFeature48,
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature76 : VDSTypography.lineHeightFeature48, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature76 : VDSTypography.lineHeightFeature48,
letterSpacing: VDSTypography.letterSpacingSemiWide, letterSpacing: VDSTypography.letterSpacingSemiWide,
edgeInsets: .init(bottom: UIDevice.isIPad ? -2: 0)) edgeInsets: .bottom(UIDevice.isIPad ? -2: 0))
public static let boldFeatureXSmall = TextStyle(rawValue: "boldFeatureXSmall", public static let boldFeatureXSmall = TextStyle(rawValue: "boldFeatureXSmall",
fontFace: .edsBold, fontFace: .edsBold,
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature64 : VDSTypography.fontSizeFeature40, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature64 : VDSTypography.fontSizeFeature40,
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature64 : VDSTypography.lineHeightFeature40, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature64 : VDSTypography.lineHeightFeature40,
edgeInsets: .init(bottom: UIDevice.isIPad ? -2: 0)) edgeInsets: .bottom(UIDevice.isIPad ? -2: 0))
public static let featureXSmall = TextStyle(rawValue: "featureXSmall", public static let featureXSmall = TextStyle(rawValue: "featureXSmall",
fontFace: .dsLight, fontFace: .dsLight,
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature64 : VDSTypography.fontSizeFeature40, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature64 : VDSTypography.fontSizeFeature40,
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature64 : VDSTypography.lineHeightFeature40, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature64 : VDSTypography.lineHeightFeature40,
letterSpacing: VDSTypography.letterSpacingSemiWide, letterSpacing: VDSTypography.letterSpacingSemiWide,
edgeInsets: .init(bottom: UIDevice.isIPad ? -2: 0)) edgeInsets: .bottom(UIDevice.isIPad ? -2: 0))
public static let boldTitle2XLarge = TextStyle(rawValue: "boldTitle2XLarge", public static let boldTitle2XLarge = TextStyle(rawValue: "boldTitle2XLarge",
fontFace: .edsBold, fontFace: .edsBold,
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle64 : VDSTypography.fontSizeTitle40, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle64 : VDSTypography.fontSizeTitle40,
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle64 : VDSTypography.lineHeightTitle40, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle64 : VDSTypography.lineHeightTitle40,
edgeInsets: .init(bottom: UIDevice.isIPad ? -2: 0)) edgeInsets: .bottom(UIDevice.isIPad ? -2: 0))
public static let title2XLarge = TextStyle(rawValue: "title2XLarge", public static let title2XLarge = TextStyle(rawValue: "title2XLarge",
fontFace: .dsLight, fontFace: .dsLight,
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle64 : VDSTypography.fontSizeTitle40, pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle64 : VDSTypography.fontSizeTitle40,
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle64 : VDSTypography.lineHeightTitle40, lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle64 : VDSTypography.lineHeightTitle40,
letterSpacing: VDSTypography.letterSpacingSemiWide, letterSpacing: VDSTypography.letterSpacingSemiWide,
edgeInsets: .init(bottom: UIDevice.isIPad ? -2: 0)) edgeInsets: .bottom(UIDevice.isIPad ? -2: 0))
public static let boldTitleXLarge = TextStyle(rawValue: "boldTitleXLarge", public static let boldTitleXLarge = TextStyle(rawValue: "boldTitleXLarge",
fontFace: .edsBold, fontFace: .edsBold,
@ -211,12 +211,6 @@ extension TextStyle {
} }
} }
extension UIEdgeInsets {
public init(bottom: CGFloat) {
self.init(top: 0, left: 0, bottom: bottom, right: 0)
}
}
extension TextStyle { extension TextStyle {
/// Enum used to describe the naming convention for the Typography. /// Enum used to describe the naming convention for the Typography.
public enum StandardStyle: String, CaseIterable { public enum StandardStyle: String, CaseIterable {