Merge branch 'develop' of https://gitlab.verizon.com/BPHV_MIPS/vds_ios into vasavk/calendar
This commit is contained in:
commit
c40ec7204e
@ -35,13 +35,7 @@ open class Control: UIControl, ViewProtocol, UserInfoable, Clickable {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
open var subscribers = Set<AnyCancellable>()
|
open var subscribers = Set<AnyCancellable>()
|
||||||
|
|
||||||
open var onClickSubscriber: AnyCancellable? {
|
open var onClickSubscriber: AnyCancellable?
|
||||||
willSet {
|
|
||||||
if let onClickSubscriber {
|
|
||||||
onClickSubscriber.cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Private Properties
|
// MARK: - Private Properties
|
||||||
@ -118,6 +112,8 @@ open class Control: UIControl, ViewProtocol, UserInfoable, Clickable {
|
|||||||
backgroundColor = .clear
|
backgroundColor = .clear
|
||||||
surface = .light
|
surface = .light
|
||||||
isEnabled = true
|
isEnabled = true
|
||||||
|
onClick = nil
|
||||||
|
userInfo.removeAll()
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
|||||||
@ -47,13 +47,7 @@ open class SelectorBase: Control, SelectorControlable {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Public Properties
|
// MARK: - Public Properties
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
open var onChangeSubscriber: AnyCancellable? {
|
open var onChangeSubscriber: AnyCancellable?
|
||||||
willSet {
|
|
||||||
if let onChangeSubscriber {
|
|
||||||
onChangeSubscriber.cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
open var size = CGSize(width: 20, height: 20) { didSet { setNeedsUpdate() } }
|
open var size = CGSize(width: 20, height: 20) { didSet { setNeedsUpdate() } }
|
||||||
|
|
||||||
@ -120,13 +114,6 @@ open class SelectorBase: Control, SelectorControlable {
|
|||||||
accessibilityTraits = .button
|
accessibilityTraits = .button
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Used to make changes to the View based off a change events or from local properties.
|
|
||||||
open override func updateView() {
|
|
||||||
super.updateView()
|
|
||||||
setNeedsLayout()
|
|
||||||
layoutIfNeeded()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Used to update any Accessibility properties.ß
|
/// Used to update any Accessibility properties.ß
|
||||||
open override func updateAccessibility() {
|
open override func updateAccessibility() {
|
||||||
super.updateAccessibility()
|
super.updateAccessibility()
|
||||||
@ -135,4 +122,8 @@ open class SelectorBase: Control, SelectorControlable {
|
|||||||
/// This will change the state of the Selector and execute the actionBlock if provided.
|
/// This will change the state of the Selector and execute the actionBlock if provided.
|
||||||
open func toggle() { }
|
open func toggle() { }
|
||||||
|
|
||||||
|
open override func reset() {
|
||||||
|
super.reset()
|
||||||
|
onChange = nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -75,13 +75,7 @@ open class SelectorGroupBase<SelectorItemType: Control>: Control, SelectorGroup,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open var onChangeSubscriber: AnyCancellable? {
|
open var onChangeSubscriber: AnyCancellable?
|
||||||
willSet {
|
|
||||||
if let onChangeSubscriber {
|
|
||||||
onChangeSubscriber.cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Whether the Control is enabled or not.
|
/// Whether the Control is enabled or not.
|
||||||
override open var isEnabled: Bool {
|
override open var isEnabled: Bool {
|
||||||
@ -130,6 +124,7 @@ open class SelectorGroupBase<SelectorItemType: Control>: Control, SelectorGroup,
|
|||||||
/// Resets to default settings.
|
/// Resets to default settings.
|
||||||
open override func reset() {
|
open override func reset() {
|
||||||
super.reset()
|
super.reset()
|
||||||
|
onChange = nil
|
||||||
items.forEach{ $0.reset() }
|
items.forEach{ $0.reset() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -61,13 +61,7 @@ open class SelectorItemBase<Selector: SelectorControlable>: Control, Errorable,
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Public Properties
|
// MARK: - Public Properties
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
open var onChangeSubscriber: AnyCancellable? {
|
open var onChangeSubscriber: AnyCancellable?
|
||||||
willSet {
|
|
||||||
if let onChangeSubscriber {
|
|
||||||
onChangeSubscriber.cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Label used to render labelText.
|
/// Label used to render labelText.
|
||||||
open var label = Label().with {
|
open var label = Label().with {
|
||||||
@ -223,6 +217,7 @@ open class SelectorItemBase<Selector: SelectorControlable>: Control, Errorable,
|
|||||||
value = nil
|
value = nil
|
||||||
isSelected = false
|
isSelected = false
|
||||||
|
|
||||||
|
onChange = nil
|
||||||
shouldUpdateView = true
|
shouldUpdateView = true
|
||||||
setNeedsUpdate()
|
setNeedsUpdate()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -344,7 +344,6 @@ open class BadgeIndicator: View {
|
|||||||
label.isEnabled = isEnabled
|
label.isEnabled = isEnabled
|
||||||
label.sizeToFit()
|
label.sizeToFit()
|
||||||
setNeedsLayout()
|
setNeedsLayout()
|
||||||
layoutIfNeeded()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
open override func updateAccessibility() {
|
open override func updateAccessibility() {
|
||||||
|
|||||||
@ -84,7 +84,7 @@ final class BreadcrumbCellItem: UICollectionViewCell {
|
|||||||
separator.textColor = textColorConfiguration.getColor(surface)
|
separator.textColor = textColorConfiguration.getColor(surface)
|
||||||
separator.isHidden = hideSlash
|
separator.isHidden = hideSlash
|
||||||
self.breadCrumbItem = breadCrumbItem
|
self.breadCrumbItem = breadCrumbItem
|
||||||
layoutIfNeeded()
|
setNeedsLayout()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -38,13 +38,7 @@ open class ButtonBase: UIButton, ViewProtocol, UserInfoable, Clickable {
|
|||||||
/// Set of Subscribers for any Publishers for this Control.
|
/// Set of Subscribers for any Publishers for this Control.
|
||||||
open var subscribers = Set<AnyCancellable>()
|
open var subscribers = Set<AnyCancellable>()
|
||||||
|
|
||||||
open var onClickSubscriber: AnyCancellable? {
|
open var onClickSubscriber: AnyCancellable?
|
||||||
willSet {
|
|
||||||
if let onClickSubscriber {
|
|
||||||
onClickSubscriber.cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Private Properties
|
// MARK: - Private Properties
|
||||||
@ -140,6 +134,8 @@ open class ButtonBase: UIButton, ViewProtocol, UserInfoable, Clickable {
|
|||||||
isEnabled = true
|
isEnabled = true
|
||||||
text = nil
|
text = nil
|
||||||
accessibilityCustomActions = []
|
accessibilityCustomActions = []
|
||||||
|
onClick = nil
|
||||||
|
userInfo.removeAll()
|
||||||
shouldUpdateView = true
|
shouldUpdateView = true
|
||||||
setNeedsUpdate()
|
setNeedsUpdate()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -109,6 +109,7 @@ open class ButtonIcon: Control, Changeable, FormFieldable {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Public Properties
|
// MARK: - Public Properties
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
public var onChangeSubscriber: AnyCancellable?
|
||||||
|
|
||||||
///Badge Indicator object used to render for the ButtonIcon.
|
///Badge Indicator object used to render for the ButtonIcon.
|
||||||
open var badgeIndicator = BadgeIndicator().with {
|
open var badgeIndicator = BadgeIndicator().with {
|
||||||
@ -172,8 +173,6 @@ open class ButtonIcon: Control, Changeable, FormFieldable {
|
|||||||
/// Used to move the icon inside the button in both x and y axis.
|
/// Used to move the icon inside the button in both x and y axis.
|
||||||
open var iconOffset: CGPoint = .init(x: 0, y: 0) { didSet { setNeedsUpdate() } }
|
open var iconOffset: CGPoint = .init(x: 0, y: 0) { didSet { setNeedsUpdate() } }
|
||||||
|
|
||||||
open var onChangeSubscriber: AnyCancellable?
|
|
||||||
|
|
||||||
open var inputId: String? { didSet { setNeedsUpdate() } }
|
open var inputId: String? { didSet { setNeedsUpdate() } }
|
||||||
|
|
||||||
open var value: AnyHashable? { didSet { setNeedsUpdate() } }
|
open var value: AnyHashable? { didSet { setNeedsUpdate() } }
|
||||||
@ -365,7 +364,6 @@ open class ButtonIcon: Control, Changeable, FormFieldable {
|
|||||||
open override func setup() {
|
open override func setup() {
|
||||||
super.setup()
|
super.setup()
|
||||||
isAccessibilityElement = false
|
isAccessibilityElement = false
|
||||||
accessibilityElements = [icon, badgeIndicator]
|
|
||||||
|
|
||||||
//create a layoutGuide for the icon to key off of
|
//create a layoutGuide for the icon to key off of
|
||||||
let iconLayoutGuide = UILayoutGuide()
|
let iconLayoutGuide = UILayoutGuide()
|
||||||
@ -436,6 +434,7 @@ open class ButtonIcon: Control, Changeable, FormFieldable {
|
|||||||
showBadgeIndicator = false
|
showBadgeIndicator = false
|
||||||
selectable = false
|
selectable = false
|
||||||
badgeIndicatorModel = nil
|
badgeIndicatorModel = nil
|
||||||
|
onChange = nil
|
||||||
shouldUpdateView = true
|
shouldUpdateView = true
|
||||||
setNeedsUpdate()
|
setNeedsUpdate()
|
||||||
}
|
}
|
||||||
@ -459,6 +458,18 @@ open class ButtonIcon: Control, Changeable, FormFieldable {
|
|||||||
setNeedsLayout()
|
setNeedsLayout()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open override func updateAccessibility() {
|
||||||
|
super.updateAccessibility()
|
||||||
|
var elements = [Any]()
|
||||||
|
if iconName != nil {
|
||||||
|
elements.append(icon)
|
||||||
|
}
|
||||||
|
if badgeIndicatorModel != nil && showBadgeIndicator {
|
||||||
|
elements.append(badgeIndicator)
|
||||||
|
}
|
||||||
|
accessibilityElements = elements.count > 0 ? elements : nil
|
||||||
|
}
|
||||||
|
|
||||||
open override func layoutSubviews() {
|
open override func layoutSubviews() {
|
||||||
super.layoutSubviews()
|
super.layoutSubviews()
|
||||||
|
|
||||||
|
|||||||
@ -31,12 +31,13 @@ public struct ColorLabelAttribute: LabelAttributeModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public func setAttribute(on attributedString: NSMutableAttributedString) {
|
public func setAttribute(on attributedString: NSMutableAttributedString) {
|
||||||
guard isValidRange(on: attributedString) else { return }
|
|
||||||
|
|
||||||
var colorRange = range
|
var colorRange = range
|
||||||
if length == 0 && location == 0 {
|
if length == 0 && location == 0 {
|
||||||
colorRange = .init(location: location, length: attributedString.length)
|
colorRange = .init(location: location, length: attributedString.length)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !attributedString.isValid(range: colorRange) { return }
|
||||||
|
|
||||||
let attributeKey = isForegroundColor ? NSAttributedString.Key.foregroundColor : NSAttributedString.Key.backgroundColor
|
let attributeKey = isForegroundColor ? NSAttributedString.Key.foregroundColor : NSAttributedString.Key.backgroundColor
|
||||||
attributedString.removeAttribute(attributeKey, range: colorRange)
|
attributedString.removeAttribute(attributeKey, range: colorRange)
|
||||||
attributedString.addAttribute(attributeKey, value: color, range: colorRange)
|
attributedString.addAttribute(attributeKey, value: color, range: colorRange)
|
||||||
|
|||||||
@ -230,7 +230,6 @@ open class Label: UILabel, ViewProtocol, UserInfoable {
|
|||||||
setNeedsDisplay()
|
setNeedsDisplay()
|
||||||
|
|
||||||
setNeedsLayout()
|
setNeedsLayout()
|
||||||
layoutIfNeeded()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
open func updateAccessibility() {
|
open func updateAccessibility() {
|
||||||
|
|||||||
@ -52,13 +52,7 @@ open class RadioBoxItem: Control, Changeable, FormFieldable {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Public Properties
|
// MARK: - Public Properties
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
open var onChangeSubscriber: AnyCancellable? {
|
open var onChangeSubscriber: AnyCancellable?
|
||||||
willSet {
|
|
||||||
if let onChangeSubscriber {
|
|
||||||
onChangeSubscriber.cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Label used to render the text.
|
/// Label used to render the text.
|
||||||
open var textLabel = Label().with {
|
open var textLabel = Label().with {
|
||||||
@ -218,6 +212,7 @@ open class RadioBoxItem: Control, Changeable, FormFieldable {
|
|||||||
value = nil
|
value = nil
|
||||||
|
|
||||||
isSelected = false
|
isSelected = false
|
||||||
|
onChange = nil
|
||||||
|
|
||||||
shouldUpdateView = true
|
shouldUpdateView = true
|
||||||
setNeedsUpdate()
|
setNeedsUpdate()
|
||||||
@ -236,7 +231,6 @@ open class RadioBoxItem: Control, Changeable, FormFieldable {
|
|||||||
|
|
||||||
updateLabels()
|
updateLabels()
|
||||||
setNeedsLayout()
|
setNeedsLayout()
|
||||||
layoutIfNeeded()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Used to update any Accessibility properties.
|
/// Used to update any Accessibility properties.
|
||||||
|
|||||||
@ -172,7 +172,6 @@ extension Tabs {
|
|||||||
label.textAlignment = textAlignment.value
|
label.textAlignment = textAlignment.value
|
||||||
label.textColorConfiguration = textColorConfiguration.eraseToAnyColorable()
|
label.textColorConfiguration = textColorConfiguration.eraseToAnyColorable()
|
||||||
setNeedsLayout()
|
setNeedsLayout()
|
||||||
layoutIfNeeded()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Used to update any Accessibility properties.
|
/// Used to update any Accessibility properties.
|
||||||
|
|||||||
@ -119,13 +119,7 @@ open class EntryFieldBase: Control, Changeable, FormFieldInternalValidatable {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Public Properties
|
// MARK: - Public Properties
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
open var onChangeSubscriber: AnyCancellable? {
|
open var onChangeSubscriber: AnyCancellable?
|
||||||
willSet {
|
|
||||||
if let onChangeSubscriber {
|
|
||||||
onChangeSubscriber.cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
open var titleLabel = Label().with {
|
open var titleLabel = Label().with {
|
||||||
$0.setContentCompressionResistancePriority(.required, for: .vertical)
|
$0.setContentCompressionResistancePriority(.required, for: .vertical)
|
||||||
@ -304,6 +298,7 @@ open class EntryFieldBase: Control, Changeable, FormFieldInternalValidatable {
|
|||||||
defaultValue = nil
|
defaultValue = nil
|
||||||
required = false
|
required = false
|
||||||
readOnly = false
|
readOnly = false
|
||||||
|
onChange = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 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.
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import VDSTokens
|
import VDSTokens
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import Combine
|
||||||
|
|
||||||
@objc(VDSTileContainer)
|
@objc(VDSTileContainer)
|
||||||
open class TileContainer: TileContainerBase<TileContainer.Padding> {
|
open class TileContainer: TileContainerBase<TileContainer.Padding> {
|
||||||
@ -43,7 +44,6 @@ open class TileContainer: TileContainerBase<TileContainer.Padding> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
open class TileContainerBase<PaddingType: DefaultValuing>: Control where PaddingType.ValueType == CGFloat {
|
open class TileContainerBase<PaddingType: DefaultValuing>: Control where PaddingType.ValueType == CGFloat {
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Initializers
|
// MARK: - Initializers
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -111,6 +111,19 @@ open class TileContainerBase<PaddingType: DefaultValuing>: Control where Padding
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Public Properties
|
// MARK: - Public Properties
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
public override var onClickSubscriber: AnyCancellable? {
|
||||||
|
didSet {
|
||||||
|
if onClickSubscriber != nil {
|
||||||
|
isAccessibilityElement = true
|
||||||
|
accessibilityTraits = .link
|
||||||
|
accessibilityHint = "Double tap to open."
|
||||||
|
} else {
|
||||||
|
isAccessibilityElement = false
|
||||||
|
accessibilityTraits.remove(.link)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// This takes an image source url and applies it as a background image.
|
/// This takes an image source url and applies it as a background image.
|
||||||
open var backgroundImage: UIImage? { didSet { setNeedsUpdate() } }
|
open var backgroundImage: UIImage? { didSet { setNeedsUpdate() } }
|
||||||
|
|
||||||
@ -171,7 +184,7 @@ open class TileContainerBase<PaddingType: DefaultValuing>: Control where Padding
|
|||||||
open var showBorder: Bool = false { didSet { setNeedsUpdate() } }
|
open var showBorder: Bool = false { didSet { setNeedsUpdate() } }
|
||||||
|
|
||||||
/// Determines if there is a drop shadow or not.
|
/// Determines if there is a drop shadow or not.
|
||||||
open var showDropShadows: Bool = false { didSet { setNeedsUpdate() } }
|
open var showDropShadow: Bool = false { didSet { setNeedsUpdate() } }
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Constraints
|
// MARK: - Constraints
|
||||||
@ -274,7 +287,7 @@ open class TileContainerBase<PaddingType: DefaultValuing>: Control where Padding
|
|||||||
width = nil
|
width = nil
|
||||||
height = nil
|
height = nil
|
||||||
showBorder = false
|
showBorder = false
|
||||||
showDropShadows = false
|
showDropShadow = false
|
||||||
shouldUpdateView = true
|
shouldUpdateView = true
|
||||||
setNeedsUpdate()
|
setNeedsUpdate()
|
||||||
}
|
}
|
||||||
@ -316,12 +329,14 @@ open class TileContainerBase<PaddingType: DefaultValuing>: Control where Padding
|
|||||||
widthConstraint?.isActive = false
|
widthConstraint?.isActive = false
|
||||||
heightConstraint?.isActive = false
|
heightConstraint?.isActive = false
|
||||||
}
|
}
|
||||||
if showDropShadows, surface == .light {
|
|
||||||
|
applyBackgroundEffects()
|
||||||
|
|
||||||
|
if showDropShadow, surface == .light {
|
||||||
addDropShadow(dropShadowConfiguration)
|
addDropShadow(dropShadowConfiguration)
|
||||||
} else {
|
} else {
|
||||||
removeDropShadows()
|
removeDropShadows()
|
||||||
}
|
}
|
||||||
applyBackgroundEffects()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Used to update frames for the added CAlayers to our view
|
/// Used to update frames for the added CAlayers to our view
|
||||||
@ -337,6 +352,7 @@ open class TileContainerBase<PaddingType: DefaultValuing>: Control where Padding
|
|||||||
|
|
||||||
/// This will place a view within the contentView of this component.
|
/// This will place a view within the contentView of this component.
|
||||||
public func addContentView(_ view: UIView, shouldPin: Bool = true) {
|
public func addContentView(_ view: UIView, shouldPin: Bool = true) {
|
||||||
|
view.removeFromSuperview()
|
||||||
containerView.addSubview(view)
|
containerView.addSubview(view)
|
||||||
if shouldPin {
|
if shouldPin {
|
||||||
view.pinToSuperView()
|
view.pinToSuperView()
|
||||||
|
|||||||
@ -105,12 +105,6 @@ open class Tilelet: TileContainerBase<Tilelet.Padding> {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Public Properties
|
// MARK: - Public Properties
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
public override var onClickSubscriber: AnyCancellable? {
|
|
||||||
didSet {
|
|
||||||
isAccessibilityElement = onClickSubscriber != nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Title lockup positioned in the contentView.
|
/// Title lockup positioned in the contentView.
|
||||||
open var titleLockup = TitleLockup().with {
|
open var titleLockup = TitleLockup().with {
|
||||||
$0.standardStyleConfiguration = .init(styleConfigurations: [
|
$0.standardStyleConfiguration = .init(styleConfigurations: [
|
||||||
@ -305,9 +299,6 @@ open class Tilelet: TileContainerBase<Tilelet.Padding> {
|
|||||||
color = .black
|
color = .black
|
||||||
addContentView(stackView)
|
addContentView(stackView)
|
||||||
|
|
||||||
accessibilityTraits = .link
|
|
||||||
accessibilityElements = [badge, titleLockup, descriptiveIcon, directionalIcon]
|
|
||||||
|
|
||||||
//badge
|
//badge
|
||||||
badgeContainerView.addSubview(badge)
|
badgeContainerView.addSubview(badge)
|
||||||
badge
|
badge
|
||||||
@ -412,12 +403,26 @@ open class Tilelet: TileContainerBase<Tilelet.Padding> {
|
|||||||
if width != nil && (aspectRatio != .none || height != nil) {
|
if width != nil && (aspectRatio != .none || height != nil) {
|
||||||
updateTextPositionAlignment()
|
updateTextPositionAlignment()
|
||||||
}
|
}
|
||||||
layoutIfNeeded()
|
setNeedsLayout()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Used to update any Accessibility properties.
|
/// Used to update any Accessibility properties.
|
||||||
open override func updateAccessibility() {
|
open override func updateAccessibility() {
|
||||||
super.updateAccessibility()
|
super.updateAccessibility()
|
||||||
|
var elements = [Any]()
|
||||||
|
if badgeModel != nil {
|
||||||
|
elements.append(badge)
|
||||||
|
}
|
||||||
|
if titleModel != nil || subTitleModel != nil || eyebrowModel != nil {
|
||||||
|
elements.append(titleLockup)
|
||||||
|
}
|
||||||
|
if descriptiveIconModel != nil {
|
||||||
|
elements.append(descriptiveIcon)
|
||||||
|
}
|
||||||
|
if directionalIconModel != nil {
|
||||||
|
elements.append(directionalIcon)
|
||||||
|
}
|
||||||
|
accessibilityElements = elements.count > 0 ? elements : nil
|
||||||
|
|
||||||
setAccessibilityLabel(for: [badge.label, titleLockup.eyebrowLabel, titleLockup.titleLabel, titleLockup.subTitleLabel])
|
setAccessibilityLabel(for: [badge.label, titleLockup.eyebrowLabel, titleLockup.titleLabel, titleLockup.subTitleLabel])
|
||||||
}
|
}
|
||||||
|
|||||||
@ -272,7 +272,21 @@ open class TitleLockup: View {
|
|||||||
|
|
||||||
titleLabel.textColorConfiguration = textColorPrimaryConfiguration
|
titleLabel.textColorConfiguration = textColorPrimaryConfiguration
|
||||||
|
|
||||||
accessibilityElements = [eyebrowLabel, titleLabel, subTitleLabel]
|
}
|
||||||
|
|
||||||
|
open override func updateAccessibility() {
|
||||||
|
super.updateAccessibility()
|
||||||
|
var elements = [Any]()
|
||||||
|
if eyebrowModel != nil {
|
||||||
|
elements.append(eyebrowLabel)
|
||||||
|
}
|
||||||
|
if titleModel != nil {
|
||||||
|
elements.append(titleLabel)
|
||||||
|
}
|
||||||
|
if subTitleModel != nil {
|
||||||
|
elements.append(subTitleLabel)
|
||||||
|
}
|
||||||
|
accessibilityElements = elements.count > 0 ? elements : nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Resets to default settings.
|
/// Resets to default settings.
|
||||||
|
|||||||
@ -88,13 +88,7 @@ open class Toggle: Control, Changeable, FormFieldable {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Public Properties
|
// MARK: - Public Properties
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
open var onChangeSubscriber: AnyCancellable? {
|
open var onChangeSubscriber: AnyCancellable?
|
||||||
willSet {
|
|
||||||
if let onChangeSubscriber {
|
|
||||||
onChangeSubscriber.cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Actual toggle used in this component.
|
/// Actual toggle used in this component.
|
||||||
open var toggleView = ToggleView().with {
|
open var toggleView = ToggleView().with {
|
||||||
@ -231,6 +225,7 @@ open class Toggle: Control, Changeable, FormFieldable {
|
|||||||
textPosition = .left
|
textPosition = .left
|
||||||
inputId = nil
|
inputId = nil
|
||||||
value = nil
|
value = nil
|
||||||
|
onChange = nil
|
||||||
shouldUpdateView = true
|
shouldUpdateView = true
|
||||||
setNeedsUpdate()
|
setNeedsUpdate()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -166,6 +166,7 @@ open class ToggleView: Control, Changeable, FormFieldable {
|
|||||||
value = nil
|
value = nil
|
||||||
toggleView.backgroundColor = toggleColorConfiguration.getColor(self)
|
toggleView.backgroundColor = toggleColorConfiguration.getColor(self)
|
||||||
knobView.backgroundColor = knobColorConfiguration.getColor(self)
|
knobView.backgroundColor = knobColorConfiguration.getColor(self)
|
||||||
|
onChange = nil
|
||||||
shouldUpdateView = true
|
shouldUpdateView = true
|
||||||
setNeedsUpdate()
|
setNeedsUpdate()
|
||||||
}
|
}
|
||||||
@ -227,7 +228,6 @@ open class ToggleView: Control, Changeable, FormFieldable {
|
|||||||
knobTrailingConstraint?.isActive = true
|
knobTrailingConstraint?.isActive = true
|
||||||
knobLeadingConstraint?.isActive = true
|
knobLeadingConstraint?.isActive = true
|
||||||
setNeedsLayout()
|
setNeedsLayout()
|
||||||
layoutIfNeeded()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func updateToggle() {
|
private func updateToggle() {
|
||||||
|
|||||||
@ -26,6 +26,8 @@ extension Changeable {
|
|||||||
.sink { c in
|
.sink { c in
|
||||||
newValue(c)
|
newValue(c)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
onChangeSubscriber = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,6 +20,7 @@ extension Clickable {
|
|||||||
public var onClick: ((Self) -> ())? {
|
public var onClick: ((Self) -> ())? {
|
||||||
get { return nil }
|
get { return nil }
|
||||||
set {
|
set {
|
||||||
|
onClickSubscriber?.cancel()
|
||||||
if let newValue {
|
if let newValue {
|
||||||
onClickSubscriber = publisher(for: .touchUpInside)
|
onClickSubscriber = publisher(for: .touchUpInside)
|
||||||
.sink { [weak self] c in
|
.sink { [weak self] c in
|
||||||
@ -27,7 +28,6 @@ extension Clickable {
|
|||||||
newValue(c)
|
newValue(c)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
onClickSubscriber?.cancel()
|
|
||||||
onClickSubscriber = nil
|
onClickSubscriber = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user