Merge branch 'feature/inputField' into 'develop'

Finished up InputField

See merge request BPHV_MIPS/vds_ios!226
This commit is contained in:
Bruce, Matt R 2024-05-10 22:25:53 +00:00
commit 8d6929a35d
32 changed files with 1985 additions and 841 deletions

View File

@ -141,6 +141,15 @@
EAB5FF0129424ACB00998C17 /* UIControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAB5FF0029424ACB00998C17 /* UIControl.swift */; };
EABFEB642A26473700C4C106 /* NSAttributedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = EABFEB632A26473700C4C106 /* NSAttributedString.swift */; };
EAC58BFD2BE935C300BA39FA /* TitleLockupTextColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58BFC2BE935C300BA39FA /* TitleLockupTextColor.swift */; };
EAC58C062BED000200BA39FA /* CreditCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C052BED000200BA39FA /* CreditCard.swift */; };
EAC58C082BED002D00BA39FA /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C072BED002D00BA39FA /* Date.swift */; };
EAC58C0A2BED004E00BA39FA /* FieldType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C092BED004E00BA39FA /* FieldType.swift */; };
EAC58C0C2BED01D500BA39FA /* Telephone.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C0B2BED01D500BA39FA /* Telephone.swift */; };
EAC58C0E2BED021600BA39FA /* Password.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C0D2BED021600BA39FA /* Password.swift */; };
EAC58C122BED0DDD00BA39FA /* Text.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C112BED0DDD00BA39FA /* Text.swift */; };
EAC58C142BED0DEC00BA39FA /* Number.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C132BED0DEC00BA39FA /* Number.swift */; };
EAC58C162BED0E0300BA39FA /* InlineAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C152BED0E0300BA39FA /* InlineAction.swift */; };
EAC58C182BED0E2300BA39FA /* SecurityCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C172BED0E2300BA39FA /* SecurityCode.swift */; };
EAC71A1D2A2E155A00E47A9F /* Checkbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC71A1C2A2E155A00E47A9F /* Checkbox.swift */; };
EAC71A1F2A2E173D00E47A9F /* RadioButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC71A1E2A2E173D00E47A9F /* RadioButton.swift */; };
EAC846F3294B95CE00F685BA /* ButtonGroupCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC846F2294B95CE00F685BA /* ButtonGroupCollectionViewCell.swift */; };
@ -337,6 +346,15 @@
EAB5FF0029424ACB00998C17 /* UIControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIControl.swift; sourceTree = "<group>"; };
EABFEB632A26473700C4C106 /* NSAttributedString.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSAttributedString.swift; sourceTree = "<group>"; };
EAC58BFC2BE935C300BA39FA /* TitleLockupTextColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleLockupTextColor.swift; sourceTree = "<group>"; };
EAC58C052BED000200BA39FA /* CreditCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreditCard.swift; sourceTree = "<group>"; };
EAC58C072BED002D00BA39FA /* Date.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Date.swift; sourceTree = "<group>"; };
EAC58C092BED004E00BA39FA /* FieldType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FieldType.swift; sourceTree = "<group>"; };
EAC58C0B2BED01D500BA39FA /* Telephone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Telephone.swift; sourceTree = "<group>"; };
EAC58C0D2BED021600BA39FA /* Password.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Password.swift; sourceTree = "<group>"; };
EAC58C112BED0DDD00BA39FA /* Text.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Text.swift; sourceTree = "<group>"; };
EAC58C132BED0DEC00BA39FA /* Number.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Number.swift; sourceTree = "<group>"; };
EAC58C152BED0E0300BA39FA /* InlineAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InlineAction.swift; sourceTree = "<group>"; };
EAC58C172BED0E2300BA39FA /* SecurityCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecurityCode.swift; sourceTree = "<group>"; };
EAC71A1C2A2E155A00E47A9F /* Checkbox.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Checkbox.swift; sourceTree = "<group>"; };
EAC71A1E2A2E173D00E47A9F /* RadioButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioButton.swift; sourceTree = "<group>"; };
EAC846F2294B95CE00F685BA /* ButtonGroupCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonGroupCollectionViewCell.swift; sourceTree = "<group>"; };
@ -875,6 +893,22 @@
path = Tooltip;
sourceTree = "<group>";
};
EAC58C042BECFFEA00BA39FA /* FieldTypes */ = {
isa = PBXGroup;
children = (
EAC58C092BED004E00BA39FA /* FieldType.swift */,
EAC58C052BED000200BA39FA /* CreditCard.swift */,
EAC58C072BED002D00BA39FA /* Date.swift */,
EAC58C152BED0E0300BA39FA /* InlineAction.swift */,
EAC58C132BED0DEC00BA39FA /* Number.swift */,
EAC58C0D2BED021600BA39FA /* Password.swift */,
EAC58C172BED0E2300BA39FA /* SecurityCode.swift */,
EAC58C0B2BED01D500BA39FA /* Telephone.swift */,
EAC58C112BED0DDD00BA39FA /* Text.swift */,
);
path = FieldTypes;
sourceTree = "<group>";
};
EAC9257E29119B5D00091998 /* TextLink */ = {
isa = PBXGroup;
children = (
@ -907,6 +941,7 @@
EAC925862911C9DE00091998 /* InputField */ = {
isa = PBXGroup;
children = (
EAC58C042BECFFEA00BA39FA /* FieldTypes */,
EAC925872911C9DE00091998 /* InputField.swift */,
EA2DC9B32BE2C6FE004F58C5 /* TextField.swift */,
EA6642942BCEBF9500D81DC4 /* TextLinkModel.swift */,
@ -1142,6 +1177,7 @@
EA33622E2891EA3C0071C351 /* DispatchQueue+Once.swift in Sources */,
EA4DB2FD28D3D0CA00103EE3 /* AnyEquatable.swift in Sources */,
EA5E305A29510F8B0082B959 /* EnumSubset.swift in Sources */,
EAC58C082BED002D00BA39FA /* Date.swift in Sources */,
EA985BF7296C665E00F2FF2E /* IconName.swift in Sources */,
EA8141102A127066004F60D2 /* UIColor+VDSColor.swift in Sources */,
EAF7F0AF289B144C00B287F5 /* UnderlineLabelAttribute.swift in Sources */,
@ -1195,12 +1231,15 @@
EA0D1C372A681CCE00E5C127 /* ToggleView.swift in Sources */,
EAF7F0B9289C139800B287F5 /* ColorConfiguration.swift in Sources */,
EA3361BD288B2C760071C351 /* TypeAlias.swift in Sources */,
EAC58C0A2BED004E00BA39FA /* FieldType.swift in Sources */,
EA471F3A2A95587500CE9E58 /* LayoutConstraintable.swift in Sources */,
EAB1D2CF28ABEF2B00DAE764 /* Typography+Base.swift in Sources */,
EA0D1C3B2A6AD51B00E5C127 /* Typogprahy+Styles.swift in Sources */,
EAF7F09A2899B17200B287F5 /* CATransaction.swift in Sources */,
EAC58C162BED0E0300BA39FA /* InlineAction.swift in Sources */,
EA0D1C3D2A6AD57600E5C127 /* Typography+Enums.swift in Sources */,
EAF1FE9B29DB1A6000101452 /* Changeable.swift in Sources */,
EAC58C0C2BED01D500BA39FA /* Telephone.swift in Sources */,
EAF7F0A2289AFB3900B287F5 /* Errorable.swift in Sources */,
EA8E40912A7D3F6300934ED3 /* UIView+Accessibility.swift in Sources */,
EA6F330E2B911E9000BACAB9 /* TextView.swift in Sources */,
@ -1214,6 +1253,7 @@
44604AD729CE196600E62B51 /* Line.swift in Sources */,
1808BEBC2BA41C3200129230 /* CarouselScrollbar.swift in Sources */,
EAF978212A99035B00C2FEA9 /* Enabling.swift in Sources */,
EAC58C062BED000200BA39FA /* CreditCard.swift in Sources */,
EA5E3058295105A40082B959 /* Tilelet.swift in Sources */,
186D13CB2BBA8B1500986B53 /* DropdownSelect.swift in Sources */,
EA89201528B56CF4006B9984 /* RadioBoxGroup.swift in Sources */,
@ -1236,6 +1276,7 @@
EA985BF5296C60C000F2FF2E /* Icon.swift in Sources */,
EA3361AA288B25E40071C351 /* Disabling.swift in Sources */,
EA3361B6288B2A410071C351 /* Control.swift in Sources */,
EAC58C122BED0DDD00BA39FA /* Text.swift in Sources */,
5F21D7BF28DCEB3D003E7CD6 /* Useable.swift in Sources */,
EAF7F0B7289C12A600B287F5 /* UITapGestureRecognizer.swift in Sources */,
EA0D1C392A6AD4DF00E5C127 /* Typography+SpacingConfig.swift in Sources */,
@ -1246,12 +1287,15 @@
EA985C692971B90B00F2FF2E /* IconSize.swift in Sources */,
71FC86E02B973AE500700965 /* DropShadowConfiguration.swift in Sources */,
EA3362302891EB4A0071C351 /* Font.swift in Sources */,
EAC58C0E2BED021600BA39FA /* Password.swift in Sources */,
EAF7F0AD289B142900B287F5 /* StrikeThroughLabelAttribute.swift in Sources */,
EAB5FEF12927F4AA00998C17 /* SelfSizingCollectionView.swift in Sources */,
EA3361B8288B2AAA0071C351 /* ViewProtocol.swift in Sources */,
EA3361A8288B23300071C351 /* UIColor.swift in Sources */,
EA2DC9B42BE2C6FE004F58C5 /* TextField.swift in Sources */,
EAC58C182BED0E2300BA39FA /* SecurityCode.swift in Sources */,
EAC9257D29119B5400091998 /* TextLink.swift in Sources */,
EAC58C142BED0DEC00BA39FA /* Number.swift in Sources */,
EA596ABF2A16B4F500300C4B /* Tabs.swift in Sources */,
EAD062A72A3B67770015965D /* UIView+CALayer.swift in Sources */,
EAD068942A560C13002E3A2D /* LoaderLaunchable.swift in Sources */,

View File

@ -31,6 +31,18 @@ open class DropdownSelect: EntryFieldBase {
//--------------------------------------------------
// MARK: - Public Properties
//--------------------------------------------------
/// Override UIControl state to add the .error state if showSuccess is true and if showError is true.
open override var state: UIControl.State {
get {
var state = super.state
if dropdownField.isFirstResponder {
state.insert(.focused)
}
return state
}
}
/// If true, the label will be displayed inside the dropdown containerView. Otherwise, the label will be above the dropdown containerView like a normal text input.
open var showInlineLabel: Bool = false { didSet { setNeedsUpdate() }}
@ -53,17 +65,19 @@ open class DropdownSelect: EntryFieldBase {
/// A callback when the selected option changes. Passes parameters (option).
open var onItemSelected: ((Int, DropdownOptionModel) -> Void)?
//--------------------------------------------------
// MARK: - Private Properties
//--------------------------------------------------
internal var minWidthDefault = 66.0
internal var minWidthInlineLabel = 102.0
internal var minWidth: CGFloat { showInlineLabel ? minWidthInlineLabel : minWidthDefault }
//--------------------------------------------------
// MARK: - Public Properties
//--------------------------------------------------
open var inlineDisplayLabel = Label().with {
$0.setContentCompressionResistancePriority(.required, for: .vertical)
$0.setContentCompressionResistancePriority(.required, for: .horizontal)
$0.textAlignment = .left
$0.textStyle = .boldBodyLarge
$0.lineBreakMode = .byCharWrapping
@ -72,6 +86,7 @@ open class DropdownSelect: EntryFieldBase {
open var selectedOptionLabel = Label().with {
$0.setContentCompressionResistancePriority(.required, for: .vertical)
$0.setContentCompressionResistancePriority(.required, for: .horizontal)
$0.textAlignment = .left
$0.textStyle = .bodyLarge
$0.lineBreakMode = .byCharWrapping
@ -83,17 +98,21 @@ open class DropdownSelect: EntryFieldBase {
$0.font = TextStyle.bodyLarge.font
}
/// Determines the placement of the helper text.
open var helperTextPlacement: HelperTextPlacement = .bottom { didSet { setNeedsUpdate() } }
open var optionsPicker = UIPickerView()
//--------------------------------------------------
// MARK: - Constraints
//--------------------------------------------------
internal var inlineWidthConstraint: NSLayoutConstraint?
internal var titleLabelWidthConstraint: NSLayoutConstraint?
//--------------------------------------------------
// MARK: - Configuration Properties
//--------------------------------------------------
internal override var containerSize: CGSize { CGSize(width: showInlineLabel ? minWidthInlineLabel : width ?? minWidthDefault, height: 44) }
internal override var containerSize: CGSize { .init(width: minWidthDefault, height: 44) }
//--------------------------------------------------
// MARK: - Overrides
@ -101,28 +120,16 @@ open class DropdownSelect: EntryFieldBase {
/// 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()
// stackview for controls in EntryFieldBase.controlContainerView
let controlStackView = UIStackView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .horizontal
$0.spacing = VDSFormControls.spaceInset
}
controlContainerView.addSubview(controlStackView)
controlStackView.pinToSuperView()
controlStackView.addArrangedSubview(dropdownField)
controlStackView.addArrangedSubview(inlineDisplayLabel)
controlStackView.addArrangedSubview(selectedOptionLabel)
containerStackView.isAccessibilityElement = true
containerStackView.accessibilityLabel = "Dropdown Select"
super.setup()
titleLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
titleLabel.setContentHuggingPriority(.required, for: .horizontal)
titleLabelWidthConstraint = titleLabel.width(constant: 0)
fieldStackView.isAccessibilityElement = true
fieldStackView.accessibilityLabel = "Dropdown Select"
inlineDisplayLabel.isAccessibilityElement = true
controlStackView.setCustomSpacing(0, after: dropdownField)
controlStackView.setCustomSpacing(VDSLayout.space1X, after: inlineDisplayLabel)
controlStackView.setCustomSpacing(VDSLayout.space3X, after: selectedOptionLabel)
dropdownField.width(0)
inlineWidthConstraint = inlineDisplayLabel.widthAnchor.constraint(greaterThanOrEqualToConstant: 0)
inlineWidthConstraint?.isActive = true
@ -150,7 +157,7 @@ open class DropdownSelect: EntryFieldBase {
}()
// tap gesture
containerStackView
fieldStackView
.publisher(for: UITapGestureRecognizer())
.sink { [weak self] _ in
self?.launchPicker()
@ -158,6 +165,22 @@ open class DropdownSelect: EntryFieldBase {
.store(in: &subscribers)
}
open override func getFieldContainer() -> UIView {
let controlStackView = UIStackView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .horizontal
$0.distribution = .fill
$0.spacing = VDSFormControls.spaceInset
}
controlStackView.addArrangedSubview(dropdownField)
controlStackView.addArrangedSubview(inlineDisplayLabel)
controlStackView.addArrangedSubview(selectedOptionLabel)
controlStackView.setCustomSpacing(0, after: dropdownField)
controlStackView.setCustomSpacing(VDSLayout.space1X, after: inlineDisplayLabel)
controlStackView.setCustomSpacing(VDSLayout.space3X, after: selectedOptionLabel)
return controlStackView
}
/// Used to make changes to the View based off a change events or from local properties.
open override func updateView() {
super.updateView()
@ -167,6 +190,14 @@ open class DropdownSelect: EntryFieldBase {
dropdownField.isUserInteractionEnabled = isReadOnly ? false : true
selectedOptionLabel.surface = surface
selectedOptionLabel.isEnabled = isEnabled
//set the width constraints
let maxwidth = frame.size.width
if let width, width > minWidth && width < maxwidth {
widthConstraint?.constant = width
} else {
widthConstraint?.constant = maxwidth >= minWidth ? maxwidth : minWidth
}
}
/// Resets to default settings.
@ -247,17 +278,37 @@ open class DropdownSelect: EntryFieldBase {
statusIcon.color = iconColorConfiguration.getColor(self)
}
open override func updateHelperLabel(){
//remove first
helperLabel.removeFromSuperview()
super.updateHelperLabel()
//set the helper label position
if helperText != nil {
if helperTextPlacement == .right {
middleStackView.spacing = VDSLayout.space3X
middleStackView.distribution = .fillEqually
middleStackView.addArrangedSubview(helperLabel)
} else {
middleStackView.spacing = 0
middleStackView.distribution = .fill
bottomContainerStackView.addArrangedSubview(helperLabel)
}
}
}
open override func updateAccessibility() {
super.updateAccessibility()
var selectedOption = selectedOptionLabel.text ?? ""
containerStackView.accessibilityLabel = "Dropdown Select, \(selectedOption) \(isReadOnly ? ", read only" : "")"
containerStackView.accessibilityHint = isReadOnly || !isEnabled ? "" : "Double tap to open."
let selectedOption = selectedOptionLabel.text ?? ""
fieldStackView.accessibilityLabel = "Dropdown Select, \(selectedOption) \(isReadOnly ? ", read only" : "")"
fieldStackView.accessibilityHint = isReadOnly || !isEnabled ? "" : "Double tap to open."
}
open override var accessibilityElements: [Any]? {
get {
var elements = [Any]()
elements.append(contentsOf: [titleLabel, containerStackView])
elements.append(contentsOf: [titleLabel, fieldStackView])
if showError {
elements.append(statusIcon)
@ -281,7 +332,22 @@ open class DropdownSelect: EntryFieldBase {
optionsPicker.isHidden = true
dropdownField.resignFirstResponder()
setNeedsUpdate()
UIAccessibility.post(notification: .layoutChanged, argument: containerStackView)
UIAccessibility.post(notification: .layoutChanged, argument: fieldStackView)
}
open override func layoutSubviews() {
super.layoutSubviews()
titleLabelWidthConstraint?.constant = containerView.frame.width
titleLabelWidthConstraint?.isActive = helperTextPlacement == .right
}
open override var canBecomeFirstResponder: Bool { true }
open override func resignFirstResponder() -> Bool {
if dropdownField.isFirstResponder {
dropdownField.resignFirstResponder()
}
return super.resignFirstResponder()
}
}
@ -289,7 +355,7 @@ open class DropdownSelect: EntryFieldBase {
// MARK: - UIPickerView Delegate & Datasource
//--------------------------------------------------
extension DropdownSelect: UIPickerViewDelegate, UIPickerViewDataSource {
internal func launchPicker() {
if optionsPicker.isHidden {
UIAccessibility.post(notification: .layoutChanged, argument: optionsPicker)
@ -298,6 +364,7 @@ extension DropdownSelect: UIPickerViewDelegate, UIPickerViewDataSource {
dropdownField.resignFirstResponder()
}
optionsPicker.isHidden = !optionsPicker.isHidden
setNeedsUpdate()
}
public func numberOfComponents(in pickerView: UIPickerView) -> Int {

View File

@ -45,16 +45,11 @@ open class EntryFieldBase: Control, Changeable, FormFieldInternalValidatable {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .vertical
$0.distribution = .fill
$0.alignment = .leading
}
}()
internal var containerView: UIView = {
return UIView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
}
}()
internal var containerStackView: UIStackView = {
internal var middleStackView: UIStackView = {
return UIStackView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .horizontal
@ -63,15 +58,18 @@ open class EntryFieldBase: Control, Changeable, FormFieldInternalValidatable {
}
}()
internal var controlContainerView: UIView = {
internal var containerView: UIView = {
return UIView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
}
}()
internal var bottomContainerView: UIView = {
return UIView().with {
internal var fieldStackView: UIStackView = {
return UIStackView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .horizontal
$0.distribution = .fill
$0.alignment = .top
}
}()
@ -80,6 +78,7 @@ open class EntryFieldBase: Control, Changeable, FormFieldInternalValidatable {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .vertical
$0.distribution = .fill
$0.spacing = VDSLayout.space2X
}
}()
@ -199,7 +198,7 @@ open class EntryFieldBase: Control, Changeable, FormFieldInternalValidatable {
//--------------------------------------------------
internal var heightConstraint: NSLayoutConstraint?
internal var widthConstraint: NSLayoutConstraint?
//--------------------------------------------------
// MARK: - Overrides
//--------------------------------------------------
@ -211,46 +210,47 @@ open class EntryFieldBase: Control, Changeable, FormFieldInternalValidatable {
addSubview(stackView)
//create the wrapping view
heightConstraint = containerView.heightAnchor.constraint(greaterThanOrEqualToConstant: containerSize.height)
heightConstraint?.priority = .defaultHigh
heightConstraint?.isActive = true
widthConstraint = containerView.widthAnchor.constraint(equalToConstant: 0)
widthConstraint?.priority = .defaultHigh
//get the container this is what is color
//border, internal, etc...
let container = getContainer()
heightConstraint = containerView.heightGreaterThanEqualTo(constant: containerSize.height)
widthConstraint = containerView.width(constant: 0)
let leftStackView = UIStackView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .vertical
$0.distribution = .fill
}
leftStackView.addArrangedSubview(containerView)
leftStackView.setCustomSpacing(8, after: containerView)
//add the containerView to the middleStack
middleStackView.addArrangedSubview(leftStackView)
//add ContainerStackView
//this is the horizontal stack that contains
//the left, InputContainer, Icons, Buttons
container.addSubview(containerStackView)
containerStackView.pinToSuperView(.uniform(VDSLayout.space3X))
containerView.addSubview(fieldStackView)
fieldStackView.pinToSuperView(.uniform(VDSLayout.space3X))
let fieldContainerView = getFieldContainer()
fieldContainerView.translatesAutoresizingMaskIntoConstraints = false
//add the view to add input fields
containerStackView.addArrangedSubview(controlContainerView)
containerStackView.addArrangedSubview(statusIcon)
containerStackView.setCustomSpacing(VDSLayout.space3X, after: controlContainerView)
fieldStackView.addArrangedSubview(fieldContainerView)
fieldStackView.addArrangedSubview(statusIcon)
fieldStackView.setCustomSpacing(VDSLayout.space3X, after: fieldContainerView)
//get the container this is what show helper text, error text
//can include other for character count, max length
let bottomContainer = getBottomContainer()
//add bottomContainerStackView
//this is the vertical stack that contains error text, helper text
bottomContainerView.addSubview(bottomContainerStackView)
bottomContainerStackView.pinToSuperView()
bottomContainerStackView.addArrangedSubview(errorLabel)
bottomContainerStackView.addArrangedSubview(helperLabel)
stackView.addArrangedSubview(titleLabel)
stackView.addArrangedSubview(container)
stackView.addArrangedSubview(bottomContainer)
stackView.addArrangedSubview(middleStackView)
leftStackView.addArrangedSubview(bottomContainer)
stackView.setCustomSpacing(4, after: titleLabel)
stackView.setCustomSpacing(8, after: container)
stackView.setCustomSpacing(8, after: bottomContainer)
stackView
.pinTop()
@ -318,13 +318,13 @@ open class EntryFieldBase: Control, Changeable, FormFieldInternalValidatable {
// MARK: - Public Methods
//--------------------------------------------------
/// Container for the area in which the user interacts.
open func getContainer() -> UIView {
return containerView
open func getFieldContainer() -> UIView {
fatalError("Subclass must return the view that contains the field/view the user will interact with.")
}
/// Container for the area in which helper or error text presents.
open func getBottomContainer() -> UIView {
return bottomContainerView
return bottomContainerStackView
}
internal func updateRules() {

View File

@ -0,0 +1,207 @@
//
// CreditCard.swift
// VDS
//
// Created by Matt Bruce on 5/9/24.
//
import Foundation
import UIKit
extension InputField {
public enum CreditCardType: String, CaseIterable {
case generic
case visa
case mastercard
case amex
case discover
case dinersClub
case jcb
case unionPay
func imageName(surface: Surface) -> String {
func getImageName(_ surface: Surface, name: String) -> String {
return surface == .light ? name : "\(name)-inverted"
}
switch self {
case .visa: return getImageName(surface, name: "visa")
case .mastercard: return "mastercard"
case .amex: return "amex"
case .discover: return "discover"
case .dinersClub: return "dinersClub"//getImageName(surface, name: "dinersClub")
case .jcb: return "jcb"
case .unionPay: return getImageName(surface, name: "unionPay")
default: return getImageName(surface, name: "generic")
}
}
var separatorIndices: [Int] {
switch self {
case .dinersClub:
return [4, 10]
default:
return [4, 8, 12]
}
}
var securityCodeLength: Int {
if self == .amex {
return 4
} else {
return 3
}
}
var maxLength: Int {
switch self {
case .dinersClub: return 14
default: return 16
}
}
static func from(cardNumber: String) -> CreditCardType {
let clean = cardNumber.filter { $0.isNumber }
let firstNum = Int(clean.prefix(1)) ?? 0
let twoChar = Int(clean.prefix(2)) ?? 0
let threeChar = Int(clean.prefix(3)) ?? 0
let fourChar = Int(clean.prefix(4)) ?? 0
let sixChar = Int(clean.prefix(6)) ?? 0
if firstNum == 4 {
return .visa
} else if twoChar == 34 || twoChar == 37 {
return .amex
} else if (twoChar == 62 && !(sixChar >= 622126 && sixChar <= 622925)) || twoChar == 81 || (twoChar == 60 && fourChar != 6011) {
return .unionPay
} else if (threeChar > 299 && threeChar <= 305) || threeChar == 309 || twoChar == 36 || twoChar == 38 || twoChar == 39 {
return .dinersClub
} else if fourChar == 6011 || (sixChar >= 622126 && sixChar <= 622925) || (threeChar >= 644 && threeChar <= 649) || twoChar == 65 {
return .discover
} else if fourChar >= 3528 && fourChar <= 3589 {
return .jcb
} else if (twoChar >= 51 && twoChar <= 55) || (sixChar >= 222100 && sixChar <= 272099) {
return .mastercard
} else {
return .generic
}
}
}
class CreditCardHandler: FieldTypeHandler {
static let shared = CreditCardHandler()
private override init() {
super.init()
self.validateOnChange = false
self.keyboardType = .numberPad
}
override func updateView(_ inputField: InputField) {
minWidth = 288.0
leftImageName = inputField.cardType.imageName(surface: inputField.surface)
super.updateView(inputField)
}
override func appendRules(_ inputField: InputField) {
if let text = inputField.textField.text, text.count > 0 {
let rule = CharacterCountRule().copyWith {
$0.maxLength = inputField.cardType.maxLength
$0.compareType = .equals
$0.errorMessage = "Enter a valid credit card."
}
inputField.rules.append(.init(rule))
}
}
override func textFieldDidBeginEditing(_ inputField: InputField, textField: UITextField) {
//reset the textField when you start editing
value = nil
inputField.cardType = .generic
textField.text = ""
}
override func textFieldDidEndEditing(_ inputField: InputField, textField: UITextField) {
if let value {
textField.text = maskCreditCardNumber(inputField.cardType, number: value)
}
}
override func textField(_ inputField: InputField, textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let allowedCharacters = CharacterSet.decimalDigits
if string.rangeOfCharacter(from: allowedCharacters.inverted) != nil && !string.isEmpty {
return false
}
// Get the current text
let currentText = textField.text ?? ""
// Calculate the new text
let newText = (currentText as NSString).replacingCharacters(in: range, with: string)
// Remove any existing formatting
let rawNumber = newText.filter { $0.isNumber }
if rawNumber.count > inputField.cardType.maxLength {
return false
}
// Format the number with spaces
let formattedNumber = formatCreditCardNumber(inputField.cardType, number: rawNumber)
// Update the icon based on the first four digits
updateCardTypeIcon(inputField, rawNumber: rawNumber)
// Check again
if rawNumber.count > inputField.cardType.maxLength {
return false
}
// Set the formatted text
textField.text = formattedNumber
// Calculate the new cursor position
if let newPosition = textField.cursorPosition(range: range,
replacementString: string,
rawNumber: rawNumber,
formattedNumber: formattedNumber) {
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
}
// if all passes, then set the number1
value = rawNumber
// Prevent the default behavior
return false
}
/// Private
internal func formatCreditCardNumber(_ cardType: CreditCardType, number: String) -> String {
let formattedInput = number.filter { $0.isNumber } // Remove any existing slashes
return String.format(formattedInput, indices: cardType.separatorIndices, with: " ")
}
internal func updateCardTypeIcon(_ inputField: InputField, rawNumber: String) {
defer { inputField.setNeedsUpdate() }
guard rawNumber.count >= 4 else {
inputField.cardType = .generic
return
}
inputField.cardType = CreditCardType.from(cardNumber: rawNumber)
}
internal func maskCreditCardNumber(_ cardType: CreditCardType, number: String) -> String {
// Mask the first 12 characters if the length is 16
let rawNumber = number.filter { $0.isNumber }
guard rawNumber.count == cardType.maxLength else { return formatCreditCardNumber(cardType, number: number) }
let lastFourDigits = rawNumber.suffix(4)
let maskedSection = String(repeating: "", count: 12)
let formattedMaskSection = String.format(maskedSection, indices: cardType.separatorIndices, with: " ")
return formattedMaskSection + " " + lastFourDigits
}
}
}

View File

@ -0,0 +1,99 @@
//
// Date.swift
// VDS
//
// Created by Matt Bruce on 5/9/24.
//
import Foundation
import UIKit
extension InputField {
public enum DateFormat: String, CaseIterable {
case mmyy
case mmddyy
case mmddyyyy
public var placeholderText: String {
switch self {
case .mmyy: "MM/YY"
case .mmddyy: "MM/DD/YY"
case .mmddyyyy: "MM/DD/YYYY"
}
}
public var formatString: String {
switch self {
case .mmyy: "MM/yy"
case .mmddyy: "MM/dd/yy"
case .mmddyyyy: "MM/dd/yyyy"
}
}
public var maxLength: Int {
switch self {
case .mmyy: 5
case .mmddyy: 8
case .mmddyyyy: 10
}
}
internal var separatorIndices: [Int] {
switch self {
case .mmyy: [2]
case .mmddyy: [2,4]
case .mmddyyyy: [2,4]
}
}
}
class DateHandler: FieldTypeHandler {
static let shared = DateHandler()
private override init() {
super.init()
self.keyboardType = .numberPad
}
override func updateView(_ inputField: InputField) {
minWidth = 114.0
placeholderText = inputField.dateFormat.placeholderText
super.updateView(inputField)
}
override func appendRules(_ inputField: InputField) {
if let text = inputField.textField.text, text.count > 0 {
let rule = CharacterCountRule().copyWith {
$0.maxLength = inputField.dateFormat.maxLength
$0.compareType = .equals
$0.errorMessage = "Enter a valid date."
}
inputField.rules.append(.init(rule))
}
}
override func textField(_ inputField: InputField, textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// Allow only numbers and limit the length of text.
guard let oldText = textField.text,
let textRange = Range(range, in: oldText),
string.rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil else {
return false
}
let newText = oldText.replacingCharacters(in: textRange, with: string)
if newText.count > inputField.dateFormat.maxLength {
return false
}
if newText.count <= inputField.dateFormat.maxLength {
textField.text = String.format(newText, indices: inputField.dateFormat.separatorIndices, with: "/")
return false
} else {
return true
}
}
}
}

View File

@ -0,0 +1,115 @@
//
// FieldType.swift
// VDS
//
// Created by Matt Bruce on 5/9/24.
//
import Foundation
import UIKit
import VDSTokens
extension InputField {
public enum FieldType: String, CaseIterable {
case text, number, inlineAction, password, creditCard, telephone, date, securityCode
func handler() -> FieldTypeHandler {
switch self {
case .text:
return TextHandler.shared
case .number:
return NumberHandler.shared
case .inlineAction:
return InlineActionHandler.shared
case .password:
return PasswordHandler.shared
case .creditCard:
return CreditCardHandler.shared
case .telephone:
return TelephoneHandler.shared
case .date:
return DateHandler.shared
case .securityCode:
return SecurityCodeHandler.shared
}
}
}
class FieldTypeHandler: NSObject {
var keyboardType: UIKeyboardType
var minWidth: CGFloat = 40.0
var leftImageName: String?
var actionModel: TextLinkModel?
var toolTipModel: Tooltip.TooltipModel?
var isSecureTextEntry = false
var placeholderText: String?
var value: String?
var validateOnChange = false
internal override init() {
keyboardType = .default
super.init()
}
func updateView(_ inputField: InputField) {
//keyboard
inputField.textField.keyboardType = keyboardType
//textField
inputField.textField.isSecureTextEntry = isSecureTextEntry
//leftIcon
if let leftImageName {
inputField.leftImageView.image = BundleManager.shared.image(for: leftImageName)
}
inputField.leftImageView.isHidden = leftImageName == nil
//actionLink
inputField.actionTextLink.surface = inputField.surface
if let actionModel {
inputField.actionTextLink.text = actionModel.text
inputField.actionTextLink.onClick = { _ in
actionModel.onClick(inputField)
}
inputField.actionTextLink.isHidden = false
inputField.fieldStackView.setCustomSpacing(VDSLayout.space2X, after: inputField.statusIcon)
} else {
inputField.actionTextLink.isHidden = true
inputField.fieldStackView.setCustomSpacing(0, after: inputField.statusIcon)
}
//set the width constraints
let maxwidth = inputField.frame.size.width
if let width = inputField.width, width > minWidth && width < maxwidth {
inputField.widthConstraint?.constant = width
} else {
inputField.widthConstraint?.constant = maxwidth >= minWidth ? maxwidth : minWidth
}
//placeholder
inputField.textField.placeholder = placeholderText
//tooltip from Types take precedence
//if one was set, it would show as usual.
if let toolTipModel {
inputField.tooltipModel = toolTipModel
}
}
func appendRules(_ inputField: InputField) {}
func textFieldDidBeginEditing(_ inputField: InputField, textField: UITextField) { }
func textFieldDidEndEditing(_ inputField: InputField, textField: UITextField) {}
func textFieldDidChangeSelection(_ inputField: InputField, textField: UITextField) {}
func textField(_ inputField: InputField, textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return true
}
}
}

View File

@ -0,0 +1,28 @@
//
// InlineAction.swift
// VDS
//
// Created by Matt Bruce on 5/9/24.
//
import Foundation
import UIKit
extension InputField {
class InlineActionHandler: FieldTypeHandler {
static let shared = InlineActionHandler()
private override init() {
super.init()
}
override func updateView(_ inputField: InputField) {
minWidth = 102.0
actionModel = inputField.actionTextLinkModel
super.updateView(inputField)
}
}
}

View File

@ -0,0 +1,29 @@
//
// Number.swift
// VDS
//
// Created by Matt Bruce on 5/9/24.
//
import Foundation
import UIKit
extension InputField {
class NumberHandler: FieldTypeHandler {
static let shared = NumberHandler()
private override init() {
super.init()
self.keyboardType = .numberPad
}
override func textField(_ inputField: InputField, textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// Allow only numbers
let allowedCharacters = CharacterSet.decimalDigits
let characterSet = CharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet)
}
}
}

View File

@ -0,0 +1,68 @@
//
// Password.swift
// VDS
//
// Created by Matt Bruce on 5/9/24.
//
import Foundation
import UIKit
extension InputField {
enum PasswordAction {
case show, hide
func toggle() -> PasswordAction {
self == .hide ? .show : .hide
}
}
class PasswordHandler: FieldTypeHandler {
static let shared = PasswordHandler()
internal var passwordActionType: PasswordAction = .hide
private override init() {
super.init()
}
override func updateView(_ inputField: InputField) {
let isHide = passwordActionType == .hide
let buttonText = isHide ?
inputField.hidePasswordButtonText.isEmpty ? "Hide" : inputField.hidePasswordButtonText :
inputField.showPasswordButtonText.isEmpty ? "Show" : inputField.showPasswordButtonText
isSecureTextEntry = !isHide
let nextPasswordActionType = passwordActionType.toggle()
if let text = inputField.text, !text.isEmpty {
actionModel = .init(text: buttonText,
onClick: { [weak self] _ in
guard let self else { return }
self.passwordActionType = nextPasswordActionType
inputField.setNeedsUpdate()
})
} else {
passwordActionType = .show
}
minWidth = 62.0
super.updateView(inputField)
updateLink(inputField)
}
func updateLink(_ inputField: InputField) {
if let text = inputField.textField.text, !text.isEmpty {
inputField.actionTextLink.isHidden = false
} else {
inputField.actionTextLink.isHidden = true
}
}
override func textFieldDidChangeSelection(_ inputField: InputField, textField: UITextField) {
updateLink(inputField)
}
}
}

View File

@ -0,0 +1,111 @@
//
// SecurityCode.swift
// VDS
//
// Created by Matt Bruce on 5/9/24.
//
import Foundation
import UIKit
import VDSTokens
extension InputField {
class SecurityCodeHandler: FieldTypeHandler {
static let shared = SecurityCodeHandler()
private override init() {
super.init()
self.keyboardType = .numberPad
}
override func appendRules(_ inputField: InputField) {
if let text = inputField.textField.text, text.count > 0 {
let rule = CharacterCountRule().copyWith {
$0.maxLength = inputField.cardType.securityCodeLength
$0.compareType = .equals
$0.errorMessage = "Enter a valid security code."
}
inputField.rules.append(.init(rule))
}
}
override func updateView(_ inputField: InputField) {
minWidth = 88.0
isSecureTextEntry = true
toolTipModel = getToolTip(inputField)
super.updateView(inputField)
}
func getToolTip(_ inputField: InputField) -> Tooltip.TooltipModel {
let surface = inputField.surface
var contentView: UIView
var code3Label = Label().with {
$0.text = "Most credit or debit cards have a 3-digit security code on the back."
$0.isEnabled = true
$0.surface = surface
}
var code4Label = Label().with {
$0.text = "American Express cards have a 4-digit code on the front."
$0.isEnabled = true
$0.surface = surface
}
var code3ImageView = UIImageView().with {
$0.image = BundleManager.shared.image(for: "securityCode\(surface == .dark ? "-inverted": "")")
}
var code4ImageView = UIImageView().with {
$0.image = BundleManager.shared.image(for: "securityCodeAmex\(surface == .dark ? "-inverted": "")")
}
func stack(_ axis: NSLayoutConstraint.Axis = .vertical) -> UIStackView {
UIStackView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = axis
$0.distribution = .fill
$0.alignment = .leading
$0.spacing = VDSLayout.space2X
}
}
func view3() -> UIView {
stack().with {
$0.addArrangedSubview(code3ImageView)
$0.addArrangedSubview(code3Label)
}
}
func view4() -> UIView {
stack().with {
$0.addArrangedSubview(code4ImageView)
$0.addArrangedSubview(code4Label)
}
}
let title: String = inputField.cardType.rawValue
switch inputField.cardType {
case .amex:
contentView = view4()
case .generic:
contentView = stack(.horizontal).with {
$0.addArrangedSubview(view3())
$0.addArrangedSubview(view4())
}
default:
contentView = view3()
}
return .init(contentView: contentView)
}
override func textField(_ inputField: InputField, textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// Allow only numbers and limit the length of text.
let allowedCharacters = CharacterSet.decimalDigits
let characterSet = CharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet) && ((textField.text?.count ?? 0) + string.count - range.length) <= inputField.cardType.securityCodeLength
}
}
}

View File

@ -0,0 +1,104 @@
//
// Tel.swift
// VDS
//
// Created by Matt Bruce on 5/9/24.
//
import Foundation
import UIKit
extension InputField {
class TelephoneHandler: FieldTypeHandler {
static let shared = TelephoneHandler()
private override init() {
super.init()
self.keyboardType = .phonePad
}
override func updateView(_ inputField: InputField) {
minWidth = 176.0
super.updateView(inputField)
}
override func appendRules(_ inputField: InputField) {
if let text = inputField.textField.text, text.count > 0 {
let rule = CharacterCountRule().copyWith {
$0.maxLength = "XXX-XXX-XXXX".count
$0.compareType = .equals
$0.errorMessage = "Enter a valid telephone."
}
inputField.rules.append(.init(rule))
}
}
override func textField(_ inputField: InputField, textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// Allow only numbers and limit the length of text.
let allowedCharacters = CharacterSet(charactersIn: "01233456789")
let characterSet = CharacterSet(charactersIn: string)
let currentText = textField.text ?? ""
if !allowedCharacters.isSuperset(of: characterSet) { return false }
// Calculate the new text
let newText = (currentText as NSString).replacingCharacters(in: range, with: string)
// Remove any existing formatting
let rawNumber = newText.filter { $0.isNumber }
// Format the number with dashes
let formattedNumber = formatUSNumber(rawNumber)
// Set the formatted text
textField.text = formattedNumber
// Calculate the new cursor position
if let newPosition = textField.cursorPosition(range: range,
replacementString: string,
rawNumber: rawNumber,
formattedNumber: formattedNumber) {
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
}
// Prevent the default behavior
return false
}
internal func formatUSNumber(_ number: String) -> String {
// Format the number in the style XXX-XXX-XXXX
let areaCodeLength = 3
let centralOfficeCodeLength = 3
let lineNumberLength = 4
var formattedNumber = ""
if number.count > 0 {
formattedNumber.append(contentsOf: number.prefix(areaCodeLength))
}
if number.count > areaCodeLength {
let startIndex = number.index(number.startIndex, offsetBy: areaCodeLength)
let endIndex = number.index(startIndex, offsetBy: min(centralOfficeCodeLength, number.count - areaCodeLength))
let centralOfficeCode = number[startIndex..<endIndex]
formattedNumber.append("-")
formattedNumber.append(contentsOf: centralOfficeCode)
}
if number.count > areaCodeLength + centralOfficeCodeLength {
let startIndex = number.index(number.startIndex, offsetBy: areaCodeLength + centralOfficeCodeLength)
let endIndex = number.index(startIndex, offsetBy: min(lineNumberLength, number.count - areaCodeLength - centralOfficeCodeLength))
let lineNumber = number[startIndex..<endIndex]
formattedNumber.append("-")
formattedNumber.append(contentsOf: lineNumber)
}
return formattedNumber
}
}
}

View File

@ -0,0 +1,21 @@
//
// Text.swift
// VDS
//
// Created by Matt Bruce on 5/9/24.
//
import Foundation
import UIKit
extension InputField {
class TextHandler: FieldTypeHandler {
static let shared = TextHandler()
private override init() {
super.init()
}
}
}

View File

@ -31,28 +31,37 @@ open class InputField: EntryFieldBase {
super.init(coder: coder)
}
//--------------------------------------------------
// MARK: - Enums
//--------------------------------------------------
/// Enum used to describe the input type.
public enum FieldType: String, CaseIterable {
case text, number, inlineAction, password, creditCard, tel, date, securityCode
}
//--------------------------------------------------
// MARK: - Private Properties
//--------------------------------------------------
internal var inputFieldStackView: UIStackView = {
return UIStackView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .horizontal
$0.distribution = .fill
$0.spacing = 12
}
}()
internal var titleLabelWidthConstraint: NSLayoutConstraint?
//--------------------------------------------------
// MARK: - Public FieldType Properties
//--------------------------------------------------
/// Representing the type of input.
open var fieldType: FieldType = .text { didSet { setNeedsUpdate() } }
//--------------------------------------------------
// MARK: - CreditCard/SecurityCode
//--------------------------------------------------
open var cardType: CreditCardType = .generic { didSet { setNeedsUpdate() } }
//--------------------------------------------------
// MARK: - Password
//--------------------------------------------------
internal var minWidthConstraint: NSLayoutConstraint?
/// This is the text that will be displayed when the password is unmasked.
open var hidePasswordButtonText: String = "Hide" { didSet { setNeedsUpdate() } }
/// This is the text that will be displayed when the password is masked.
open var showPasswordButtonText: String = "Show" { didSet { setNeedsUpdate() } }
//--------------------------------------------------
// MARK: - Date
//--------------------------------------------------
/// Date Format used when using the FieldType 'Date'.
open var dateFormat: DateFormat = .mmddyy { didSet { setNeedsUpdate() } }
//--------------------------------------------------
// MARK: - Public Properties
//--------------------------------------------------
@ -74,10 +83,14 @@ open class InputField: EntryFieldBase {
$0.setSurfaceColors(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark, forDisabled: false)
}.eraseToAnyColorable()
/// Representing the type of input.
open var fieldType: FieldType = .text { didSet { setNeedsUpdate() } }
open var leftIcon: Icon = Icon().with { $0.size = .medium }
open var leftImageView = UIImageView().with {
$0.height(20)
$0.width(32)
$0.isAccessibilityElement = false
$0.translatesAutoresizingMaskIntoConstraints = false
$0.contentMode = .scaleAspectFill
$0.clipsToBounds = true
}
open var actionTextLink = TextLink().with { $0.contentEdgeInsets = .top(-2) }
@ -94,7 +107,11 @@ open class InputField: EntryFieldBase {
/// Value for the textField
open override var value: String? {
textField.text
if let value = fieldType.handler().value {
return value
} else {
return textField.text
}
}
var _showError: Bool = false
@ -127,8 +144,9 @@ open class InputField: EntryFieldBase {
var state = super.state
if showSuccess {
state.insert(.success)
} else if textField.isFirstResponder {
}
if textField.isFirstResponder {
state.insert(.focused)
}
@ -149,56 +167,37 @@ open class InputField: EntryFieldBase {
open override func setup() {
super.setup()
minWidthConstraint = containerView.widthAnchor.constraint(greaterThanOrEqualToConstant: 0)
minWidthConstraint?.isActive = true
// stackview for controls in EntryFieldBase.controlContainerView
let controlStackView = UIStackView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .horizontal
$0.spacing = VDSLayout.space3X
}
controlContainerView.addSubview(controlStackView)
controlStackView.pinToSuperView()
controlStackView.addArrangedSubview(leftIcon)
controlStackView.addArrangedSubview(textField)
titleLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
titleLabel.setContentHuggingPriority(.required, for: .horizontal)
titleLabelWidthConstraint = titleLabel.width(constant: 0)
textField.heightAnchor.constraint(equalToConstant: 20).isActive = true
textField.delegate = self
textField
.textPublisher
.sink { [weak self] newText in
print("textPublisher newText: \(newText)")
self?.process(text: newText)
self?.validate()
self?.sendActions(for: .valueChanged)
}.store(in: &subscribers)
textField
.publisher(for: .editingDidBegin)
.sink { [weak self] _ in
self?.setNeedsUpdate()
}.store(in: &subscribers)
textField
.publisher(for: .editingDidEnd)
.sink { [weak self] _ in
self?.validate()
}.store(in: &subscribers)
stackView.addArrangedSubview(successLabel)
stackView.setCustomSpacing(8, after: successLabel)
containerStackView.addArrangedSubview(actionTextLink)
fieldStackView.addArrangedSubview(actionTextLink)
successLabel.textColorConfiguration = primaryColorConfiguration.eraseToAnyColorable()
backgroundColorConfiguration.setSurfaceColors(VDSColor.feedbackSuccessBackgroundOnlight, VDSColor.feedbackSuccessBackgroundOndark, forState: .success)
borderColorConfiguration.setSurfaceColors(VDSColor.feedbackSuccessOnlight, VDSColor.feedbackSuccessOndark, forState: .success)
}
open override func getFieldContainer() -> UIView {
// stackview for controls in EntryFieldBase.controlContainerView
let stackView = UIStackView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .horizontal
$0.spacing = VDSLayout.space3X
}
stackView.addArrangedSubview(leftImageView)
stackView.addArrangedSubview(textField)
return stackView
}
/// Resets to default settings.
open override func reset() {
super.reset()
@ -212,18 +211,12 @@ open class InputField: EntryFieldBase {
successText = nil
helperTextPlacement = .bottom
}
/// Container for the area in which the user interacts.
open override func getContainer() -> UIView {
inputFieldStackView.addArrangedSubview(containerView)
return inputFieldStackView
}
/// Used to make changes to the View based off a change events or from local properties.
open override func updateView() {
//update fieldType first
updateFieldType()
fieldType.handler().updateView(self)
super.updateView()
@ -262,118 +255,22 @@ open class InputField: EntryFieldBase {
//set the helper label position
if helperText != nil {
if helperTextPlacement == .right {
inputFieldStackView.spacing = 12
inputFieldStackView.distribution = .fillEqually
inputFieldStackView.addArrangedSubview(helperLabel)
middleStackView.spacing = VDSLayout.space3X
middleStackView.distribution = .fillEqually
middleStackView.addArrangedSubview(helperLabel)
} else {
inputFieldStackView.spacing = 0
inputFieldStackView.distribution = .fill
stackView.addArrangedSubview(helperLabel)
middleStackView.spacing = 0
middleStackView.distribution = .fill
bottomContainerStackView.addArrangedSubview(helperLabel)
}
}
}
open func updateFieldType() {
var minWidth: CGFloat = 40.0
var leftIconName: Icon.Name?
var actionModel: InputField.TextLinkModel?
var toolTipModel: Tooltip.TooltipModel? = tooltipModel
var isSecureTextEntry = false
var rules = [AnyRule<String>]()
var placeholderText: String?
if self.isRequired {
let rule = RequiredRule()
if let errorText {
rule.errorMessage = errorText
}
rules.append(.init(rule))
}
switch fieldType {
case .text:
break
case .number:
break
case .inlineAction:
minWidth = 102.0
case .password:
let isHide = passwordActionType == .hide
let buttonText = isHide ?
hidePasswordButtonText.isEmpty ? "Hide" : hidePasswordButtonText :
showPasswordButtonText.isEmpty ? "Show" : showPasswordButtonText
isSecureTextEntry = !isHide
let nextPasswordActionType = passwordActionType.toggle()
if let text, !text.isEmpty {
actionModel = .init(text: buttonText,
onClick: { [weak self] _ in
guard let self else { return }
self.passwordActionType = nextPasswordActionType
})
} else {
passwordActionType = .show
}
minWidth = 62.0
case .creditCard:
minWidth = 288.0
case .tel:
minWidth = 176.0
case .date:
minWidth = 114.0
placeholderText = dateFormat.placeholderText
case .securityCode:
minWidth = 88.0
}
//textField
textField.isSecureTextEntry = isSecureTextEntry
//leftIcon
leftIcon.surface = surface
leftIcon.color = iconColorConfiguration.getColor(self)
leftIcon.name = leftIconName
leftIcon.isHidden = leftIconName == nil
//actionLink
actionTextLink.surface = surface
if let actionModel {
actionTextLink.text = actionModel.text
actionTextLink.onClick = actionModel.onClick
actionTextLink.isHidden = false
containerStackView.setCustomSpacing(VDSLayout.space2X, after: statusIcon)
} else {
actionTextLink.isHidden = true
containerStackView.setCustomSpacing(0, after: statusIcon)
}
//set the width constraints
if let width, width > minWidth {
widthConstraint?.constant = width
widthConstraint?.isActive = true
minWidthConstraint?.isActive = false
} else {
minWidthConstraint?.constant = minWidth
widthConstraint?.isActive = false
minWidthConstraint?.isActive = true
}
//placeholder
textField.placeholder = placeholderText
//tooltip
tooltipModel = toolTipModel
override func updateRules() {
super.updateRules()
fieldType.handler().appendRules(self)
}
/// Used to update any Accessibility properties.
open override func updateAccessibility() {
super.updateAccessibility()
@ -403,6 +300,12 @@ open class InputField: EntryFieldBase {
set { super.accessibilityElements = newValue }
}
open override func layoutSubviews() {
super.layoutSubviews()
titleLabelWidthConstraint?.constant = containerView.frame.width
titleLabelWidthConstraint?.isActive = helperTextPlacement == .right
}
open override var canBecomeFirstResponder: Bool { true }
open override func resignFirstResponder() -> Bool {
@ -411,114 +314,49 @@ open class InputField: EntryFieldBase {
}
return super.resignFirstResponder()
}
//--------------------------------------------------
// MARK: - Password
//--------------------------------------------------
enum PasswordAction {
case show, hide
func toggle() -> PasswordAction {
self == .hide ? .show : .hide
}
}
internal var passwordActionType: PasswordAction = .show { didSet { setNeedsUpdate() } }
open var hidePasswordButtonText: String = "Hide" { didSet { setNeedsUpdate() } }
open var showPasswordButtonText: String = "Show" { didSet { setNeedsUpdate() } }
//--------------------------------------------------
// MARK: - Date
//--------------------------------------------------
open var dateFormat: DateFormat = .mmddyy { didSet { setNeedsUpdate() } }
}
extension InputField: UITextFieldDelegate {
public func process(text changedText: String) {
var newText: String = changedText
switch fieldType {
case .date:
guard newText.count <= dateFormat.maxLength else { return }
let numericText = newText.compactMap { $0.isNumber ? $0 : nil }
var formattedText = ""
for (index, char) in numericText.enumerated() {
if (index == 2 || (index == 4 && (dateFormat != .mmyy))) && index < dateFormat.maxLength {
formattedText += "/"
}
formattedText.append(char)
}
newText = formattedText
default: break
public func textFieldDidBeginEditing(_ textField: UITextField) {
fieldType.handler().textFieldDidBeginEditing(self, textField: textField)
setNeedsUpdate()
}
public func textFieldDidEndEditing(_ textField: UITextField) {
fieldType.handler().textFieldDidEndEditing(self, textField: textField)
validate()
}
public func textFieldDidChangeSelection(_ textField: UITextField) {
fieldType.handler().textFieldDidChangeSelection(self, textField: textField)
if fieldType.handler().validateOnChange {
validate()
} else {
setNeedsUpdate()
}
sendActions(for: .valueChanged)
}
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
switch fieldType {
case .date:
// Allow only numbers and limit the length of text.
let allowedCharacters = CharacterSet.decimalDigits
let characterSet = CharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet) && ((textField.text?.count ?? 0) + string.count - range.length) <= dateFormat.maxLength
default:
return true
}
return fieldType.handler().textField(self, textField: textField, shouldChangeCharactersIn: range, replacementString: string)
}
}
extension InputField.FieldType {
extension String {
public var keyboardType: UIKeyboardType {
switch self {
case .number:
.numberPad
case .tel:
.phonePad
case .creditCard:
.numberPad
case .date:
.numberPad
case .securityCode:
.numberPad
default:
.default
internal static func format(_ value: String, indices: [Int], with separator: String) -> String {
var formattedString = ""
var currentIndex = value.startIndex
for index in 0..<value.count {
if indices.contains(index) {
formattedString.append(separator)
}
formattedString.append(value[currentIndex])
currentIndex = value.index(after: currentIndex)
}
return formattedString
}
}
extension InputField {
public enum DateFormat: String, CaseIterable {
case mmyy
case mmddyy
case mmddyyyy
public var placeholderText: String {
switch self {
case .mmyy: "MM/YY"
case .mmddyy: "MM/DD/YY"
case .mmddyyyy: "MM/DD/YYYY"
}
}
public var formatString: String {
switch self {
case .mmyy: "MM/yy"
case .mmddyy: "MM/dd/yy"
case .mmddyyyy: "MM/dd/yyyy"
}
}
public var maxLength: Int {
switch self {
case .mmyy: 5
case .mmddyy: 8
case .mmddyyyy: 10
}
}
}
}

View File

@ -82,3 +82,26 @@ open class TextField: UITextField {
return success
}
}
extension UITextField {
public func cursorPosition(range: NSRange, replacementString string: String, rawNumber: String, formattedNumber: String) -> UITextPosition? {
let start = range.location
let length = string.count
let newCursorLocation = start + length
// Adjust the cursor position to skip over formatting characters
var formattedCharacterCount = 0
for (index, character) in formattedNumber.enumerated() {
if index >= newCursorLocation + formattedCharacterCount {
break
}
if !character.isNumber {
formattedCharacterCount += 1
}
}
let finalCursorLocation = min(newCursorLocation + formattedCharacterCount, formattedNumber.count)
return position(from: beginningOfDocument, offset: finalCursorLocation)
}
}

View File

@ -12,11 +12,11 @@ extension InputField {
///Text that goes in the Tab
public var text: String
///Click event when you click on a tab
public var onClick: ((TextLink) -> Void)?
public init(text: String, onClick: ((TextLink) -> Void)? = nil) {
public var onClick: ((InputField) -> Void)
public init(text: String = "Apply", onClick: @escaping (InputField) -> Void) {
self.text = text
self.onClick = onClick
}

View File

@ -7,12 +7,28 @@
import Foundation
class CharacterCountRule: Rule {
class CharacterCountRule: Rule, Withable {
enum CompareType {
case equals, greaterThanEquals, lessThan, lessThanEquals
}
var maxLength: Int?
var errorMessage: String = "You have exceeded the character limit."
var compareType: CompareType = .lessThanEquals
func isValid(value: String?) -> Bool {
guard let text = value, let maxLength, maxLength > 0 else { return true }
return text.count <= maxLength
switch compareType {
case .equals:
return text.count == maxLength
case .greaterThanEquals:
return text.count >= maxLength
case .lessThan:
return text.count < maxLength
case .lessThanEquals:
return text.count <= maxLength
}
}
}

View File

@ -32,7 +32,6 @@ open class TextArea: EntryFieldBase {
//--------------------------------------------------
// MARK: - Private Properties
//--------------------------------------------------
internal var minWidthConstraint: NSLayoutConstraint?
internal var textViewHeightConstraint: NSLayoutConstraint?
internal var inputFieldStackView: UIStackView = {
@ -43,38 +42,15 @@ open class TextArea: EntryFieldBase {
$0.spacing = VDSLayout.space3X
}
}()
internal var bottomStackView: UIStackView = {
return UIStackView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .horizontal
$0.distribution = .fill
$0.alignment = .top
$0.spacing = VDSLayout.space2X
}
}()
open var characterCounterLabel = Label().with {
$0.setContentCompressionResistancePriority(.required, for: .vertical)
$0.textStyle = .bodySmall
$0.textAlignment = .right
$0.numberOfLines = 1
}
private var _minHeight: Height = .twoX
open var minHeight: Height? {
get { return _minHeight }
set {
if let newValue {
_minHeight = newValue
} else {
_minHeight = .twoX
}
textViewHeightConstraint?.constant = _minHeight.value
setNeedsUpdate()
}
}
open var minHeight: Height = .twoX { didSet { setNeedsUpdate() } }
//--------------------------------------------------
// MARK: - Public Properties
@ -161,16 +137,8 @@ open class TextArea: EntryFieldBase {
/// 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()
containerStackView.pinToSuperView(.uniform(VDSFormControls.spaceInset))
minWidthConstraint = containerView.widthAnchor.constraint(greaterThanOrEqualToConstant: containerSize.width)
minWidthConstraint?.isActive = true
controlContainerView.addSubview(textView)
textView
.pinTop()
.pinLeading()
.pinTrailingLessThanOrEqualTo(nil, 0, .defaultHigh)
.pinBottom(0, .defaultHigh)
fieldStackView.pinToSuperView(.uniform(VDSFormControls.spaceInset))
textView.isScrollEnabled = true
textView.autocorrectionType = .no
@ -200,6 +168,7 @@ open class TextArea: EntryFieldBase {
borderColorConfiguration.setSurfaceColors(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark, forState: .focused)
characterCounterLabel.textColorConfiguration = primaryColorConfiguration.eraseToAnyColorable()
bottomContainerStackView.spacing = VDSLayout.space2X
}
/// Resets to default settings.
@ -210,13 +179,7 @@ open class TextArea: EntryFieldBase {
characterCounterLabel.textStyle = .bodySmall
setNeedsUpdate()
}
/// Container for the area in which the user interacts.
open override func getContainer() -> UIView {
inputFieldStackView.addArrangedSubview(containerView)
return inputFieldStackView
}
/// Used to make changes to the View based off a change events or from local properties.
open override func updateView() {
super.updateView()
@ -225,16 +188,11 @@ open class TextArea: EntryFieldBase {
textView.surface = surface
//set the width constraints
if let width {
widthConstraint?.constant = width
widthConstraint?.isActive = true
minWidthConstraint?.isActive = false
} else {
minWidthConstraint?.constant = containerSize.width
widthConstraint?.isActive = false
minWidthConstraint?.isActive = true
}
let maxwidth = frame.size.width
let minWidth = containerSize.width
widthConstraint?.constant = maxwidth >= minWidth ? maxwidth : minWidth
textViewHeightConstraint?.constant = minHeight.value
characterCounterLabel.text = getCharacterCounterText()
statusIcon.color = iconColorConfiguration.getColor(self)
@ -252,11 +210,22 @@ open class TextArea: EntryFieldBase {
rules.append(.init(countRule))
}
open override func getFieldContainer() -> UIView {
textView
}
/// Container for the area showing helper text, error text, character count, maximum length value.
open override func getBottomContainer() -> UIView {
bottomStackView.addArrangedSubview(bottomContainerView)
bottomStackView.addArrangedSubview(characterCounterLabel)
return bottomStackView
let stackView = UIStackView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .horizontal
$0.distribution = .fill
$0.alignment = .top
$0.spacing = VDSLayout.space2X
}
stackView.addArrangedSubview(super.getBottomContainer())
stackView.addArrangedSubview(characterCounterLabel)
return stackView
}
/// Used to update any Accessibility properties.
@ -321,7 +290,7 @@ open class TextArea: EntryFieldBase {
//since it will autogrow with the current settings
if let textViewHeightConstraint, textView.isEditable {
var height = textView.contentSize.height
height = max(height, _minHeight.value)
height = max(height, minHeight.value)
if height > Height.twoX.value && height <= Height.fourX.value {
textViewHeightConstraint.constant = Height.fourX.value
} else if height > Height.fourX.value {

View File

@ -1 +0,0 @@
<svg id="Ebene_1" data-name="Ebene 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21.6 21.6"><path d="M8,14.12H4.61V13H8ZM19.79,6.88v7.94A2.22,2.22,0,0,1,17.58,17H4A2.23,2.23,0,0,1,1.8,14.82V6.88A2.25,2.25,0,0,1,4,4.57H17.68A2.11,2.11,0,0,1,19.79,6.88Zm-16.88.5H18.69v-.5a1.13,1.13,0,0,0-1.11-1.11H4a1.12,1.12,0,0,0-1.1,1.11ZM18.79,10.8H2.91v3.92A1.12,1.12,0,0,0,4,15.83H17.68a1.12,1.12,0,0,0,1.11-1.11Zm0-2.21H2.91v1.1H18.79Z"/></svg>

Before

Width:  |  Height:  |  Size: 439 B

View File

@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "dinersClub-inverted.svg",
"filename" : "DCI_Horizontal-2_onlight.svg",
"idiom" : "universal"
}
],

View File

@ -0,0 +1,819 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
<!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
<!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
<!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
<!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 34 23.7"
style="enable-background:new 0 0 34 23.7;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;}
.st1{fill:#FFFFFF;}
.st2{fill:#0069AA;}
</style>
<switch>
<foreignObject requiredExtensions="&ns_ai;" x="0" y="0" width="1" height="1">
<i:aipgfRef xlink:href="#adobe_illustrator_pgf">
</i:aipgfRef>
</foreignObject>
<g i:extraneous="self">
<g>
<g>
<path class="st0" d="M11.1,20.8c-0.1,0-0.2,0-0.2,0v1.1H11c0.4,0,0.6-0.1,0.6-0.6C11.6,21,11.4,20.8,11.1,20.8z"/>
<polygon class="st0" points="16.6,22.1 17.3,22.1 17,21.1 "/>
<path class="st0" d="M12.7,16.7c0-0.4-0.2-0.6-0.6-0.6c-0.4,0-0.7,0.3-0.8,0.8h1.2C12.7,16.9,12.7,16.8,12.7,16.7z"/>
<path class="st0" d="M2.5,18.9c1.5,0,2-1.1,2-2.2c0-1.3-0.8-2.3-2.2-2.3c-0.3,0-0.4,0-0.5,0v3.8C1.8,18.8,2.1,18.9,2.5,18.9z"/>
<path class="st0" d="M23.6,20.7c-0.7,0-0.8,0.6-0.8,1.1c0,0.7,0.3,1.3,0.9,1.3c0.7,0,0.9-0.6,0.9-1.2
C24.5,21.4,24.2,20.7,23.6,20.7z"/>
<path class="st0" d="M31.3,19c0.7,0,1.1-0.7,1.1-1.4c0-0.8-0.6-1.4-1.1-1.4c-0.3,0-0.5,0.2-0.7,0.3v1.7
C30.6,18.6,30.9,19,31.3,19z"/>
<path class="st0" d="M33.1,20.7L33.1,20.7l0,0.2h0C33.1,20.9,33.2,20.9,33.1,20.7C33.2,20.7,33.1,20.7,33.1,20.7z"/>
<polygon class="st0" points="29,22.1 29.7,22.1 29.4,21.1 "/>
<path class="st0" d="M33.1,20.6c-0.2,0-0.3,0.2-0.3,0.3c0,0.2,0.1,0.3,0.3,0.3c0.2,0,0.3-0.2,0.3-0.3
C33.4,20.7,33.3,20.6,33.1,20.6z M33.3,21.1L33.3,21.1c-0.1,0-0.1-0.1-0.2-0.2h0v0.1c0,0,0,0,0.1,0v0h-0.2v0c0,0,0.1,0,0.1,0
v-0.3c0,0,0-0.1-0.1-0.1v0h0.2c0.1,0,0.1,0,0.1,0.1c0,0.1,0,0.1-0.1,0.1l0.1,0.1C33.2,21,33.3,21.1,33.3,21.1L33.3,21.1z"/>
<path class="st1" d="M2.4,19.1c2.5,0,2.9-1.7,2.9-2.4c0-1.2-1-2.4-2.8-2.4c-0.5,0-0.9,0-1.2,0c-0.3,0-0.6,0-0.8,0v0.2
c0.3,0,0.6,0,0.6,0.6v3.4c0,0.5-0.2,0.5-0.6,0.5v0.2c0.3,0,0.6,0,0.9,0C1.7,19.1,2,19.1,2.4,19.1z M1.8,14.4c0.1,0,0.3,0,0.5,0
c1.4,0,2.2,0.9,2.2,2.3c0,1-0.5,2.2-2,2.2c-0.3,0-0.7-0.1-0.7-0.6V14.4z"/>
<path class="st1" d="M6.3,14.8c0.2,0,0.3-0.2,0.3-0.3c0-0.2-0.2-0.3-0.3-0.3c-0.2,0-0.3,0.2-0.3,0.3C5.9,14.6,6.1,14.8,6.3,14.8
z"/>
<path class="st1" d="M7,19.1v-0.2H6.9c-0.2,0-0.3,0-0.3-0.2V16c0-0.1,0-0.1,0-0.1c0,0-0.1,0-0.1,0c0,0-0.4,0.2-0.7,0.3v0.1
C5.9,16.4,6,16.5,6,16.8v1.9c0,0.2-0.1,0.2-0.3,0.2H5.5v0.2c0.3,0,0.5,0,0.8,0S6.8,19.1,7,19.1z"/>
<path class="st1" d="M10.7,18.9h-0.1c-0.2,0-0.3,0-0.3-0.2v-1.8c0-0.5-0.2-1-0.8-1c-0.5,0-0.8,0.2-1.2,0.5v-0.5
c0-0.1,0-0.1,0-0.1c-0.3,0.1-0.6,0.2-0.9,0.3v0.1c0.3,0.1,0.4,0.2,0.4,0.5v1.9c0,0.2-0.1,0.2-0.3,0.2H7.2v0.2c0.3,0,0.5,0,0.8,0
c0.3,0,0.5,0,0.7,0v-0.2H8.6c-0.2,0-0.4,0-0.4-0.2v-2.1c0.2-0.2,0.6-0.3,0.8-0.3c0.4,0,0.6,0.2,0.6,0.6v1.8
c0,0.2-0.1,0.2-0.3,0.2H9.2v0.2c0.3,0,0.5,0,0.8,0c0.3,0,0.5,0,0.7,0V18.9z"/>
<path class="st1" d="M12,19.2c0.6,0,1-0.4,1.3-0.8l-0.1-0.1c-0.3,0.3-0.6,0.5-0.9,0.5c-0.6,0-1-0.5-1-1.2c0-0.2,0-0.3,0-0.4h2
l0.1,0c0,0,0-0.1,0-0.1c0-0.7-0.6-1.1-1.2-1.1c-0.5,0-1.4,0.4-1.4,1.8C10.7,18.1,10.9,19.2,12,19.2z M12.1,16.1
c0.4,0,0.6,0.3,0.6,0.6c0,0.1,0,0.2-0.2,0.2h-1.2C11.4,16.4,11.7,16.1,12.1,16.1z"/>
<path class="st1" d="M15.3,19.1v-0.2h-0.4c-0.2,0-0.3,0-0.3-0.2V17c0-0.4,0.4-0.6,0.5-0.6c0.2,0,0.2,0.2,0.5,0.2
c0.2,0,0.3-0.2,0.3-0.4c0-0.3-0.2-0.4-0.4-0.4c-0.4,0-0.7,0.4-0.9,0.7h0V16c0-0.1,0-0.1-0.1-0.1c-0.1,0-0.3,0.2-0.9,0.4v0.1
c0.1,0.1,0.4,0.1,0.4,0.3v2c0,0.2-0.1,0.2-0.3,0.2h-0.2v0.2c0.3,0,0.5,0,0.8,0C14.6,19.1,14.9,19.1,15.3,19.1z"/>
<path class="st1" d="M17,19c-0.5,0-0.8-0.4-0.9-0.9l-0.1,0l0.1,0.8c0.2,0.1,0.6,0.2,0.9,0.2c0.8,0,1.2-0.5,1.2-1
c0-1.1-1.6-0.8-1.6-1.7c0-0.3,0.3-0.5,0.5-0.5c0.4,0,0.7,0.3,0.8,0.7H18l0-0.7c-0.3-0.1-0.6-0.2-0.8-0.2c-0.8,0-1.1,0.5-1.1,0.9
c0,1.1,1.5,0.9,1.5,1.7C17.6,18.7,17.4,19,17,19z"/>
<path class="st1" d="M24.3,18.8l0.2-1l-0.2,0c-0.1,0.7-0.7,1.2-1.4,1.2c-1.1,0-2.1-1-2.1-2.4c0-1.7,1.2-2.2,2-2.2
c0.8,0,1.4,0.3,1.5,1.1h0.2l-0.1-1c-0.5-0.2-1.1-0.4-1.7-0.4c-1.4,0-2.7,1-2.7,2.5c0,1.6,1,2.6,2.7,2.6
C23.2,19.2,24,19,24.3,18.8z"/>
<path class="st1" d="M26.2,19.1v-0.2h-0.1c-0.2,0-0.4,0-0.4-0.2v-4.8c0-0.1,0-0.1-0.1-0.1c0,0-0.1,0-0.2,0.1
c-0.1,0.1-0.4,0.2-0.7,0.3v0.1c0.3,0.1,0.4,0.1,0.4,0.5v3.9c0,0.2-0.1,0.2-0.3,0.2h-0.1v0.2c0.3,0,0.5,0,0.8,0
C25.7,19.1,26,19.1,26.2,19.1z"/>
<path class="st1" d="M26.6,16.6v1.8c0,0.6,0.4,0.8,0.8,0.8c0.5,0,0.8-0.2,1.2-0.6v0.6l0,0c0.1,0,0.7-0.2,1-0.2v-0.1
c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0-0.2-0.1v-2.6c0-0.1,0-0.1-0.1-0.1c-0.1,0-0.5,0.1-1.1,0.1v0.1c0.3,0.1,0.6,0.1,0.6,0.3v1.9
c-0.3,0.2-0.6,0.4-0.8,0.4c-0.6,0-0.6-0.6-0.6-0.8v-1.8c0-0.2,0-0.2-0.1-0.2c-0.1,0-0.6,0-0.9,0v0.1
C26.6,16.2,26.6,16.4,26.6,16.6z"/>
<path class="st1" d="M30.1,14.8v3c0,0.4,0,0.8-0.1,1.2l0.1,0.1l0.2-0.2c0.2,0.1,0.5,0.2,1,0.2c1,0,1.7-0.9,1.7-1.8
c0-0.8-0.5-1.5-1.3-1.5c-0.4,0-0.8,0.3-1,0.5v-2.6c0-0.1,0-0.1-0.1-0.1c0,0-0.1,0-0.2,0.1c-0.1,0.1-0.4,0.2-0.7,0.3v0.1
C29.9,14.3,30.1,14.3,30.1,14.8z M30.6,16.6c0.2-0.2,0.4-0.3,0.7-0.3c0.5,0,1.1,0.6,1.1,1.4c0,0.6-0.3,1.4-1.1,1.4
c-0.5,0-0.7-0.4-0.7-0.7V16.6z"/>
<path class="st1" d="M1,20.6c-0.2,0-0.4,0-0.6,0h0v0.1v0h0.1c0.1,0,0.3,0,0.3,0.2v2c0,0.2-0.1,0.2-0.3,0.2H0.4h0v0v0.1v0h0
c0.1,0,0.4,0,0.6,0c0.2,0,0.4,0,0.6,0h0v-0.1v0H1.5c-0.1,0-0.3,0-0.3-0.2v-2c0-0.2,0.1-0.2,0.3-0.2h0.1h0v-0.1v0h0
C1.4,20.6,1.2,20.6,1,20.6z"/>
<path class="st1" d="M4.3,20.6c-0.2,0-0.4,0-0.5,0h0v0.1v0h0.1c0.1,0,0.3,0,0.3,0.3v1.4l-1.7-1.9c-0.1,0-0.2,0-0.4,0
c-0.1,0-0.3,0-0.4,0h0v0.1v0h0.1c0.2,0,0.3,0.1,0.3,0.3v1.6c0,0.3-0.1,0.5-0.3,0.5H1.7h0v0.1v0h0c0.2,0,0.3,0,0.5,0
c0.2,0,0.3,0,0.5,0h0v-0.1v0H2.7c-0.3,0-0.3-0.1-0.3-0.4v-1.5l1.9,2.2l0.2,0h0l0,0c0-0.1,0-0.2,0-0.4v-1.7
c0-0.4,0.2-0.5,0.3-0.5h0.1h0v-0.1v0h0C4.6,20.6,4.5,20.6,4.3,20.6z"/>
<path class="st1" d="M7.4,20.5L7.4,20.5c0,0.1-0.1,0.1-0.2,0.1h-2h0c-0.1,0-0.2,0-0.2-0.1l0,0H5h0v0c0,0.1,0,0.2,0,0.3
c0,0.1,0,0.2,0,0.3l0,0H5h0l0,0c0.1-0.3,0.1-0.3,0.3-0.3H6v2c0,0.3-0.1,0.3-0.3,0.3H5.6h0v0.1v0h0c0.2,0,0.4,0,0.6,0
c0.2,0,0.5,0,0.6,0h0v-0.1v0H6.8c-0.2,0-0.3,0-0.3-0.3v-2h0.6c0.2,0,0.3,0.2,0.3,0.4l0,0l0.1,0l0,0v0c0-0.1,0-0.2,0-0.3
c0-0.1,0-0.2,0-0.3l0,0L7.4,20.5L7.4,20.5z"/>
<path class="st1" d="M9.7,22.6L9.7,22.6c-0.1,0.4-0.3,0.5-0.8,0.5c-0.2,0-0.4,0-0.4-0.2V22l0.4,0c0.3,0,0.3,0.1,0.3,0.4l0,0
l0.1,0l0,0v0c0-0.1,0-0.3,0-0.4c0-0.1,0-0.3,0-0.4v0H9.2h0l0,0c0,0.2-0.1,0.3-0.3,0.3H8.5v-1H9c0.4,0,0.4,0.2,0.4,0.4l0,0l0.1,0
l0,0v0c0-0.1,0-0.3,0-0.4c0-0.1,0-0.1,0-0.2v0h0c-0.3,0-0.7,0-1,0c-0.3,0-0.7,0-0.9,0h0v0.1v0h0.1c0.1,0,0.3,0,0.3,0.2v2
c0,0.2-0.1,0.2-0.3,0.2H7.7h0v0v0.1v0h0c0.2,0,0.7,0,1,0c0.3,0,0.8,0,1,0h0l0,0c0-0.2,0.1-0.4,0.1-0.6l0,0L9.7,22.6L9.7,22.6z"
/>
<path class="st1" d="M12.3,22.9l-0.6-1c0.3-0.1,0.5-0.3,0.5-0.7c0-0.6-0.4-0.7-0.9-0.7c-0.2,0-0.4,0-0.6,0c-0.2,0-0.5,0-0.6,0h0
v0.1v0h0.1c0.1,0,0.3,0,0.3,0.3v1.9c0,0.1-0.1,0.2-0.3,0.2H10h0v0.1v0h0c0.2,0,0.4,0,0.6,0c0.2,0,0.4,0,0.7,0h0v-0.1v0h-0.1
c-0.2,0-0.3,0-0.3-0.3V22h0.2c0.2,0.4,0.5,0.8,0.8,1.2c0.1,0,0.3,0,0.4,0c0.1,0,0.2,0,0.4,0h0v-0.1v0l0,0
C12.4,23.1,12.4,23.1,12.3,22.9z M11,21.9h-0.2v-1.1c0,0,0.1,0,0.2,0c0.3,0,0.5,0.2,0.5,0.5C11.6,21.7,11.4,21.9,11,21.9z"/>
<path class="st1" d="M15.8,20.7v-0.1v0h0c-0.2,0-0.3,0-0.5,0c-0.2,0-0.4,0-0.5,0h0v0.1v0h0.1c0.1,0,0.3,0,0.3,0.3v1.4l-1.7-1.9
c-0.1,0-0.2,0-0.3,0c-0.1,0-0.3,0-0.4,0h0v0.1v0h0.1c0.2,0,0.3,0.1,0.3,0.3v1.6c0,0.3-0.1,0.5-0.3,0.5h-0.1h0v0.1v0h0
c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0h0v-0.1v0h-0.1c-0.3,0-0.3-0.1-0.3-0.4v-1.5l1.9,2.2l0.2,0h0l0,0c0-0.1,0-0.2,0-0.4v-1.7
C15.4,20.8,15.6,20.7,15.8,20.7L15.8,20.7L15.8,20.7z"/>
<path class="st1" d="M18.2,23c0-0.1-0.1-0.3-0.1-0.4l-0.7-2c0,0,0-0.1,0-0.1c0,0,0,0,0,0c0,0,0,0,0,0c-0.1,0-0.2,0.1-0.3,0.2
c0,0.2-0.1,0.3-0.2,0.5l-0.6,1.7c-0.1,0.2-0.2,0.2-0.3,0.2h0h0v0.1v0l0,0c0.1,0,0.3,0,0.4,0c0.2,0,0.3,0,0.5,0l0,0v-0.1v0h-0.1
c-0.1,0-0.3,0-0.3-0.1c0-0.1,0-0.2,0.1-0.3l0.1-0.4h0.8l0.1,0.4c0,0.1,0.1,0.2,0.1,0.3c0,0.1-0.1,0.1-0.2,0.1h0h0v0.1v0l0,0
c0.2,0,0.4,0,0.6,0c0.2,0,0.4,0,0.5,0l0,0v-0.1v0h0C18.3,23.1,18.2,23.1,18.2,23z M16.6,22.1l0.3-1l0.3,1H16.6z"/>
<path class="st1" d="M20.7,20.5L20.7,20.5c0,0.1-0.1,0.1-0.2,0.1h-2h0c-0.1,0-0.2,0-0.2-0.1l0,0h-0.1h0v0c0,0.1,0,0.2,0,0.3
c0,0.1,0,0.2,0,0.3l0,0h0.1h0l0,0c0.1-0.3,0.1-0.3,0.3-0.3h0.6v2c0,0.3-0.1,0.3-0.3,0.3h-0.1h0v0.1v0h0c0.2,0,0.4,0,0.6,0
c0.2,0,0.5,0,0.6,0h0v-0.1v0H20c-0.2,0-0.3,0-0.3-0.3v-2h0.6c0.2,0,0.3,0.2,0.3,0.4v0l0.1,0l0,0v0c0-0.1,0-0.2,0-0.3
c0-0.1,0-0.2,0-0.3l0,0L20.7,20.5L20.7,20.5z"/>
<path class="st1" d="M21.5,20.6c-0.2,0-0.4,0-0.6,0h0v0.1v0H21c0.1,0,0.3,0,0.3,0.2v2c0,0.2-0.1,0.2-0.3,0.2h-0.1h0v0v0.1v0h0
c0.1,0,0.4,0,0.6,0c0.2,0,0.4,0,0.6,0h0v-0.1v0H22c-0.1,0-0.3,0-0.3-0.2v-2c0-0.2,0.1-0.2,0.3-0.2h0.1h0v-0.1v0h0
C21.9,20.6,21.7,20.6,21.5,20.6z"/>
<path class="st1" d="M23.6,20.5c-0.8,0-1.4,0.6-1.4,1.4c0,0.8,0.6,1.4,1.4,1.4c0.8,0,1.5-0.6,1.5-1.5
C25.1,21,24.4,20.5,23.6,20.5z M23.7,23.1c-0.6,0-0.9-0.6-0.9-1.3c0-0.5,0.2-1.1,0.8-1.1c0.6,0,0.9,0.7,0.9,1.2
C24.5,22.5,24.4,23.1,23.7,23.1z"/>
<path class="st1" d="M28.2,20.7v-0.1v0h0c-0.2,0-0.3,0-0.5,0c-0.2,0-0.4,0-0.5,0h0v0.1v0h0.1c0.1,0,0.3,0,0.3,0.3v1.4l-1.7-1.9
c-0.1,0-0.2,0-0.4,0c-0.1,0-0.3,0-0.4,0h0v0.1v0h0.1c0.2,0,0.3,0.1,0.3,0.3v1.6c0,0.3-0.1,0.5-0.3,0.5h-0.1h0v0.1v0h0
c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0h0v-0.1v0h-0.1c-0.3,0-0.3-0.1-0.3-0.4v-1.5l1.9,2.2l0.2,0h0l0,0c0-0.1,0-0.2,0-0.4v-1.7
C27.8,20.8,28,20.7,28.2,20.7L28.2,20.7L28.2,20.7z"/>
<path class="st1" d="M30.6,23c0-0.1-0.1-0.3-0.1-0.4l-0.7-2c0,0,0-0.1,0-0.1c0,0,0,0,0,0c0,0,0,0,0,0c-0.1,0-0.2,0.1-0.3,0.2
c0,0.2-0.1,0.3-0.2,0.5l-0.6,1.7c-0.1,0.2-0.2,0.2-0.3,0.2h0h0v0.1v0l0,0c0.1,0,0.3,0,0.4,0c0.2,0,0.3,0,0.5,0l0,0v-0.1v0H29
c-0.1,0-0.3,0-0.3-0.1c0-0.1,0-0.2,0.1-0.3l0.1-0.4h0.8l0.1,0.4C30,22.9,30,23,30,23c0,0.1-0.1,0.1-0.2,0.1h0h0v0.1v0l0,0
c0.2,0,0.4,0,0.6,0c0.2,0,0.4,0,0.5,0l0,0v-0.1v0h0C30.7,23.1,30.6,23.1,30.6,23z M29,22.1l0.3-1l0.3,1H29z"/>
<path class="st1" d="M33,22.6L33,22.6c0,0.1-0.1,0.2-0.1,0.3c-0.1,0.1-0.2,0.2-0.4,0.2c-0.1,0-0.2,0-0.3,0c-0.1,0-0.1,0-0.2,0
c-0.1,0-0.2-0.1-0.2-0.2v-2c0-0.2,0.1-0.2,0.2-0.2h0.1h0v-0.1v0h0c-0.2,0-0.4,0-0.6,0c-0.2,0-0.4,0-0.6,0h0v0.1v0H31
c0.1,0,0.3,0,0.3,0.2v2c0,0.2-0.1,0.2-0.3,0.2H31h0v0.1v0h0c0.3,0,0.7,0,1,0c0.3,0,0.7,0,1,0h0l0,0c0-0.2,0.1-0.4,0.1-0.6l0,0
H33L33,22.6z"/>
<path class="st1" d="M33.1,20.5c-0.2,0-0.4,0.2-0.4,0.4c0,0.2,0.2,0.4,0.4,0.4c0.2,0,0.4-0.2,0.4-0.4
C33.5,20.7,33.3,20.5,33.1,20.5z M33.1,21.2c-0.2,0-0.3-0.2-0.3-0.3c0-0.2,0.1-0.3,0.3-0.3c0.2,0,0.3,0.2,0.3,0.3
C33.4,21.1,33.3,21.2,33.1,21.2z"/>
<path class="st1" d="M33.1,20.9c0.1,0,0.1-0.1,0.1-0.1c0-0.1-0.1-0.1-0.1-0.1h-0.2v0c0.1,0,0.1,0,0.1,0.1v0.3c0,0,0,0-0.1,0v0
h0.2v0c0,0-0.1,0-0.1,0v-0.1L33.1,20.9c0,0.1,0,0.2,0.1,0.2h0.1v0C33.3,21.1,33.2,21,33.1,20.9L33.1,20.9z M33.1,20.9L33.1,20.9
l0-0.2h0c0,0,0.1,0,0.1,0.1C33.2,20.9,33.1,20.9,33.1,20.9z"/>
</g>
<g>
<path class="st1" d="M9.3,7.1c0-3.6,2.9-6.4,6.4-6.4s6.4,2.9,6.4,6.4s-2.9,6.4-6.4,6.4S9.3,10.6,9.3,7.1"/>
<path class="st2" d="M15.8,13.6c-3.7,0-6.7-3-6.7-6.6c0-4,3-6.7,6.7-6.7h1.7c3.7,0,7,2.8,7,6.7c0,3.6-3.3,6.6-7,6.6H15.8z
M15.8,0.8c-3.4,0-6.1,2.7-6.1,6.1c0,3.4,2.7,6.1,6.1,6.1c3.4,0,6.1-2.7,6.1-6.1C21.9,3.6,19.2,0.8,15.8,0.8 M14.4,10.5V3.3
c-1.5,0.6-2.5,2-2.5,3.6C11.9,8.6,13,10,14.4,10.5 M19.7,6.9c0-1.7-1-3.1-2.5-3.6v7.2C18.6,10,19.7,8.6,19.7,6.9"/>
</g>
</g>
</g>
</switch>
<i:aipgf id="adobe_illustrator_pgf" i:pgfEncoding="zstd/base64" i:pgfVersion="24">
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
VO3sNnSxORaNAEKrMvoyRiA3C6lYwzxsZzvkIpNZTBCPwBKONgQfwSM0qQwgqDy2PLVEFVlAQ1RJ
2CpLNjnblHQbVhBFAlYbsNs0DZGAbkvYCLQyE23Qbd2GMFGsqTDQbSFUVFceosAUiiDqwsKBGEm8
BEFrcUe3GUQau6Iq2JQWDyyCLaan4VpKjWv0kSrf64I2Bl7W7IWRpcESNfkA9Qx4PDXb+OAzEaZu
m2RQ6AOJcbCQILOpaLoEdBgQyYuPBh4LCFjoaIwUxINIWjQQMobSWL5NK20wM9HniUBpHB4QDiwM
kBGFT0AY1bUEnXq0saG/wnRsXNtria/pNpOmHGjOWRmxeLZHwWgIDFaWip1FLASnS0IG23oJOZrT
dK9ByAjdU+AL3Y1EgJHDjsq75YAZ+hyTTMzGPIwH5ghkLLmGAiAsxwwU9W4DHxC6TWaAwRLsSLcH
7rYZ54G77WHBuafMQkV8K/VAFEi8BBGQMPAaHl4RRMOh4CG6zYFhcskdTk5hE2XGKmYlX5aCr9Mq
lYJQdQlGCeljPBR4mcF7h0jCbmuJuk0MI7fbuo0A7TaXZNVtpnTsNk+3YWox0Ou2bnNsIJQGLp26
XiKgqxbAUXgaQtZo8TXgVnyN5SwFZoIxGZOKANqINYxAKhEQQHAyLXs+UDB48SsEn4mWQqicmkNW
OB8YI3ebaa68uzAPdoUzeTC/hRu53TYa8CyEk01GnQoaI8UWtgFRzKKEAHK6rdtGMU9A5TakKE2C
QK0YnNBtqAsCImQoTG4wSkPLmANLbGCzwTBgFp+AbgO7zTyBFbYBXzP0q9iFzbEwmErkBixBCgEO
E4czE1n5zK9wcOZCwngawhOxOZYPJf0qINIlIUO6tb3BNZ/5BAqC1KXbLgKcY6lwzrH8kKhh0l0U
U+ycVUYBkhFvRA6jD6KqBpWXLOBez9dple6IeGxBJyuwIMQorTTxs6OI7rb9yQ2IIL2klDRSjNa6
3G2nUaNUSX20shLLpMRMRXSIXEe3jVSj7dzTBXcbXsxcEMSZUDqwvBRgXgZVcNADGwKW3KEuiGhC
Oc9XAU9lEAcpStNtnYFPqTKWGj3m3eoZLItg1EACtNsMHI7YBTZmJpURaNJtlcojgiCZQhHEKVl5
iE8M9BCgxidBgGa0CEJA0YAQaHAEcakrD/EVCB4InjI0oMi9k1a31A/Fy7/i2Nxy5DD6ui1FfauL
AClkpRPQoVUqp5YqpROIVtpgtzHAAIqX+KBcDSYUVthtoMNtWYU1fSwoyJRZztMGP5QGgkIAPVzT
gPcTYWHFodaALzILR1cY5nJJjAaFyToYy2ehVS5MxMkwOIQHFhQmzBMGWmZSWSw46HWbTz0UKY4N
0Aehb2Bh8rGOz0DbqFVKzKgwYZ4oZowWxiAS0G0YxGnJp5NjVmimRqlyMjSwsGJWGDISAYcixbGV
8aB4joipw3Foal0E4wWAMKopBSsMVigMnJhGAwIdoQYtzEJjDiwgAVeBRcGJoDSqcqAVnqlRxXQb
6sUQUIGgVvjRAaluRJMYMvcsu9fHITe0qqEIVBKOGsni4QsdjOMh4MCS2hujaaiICi4lBrWeIsWx
ZWiDHshCaNnuNPBZb0GCwZATAQqorBKxz54GPhs2mN0rwVLI1IYoZkAjDq2/EDWSJXb+MQBt9Iph
KBuxSxjOFNxnf8kPlOaz3SaRrbrc+CyQu8CMr+9iBiUGeghbVx6CwaCUIEAS9kA4SLwEEblAHohQ
gyMIgrryHg4FD+FhoSIIjSY9RLdVHAoegqDxSRB4hImkskfMNryDbilAKO0KpAAsLbPZQnI3BJdY
pUw5hD7Ew2FXCCwLIwtHg0DJ3WZwFiTE2wA7EZKOJoFqPIbMfWCAuiTDMHIaAb5vfuvHfWPtP8hi
XnvnuH6c7+8f14+3Fa4fc7vbX7W3dtePLf9b2D+vH//9c/24b4w9qO+qtzDfurnsd8bV41873la1
49uzrZ3n36vOdctyv7Xv/LfmlWPsf924bvwzrhv73v2vGnfc+bfcV41v3xakNf/V/1s31pnrjL/1
9u6PMa8/Y4591Thjfbu9deP6udz1rhtz/uvPmNeNsfW8brytcre2142tvVn3ujG3u/4btD+2v/4t
3L1ujO/9deNub+WY47Dn67PHtmqcse69YpxvvVhfbnnd1t/aMa8e21stznhb6d0rxlrz+nGuGXNd
P+ex95z7mnHH9XMZY78tKPPdQ+6rxv56fqvGfpW19RXja7Gu3/9fL97X++q3lccW1+59r5vzvlrc
ffb1Yq3zvr9iXDOu+2b/6wbpX3fHXleNN5nFv+qNca4a46yx1rXfj/PGtu66K7/c7r5uvn/l+etc
e+V3Z+5z5Xdb1f4//z3Xfr3+vte+ref9a97vBsq6Y2urv1v4d/6V137x5h33Xvv1e3O8ve+29nsv
/phv/3vl+PbOtef81o73313nyiv//+/KtxWuO/N9q797+1773Va88vtt17xqnnWu/HZ//66b89hW
frfw6mt97vpWfje/ddufceX3+7srv5vs2tx71R/b2u/W2sJvva/6dr8997hqj/P/v+brLdcd8207
yOe8teYZlG3mvf+a88X6317z1xnbrC+v+ea/bee/d6/xrfpuq6u+2+p6z/XdVd/sd7768g7y94Zc
76qvttriXnXW+tqrdd3X68svr/tyG+vcvc6+7ot9t93fu+u+W1+N719pW/fFfmebf9U339otvvlz
7POu+ub9s/Wd5+6rvjx72c35b47rxqstbG2r/P/91d6Oed3byn6vu628a6517fzzaq+9Fd+s++ad
V3xrX22b7+2V13y5/5xXrjHvmP/LPQhjnLffGO98Nf79Vu6t5hvXe++um8v943qv37hrr7XHFd9f
tf791t33vv1/bX3WdXMbf4xrvluoc90153x/1VzW29qar+f3dssrvpus6mwrvq0NFNqbcbX3a8ux
//X//LPvuv4NBOIY17+F3OtdP2gLM//dV45/x5fv7nn92ypza7W29Vvsq//Y5o9r30D2cp+v7T7r
j/2ufgu597ZXn7mu/lp/cfXb6tfe9e2156sz5rr2DaQ3B9mLe84c5107aAuxzRj/yq3X1t+sscad
145r33/XvoH+xz5vof387tr55xzX3vmuXXPba9fb176F//J8L9ae++xBWmfftzB3nGvPuHrr9eW1
65t59V5v3X/120r7rr3FPttqr64dhD/uvnLsNa722o6tBvm/tedW417tx1trC7/Vn/fKtxXuuHJ8
vcW2cvw973VvINDeQmuz5nhfbr3Pvm7QFv7Mf+W349r79v3Xra++uXafdfd1b6Cfuc1bb+Hmu/at
L6+b2/1nzmvXPutf9++1651z5VuYf7/+Z54rz/tu7Wu3H19ducd668q3lf9eV47x9rXf/rfGu3K8
vb0exLvevfYtxNpzW/f92edd+edaY+995RvIW86zl3G75253t7b2u7W2Ve+ad1s57zj7b7fu+/66
+97Z28q3VeeX12+/tlpXrj/X2+p3fL+t3/LK7d/Wa135JtP32vyrx5UjQLbWBgo3GYazrW3V98a2
Yr0/r3dbaWs7z/Xi3jmvOvuqvfbV4u+r/t1vIJ7r3sL8Me/V447xz/V3W6/duf6dQVuI9bW92qs9
5tf/ardVv9jrjevFu36vd72/3m3V/+6b64o/93nXv3vHVW+r7ce5+m31va2d858r57ju++/fvupN
9vvOevOqPd78+lzxvQiQrdxA4eWZa423xzb3ivX1GPuKs9cVW1xz9jp7X3HWv+LLr635Y41rzndf
bXfHtmZ9O/YYY/9vtjVzu1/e+7U1a7x3/+Hvf/+Kr/0V5w2kcdbc8qy/rTnz/7Xu2W9ta/a+a7s7
B4Ub/9y79RV/jm2322LLNe7+grzWGH/Pb8a84o5t9ncrtxWu2e/cr645e9x/xzXnbeW/3RVvq96t
rRn7XnG+v+b+L7YWw90apNxA/etv/cX9Z59BHvPb68ebDHN+Na/X1o/DvO/Ft+Zse/5W+9x9xX/f
mvPueeebva05Y/v/9zr7ikE825rzJsvY1lwzv5xv7qvN/vp8f78gzfXdeGtd9xZqv7/Wt/Zq8+5b
c3s/tr7azDH+19abt9X/Xf+O681X285117VzPuvcO9b5buzrzd9+rT23nH9vK9d1c9lm/H+uOOe8
tbcV501WNeet1nfnXG/2Gf+L8cVV45wr3l133+vl/Na2f8s5xxnXa73dVev8sc9V423Vdf+7Wp59
37xmfLG//++acd9/74zr/X9rzr3Puev7a+9aX6yz7RZ377nuFWNb8/bX6l8x3mT9Wltz9jn/XTNe
4X151rd/q3/VoM65ztbrurdQ65tx97h+rvvP2O9efe764/q5jfnm/Vu7va/334v7tRVvq40tx9rm
iv/1+ub6Ofb8681r5rn6bWUxt7Vv76+tvGec9ddVX921/7/mTaa7vZb77qvmds/af287x9zristt
1b21v/Kc9eccdHneX1d8t3Bbe33lXN78ft5xvdfajvXNtXMeY3t5rvfefffmH+t9va34esxr5zK3
mvO9Lc5dV3wx1rn2vbX/lV/9v+cV663cQKCrrb+cV8ztnv/21nu8f+V3A2W+Ocbdaqw9rv1usuut
t5rXy218eeV3Qy1c3spt5b3ePfN9d965e+xzvdvyrTvvFfvN/99Wn1+Nd9YVe935/Xlv/H+9nM/f
3u77zd7vevu9+/9/+cVf//7z7p5rmzHPF9t67wayOOd9sd++3i3U/Pp7ed+dd+7v9tVebuOb9+c9
X875r5jbmNufrf3V3py73l7/au8m69Zmv/uvmPP+dp453vpuWy9q4bbdatto4e4GABNnNwtnN1S3
BaSnBWW5x0VxEw7TQUhPy4fqtoyFu1sJ4h6Xc2wqEGc5uznL7Y05jy/3+z3HAIggVplB3buBA0Al
BA6FQreVoQ12W7d13VbDvS3utg9XSQR7OG/w9MLQgObkr9vw/VIca7/6SSKf94m+8LNJoAqOI91m
I1+kgCLWTofDoJJfNRKJRFKPSLdd+3hUSbd1m/dwPL4v9hdZ7AULNQYSikmVEa9hgeJ4iI2GIsVJ
USjDBr2MQhtqyXTBkeqwud0WwSTEexcCGFkSwJC5MXOA3DhgG4vIZNJAzA0FTCQ4+fQdmJOhLEIv
A4s8Sii2hAlEgcbcFRRloQ14tMRSIafUQe8j2KD3TWabe2IcFK/bJAQb9CTVwSOADGwoHhvOIrd+
Nuh1wM/SRhVw1oWR+0mVNnI/jJCzwe7jKFSHza20v8gVzgY9WzJdMEOE4032Q++KdhtDlIB9MZMp
CppaqASzZZShYE+DkKEREAEwIAGzEgAgGDQaD0pG0wk1vQMUgAJBOihKTlAyNB6TiUPCSCgMB8RY
jMIojqIojMSYYgoyGwSkR/Kee3NPFKU5hZEjM/pEUy6JdOamZYAn2yq3jHGxdNF+9w==
]]>
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
uvP4yBXo0j25QJPwb5+Pzh6f8fOH0Wodi9ATsgv5XNZQa66AbTT1a7GFPN+zCvNIuBmPq1vtj6Mj
fjueOWcMhZ8I0AmiB3pmzCK3WXIzTr/qA5EyIJuQDj0hUAnfmqfoCUVGMS7muMg9L8GaT2NjYnqh
jeGDcuSfLzEM5P67Vfz/FPVYQ0o+mnC9B9YCWtcVX8rZGUCPgiGX0RwB4UqsOqcw8GKaYj4+cj1w
FOIwBHcFhe1Ak5tKeCxq2KM0BCi7Qa3ut4rrKcviKKirmjBfYQ9/eEnxnbrJpM+Ien5WoZIFgP8j
+410HTwBDjtSSkSz0LpYrVxJ5p+Eufx7G6vxsZp1wm21shXK6cRxCnLfWbYCpD6uM9miaUAYAaSq
nZAvJmbhgTI1ioIVwVo5kyXVSpkceZchOjb4I6Jy4ETW2w+vYpqBSa5T6JBnJV/i5kTloJOXT0eO
zzBg3UkNHuRBDfK3NKwD
]]>
</i:aipgf>
</svg>

After

Width:  |  Height:  |  Size: 62 KiB

View File

@ -1,196 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 20">
<g>
<circle fill="#FFFFFF" cx="4.29324" cy="10.07366" r="4.11485"/>
<g>
<path fill="#FFFFFE" d="M12.06619,10.20376c1.58688,0,1.84668-1.11611,1.84668-1.56005c0-0.79398-0.63216-1.56882-1.79285-1.56882
c-0.33194,0-0.58746,0.0083-0.77567,0.0083c-0.175,0-0.35428,0-0.52886-0.0083v0.11598
c0.2015,0.00457,0.41214-0.02203,0.41214,0.38119v2.17447c-0.01319,0.30469-0.14372,0.31342-0.41214,0.34045v0.1168
c0.2015-0.00414,0.39896-0.00872,0.60077-0.00872C11.62662,10.19504,11.83798,10.20376,12.06619,10.20376z M11.66682,7.23617
c0.08106-0.005,0.16586-0.01787,0.3497-0.01787c0.86526,0,1.40305,0.60523,1.40305,1.44326
c0,0.66802-0.31779,1.39838-1.28647,1.39838c-0.21937,0-0.46628-0.03991-0.46628-0.38533V7.23617z"/>
<path fill="#FFFFFE" d="M14.55004,7.4648c0.12076,0,0.21969-0.10309,0.21969-0.22404c0-0.12141-0.10351-0.21576-0.21969-0.21576
c-0.11244,0-0.22,0.10351-0.22,0.21576C14.33003,7.35712,14.43302,7.4648,14.55004,7.4648z"/>
<path fill="#FFFFFE" d="M15.02912,10.20376v-0.1168h-0.07608c-0.1251,0-0.22404,0-0.22404-0.14841V8.21761
c0-0.03576-0.00916-0.06237-0.03119-0.06237c-0.02285,0-0.04925,0.00459-0.08085,0.02203
c-0.01807,0.01416-0.26894,0.09852-0.47989,0.16172V8.4109c0.16626,0.08896,0.23319,0.11596,0.23319,0.31343v1.21421
c0,0.14841-0.08946,0.14841-0.21512,0.14841h-0.08501v0.1168c0.16586-0.00414,0.32715-0.00872,0.48854-0.00872
C14.71983,10.19504,14.87675,10.20376,15.02912,10.20376z"/>
<path fill="#FFFFFE" d="M17.40997,10.08696h-0.08085c-0.12512,0-0.22406,0-0.22406-0.14841V8.78253
c0-0.34961-0.13427-0.62729-0.51545-0.62729c-0.30033,0-0.52004,0.15215-0.77609,0.3363V8.19932
c0-0.03535-0.01309-0.04408-0.0266-0.04408c-0.21533,0.09354-0.39906,0.15215-0.59152,0.21492v0.08562
c0.21055,0.08481,0.2598,0.12971,0.2598,0.29515v1.18761c0,0.14841-0.08937,0.14841-0.21472,0.14841h-0.08125v0.1168
c0.16129-0.00414,0.32299-0.00872,0.48385-0.00872c0.16172,0,0.31907,0.00872,0.47599,0.00872v-0.1168h-0.08064
c-0.12555,0-0.2249,0-0.2249-0.14841V8.61251c0.14862-0.09895,0.37682-0.21534,0.52043-0.21534
c0.25566,0,0.41218,0.12512,0.41218,0.3812v1.16017c0,0.14841-0.08918,0.14841-0.2147,0.14841h-0.08086v0.1168
c0.1615-0.00414,0.32278-0.00872,0.48447-0.00872c0.16088,0,0.31758,0.00872,0.47494,0.00872V10.08696z"/>
<path fill="#FFFFFE" d="M18.24862,10.2709c0.36747,0,0.6227-0.23301,0.82908-0.50652l-0.06276-0.06276
c-0.16545,0.16586-0.35873,0.30053-0.60545,0.30053c-0.35832,0-0.63226-0.34959-0.65846-0.77569
c-0.00955-0.15256-0.00955-0.21947,0-0.2598h1.25912l0.04095-0.02701c0.00396-0.02703,0.00396-0.05364,0.00396-0.08107
c-0.00396-0.47512-0.39449-0.70335-0.75781-0.70335c-0.31342,0-0.90494,0.25981-0.90494,1.13857
C17.39231,9.58065,17.5355,10.2709,18.24862,10.2709z M18.2794,8.29825c0.25105,0,0.3899,0.18373,0.3899,0.41278
c0,0.05362-0.01308,0.11181-0.12472,0.11181h-0.78043C17.81797,8.49986,18.00626,8.29825,18.2794,8.29825z"/>
<path fill="#FFFFFE" d="M20.31915,10.20376v-0.1168h-0.25087c-0.12573,0-0.21511,0-0.21511-0.14841V8.88602
c0-0.26935,0.25108-0.37246,0.32715-0.37246c0.15671,0,0.15671,0.10808,0.29597,0.10808
c0.12595,0,0.21055-0.10808,0.21055-0.22903c0-0.1617-0.14322-0.23737-0.25522-0.23737
c-0.27333,0-0.46186,0.28684-0.57346,0.46143h-0.00956V8.21345c0-0.04531-0.01351-0.05821-0.03991-0.05821
c-0.04052,0-0.22033,0.11641-0.54747,0.25566v0.06651c0.06734,0.03615,0.2328,0.06318,0.2328,0.20201v1.25912
c0,0.14841-0.08896,0.14841-0.2143,0.14841h-0.12156v0.1168c0.16168-0.00414,0.34979-0.00872,0.53373-0.00872
C19.88477,10.19504,20.07265,10.19961,20.31915,10.20376z"/>
<path fill="#FFFFFE" d="M21.44922,10.1277c-0.32735,0-0.50653-0.25149-0.56532-0.54705L20.80343,9.6031l0.04927,0.51587
c0.15692,0.08937,0.36727,0.15193,0.54727,0.15193c0.53332,0,0.77087-0.31405,0.77087-0.60961
c0-0.70376-1.03983-0.54207-1.03983-1.06709c0-0.19246,0.17002-0.29596,0.34939-0.29596c0.28702,0,0.44416,0.1617,0.48885,0.44394
h0.10308l-0.03158-0.45724c-0.1748-0.08937-0.36748-0.12971-0.51067-0.12971c-0.49301,0-0.69503,0.32217-0.69503,0.57365
c0,0.72123,0.97647,0.55162,0.97647,1.08039C21.8115,9.96598,21.71339,10.1277,21.44922,10.1277z"/>
<path fill="#FFFFFE" d="M26.1205,10.03332l0.10269-0.6547l-0.10269-0.0266C26.03073,9.823,25.66286,10.1277,25.2191,10.1277
c-0.68963,0-1.33623-0.65015-1.33623-1.55634c0-1.07539,0.74885-1.42041,1.26493-1.42041
c0.50154,0,0.87379,0.21075,0.9588,0.73494h0.11203l-0.0447-0.64099c-0.3452-0.12098-0.69441-0.23777-1.05771-0.23777
c-0.87897,0-1.6987,0.6593-1.6987,1.57837c0,1.00846,0.6628,1.68541,1.71157,1.68541
C25.42507,10.2709,25.93221,10.15014,26.1205,10.03332z"/>
<path fill="#FFFFFE" d="M27.33973,10.20376v-0.1168h-0.07608c-0.12552,0-0.22445,0-0.22445-0.14841V6.84169
c0-0.03619-0.00853-0.0632-0.03576-0.0632c-0.0133,0-0.04947,0.02286-0.09852,0.04947
c-0.09438,0.05446-0.28267,0.13468-0.46183,0.19289v0.07189c0.17044,0.04906,0.23777,0.05821,0.23777,0.35002v2.49578
c0,0.14841-0.08979,0.14841-0.21534,0.14841h-0.08562v0.1168c0.16669-0.00414,0.32798-0.00872,0.48885-0.00872
C27.03067,10.19504,27.188,10.20376,27.33973,10.20376z"/>
<path fill="#FFFFFE" d="M27.60867,8.59007v1.14812c0,0.37621,0.25067,0.53272,0.4926,0.53272
c0.31842,0,0.52542-0.15651,0.79398-0.37599v0.36269l0.02202,0.0133c0.08584-0.02681,0.4531-0.12076,0.6464-0.13863V10.0379
c-0.05821,0-0.12595,0.00417-0.17959,0.00417c-0.07646,0-0.12532-0.00417-0.12532-0.08522V8.30323
c0-0.04947,0-0.08064-0.03596-0.08064c-0.04449,0-0.29597,0.03536-0.69919,0.06237v0.08064
c0.16086,0.04531,0.37599,0.09436,0.37599,0.18373v1.20674c-0.1881,0.15587-0.38993,0.27269-0.54185,0.27269
c-0.38993,0-0.38993-0.38576-0.38993-0.52003V8.35229c0-0.09853,0-0.12971-0.04967-0.12971
c-0.05881,0-0.4163,0.0262-0.578,0.03118v0.08523C27.5906,8.36101,27.60867,8.47326,27.60867,8.59007z"/>
<path fill="#FFFFFE" d="M29.79167,7.44277V9.3699c0,0.27311-0.02267,0.53374-0.06215,0.79812l0.09374,0.04904l0.13446-0.10266
c0.11682,0.04905,0.2912,0.15651,0.6227,0.15651c0.64185,0,1.07206-0.58759,1.07206-1.17453
c0-0.48803-0.31384-0.94113-0.83386-0.94113c-0.24631,0-0.48885,0.17045-0.66822,0.32217V6.84169
c0-0.03619-0.00852-0.0632-0.03533-0.0632c-0.01393,0-0.05008,0.02286-0.09892,0.04947
c-0.09438,0.05446-0.28206,0.13468-0.46186,0.19289v0.07189C29.72474,7.14181,29.79167,7.15095,29.79167,7.44277z
M30.15041,8.60834c0.12119-0.10349,0.25979-0.21117,0.42648-0.21117c0.34939,0,0.71727,0.40323,0.71727,0.88708
c0,0.39906-0.2016,0.87005-0.68151,0.87005c-0.30097,0-0.46225-0.28681-0.46225-0.45726V8.60834z"/>
<path fill="#FFFFFE" d="M11.17172,11.18c-0.11939,0-0.26551-0.00956-0.36122-0.00956H10.7997v0.08399v0.00995h0.04488
c0.08846,0.00166,0.16921,0.00956,0.16972,0.12888v1.27783c-0.00051,0.11929-0.08125,0.12679-0.16972,0.12886H10.8105H10.7997
v0.01039v0.07315v0.01041h0.01081c0.09571,0,0.23913-0.00956,0.35862-0.00956c0.1213,0,0.2674,0.00956,0.38525,0.00956h0.01081
v-0.08355v-0.01039H11.5205c-0.08865-0.00208-0.16969-0.00957-0.17012-0.12886v-1.27783
c0.00043-0.11932,0.08148-0.12721,0.17012-0.12888h0.03388h0.01081v-0.08312v-0.01082h-0.01081
C11.43902,11.17044,11.29313,11.18,11.17172,11.18z"/>
<path fill="#FFFFFE" d="M13.31075,11.18c-0.11409,0-0.22664-0.00956-0.34157-0.00956h-0.01103v0.08314v0.01081h0.06442
c0.07141,0.00166,0.20069,0.02495,0.20193,0.21907v0.89707l-1.07175-1.20633C12.07035,11.17044,11.99968,11.18,11.92724,11.18
c-0.09207,0-0.18714-0.00956-0.28058-0.00956h-0.0106v0.08314v0.01081h0.04271c0.10465,0.00043,0.21136,0.07941,0.21179,0.20909
v1.02717c-0.00208,0.19456-0.04801,0.29806-0.2094,0.29931h-0.0345h-0.0106v0.08354v0.01041h0.0106
c0.11089,0,0.22293-0.00956,0.33172-0.00956c0.10422,0,0.2093,0.00956,0.31478,0.00956h0.011v-0.08398v-0.00996h-0.05247
c-0.18344-0.00248-0.21564-0.06278-0.21877-0.27519v-0.97728l1.23802,1.37966l0.1005,0.00375h0.01237l-0.00209-0.01247
c-0.01183-0.07441-0.01432-0.15962-0.01432-0.24442v-1.1103c0.0029-0.28724,0.10588-0.29639,0.2069-0.29931h0.03607h0.01111
v-0.08396v-0.00999h-0.01111C13.50988,11.17044,13.4097,11.18,13.31075,11.18z"/>
<path fill="#FFFFFE" d="M15.30576,11.09312l-0.00083,0.01124c-0.00417,0.0636-0.05384,0.06485-0.12159,0.06608h-1.25809
c-0.00487,0-0.00861,0-0.01277,0c-0.06235-0.00123-0.10703-0.00165-0.12386-0.06318l-0.00169-0.0079h-0.06691h-0.0103v0.01081
c0,0.06984-0.00487,0.13761-0.01474,0.20536c-0.00739,0.07107-0.02016,0.13926-0.02953,0.20743l-0.00166,0.01247h0.08533h0.00904
l0.00123-0.00831c0.04023-0.18042,0.03618-0.21035,0.21637-0.21409h0.3895v1.2928
c-0.00281,0.18913-0.05703,0.19079-0.19163,0.19413h-0.04644h-0.01018v0.08354v0.01041h0.01018
c0.09612,0,0.26644-0.00956,0.41258-0.00956c0.13103,0,0.30166,0.00956,0.39791,0.00956h0.00999v-0.08398v-0.00996H14.8911
c-0.11637-0.00248-0.18954-0.01538-0.19203-0.19953v-1.2874h0.3895c0.15401,0,0.16378,0.13302,0.17042,0.22447l0.00043,0.01456
l0.08645-0.03158l0.00709-0.00292v-0.00749c0-0.06568,0-0.13176,0.00498-0.19704c0.00707-0.06525,0.01663-0.13093,0.02618-0.19661
l0.00126-0.01039l-0.0686-0.01081L15.30576,11.09312z"/>
<path fill="#FFFFFE" d="M16.76337,12.46574l-0.00249,0.00996c-0.07336,0.27394-0.1908,0.2885-0.48471,0.29016
c-0.15919-0.00083-0.28681,0-0.28724-0.14841v-0.55826l0.28227,0.00042c0.16212,0.00207,0.16294,0.08354,0.17977,0.23238
l0.00083,0.01121l0.08504-0.01663l0.00872-0.00208v-0.00833c-0.005-0.09311-0.00789-0.1858-0.00789-0.27808
c0-0.09521,0.00288-0.18997,0.00789-0.28518v-0.01079h-0.08438H16.4518l-0.00083,0.00956
c-0.01683,0.13136-0.04135,0.20367-0.18227,0.20451h-0.27977v-0.6173h0.32884c0.25148,0.00209,0.27228,0.11722,0.28681,0.2752
l0.00042,0.0129l0.08563-0.02246l0.0079-0.00249v-0.00874c-0.00459-0.06941-0.00747-0.16169-0.00747-0.24565
c0-0.04657,0.00082-0.0898,0.00288-0.12638v-0.01082h-0.011c-0.16586,0-0.41924,0.00956-0.62396,0.00956
c-0.2043,0-0.4585-0.00956-0.6071-0.00956h-0.01081v0.08399v0.00995h0.04491c0.08811,0.00209,0.16876,0.00999,0.16957,0.12888
v1.27783c-0.00082,0.11929-0.08146,0.1272-0.16957,0.12886h-0.0341h-0.01081v0.00996v0.07358v0.01041h0.01081
c0.13926,0,0.42899-0.00998,0.64847-0.00998c0.21926,0,0.49965,0.00998,0.65639,0.00998h0.00872l0.00166-0.00873
c0.02203-0.12886,0.05091-0.25814,0.08251-0.38701l0.00229-0.00999l-0.07816-0.02037L16.76337,12.46574z"/>
<path fill="#FFFFFE" d="M18.38975,12.65779l-0.40966-0.61356c0.18789-0.07649,0.33381-0.21409,0.33381-0.43439
c-0.00083-0.35375-0.28414-0.4394-0.59112-0.4394c-0.13011,0-0.24755,0.00956-0.39283,0.00956
c-0.14882,0-0.2993-0.00956-0.37869-0.00956h-0.00999v0.08399v0.00995h0.05447c0.07565,0.00249,0.16046,0.00209,0.16212,0.17502
v1.23917c-0.00083,0.08231-0.07441,0.12055-0.16212,0.12138h-0.04448h-0.00999v0.08354v0.01041h0.00999
c0.12284,0,0.23694-0.00956,0.35356-0.00956c0.1382,0,0.27995,0.00956,0.41961,0.00956h0.01103v-0.08398v-0.00996h-0.05465
c-0.11287-0.00291-0.18666-0.00125-0.18915-0.18499v-0.51128h0.14402c0.15775,0.27891,0.31824,0.54081,0.50487,0.78648
c0.08501,0.00374,0.16337-0.00582,0.23734-0.00582c0.08045,0,0.15796,0.00956,0.23966,0.00956h0.01018v-0.08398v-0.00913
l-0.00894-0.00083C18.50013,12.78457,18.45792,12.75921,18.38975,12.65779z M17.96575,11.6252
c-0.00207,0.28351-0.12408,0.36705-0.36539,0.36956h-0.1087v-0.70667c0.03118-0.00334,0.06194-0.00914,0.12802-0.00914
C17.8319,11.28018,17.96451,11.41237,17.96575,11.6252z"/>
<path fill="#FFFFFE" d="M20.6646,11.26438v-0.08312v-0.01082h-0.0106c-0.10039,0-0.20057,0.00956-0.29992,0.00956
c-0.11391,0-0.22614-0.00956-0.34171-0.00956h-0.0106v0.08399v0.00995h0.06446c0.07086,0.00126,0.20118,0.02495,0.20138,0.21907
v0.89707l-1.07246-1.20716C19.11346,11.17044,19.04299,11.18,18.9711,11.18c-0.09188,0-0.1877-0.00956-0.2804-0.00956h-0.01142
v0.08399v0.00995h0.04301c0.10455,0.00043,0.21055,0.07898,0.21096,0.20909v1.02676
c-0.00166,0.19496-0.04802,0.29888-0.20909,0.29971h-0.03346h-0.01142v0.08354v0.01041h0.01142
c0.10954,0,0.22239-0.00998,0.33151-0.00998c0.10434,0,0.20909,0.00998,0.31468,0.00998h0.0106v-0.08398v-0.00996h-0.05177
c-0.18393-0.00248-0.21594-0.06235-0.21907-0.27519v-0.97728l1.23795,1.37966l0.10018,0.00375h0.01184l-0.00123-0.01247
c-0.01229-0.07524-0.01435-0.15962-0.01435-0.24442v-1.1103c0.00249-0.28724,0.10642-0.29681,0.207-0.29931h0.03597H20.6646z"/>
<path fill="#FFFFFE" d="M22.18061,12.70807c-0.03158-0.07191-0.06068-0.16211-0.08936-0.24733l-0.44957-1.27616
c-0.00729-0.01954-0.01476-0.04114-0.02224-0.06111c-0.00729-0.01287-0.02077-0.01495-0.0266-0.01454
c-0.00999,0-0.01642,0.00333-0.02329,0.00582c-0.04737,0.02951-0.14549,0.07855-0.22177,0.10516
c-0.02098,0.09686-0.06482,0.21824-0.09684,0.30887l-0.39094,1.11945c-0.03514,0.09892-0.11059,0.15089-0.20141,0.15089h-0.01434
h-0.01038v0.08437v0.01124l0.01078-0.00083c0.08731-0.00457,0.17522-0.00998,0.26273-0.00998
c0.09726,0,0.19704,0.0054,0.29472,0.00998l0.011,0.00083v-0.08438v-0.01122h-0.0372c-0.08105,0-0.1725-0.01455-0.17333-0.07399
c0-0.03949,0.02867-0.10393,0.05361-0.18749l0.07607-0.24607h0.53832l0.09271,0.27602
c0.02701,0.07732,0.04823,0.14424,0.0478,0.17209c0,0.04697-0.08355,0.05944-0.13966,0.05944h-0.02682h-0.01101v0.08437v0.01124
l0.01101-0.00083c0.12491-0.00457,0.2463-0.00998,0.36559-0.00998c0.11682,0,0.22634,0.0054,0.33547,0.00998l0.01164,0.00083
v-0.08438v-0.01122h-0.02516C22.25378,12.79912,22.20887,12.77335,22.18061,12.70807z M21.61215,12.13402h-0.4269l0.21472-0.65388
L21.61215,12.13402z"/>
<path fill="#FFFFFE" d="M23.78268,11.09312l-0.00042,0.01124c-0.00395,0.0636-0.05362,0.06485-0.12095,0.06608H22.4026
c-0.00437,0-0.00811,0-0.01247,0c-0.06194-0.00123-0.10682-0.00165-0.12408-0.06318l-0.00209-0.0079h-0.06608h-0.01103v0.01081
c0,0.06984-0.00457,0.13761-0.01454,0.20619c-0.00727,0.07024-0.01954,0.13842-0.02951,0.2066l-0.00166,0.01247h0.08605h0.00852
l0.00165-0.00831c0.03972-0.18042,0.03554-0.21075,0.21679-0.21409h0.38868v1.2928
c-0.00335,0.18913-0.05696,0.19079-0.19164,0.19413h-0.04656h-0.01019v0.08354v0.01041h0.01019
c0.09643,0,0.26687-0.00956,0.41278-0.00956c0.13137,0,0.302,0.00956,0.39719,0.00956h0.0106v-0.08398v-0.00996h-0.05695
c-0.11618-0.00248-0.18915-0.01538-0.19163-0.19953v-1.2874h0.3895c0.15422,0,0.1642,0.13302,0.17043,0.22447v0.01456
l0.08645-0.03158l0.0075-0.00292v-0.00749c0-0.06568,0-0.13176,0.00457-0.19704c0.00726-0.06525,0.0162-0.13093,0.02661-0.19661
l0.00206-0.01039l-0.06939-0.01081L23.78268,11.09312z"/>
<path fill="#FFFFFE" d="M24.30209,11.18c-0.11911,0-0.26561-0.00956-0.36082-0.00956h-0.0102v0.08399v0.00995h0.04427
c0.08835,0.00166,0.16899,0.00999,0.16939,0.12888v1.27783c-0.0004,0.11929-0.08105,0.1272-0.16939,0.12886h-0.03407h-0.0102
v0.00996v0.07358v0.01041h0.0102c0.09521,0,0.23923-0.00998,0.35873-0.00998c0.12159,0,0.26773,0.00998,0.38556,0.00998h0.00978
v-0.08398v-0.00996h-0.04387c-0.08915-0.00166-0.16961-0.00957-0.17044-0.12886v-1.27783
c0.00083-0.11889,0.08129-0.12721,0.17044-0.12888h0.03409h0.00978v-0.08396v-0.00999h-0.00978
C24.57,11.17044,24.42408,11.18,24.30209,11.18z"/>
<path fill="#FFFFFE" d="M25.65827,11.13346c-0.51254,0.00083-0.90954,0.3978-0.91077,0.91077
c0.00123,0.52999,0.40155,0.8854,0.92324,0.88666c0.5246-0.00126,0.93177-0.37828,0.9322-0.94528
C26.60208,11.45977,26.18204,11.13429,25.65827,11.13346z M25.65349,11.26232c0.39636,0.00041,0.58694,0.42399,0.58694,0.77775
c-0.00123,0.35541-0.08125,0.76194-0.54559,0.76237c-0.38576-0.00126-0.58403-0.40904-0.58443-0.84386
C25.11123,11.63394,25.2351,11.26273,25.65349,11.26232z"/>
<path fill="#FFFFFE" d="M28.62752,11.26438v-0.08396v-0.00999h-0.01038c-0.10141,0-0.20036,0.00956-0.30095,0.00956
c-0.11265,0-0.22573-0.00956-0.34048-0.00956h-0.01079v0.08399v0.00995h0.0636c0.07191,0.00166,0.20162,0.02495,0.20202,0.21907
v0.89707l-1.07145-1.20633C27.07618,11.17044,27.00593,11.18,26.9338,11.18c-0.09206,0-0.18724-0.00956-0.28078-0.00956h-0.00999
v0.08399v0.00995h0.04157c0.10518,0.00043,0.21139,0.07898,0.21139,0.20909v1.02717
c-0.00126,0.19456-0.0476,0.29806-0.20847,0.29848h-0.0345h-0.00999v0.08437v0.01041h0.00999
c0.11078,0,0.22281-0.00956,0.33212-0.00956c0.10435,0,0.2093,0.00956,0.31469,0.00956h0.0108v-0.08355v-0.01122h-0.053
c-0.1831-0.00208-0.21553-0.06152-0.21842-0.27435v-0.97728l1.2377,1.37966l0.10101,0.00375h0.01186l-0.00209-0.01247
c-0.01143-0.07441-0.01351-0.15962-0.01351-0.24442v-1.1103c0.00208-0.28724,0.1062-0.29639,0.20638-0.29931h0.03659H28.62752z"/>
<path fill="#FFFFFE" d="M30.14395,12.7085c-0.0318-0.07234-0.06129-0.16253-0.09041-0.24776l-0.44874-1.27616
c-0.0079-0.01954-0.01515-0.04156-0.02203-0.06068c-0.00788-0.0133-0.02077-0.01538-0.02678-0.01455
c-0.00977,0-0.01727,0.00291-0.0235,0.0054c-0.04697,0.02951-0.14506,0.07855-0.22199,0.10516
c-0.02119,0.09686-0.06525,0.21824-0.09643,0.30887l-0.39033,1.11945c-0.03533,0.09852-0.11183,0.15089-0.20286,0.15173h-0.01351
h-0.0106v0.08354v0.01124l0.0106-0.00083c0.08792-0.00417,0.17521-0.00956,0.26312-0.00956
c0.09686,0,0.19704,0.00539,0.29433,0.00956l0.011,0.00083v-0.08481v-0.00996H29.1384c-0.08064,0-0.17188-0.01538-0.17188-0.07524
c-0.00083-0.03907,0.02868-0.10309,0.05299-0.18707l0.07504-0.24607h0.53854l0.09246,0.27602
c0.02786,0.07773,0.04967,0.14424,0.04927,0.17209c-0.00042,0.04697-0.08459,0.06028-0.14133,0.06028h-0.0266H29.5965v0.08354
v0.01124l0.01081-0.00083c0.12428-0.00417,0.2467-0.00956,0.3658-0.00956c0.11596,0,0.22614,0.00539,0.33586,0.00956
l0.01082,0.00083v-0.08481v-0.00996h-0.02495C30.2165,12.79912,30.17265,12.77335,30.14395,12.7085z M29.5753,12.1336h-0.42691
l0.21428-0.65303L29.5753,12.1336z"/>
<path fill="#FFFFFE" d="M31.69386,12.45783l-0.00248,0.00833c-0.01435,0.05321-0.03576,0.12013-0.07339,0.17251
c-0.04239,0.0582-0.1276,0.11515-0.22654,0.1272c-0.06381,0.00665-0.12573,0.00955-0.1854,0.00955
c-0.04657,0-0.09228-0.00166-0.13489-0.00455c-0.07671-0.01125-0.13593-0.03536-0.13717-0.12638v-1.25829
c0.00205-0.12346,0.06129-0.11932,0.15566-0.12181h0.06152h0.00956v-0.08396v-0.00999h-0.00956
c-0.12512,0-0.24714,0.00956-0.37122,0.00956c-0.12884,0-0.25562-0.00956-0.38576-0.00956h-0.00995v0.08399v0.00995h0.04405
c0.08937,0.00166,0.1725,0.00999,0.17333,0.12845v1.25373c-0.00083,0.14507-0.08479,0.15131-0.17333,0.15339h-0.0341h-0.00995
v0.08354v0.01041h0.00995c0.21513,0,0.42985-0.00956,0.64495-0.00956c0.21387,0,0.42837,0.00956,0.64328,0.00956h0.00809
l0.00251-0.0079c0.0295-0.13926,0.06317-0.27561,0.09041-0.41487l0.00249-0.0133h-0.08355H31.69386z"/>
<path fill="#FFFFFE" d="M31.81586,11.43608l-0.042-0.05904c0.03576-0.01121,0.06071-0.03907,0.06071-0.07772
c0-0.04614-0.04178-0.06817-0.08645-0.06817h-0.13179v0.0133c0.03367-0.00166,0.03658,0.00747,0.03658,0.0345v0.18997
c0,0.01995-0.00624,0.01871-0.03741,0.02286v0.01287h0.12386v-0.01287c-0.03115-0.00416-0.03698-0.00291-0.03698-0.02037V11.3866
h0.02827c0.04739,0.06737,0.06816,0.11806,0.09206,0.11806h0.0501v-0.0083C31.85807,11.48762,31.83582,11.46227,31.81586,11.43608
z M31.7323,11.36915h-0.02992V11.2486h0.02827c0.02598,0,0.05031,0.01413,0.05031,0.05529
C31.78096,11.3442,31.76556,11.36915,31.7323,11.36915z"/>
<path fill="#FFFFFE" d="M31.74312,11.11183c-0.14654,0-0.2569,0.11308-0.2569,0.25732c0,0.14423,0.11035,0.25605,0.2569,0.25605
C31.89005,11.6252,32,11.51338,32,11.36915C32,11.22491,31.89005,11.11183,31.74312,11.11183z M31.74312,11.5774
c-0.11577,0-0.20369-0.09769-0.20369-0.20825c0-0.11057,0.08792-0.20952,0.20369-0.20952
c0.1166,0,0.20327,0.09895,0.20327,0.20952C31.94639,11.47971,31.85807,11.5774,31.74312,11.5774z"/>
</g>
<path fill="#004A98" d="M4.29896,14.26192C1.94076,14.27314,0,12.36265,0,10.03707c0-2.54152,1.94076-4.29945,4.29896-4.29905
h1.10509c2.33016-0.0004,4.45701,1.7567,4.45701,4.29905c0,2.32475-2.12685,4.22485-4.45701,4.22485H4.29896z M4.30841,6.09054
C2.15348,6.09137,0.40768,7.83766,0.40728,9.99259c0.0004,2.15474,1.74621,3.90062,3.90113,3.90103
c2.15504-0.0004,3.90143-1.74629,3.90196-3.90103C8.20984,7.83766,6.46345,6.09137,4.30841,6.09054z M3.42269,12.29989V7.6847
c-0.9272,0.35707-1.58492,1.25454-1.5873,2.30789C1.83777,11.04575,2.49548,11.94322,3.42269,12.29989z M6.78186,9.99259
C6.7801,8.93884,6.12134,8.04011,5.19341,7.68427v4.61644C6.12134,11.94446,6.7801,11.04658,6.78186,9.99259z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "dinersClub.svg",
"filename" : "DCI_Horizontal-2_ondark.svg",
"idiom" : "universal"
}
],

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -1,196 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 20">
<g>
<circle fill="#FFFFFF" cx="4.29324" cy="10.07366" r="4.11485"/>
<g>
<path fill="#231F20" d="M12.06619,10.20376c1.58688,0,1.84668-1.11611,1.84668-1.56005c0-0.79398-0.63216-1.56882-1.79285-1.56882
c-0.33194,0-0.58746,0.0083-0.77567,0.0083c-0.175,0-0.35428,0-0.52886-0.0083v0.11598
c0.2015,0.00457,0.41214-0.02203,0.41214,0.38119v2.17447c-0.01319,0.30469-0.14372,0.31342-0.41214,0.34045v0.1168
c0.2015-0.00414,0.39896-0.00872,0.60077-0.00872C11.62662,10.19504,11.83798,10.20376,12.06619,10.20376z M11.66682,7.23617
c0.08106-0.005,0.16586-0.01787,0.3497-0.01787c0.86526,0,1.40305,0.60523,1.40305,1.44326
c0,0.66802-0.31779,1.39838-1.28647,1.39838c-0.21937,0-0.46628-0.03991-0.46628-0.38533V7.23617z"/>
<path fill="#231F20" d="M14.55004,7.4648c0.12076,0,0.21969-0.10309,0.21969-0.22404c0-0.12141-0.10351-0.21576-0.21969-0.21576
c-0.11244,0-0.22,0.10351-0.22,0.21576C14.33003,7.35712,14.43302,7.4648,14.55004,7.4648z"/>
<path fill="#231F20" d="M15.02912,10.20376v-0.1168h-0.07608c-0.1251,0-0.22404,0-0.22404-0.14841V8.21761
c0-0.03576-0.00916-0.06237-0.03119-0.06237c-0.02285,0-0.04925,0.00459-0.08085,0.02203
c-0.01807,0.01416-0.26894,0.09852-0.47989,0.16172V8.4109c0.16626,0.08896,0.23319,0.11596,0.23319,0.31343v1.21421
c0,0.14841-0.08946,0.14841-0.21512,0.14841h-0.08501v0.1168c0.16586-0.00414,0.32715-0.00872,0.48854-0.00872
C14.71983,10.19504,14.87675,10.20376,15.02912,10.20376z"/>
<path fill="#231F20" d="M17.40997,10.08696h-0.08085c-0.12512,0-0.22406,0-0.22406-0.14841V8.78253
c0-0.34961-0.13427-0.62729-0.51545-0.62729c-0.30033,0-0.52004,0.15215-0.77609,0.3363V8.19932
c0-0.03535-0.01309-0.04408-0.0266-0.04408c-0.21533,0.09354-0.39906,0.15215-0.59152,0.21492v0.08562
c0.21055,0.08481,0.2598,0.12971,0.2598,0.29515v1.18761c0,0.14841-0.08937,0.14841-0.21472,0.14841h-0.08125v0.1168
c0.16129-0.00414,0.32299-0.00872,0.48385-0.00872c0.16172,0,0.31907,0.00872,0.47599,0.00872v-0.1168h-0.08064
c-0.12555,0-0.2249,0-0.2249-0.14841V8.61251c0.14862-0.09895,0.37682-0.21534,0.52043-0.21534
c0.25566,0,0.41218,0.12512,0.41218,0.3812v1.16017c0,0.14841-0.08918,0.14841-0.2147,0.14841h-0.08086v0.1168
c0.1615-0.00414,0.32278-0.00872,0.48447-0.00872c0.16088,0,0.31758,0.00872,0.47494,0.00872V10.08696z"/>
<path fill="#231F20" d="M18.24862,10.2709c0.36747,0,0.6227-0.23301,0.82908-0.50652l-0.06276-0.06276
c-0.16545,0.16586-0.35873,0.30053-0.60545,0.30053c-0.35832,0-0.63226-0.34959-0.65846-0.77569
c-0.00955-0.15256-0.00955-0.21947,0-0.2598h1.25912l0.04095-0.02701c0.00396-0.02703,0.00396-0.05364,0.00396-0.08107
c-0.00396-0.47512-0.39449-0.70335-0.75781-0.70335c-0.31342,0-0.90494,0.25981-0.90494,1.13857
C17.39231,9.58065,17.5355,10.2709,18.24862,10.2709z M18.2794,8.29825c0.25105,0,0.3899,0.18373,0.3899,0.41278
c0,0.05362-0.01308,0.11181-0.12472,0.11181h-0.78043C17.81797,8.49986,18.00626,8.29825,18.2794,8.29825z"/>
<path fill="#231F20" d="M20.31915,10.20376v-0.1168h-0.25087c-0.12573,0-0.21511,0-0.21511-0.14841V8.88602
c0-0.26935,0.25108-0.37246,0.32715-0.37246c0.15671,0,0.15671,0.10808,0.29597,0.10808
c0.12595,0,0.21055-0.10808,0.21055-0.22903c0-0.1617-0.14322-0.23737-0.25522-0.23737
c-0.27333,0-0.46186,0.28684-0.57346,0.46143h-0.00956V8.21345c0-0.04531-0.01351-0.05821-0.03991-0.05821
c-0.04052,0-0.22033,0.11641-0.54747,0.25566v0.06651c0.06734,0.03615,0.2328,0.06318,0.2328,0.20201v1.25912
c0,0.14841-0.08896,0.14841-0.2143,0.14841h-0.12156v0.1168c0.16168-0.00414,0.34979-0.00872,0.53373-0.00872
C19.88477,10.19504,20.07265,10.19961,20.31915,10.20376z"/>
<path fill="#231F20" d="M21.44922,10.1277c-0.32735,0-0.50653-0.25149-0.56532-0.54705L20.80343,9.6031l0.04927,0.51587
c0.15692,0.08937,0.36727,0.15193,0.54727,0.15193c0.53332,0,0.77087-0.31405,0.77087-0.60961
c0-0.70376-1.03983-0.54207-1.03983-1.06709c0-0.19246,0.17002-0.29596,0.34939-0.29596c0.28702,0,0.44416,0.1617,0.48885,0.44394
h0.10308l-0.03158-0.45724c-0.1748-0.08937-0.36748-0.12971-0.51067-0.12971c-0.49301,0-0.69503,0.32217-0.69503,0.57365
c0,0.72123,0.97647,0.55162,0.97647,1.08039C21.8115,9.96598,21.71339,10.1277,21.44922,10.1277z"/>
<path fill="#231F20" d="M26.1205,10.03332l0.10269-0.6547l-0.10269-0.0266C26.03073,9.823,25.66286,10.1277,25.2191,10.1277
c-0.68963,0-1.33623-0.65015-1.33623-1.55634c0-1.07539,0.74885-1.42041,1.26493-1.42041
c0.50154,0,0.87379,0.21075,0.9588,0.73494h0.11203l-0.0447-0.64099c-0.3452-0.12098-0.69441-0.23777-1.05771-0.23777
c-0.87897,0-1.6987,0.6593-1.6987,1.57837c0,1.00846,0.6628,1.68541,1.71157,1.68541
C25.42507,10.2709,25.93221,10.15014,26.1205,10.03332z"/>
<path fill="#231F20" d="M27.33973,10.20376v-0.1168h-0.07608c-0.12552,0-0.22445,0-0.22445-0.14841V6.84169
c0-0.03619-0.00853-0.0632-0.03576-0.0632c-0.0133,0-0.04947,0.02286-0.09852,0.04947
c-0.09438,0.05446-0.28267,0.13468-0.46183,0.19289v0.07189c0.17044,0.04906,0.23777,0.05821,0.23777,0.35002v2.49578
c0,0.14841-0.08979,0.14841-0.21534,0.14841h-0.08562v0.1168c0.16669-0.00414,0.32798-0.00872,0.48885-0.00872
C27.03067,10.19504,27.188,10.20376,27.33973,10.20376z"/>
<path fill="#231F20" d="M27.60867,8.59007v1.14812c0,0.37621,0.25067,0.53272,0.4926,0.53272
c0.31842,0,0.52542-0.15651,0.79398-0.37599v0.36269l0.02202,0.0133c0.08584-0.02681,0.4531-0.12076,0.6464-0.13863V10.0379
c-0.05821,0-0.12595,0.00417-0.17959,0.00417c-0.07646,0-0.12532-0.00417-0.12532-0.08522V8.30323
c0-0.04947,0-0.08064-0.03596-0.08064c-0.04449,0-0.29597,0.03536-0.69919,0.06237v0.08064
c0.16086,0.04531,0.37599,0.09436,0.37599,0.18373v1.20674c-0.1881,0.15587-0.38993,0.27269-0.54185,0.27269
c-0.38993,0-0.38993-0.38576-0.38993-0.52003V8.35229c0-0.09853,0-0.12971-0.04967-0.12971
c-0.05881,0-0.4163,0.0262-0.578,0.03118v0.08523C27.5906,8.36101,27.60867,8.47326,27.60867,8.59007z"/>
<path fill="#231F20" d="M29.79167,7.44277V9.3699c0,0.27311-0.02267,0.53374-0.06215,0.79812l0.09374,0.04904l0.13446-0.10266
c0.11682,0.04905,0.2912,0.15651,0.6227,0.15651c0.64185,0,1.07206-0.58759,1.07206-1.17453
c0-0.48803-0.31384-0.94113-0.83386-0.94113c-0.24631,0-0.48885,0.17045-0.66822,0.32217V6.84169
c0-0.03619-0.00852-0.0632-0.03533-0.0632c-0.01393,0-0.05008,0.02286-0.09892,0.04947
c-0.09438,0.05446-0.28206,0.13468-0.46186,0.19289v0.07189C29.72474,7.14181,29.79167,7.15095,29.79167,7.44277z
M30.15041,8.60834c0.12119-0.10349,0.25979-0.21117,0.42648-0.21117c0.34939,0,0.71727,0.40323,0.71727,0.88708
c0,0.39906-0.2016,0.87005-0.68151,0.87005c-0.30097,0-0.46225-0.28681-0.46225-0.45726V8.60834z"/>
<path fill="#231F20" d="M11.17172,11.18c-0.11939,0-0.26551-0.00956-0.36122-0.00956H10.7997v0.08399v0.00995h0.04488
c0.08846,0.00166,0.16921,0.00956,0.16972,0.12888v1.27783c-0.00051,0.11929-0.08125,0.12679-0.16972,0.12886H10.8105H10.7997
v0.01039v0.07315v0.01041h0.01081c0.09571,0,0.23913-0.00956,0.35862-0.00956c0.1213,0,0.2674,0.00956,0.38525,0.00956h0.01081
v-0.08355v-0.01039H11.5205c-0.08865-0.00208-0.16969-0.00957-0.17012-0.12886v-1.27783
c0.00043-0.11932,0.08148-0.12721,0.17012-0.12888h0.03388h0.01081v-0.08312v-0.01082h-0.01081
C11.43902,11.17044,11.29313,11.18,11.17172,11.18z"/>
<path fill="#231F20" d="M13.31075,11.18c-0.11409,0-0.22664-0.00956-0.34157-0.00956h-0.01103v0.08314v0.01081h0.06442
c0.07141,0.00166,0.20069,0.02495,0.20193,0.21907v0.89707l-1.07175-1.20633C12.07035,11.17044,11.99968,11.18,11.92724,11.18
c-0.09207,0-0.18714-0.00956-0.28058-0.00956h-0.0106v0.08314v0.01081h0.04271c0.10465,0.00043,0.21136,0.07941,0.21179,0.20909
v1.02717c-0.00208,0.19456-0.04801,0.29806-0.2094,0.29931h-0.0345h-0.0106v0.08354v0.01041h0.0106
c0.11089,0,0.22293-0.00956,0.33172-0.00956c0.10422,0,0.2093,0.00956,0.31478,0.00956h0.011v-0.08398v-0.00996h-0.05247
c-0.18344-0.00248-0.21564-0.06278-0.21877-0.27519v-0.97728l1.23802,1.37966l0.1005,0.00375h0.01237l-0.00209-0.01247
c-0.01183-0.07441-0.01432-0.15962-0.01432-0.24442v-1.1103c0.0029-0.28724,0.10588-0.29639,0.2069-0.29931h0.03607h0.01111
v-0.08396v-0.00999h-0.01111C13.50988,11.17044,13.4097,11.18,13.31075,11.18z"/>
<path fill="#231F20" d="M15.30576,11.09312l-0.00083,0.01124c-0.00417,0.0636-0.05384,0.06485-0.12159,0.06608h-1.25809
c-0.00487,0-0.00861,0-0.01277,0c-0.06235-0.00123-0.10703-0.00165-0.12386-0.06318l-0.00169-0.0079h-0.06691h-0.0103v0.01081
c0,0.06984-0.00487,0.13761-0.01474,0.20536c-0.00739,0.07107-0.02016,0.13926-0.02953,0.20743l-0.00166,0.01247h0.08533h0.00904
l0.00123-0.00831c0.04023-0.18042,0.03618-0.21035,0.21637-0.21409h0.3895v1.2928
c-0.00281,0.18913-0.05703,0.19079-0.19163,0.19413h-0.04644h-0.01018v0.08354v0.01041h0.01018
c0.09612,0,0.26644-0.00956,0.41258-0.00956c0.13103,0,0.30166,0.00956,0.39791,0.00956h0.00999v-0.08398v-0.00996H14.8911
c-0.11637-0.00248-0.18954-0.01538-0.19203-0.19953v-1.2874h0.3895c0.15401,0,0.16378,0.13302,0.17042,0.22447l0.00043,0.01456
l0.08645-0.03158l0.00709-0.00292v-0.00749c0-0.06568,0-0.13176,0.00498-0.19704c0.00707-0.06525,0.01663-0.13093,0.02618-0.19661
l0.00126-0.01039l-0.0686-0.01081L15.30576,11.09312z"/>
<path fill="#231F20" d="M16.76337,12.46574l-0.00249,0.00996c-0.07336,0.27394-0.1908,0.2885-0.48471,0.29016
c-0.15919-0.00083-0.28681,0-0.28724-0.14841v-0.55826l0.28227,0.00042c0.16212,0.00207,0.16294,0.08354,0.17977,0.23238
l0.00083,0.01121l0.08504-0.01663l0.00872-0.00208v-0.00833c-0.005-0.09311-0.00789-0.1858-0.00789-0.27808
c0-0.09521,0.00288-0.18997,0.00789-0.28518v-0.01079h-0.08438H16.4518l-0.00083,0.00956
c-0.01683,0.13136-0.04135,0.20367-0.18227,0.20451h-0.27977v-0.6173h0.32884c0.25148,0.00209,0.27228,0.11722,0.28681,0.2752
l0.00042,0.0129l0.08563-0.02246l0.0079-0.00249v-0.00874c-0.00459-0.06941-0.00747-0.16169-0.00747-0.24565
c0-0.04657,0.00082-0.0898,0.00288-0.12638v-0.01082h-0.011c-0.16586,0-0.41924,0.00956-0.62396,0.00956
c-0.2043,0-0.4585-0.00956-0.6071-0.00956h-0.01081v0.08399v0.00995h0.04491c0.08811,0.00209,0.16876,0.00999,0.16957,0.12888
v1.27783c-0.00082,0.11929-0.08146,0.1272-0.16957,0.12886h-0.0341h-0.01081v0.00996v0.07358v0.01041h0.01081
c0.13926,0,0.42899-0.00998,0.64847-0.00998c0.21926,0,0.49965,0.00998,0.65639,0.00998h0.00872l0.00166-0.00873
c0.02203-0.12886,0.05091-0.25814,0.08251-0.38701l0.00229-0.00999l-0.07816-0.02037L16.76337,12.46574z"/>
<path fill="#231F20" d="M18.38975,12.65779l-0.40966-0.61356c0.18789-0.07649,0.33381-0.21409,0.33381-0.43439
c-0.00083-0.35375-0.28414-0.4394-0.59112-0.4394c-0.13011,0-0.24755,0.00956-0.39283,0.00956
c-0.14882,0-0.2993-0.00956-0.37869-0.00956h-0.00999v0.08399v0.00995h0.05447c0.07565,0.00249,0.16046,0.00209,0.16212,0.17502
v1.23917c-0.00083,0.08231-0.07441,0.12055-0.16212,0.12138h-0.04448h-0.00999v0.08354v0.01041h0.00999
c0.12284,0,0.23694-0.00956,0.35356-0.00956c0.1382,0,0.27995,0.00956,0.41961,0.00956h0.01103v-0.08398v-0.00996h-0.05465
c-0.11287-0.00291-0.18666-0.00125-0.18915-0.18499v-0.51128h0.14402c0.15775,0.27891,0.31824,0.54081,0.50487,0.78648
c0.08501,0.00374,0.16337-0.00582,0.23734-0.00582c0.08045,0,0.15796,0.00956,0.23966,0.00956h0.01018v-0.08398v-0.00913
l-0.00894-0.00083C18.50013,12.78457,18.45792,12.75921,18.38975,12.65779z M17.96575,11.6252
c-0.00207,0.28351-0.12408,0.36705-0.36539,0.36956h-0.1087v-0.70667c0.03118-0.00334,0.06194-0.00914,0.12802-0.00914
C17.8319,11.28018,17.96451,11.41237,17.96575,11.6252z"/>
<path fill="#231F20" d="M20.6646,11.26438v-0.08312v-0.01082h-0.0106c-0.10039,0-0.20057,0.00956-0.29992,0.00956
c-0.11391,0-0.22614-0.00956-0.34171-0.00956h-0.0106v0.08399v0.00995h0.06446c0.07086,0.00126,0.20118,0.02495,0.20138,0.21907
v0.89707l-1.07246-1.20716C19.11346,11.17044,19.04299,11.18,18.9711,11.18c-0.09188,0-0.1877-0.00956-0.2804-0.00956h-0.01142
v0.08399v0.00995h0.04301c0.10455,0.00043,0.21055,0.07898,0.21096,0.20909v1.02676
c-0.00166,0.19496-0.04802,0.29888-0.20909,0.29971h-0.03346h-0.01142v0.08354v0.01041h0.01142
c0.10954,0,0.22239-0.00998,0.33151-0.00998c0.10434,0,0.20909,0.00998,0.31468,0.00998h0.0106v-0.08398v-0.00996h-0.05177
c-0.18393-0.00248-0.21594-0.06235-0.21907-0.27519v-0.97728l1.23795,1.37966l0.10018,0.00375h0.01184l-0.00123-0.01247
c-0.01229-0.07524-0.01435-0.15962-0.01435-0.24442v-1.1103c0.00249-0.28724,0.10642-0.29681,0.207-0.29931h0.03597H20.6646z"/>
<path fill="#231F20" d="M22.18061,12.70807c-0.03158-0.07191-0.06068-0.16211-0.08936-0.24733l-0.44957-1.27616
c-0.00729-0.01954-0.01476-0.04114-0.02224-0.06111c-0.00729-0.01287-0.02077-0.01495-0.0266-0.01454
c-0.00999,0-0.01642,0.00333-0.02329,0.00582c-0.04737,0.02951-0.14549,0.07855-0.22177,0.10516
c-0.02098,0.09686-0.06482,0.21824-0.09684,0.30887l-0.39094,1.11945c-0.03514,0.09892-0.11059,0.15089-0.20141,0.15089h-0.01434
h-0.01038v0.08437v0.01124l0.01078-0.00083c0.08731-0.00457,0.17522-0.00998,0.26273-0.00998
c0.09726,0,0.19704,0.0054,0.29472,0.00998l0.011,0.00083v-0.08438v-0.01122h-0.0372c-0.08105,0-0.1725-0.01455-0.17333-0.07399
c0-0.03949,0.02867-0.10393,0.05361-0.18749l0.07607-0.24607h0.53832l0.09271,0.27602
c0.02701,0.07732,0.04823,0.14424,0.0478,0.17209c0,0.04697-0.08355,0.05944-0.13966,0.05944h-0.02682h-0.01101v0.08437v0.01124
l0.01101-0.00083c0.12491-0.00457,0.2463-0.00998,0.36559-0.00998c0.11682,0,0.22634,0.0054,0.33547,0.00998l0.01164,0.00083
v-0.08438v-0.01122h-0.02516C22.25378,12.79912,22.20887,12.77335,22.18061,12.70807z M21.61215,12.13402h-0.4269l0.21472-0.65388
L21.61215,12.13402z"/>
<path fill="#231F20" d="M23.78268,11.09312l-0.00042,0.01124c-0.00395,0.0636-0.05362,0.06485-0.12095,0.06608H22.4026
c-0.00437,0-0.00811,0-0.01247,0c-0.06194-0.00123-0.10682-0.00165-0.12408-0.06318l-0.00209-0.0079h-0.06608h-0.01103v0.01081
c0,0.06984-0.00457,0.13761-0.01454,0.20619c-0.00727,0.07024-0.01954,0.13842-0.02951,0.2066l-0.00166,0.01247h0.08605h0.00852
l0.00165-0.00831c0.03972-0.18042,0.03554-0.21075,0.21679-0.21409h0.38868v1.2928
c-0.00335,0.18913-0.05696,0.19079-0.19164,0.19413h-0.04656h-0.01019v0.08354v0.01041h0.01019
c0.09643,0,0.26687-0.00956,0.41278-0.00956c0.13137,0,0.302,0.00956,0.39719,0.00956h0.0106v-0.08398v-0.00996h-0.05695
c-0.11618-0.00248-0.18915-0.01538-0.19163-0.19953v-1.2874h0.3895c0.15422,0,0.1642,0.13302,0.17043,0.22447v0.01456
l0.08645-0.03158l0.0075-0.00292v-0.00749c0-0.06568,0-0.13176,0.00457-0.19704c0.00726-0.06525,0.0162-0.13093,0.02661-0.19661
l0.00206-0.01039l-0.06939-0.01081L23.78268,11.09312z"/>
<path fill="#231F20" d="M24.30209,11.18c-0.11911,0-0.26561-0.00956-0.36082-0.00956h-0.0102v0.08399v0.00995h0.04427
c0.08835,0.00166,0.16899,0.00999,0.16939,0.12888v1.27783c-0.0004,0.11929-0.08105,0.1272-0.16939,0.12886h-0.03407h-0.0102
v0.00996v0.07358v0.01041h0.0102c0.09521,0,0.23923-0.00998,0.35873-0.00998c0.12159,0,0.26773,0.00998,0.38556,0.00998h0.00978
v-0.08398v-0.00996h-0.04387c-0.08915-0.00166-0.16961-0.00957-0.17044-0.12886v-1.27783
c0.00083-0.11889,0.08129-0.12721,0.17044-0.12888h0.03409h0.00978v-0.08396v-0.00999h-0.00978
C24.57,11.17044,24.42408,11.18,24.30209,11.18z"/>
<path fill="#231F20" d="M25.65827,11.13346c-0.51254,0.00083-0.90954,0.3978-0.91077,0.91077
c0.00123,0.52999,0.40155,0.8854,0.92324,0.88666c0.5246-0.00126,0.93177-0.37828,0.9322-0.94528
C26.60208,11.45977,26.18204,11.13429,25.65827,11.13346z M25.65349,11.26232c0.39636,0.00041,0.58694,0.42399,0.58694,0.77775
c-0.00123,0.35541-0.08125,0.76194-0.54559,0.76237c-0.38576-0.00126-0.58403-0.40904-0.58443-0.84386
C25.11123,11.63394,25.2351,11.26273,25.65349,11.26232z"/>
<path fill="#231F20" d="M28.62752,11.26438v-0.08396v-0.00999h-0.01038c-0.10141,0-0.20036,0.00956-0.30095,0.00956
c-0.11265,0-0.22573-0.00956-0.34048-0.00956h-0.01079v0.08399v0.00995h0.0636c0.07191,0.00166,0.20162,0.02495,0.20202,0.21907
v0.89707l-1.07145-1.20633C27.07618,11.17044,27.00593,11.18,26.9338,11.18c-0.09206,0-0.18724-0.00956-0.28078-0.00956h-0.00999
v0.08399v0.00995h0.04157c0.10518,0.00043,0.21139,0.07898,0.21139,0.20909v1.02717
c-0.00126,0.19456-0.0476,0.29806-0.20847,0.29848h-0.0345h-0.00999v0.08437v0.01041h0.00999
c0.11078,0,0.22281-0.00956,0.33212-0.00956c0.10435,0,0.2093,0.00956,0.31469,0.00956h0.0108v-0.08355v-0.01122h-0.053
c-0.1831-0.00208-0.21553-0.06152-0.21842-0.27435v-0.97728l1.2377,1.37966l0.10101,0.00375h0.01186l-0.00209-0.01247
c-0.01143-0.07441-0.01351-0.15962-0.01351-0.24442v-1.1103c0.00208-0.28724,0.1062-0.29639,0.20638-0.29931h0.03659H28.62752z"/>
<path fill="#231F20" d="M30.14395,12.7085c-0.0318-0.07234-0.06129-0.16253-0.09041-0.24776l-0.44874-1.27616
c-0.0079-0.01954-0.01515-0.04156-0.02203-0.06068c-0.00788-0.0133-0.02077-0.01538-0.02678-0.01455
c-0.00977,0-0.01727,0.00291-0.0235,0.0054c-0.04697,0.02951-0.14506,0.07855-0.22199,0.10516
c-0.02119,0.09686-0.06525,0.21824-0.09643,0.30887l-0.39033,1.11945c-0.03533,0.09852-0.11183,0.15089-0.20286,0.15173h-0.01351
h-0.0106v0.08354v0.01124l0.0106-0.00083c0.08792-0.00417,0.17521-0.00956,0.26312-0.00956
c0.09686,0,0.19704,0.00539,0.29433,0.00956l0.011,0.00083v-0.08481v-0.00996H29.1384c-0.08064,0-0.17188-0.01538-0.17188-0.07524
c-0.00083-0.03907,0.02868-0.10309,0.05299-0.18707l0.07504-0.24607h0.53854l0.09246,0.27602
c0.02786,0.07773,0.04967,0.14424,0.04927,0.17209c-0.00042,0.04697-0.08459,0.06028-0.14133,0.06028h-0.0266H29.5965v0.08354
v0.01124l0.01081-0.00083c0.12428-0.00417,0.2467-0.00956,0.3658-0.00956c0.11596,0,0.22614,0.00539,0.33586,0.00956
l0.01082,0.00083v-0.08481v-0.00996h-0.02495C30.2165,12.79912,30.17265,12.77335,30.14395,12.7085z M29.5753,12.1336h-0.42691
l0.21428-0.65303L29.5753,12.1336z"/>
<path fill="#231F20" d="M31.69386,12.45783l-0.00248,0.00833c-0.01435,0.05321-0.03576,0.12013-0.07339,0.17251
c-0.04239,0.0582-0.1276,0.11515-0.22654,0.1272c-0.06381,0.00665-0.12573,0.00955-0.1854,0.00955
c-0.04657,0-0.09228-0.00166-0.13489-0.00455c-0.07671-0.01125-0.13593-0.03536-0.13717-0.12638v-1.25829
c0.00205-0.12346,0.06129-0.11932,0.15566-0.12181h0.06152h0.00956v-0.08396v-0.00999h-0.00956
c-0.12512,0-0.24714,0.00956-0.37122,0.00956c-0.12884,0-0.25562-0.00956-0.38576-0.00956h-0.00995v0.08399v0.00995h0.04405
c0.08937,0.00166,0.1725,0.00999,0.17333,0.12845v1.25373c-0.00083,0.14507-0.08479,0.15131-0.17333,0.15339h-0.0341h-0.00995
v0.08354v0.01041h0.00995c0.21513,0,0.42985-0.00956,0.64495-0.00956c0.21387,0,0.42837,0.00956,0.64328,0.00956h0.00809
l0.00251-0.0079c0.0295-0.13926,0.06317-0.27561,0.09041-0.41487l0.00249-0.0133h-0.08355H31.69386z"/>
<path fill="#231F20" d="M31.81586,11.43608l-0.042-0.05904c0.03576-0.01121,0.06071-0.03907,0.06071-0.07772
c0-0.04614-0.04178-0.06817-0.08645-0.06817h-0.13179v0.0133c0.03367-0.00166,0.03658,0.00747,0.03658,0.0345v0.18997
c0,0.01995-0.00624,0.01871-0.03741,0.02286v0.01287h0.12386v-0.01287c-0.03115-0.00416-0.03698-0.00291-0.03698-0.02037V11.3866
h0.02827c0.04739,0.06737,0.06816,0.11806,0.09206,0.11806h0.0501v-0.0083C31.85807,11.48762,31.83582,11.46227,31.81586,11.43608
z M31.7323,11.36915h-0.02992V11.2486h0.02827c0.02598,0,0.05031,0.01413,0.05031,0.05529
C31.78096,11.3442,31.76556,11.36915,31.7323,11.36915z"/>
<path fill="#231F20" d="M31.74312,11.11183c-0.14654,0-0.2569,0.11308-0.2569,0.25732c0,0.14423,0.11035,0.25605,0.2569,0.25605
C31.89005,11.6252,32,11.51338,32,11.36915C32,11.22491,31.89005,11.11183,31.74312,11.11183z M31.74312,11.5774
c-0.11577,0-0.20369-0.09769-0.20369-0.20825c0-0.11057,0.08792-0.20952,0.20369-0.20952
c0.1166,0,0.20327,0.09895,0.20327,0.20952C31.94639,11.47971,31.85807,11.5774,31.74312,11.5774z"/>
</g>
<path fill="#004A98" d="M4.29896,14.26192C1.94076,14.27314,0,12.36265,0,10.03707c0-2.54152,1.94076-4.29945,4.29896-4.29905
h1.10509c2.33016-0.0004,4.45701,1.7567,4.45701,4.29905c0,2.32475-2.12685,4.22485-4.45701,4.22485H4.29896z M4.30841,6.09054
C2.15348,6.09137,0.40768,7.83766,0.40728,9.99259c0.0004,2.15474,1.74621,3.90062,3.90113,3.90103
c2.15504-0.0004,3.90143-1.74629,3.90196-3.90103C8.20984,7.83766,6.46345,6.09137,4.30841,6.09054z M3.42269,12.29989V7.6847
c-0.9272,0.35707-1.58492,1.25454-1.5873,2.30789C1.83777,11.04575,2.49548,11.94322,3.42269,12.29989z M6.78186,9.99259
C6.7801,8.93884,6.12134,8.04011,5.19341,7.68427v4.61644C6.12134,11.94446,6.7801,11.04658,6.78186,9.99259z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 20">
<path stroke="#333333" d="M1,0.5h30c0.3,0,0.5,0.2,0.5,0.5v18c0,0.3-0.2,0.5-0.5,0.5H1c-0.3,0-0.5-0.2-0.5-0.5V1C0.5,0.7,0.7,0.5,1,0.5z"
/>
<rect x="4" y="4" fill="#333333" width="24" height="2"/>
<rect x="23" y="14" fill="#333333" width="2" height="2"/>
<rect x="26" y="14" fill="#333333" width="2" height="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 379 B

View File

@ -1,15 +0,0 @@
{
"images" : [
{
"filename" : "placeholder.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@ -1,18 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 20" >
<g>
<g>
<path fill="#D8DADA" d="M30.5,20h-29C0.7,20,0,19.3,0,18.5v-17C0,0.7,0.7,0,1.5,0h29C31.3,0,32,0.7,32,1.5v17
C32,19.3,31.3,20,30.5,20z M1.5,1C1.2,1,1,1.2,1,1.5v17C1,18.8,1.2,19,1.5,19h29c0.3,0,0.5-0.2,0.5-0.5v-17C31,1.2,30.8,1,30.5,1
H1.5z"/>
</g>
<g>
<rect x="4" y="4" fill-rule="evenodd" clip-rule="evenodd" fill="#D8DADA" width="24" height="2"/>
</g>
<g>
<rect x="23" y="14" fill-rule="evenodd" clip-rule="evenodd" fill="#D8DADA" width="2" height="2"/>
</g>
<g>
<rect x="26" y="14" fill-rule="evenodd" clip-rule="evenodd" fill="#D8DADA" width="2" height="2"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 670 B

View File

@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "credit-card.svg",
"filename" : "UnionPay-logo-onDark.svg",
"idiom" : "universal"
}
],

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "placeholder-inverted.svg",
"filename" : "UnionPay-logo-onLight.svg",
"idiom" : "universal"
}
],

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@ -1,3 +1,8 @@
1.0.63
----------------
- CXTDT-555860 - Dropdown Select - Form Elements layout option missing
1.0.62
----------------
- CXTDT-546824 - Notification - Accessibility - Redundant text is provided for the notification icon.