ソースを参照

Removed Eureka

Jonas Björkert 1 年間 前
コミット
75977b07fc
89 ファイル変更19 行追加12137 行削除
  1. 0 1
      Podfile
  2. 0 8
      Podfile.lock
  3. 0 21
      Pods/Eureka/LICENSE
  4. 0 1343
      Pods/Eureka/README.md
  5. 0 294
      Pods/Eureka/Source/Core/BaseRow.swift
  6. 0 174
      Pods/Eureka/Source/Core/Cell.swift
  7. 0 81
      Pods/Eureka/Source/Core/CellType.swift
  8. 0 1151
      Pods/Eureka/Source/Core/Core.swift
  9. 0 453
      Pods/Eureka/Source/Core/Form.swift
  10. 0 162
      Pods/Eureka/Source/Core/HeaderFooterView.swift
  11. 0 79
      Pods/Eureka/Source/Core/Helpers.swift
  12. 0 147
      Pods/Eureka/Source/Core/InlineRowType.swift
  13. 0 155
      Pods/Eureka/Source/Core/NavigationAccessoryView.swift
  14. 0 161
      Pods/Eureka/Source/Core/Operators.swift
  15. 0 57
      Pods/Eureka/Source/Core/PresenterRowType.swift
  16. 0 203
      Pods/Eureka/Source/Core/Row.swift
  17. 0 35
      Pods/Eureka/Source/Core/RowControllerType.swift
  18. 0 62
      Pods/Eureka/Source/Core/RowProtocols.swift
  19. 0 258
      Pods/Eureka/Source/Core/RowType.swift
  20. 0 598
      Pods/Eureka/Source/Core/Section.swift
  21. 0 32
      Pods/Eureka/Source/Core/SelectableRowType.swift
  22. 0 155
      Pods/Eureka/Source/Core/SelectableSection.swift
  23. 0 152
      Pods/Eureka/Source/Core/SwipeActions.swift
  24. 0 99
      Pods/Eureka/Source/Core/Validation.swift
  25. 0 96
      Pods/Eureka/Source/Rows/ActionSheetRow.swift
  26. 0 66
      Pods/Eureka/Source/Rows/AlertRow.swift
  27. 0 104
      Pods/Eureka/Source/Rows/ButtonRow.swift
  28. 0 88
      Pods/Eureka/Source/Rows/ButtonRowWithPresent.swift
  29. 0 83
      Pods/Eureka/Source/Rows/CheckRow.swift
  30. 0 41
      Pods/Eureka/Source/Rows/Common/AlertOptionsRow.swift
  31. 0 144
      Pods/Eureka/Source/Rows/Common/DateFieldRow.swift
  32. 0 80
      Pods/Eureka/Source/Rows/Common/DateInlineFieldRow.swift
  33. 0 59
      Pods/Eureka/Source/Rows/Common/DecimalFormatter.swift
  34. 0 494
      Pods/Eureka/Source/Rows/Common/FieldRow.swift
  35. 0 86
      Pods/Eureka/Source/Rows/Common/GenericMultipleSelectorRow.swift
  36. 0 37
      Pods/Eureka/Source/Rows/Common/OptionsRow.swift
  37. 0 35
      Pods/Eureka/Source/Rows/Common/Protocols.swift
  38. 0 87
      Pods/Eureka/Source/Rows/Common/SelectorRow.swift
  39. 0 149
      Pods/Eureka/Source/Rows/Controllers/MultipleSelectorViewController.swift
  40. 0 80
      Pods/Eureka/Source/Rows/Controllers/SelectorAlertController.swift
  41. 0 232
      Pods/Eureka/Source/Rows/Controllers/SelectorViewController.swift
  42. 0 214
      Pods/Eureka/Source/Rows/DateInlineRow.swift
  43. 0 156
      Pods/Eureka/Source/Rows/DatePickerRow.swift
  44. 0 99
      Pods/Eureka/Source/Rows/DateRow.swift
  45. 0 112
      Pods/Eureka/Source/Rows/DoublePickerInputRow.swift
  46. 0 129
      Pods/Eureka/Source/Rows/DoublePickerRow.swift
  47. 0 399
      Pods/Eureka/Source/Rows/FieldsRow.swift
  48. 0 61
      Pods/Eureka/Source/Rows/LabelRow.swift
  49. 0 38
      Pods/Eureka/Source/Rows/MultipleSelectorRow.swift
  50. 0 202
      Pods/Eureka/Source/Rows/PickerInlineRow.swift
  51. 0 159
      Pods/Eureka/Source/Rows/PickerInputRow.swift
  52. 0 137
      Pods/Eureka/Source/Rows/PickerRow.swift
  53. 0 55
      Pods/Eureka/Source/Rows/PopoverSelectorRow.swift
  54. 0 42
      Pods/Eureka/Source/Rows/PushRow.swift
  55. 0 194
      Pods/Eureka/Source/Rows/SegmentedRow.swift
  56. 0 70
      Pods/Eureka/Source/Rows/SelectableRows/ListCheckRow.swift
  57. 0 175
      Pods/Eureka/Source/Rows/SliderRow.swift
  58. 0 157
      Pods/Eureka/Source/Rows/StepperRow.swift
  59. 0 81
      Pods/Eureka/Source/Rows/SwitchRow.swift
  60. 0 336
      Pods/Eureka/Source/Rows/TextAreaRow.swift
  61. 0 158
      Pods/Eureka/Source/Rows/TriplePickerInputRow.swift
  62. 0 176
      Pods/Eureka/Source/Rows/TriplePickerRow.swift
  63. 0 43
      Pods/Eureka/Source/Validations/RuleClosure.swift
  64. 0 33
      Pods/Eureka/Source/Validations/RuleEmail.swift
  65. 0 55
      Pods/Eureka/Source/Validations/RuleEqualsToRow.swift
  66. 0 84
      Pods/Eureka/Source/Validations/RuleLength.swift
  67. 0 109
      Pods/Eureka/Source/Validations/RuleRange.swift
  68. 0 61
      Pods/Eureka/Source/Validations/RuleRegExp.swift
  69. 0 43
      Pods/Eureka/Source/Validations/RuleRequired.swift
  70. 0 54
      Pods/Eureka/Source/Validations/RuleURL.swift
  71. 0 29
      Pods/Local Podspecs/Eureka.podspec.json
  72. 0 8
      Pods/Manifest.lock
  73. 13 463
      Pods/Pods.xcodeproj/project.pbxproj
  74. 0 26
      Pods/Target Support Files/Eureka/Eureka-Info.plist
  75. 0 5
      Pods/Target Support Files/Eureka/Eureka-dummy.m
  76. 0 12
      Pods/Target Support Files/Eureka/Eureka-prefix.pch
  77. 0 16
      Pods/Target Support Files/Eureka/Eureka-umbrella.h
  78. 0 15
      Pods/Target Support Files/Eureka/Eureka.debug.xcconfig
  79. 0 6
      Pods/Target Support Files/Eureka/Eureka.modulemap
  80. 0 15
      Pods/Target Support Files/Eureka/Eureka.release.xcconfig
  81. 0 25
      Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-acknowledgements.markdown
  82. 0 31
      Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-acknowledgements.plist
  83. 0 1
      Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Debug-input-files.xcfilelist
  84. 0 1
      Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Debug-output-files.xcfilelist
  85. 0 1
      Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Release-input-files.xcfilelist
  86. 0 1
      Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Release-output-files.xcfilelist
  87. 0 2
      Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks.sh
  88. 3 3
      Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow.debug.xcconfig
  89. 3 3
      Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow.release.xcconfig

+ 0 - 1
Podfile

@@ -2,7 +2,6 @@ target 'LoopFollow' do
   use_frameworks!
 
   pod 'Charts'
-  pod 'Eureka', :git => 'https://github.com/xmartlabs/Eureka.git'
   pod 'ShareClient', :git => 'https://github.com/loopandlearn/dexcom-share-client-swift.git', :branch => 'loopfollow'
   
 end

+ 0 - 8
Podfile.lock

@@ -3,13 +3,11 @@ PODS:
     - Charts/Core (= 4.1.0)
   - Charts/Core (4.1.0):
     - SwiftAlgorithms (~> 1.0)
-  - Eureka (5.3.6)
   - ShareClient (1.2)
   - SwiftAlgorithms (1.0.0)
 
 DEPENDENCIES:
   - Charts
-  - Eureka (from `https://github.com/xmartlabs/Eureka.git`)
   - ShareClient (from `https://github.com/loopandlearn/dexcom-share-client-swift.git`, branch `loopfollow`)
 
 SPEC REPOS:
@@ -18,23 +16,17 @@ SPEC REPOS:
     - SwiftAlgorithms
 
 EXTERNAL SOURCES:
-  Eureka:
-    :git: https://github.com/xmartlabs/Eureka.git
   ShareClient:
     :branch: loopfollow
     :git: https://github.com/loopandlearn/dexcom-share-client-swift.git
 
 CHECKOUT OPTIONS:
-  Eureka:
-    :commit: 044e31674d319c8edb19d993a5f8ea4e24641542
-    :git: https://github.com/xmartlabs/Eureka.git
   ShareClient:
     :commit: d7a3323a014d41827ee177a92d528786f9f09e75
     :git: https://github.com/loopandlearn/dexcom-share-client-swift.git
 
 SPEC CHECKSUMS:
   Charts: ce0768268078eee0336f122c3c4ca248e4e204c5
-  Eureka: 28ad9dec6286cd7cd601fdf8e8df39bb7356a8f4
   ShareClient: 60b911c95e73b0ea9c5aad6d194a9c6b5f34b741
   SwiftAlgorithms: 38dda4731d19027fdeee1125f973111bf3386b53
 

+ 0 - 21
Pods/Eureka/LICENSE

@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2019 XMARTLABS
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

ファイルの差分が大きいため隠しています
+ 0 - 1343
Pods/Eureka/README.md


+ 0 - 294
Pods/Eureka/Source/Core/BaseRow.swift

@@ -1,294 +0,0 @@
-//  BaseRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-open class BaseRow: BaseRowType {
-
-    var callbackOnChange: (() -> Void)?
-    var callbackCellUpdate: (() -> Void)?
-    var callbackCellSetup: Any?
-    var callbackCellOnSelection: (() -> Void)?
-    var callbackOnExpandInlineRow: Any?
-    var callbackOnCollapseInlineRow: Any?
-    var callbackOnCellHighlightChanged: (() -> Void)?
-    var callbackOnRowValidationChanged: (() -> Void)?
-    var _inlineRow: BaseRow?
-
-    var _cachedOptionsData: Any?
-
-    public var validationOptions: ValidationOptions = .validatesOnBlur
-    // validation state
-    public internal(set) var validationErrors = [ValidationError]() {
-        didSet {
-            guard validationErrors != oldValue else { return }
-            RowDefaults.onRowValidationChanged["\(type(of: self))"]?(baseCell, self)
-            callbackOnRowValidationChanged?()
-            updateCell()
-        }
-    }
-
-    public internal(set) var wasBlurred = false
-    public internal(set) var wasChanged = false
-
-    public var isValid: Bool { return validationErrors.isEmpty }
-    public var isHighlighted: Bool = false
-
-    /// The title will be displayed in the textLabel of the row.
-    public var title: String?
-
-    /// Parameter used when creating the cell for this row.
-    public var cellStyle = UITableViewCell.CellStyle.value1
-
-    /// String that uniquely identifies a row. Must be unique among rows and sections.
-    public var tag: String?
-
-    /// The untyped cell associated to this row.
-    public var baseCell: BaseCell! { return nil }
-
-    /// The untyped value of this row.
-    public var baseValue: Any? {
-        set {}
-        get { return nil }
-    }
-
-    open func validate(quietly: Bool = false) -> [ValidationError] {
-        return []
-    }
-
-    // Reset validation
-    open func cleanValidationErrors() {
-        validationErrors = []
-    }
-
-    public static var estimatedRowHeight: CGFloat = 44.0
-
-    /// Condition that determines if the row should be disabled or not.
-    public var disabled: Condition? {
-        willSet { removeFromDisabledRowObservers() }
-        didSet { addToDisabledRowObservers() }
-    }
-
-    /// Condition that determines if the row should be hidden or not.
-    public var hidden: Condition? {
-        willSet { removeFromHiddenRowObservers() }
-        didSet { addToHiddenRowObservers() }
-    }
-
-    /// Returns if this row is currently disabled or not
-    public var isDisabled: Bool { return disabledCache }
-
-    /// Returns if this row is currently hidden or not
-    public var isHidden: Bool { return hiddenCache }
-
-    /// The section to which this row belongs.
-    open weak var section: Section?
-	
-    public lazy var trailingSwipe = {[unowned self] in SwipeConfiguration(self)}()
-	
-    //needs the accessor because if marked directly this throws "Stored properties cannot be marked potentially unavailable with '@available'"
-    private lazy var _leadingSwipe = {[unowned self] in SwipeConfiguration(self)}()
-
-    @available(iOS 11,*)
-    public var leadingSwipe: SwipeConfiguration{
-        get { return self._leadingSwipe }
-        set { self._leadingSwipe = newValue }
-    }
-    
-    public required init(tag: String? = nil) {
-        self.tag = tag
-    }
-
-    /**
-     Method that reloads the cell
-     */
-    open func updateCell() {}
-
-    /**
-     Method called when the cell belonging to this row was selected. Must call the corresponding method in its cell.
-     */
-    open func didSelect() {}
-
-    open func prepare(for segue: UIStoryboardSegue) {}
-
-    /**
-     Helps to pick destination part of the cell after scrolling
-     */
-    open var destinationScrollPosition: UITableView.ScrollPosition? = UITableView.ScrollPosition.bottom
-
-    /**
-     Returns the IndexPath where this row is in the current form.
-     */
-    public final var indexPath: IndexPath? {
-        guard let sectionIndex = section?.index, let rowIndex = section?.firstIndex(of: self) else { return nil }
-        return IndexPath(row: rowIndex, section: sectionIndex)
-    }
-
-    var hiddenCache = false
-    var disabledCache = false {
-        willSet {
-            if newValue && !disabledCache {
-                baseCell.cellResignFirstResponder()
-            }
-        }
-    }
-}
-
-extension BaseRow {
-
-    /**
-     Evaluates if the row should be hidden or not and updates the form accordingly
-     */
-    public final func evaluateHidden() {
-        guard let h = hidden, let form = section?.form else { return }
-        switch h {
-        case .function(_, let callback):
-            hiddenCache = callback(form)
-        case .predicate(let predicate):
-            hiddenCache = predicate.evaluate(with: self, substitutionVariables: form.dictionaryValuesToEvaluatePredicate())
-        }
-        if hiddenCache {
-            section?.hide(row: self)
-        } else {
-            section?.show(row: self)
-        }
-    }
-
-    /**
-     Evaluates if the row should be disabled or not and updates it accordingly
-     */
-    public final func evaluateDisabled() {
-        guard let d = disabled, let form = section?.form else { return }
-        switch d {
-        case .function(_, let callback):
-            disabledCache = callback(form)
-        case .predicate(let predicate):
-            disabledCache = predicate.evaluate(with: self, substitutionVariables: form.dictionaryValuesToEvaluatePredicate())
-        }
-        updateCell()
-    }
-
-    final func wasAddedTo(section: Section) {
-        self.section = section
-        if let t = tag {
-            assert(section.form?.rowsByTag[t] == nil, "Duplicate tag \(t)")
-            self.section?.form?.rowsByTag[t] = self
-            self.section?.form?.tagToValues[t] = baseValue != nil ? baseValue! : NSNull()
-        }
-        addToRowObservers()
-        evaluateHidden()
-        evaluateDisabled()
-    }
-
-    final func addToHiddenRowObservers() {
-        guard let h = hidden else { return }
-        switch h {
-        case .function(let tags, _):
-            section?.form?.addRowObservers(to: self, rowTags: tags, type: .hidden)
-        case .predicate(let predicate):
-            section?.form?.addRowObservers(to: self, rowTags: predicate.predicateVars, type: .hidden)
-        }
-    }
-
-    final func addToDisabledRowObservers() {
-        guard let d = disabled else { return }
-        switch d {
-        case .function(let tags, _):
-            section?.form?.addRowObservers(to: self, rowTags: tags, type: .disabled)
-        case .predicate(let predicate):
-            section?.form?.addRowObservers(to: self, rowTags: predicate.predicateVars, type: .disabled)
-        }
-    }
-
-    final func addToRowObservers() {
-        addToHiddenRowObservers()
-        addToDisabledRowObservers()
-    }
-
-    final func willBeRemovedFromForm() {
-        (self as? BaseInlineRowType)?.collapseInlineRow()
-        if let t = tag {
-            section?.form?.rowsByTag[t] = nil
-            section?.form?.tagToValues[t] = nil
-        }
-        removeFromRowObservers()
-    }
-
-    final func willBeRemovedFromSection() {
-        willBeRemovedFromForm()
-        section = nil
-    }
-
-    final func removeFromHiddenRowObservers() {
-        guard let h = hidden else { return }
-        switch h {
-        case .function(let tags, _):
-            section?.form?.removeRowObservers(from: self, rowTags: tags, type: .hidden)
-        case .predicate(let predicate):
-            section?.form?.removeRowObservers(from: self, rowTags: predicate.predicateVars, type: .hidden)
-        }
-    }
-
-    final func removeFromDisabledRowObservers() {
-        guard let d = disabled else { return }
-        switch d {
-        case .function(let tags, _):
-            section?.form?.removeRowObservers(from: self, rowTags: tags, type: .disabled)
-        case .predicate(let predicate):
-            section?.form?.removeRowObservers(from: self, rowTags: predicate.predicateVars, type: .disabled)
-        }
-    }
-
-    final func removeFromRowObservers() {
-        removeFromHiddenRowObservers()
-        removeFromDisabledRowObservers()
-    }
-}
-
-extension BaseRow: Equatable, Hidable, Disableable {}
-
-extension BaseRow {
-
-    public func reload(with rowAnimation: UITableView.RowAnimation = .none) {
-        guard let tableView = baseCell?.formViewController()?.tableView ?? (section?.form?.delegate as? FormViewController)?.tableView, let indexPath = indexPath else { return }
-        tableView.reloadRows(at: [indexPath], with: rowAnimation)
-    }
-
-    public func deselect(animated: Bool = true) {
-        guard let indexPath = indexPath,
-            let tableView = baseCell?.formViewController()?.tableView ?? (section?.form?.delegate as? FormViewController)?.tableView  else { return }
-        tableView.deselectRow(at: indexPath, animated: animated)
-    }
-
-    public func select(animated: Bool = false, scrollPosition: UITableView.ScrollPosition = .none) {
-        guard let indexPath = indexPath,
-            let tableView = baseCell?.formViewController()?.tableView ?? (section?.form?.delegate as? FormViewController)?.tableView  else { return }
-        tableView.selectRow(at: indexPath, animated: animated, scrollPosition: scrollPosition)
-    }
-}
-
-public func == (lhs: BaseRow, rhs: BaseRow) -> Bool {
-    return lhs === rhs
-}

+ 0 - 174
Pods/Eureka/Source/Core/Cell.swift

@@ -1,174 +0,0 @@
-//  Cell.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-/// Base class for the Eureka cells
-@objc(EurekaBaseCell)
-open class BaseCell: UITableViewCell, BaseCellType {
-
-    /// Untyped row associated to this cell.
-    public var baseRow: BaseRow! { return nil }
-
-    /// Block that returns the height for this cell.
-    public var height: (() -> CGFloat)?
-
-    public required init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    public required override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    /**
-     Function that returns the FormViewController this cell belongs to.
-     */
-    public func formViewController() -> FormViewController? {
-        var responder: UIResponder? = self
-        while responder != nil {
-            if let formVC = responder as? FormViewController {
-              return formVC
-            }
-            responder = responder?.next
-        }
-        return nil
-    }
-
-    open func setup() {}
-    open func update() {}
-
-    open func didSelect() {}
-
-    /**
-     If the cell can become first responder. By default returns false
-     */
-    open func cellCanBecomeFirstResponder() -> Bool {
-        return false
-    }
-
-    /**
-     Called when the cell becomes first responder
-     */
-    @discardableResult
-    open func cellBecomeFirstResponder(withDirection: Direction = .down) -> Bool {
-        return becomeFirstResponder()
-    }
-
-    /**
-     Called when the cell resigns first responder
-     */
-    @discardableResult
-    open func cellResignFirstResponder() -> Bool {
-        return resignFirstResponder()
-    }
-}
-
-/// Generic class that represents the Eureka cells.
-open class Cell<T>: BaseCell, TypedCellType where T: Equatable {
-
-    public typealias Value = T
-
-    /// The row associated to this cell
-    public weak var row: RowOf<T>!
-
-    private var updatingCellForTintColorDidChange = false
-
-    /// Returns the navigationAccessoryView if it is defined or calls super if not.
-    override open var inputAccessoryView: UIView? {
-        if let v = formViewController()?.inputAccessoryView(for: row) {
-            return v
-        }
-        return super.inputAccessoryView
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    /**
-     Function responsible for setting up the cell at creation time.
-     */
-    open override func setup() {
-        super.setup()
-    }
-
-    /**
-     Function responsible for updating the cell each time it is reloaded.
-     */
-    open override func update() {
-        super.update()
-        textLabel?.text = row.title
-        if #available(iOS 13.0, *) {
-            textLabel?.textColor = row.isDisabled ? .tertiaryLabel : .label
-        } else {
-            textLabel?.textColor = row.isDisabled ? .gray : .black
-        }
-        detailTextLabel?.text = row.displayValueFor?(row.value) ?? (row as? NoValueDisplayTextConformance)?.noValueDisplayText
-    }
-
-    /**
-     Called when the cell was selected.
-     */
-    open override func didSelect() {}
-
-    override open var canBecomeFirstResponder: Bool {
-        return false
-    }
-
-    open override func becomeFirstResponder() -> Bool {
-        let result = super.becomeFirstResponder()
-        if result {
-            formViewController()?.beginEditing(of: self)
-        }
-        return result
-    }
-
-    open override func resignFirstResponder() -> Bool {
-        let result = super.resignFirstResponder()
-        if result {
-            formViewController()?.endEditing(of: self)
-        }
-        return result
-    }
-
-    open override func tintColorDidChange() {
-        super.tintColorDidChange()
-
-        /* Protection from infinite recursion in case an update method changes the tintColor */
-        if !updatingCellForTintColorDidChange && row != nil {
-            updatingCellForTintColorDidChange = true
-            row.updateCell()
-            updatingCellForTintColorDidChange = false
-        }
-    }
-
-    /// The untyped row associated to this cell.
-    public override var baseRow: BaseRow! { return row }
-}

+ 0 - 81
Pods/Eureka/Source/Core/CellType.swift

@@ -1,81 +0,0 @@
-//  CellType.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-// MARK: Cell Protocols
-
-public protocol BaseCellType : AnyObject {
-
-    /// Method that will return the height of the cell
-    var height : (() -> CGFloat)? { get }
-
-    /**
-     Method called once when creating a cell. Responsible for setting up the cell.
-     */
-    func setup()
-
-    /**
-     Method called each time the cell is updated (e.g. 'cellForRowAtIndexPath' is called). Responsible for updating the cell.
-     */
-    func update()
-
-    /**
-     Method called each time the cell is selected (tapped on by the user).
-     */
-    func didSelect()
-
-    /**
-     Called when cell is about to become first responder
-     
-     - returns: If the cell should become first responder.
-     */
-    func cellCanBecomeFirstResponder() -> Bool
-
-    /**
-     Method called when the cell becomes first responder
-     */
-    func cellBecomeFirstResponder(withDirection: Direction) -> Bool
-
-    /**
-     Method called when the cell resigns first responder
-     */
-    func cellResignFirstResponder() -> Bool
-
-    /**
-     A reference to the controller in which the cell is displayed.
-     */
-    func formViewController () -> FormViewController?
-}
-
-public protocol TypedCellType: BaseCellType {
-
-    associatedtype Value: Equatable
-
-    /// The row associated to this cell.
-    var row: RowOf<Value>! { get set }
-}
-
-public protocol CellType: TypedCellType {}

ファイルの差分が大きいため隠しています
+ 0 - 1151
Pods/Eureka/Source/Core/Core.swift


+ 0 - 453
Pods/Eureka/Source/Core/Form.swift

@@ -1,453 +0,0 @@
-//  Form.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-/// The delegate of the Eureka form.
-public protocol FormDelegate : AnyObject {
-    func sectionsHaveBeenAdded(_ sections: [Section], at: IndexSet)
-    func sectionsHaveBeenRemoved(_ sections: [Section], at: IndexSet)
-    func sectionsHaveBeenReplaced(oldSections: [Section], newSections: [Section], at: IndexSet)
-    func rowsHaveBeenAdded(_ rows: [BaseRow], at: [IndexPath])
-    func rowsHaveBeenRemoved(_ rows: [BaseRow], at: [IndexPath])
-    func rowsHaveBeenReplaced(oldRows: [BaseRow], newRows: [BaseRow], at: [IndexPath])
-    func valueHasBeenChanged(for row: BaseRow, oldValue: Any?, newValue: Any?)
-}
-
-// MARK: Form
-
-/// The class representing the Eureka form.
-public final class Form {
-
-    /// Defines the default options of the navigation accessory view.
-    public static var defaultNavigationOptions = RowNavigationOptions.Enabled.union(.SkipCanNotBecomeFirstResponderRow)
-
-    /// The default options that define when an inline row will be hidden. Applies only when `inlineRowHideOptions` is nil.
-    public static var defaultInlineRowHideOptions = InlineRowHideOptions.FirstResponderChanges.union(.AnotherInlineRowIsShown)
-
-    /// The options that define when an inline row will be hidden. If nil then `defaultInlineRowHideOptions` are used
-    public var inlineRowHideOptions: InlineRowHideOptions?
-
-    /// Which `UIReturnKeyType` should be used by default. Applies only when `keyboardReturnType` is nil.
-    public static var defaultKeyboardReturnType = KeyboardReturnTypeConfiguration()
-
-    /// Which `UIReturnKeyType` should be used in this form. If nil then `defaultKeyboardReturnType` is used
-    public var keyboardReturnType: KeyboardReturnTypeConfiguration?
-
-    /// This form's delegate
-    public weak var delegate: FormDelegate?
-
-    public init() {}
-
-    /**
-     Returns the row at the given indexPath
-     */
-    public subscript(indexPath: IndexPath) -> BaseRow {
-        return self[indexPath.section][indexPath.row]
-    }
-
-    /**
-     Returns the row whose tag is passed as parameter. Uses a dictionary to get the row faster
-     */
-    public func rowBy<T>(tag: String) -> RowOf<T>? where T: Equatable{
-        let row: BaseRow? = rowBy(tag: tag)
-        return row as? RowOf<T>
-    }
-
-    /**
-     Returns the row whose tag is passed as parameter. Uses a dictionary to get the row faster
-     */
-    public func rowBy<Row>(tag: String) -> Row? where Row: RowType{
-        let row: BaseRow? = rowBy(tag: tag)
-        return row as? Row
-    }
-
-    /**
-     Returns the row whose tag is passed as parameter. Uses a dictionary to get the row faster
-     */
-    public func rowBy(tag: String) -> BaseRow? {
-        return rowsByTag[tag]
-    }
-
-    /**
-     Returns the section whose tag is passed as parameter.
-     */
-    public func sectionBy(tag: String) -> Section? {
-        return kvoWrapper._allSections.filter({ $0.tag == tag }).first
-    }
-
-    /**
-     Method used to get all the values of all the rows of the form. Only rows with tag are included.
-
-     - parameter includeHidden: If the values of hidden rows should be included.
-
-     - returns: A dictionary mapping the rows tag to its value. [tag: value]
-     */
-    public func values(includeHidden: Bool = false) -> [String: Any?] {
-        if includeHidden {
-            return getValues(for: allRows.filter({ $0.tag != nil }))
-                .merging(getValues(for: allSections.filter({ $0 is BaseMultivaluedSection && $0.tag != nil }) as? [BaseMultivaluedSection]), uniquingKeysWith: {(_, new) in new })
-        }
-        return getValues(for: rows.filter({ $0.tag != nil }))
-            .merging(getValues(for: allSections.filter({ $0 is BaseMultivaluedSection && $0.tag != nil }) as? [BaseMultivaluedSection]), uniquingKeysWith: {(_, new) in new })
-    }
-
-    /**
-     Set values to the rows of this form
-
-     - parameter values: A dictionary mapping tag to value of the rows to be set. [tag: value]
-     */
-    public func setValues(_ values: [String: Any?]) {
-        for (key, value) in values {
-            let row: BaseRow? = rowBy(tag: key)
-            row?.baseValue = value
-        }
-    }
-
-    /// The visible rows of this form
-    public var rows: [BaseRow] { return flatMap { $0 } }
-
-    /// All the rows of this form. Includes the hidden rows.
-    public var allRows: [BaseRow] { return kvoWrapper._allSections.map({ $0.kvoWrapper._allRows }).flatMap { $0 } }
-
-    /// All the sections of this form. Includes hidden sections.
-    public var allSections: [Section] { return kvoWrapper._allSections }
-
-    /**
-     * Hides all the inline rows of this form.
-     */
-    public func hideInlineRows() {
-        for row in self.allRows {
-            if let inlineRow = row as? BaseInlineRowType {
-                inlineRow.collapseInlineRow()
-            }
-        }
-    }
-
-    // MARK: Private
-
-    var rowObservers = [String: [ConditionType: [Taggable]]]()
-    var rowsByTag = [String: BaseRow]()
-    var tagToValues = [String: Any]()
-    lazy var kvoWrapper: KVOWrapper = { [unowned self] in return KVOWrapper(form: self) }()
-}
-
-extension Form: Collection {
-    public var startIndex: Int { return 0 }
-    public var endIndex: Int { return kvoWrapper.sections.count }
-}
-
-extension Form: MutableCollection {
-
-    // MARK: MutableCollectionType
-
-    public subscript (_ position: Int) -> Section {
-        get { return kvoWrapper.sections[position] as! Section }
-        set {
-            if position > kvoWrapper.sections.count {
-                assertionFailure("Form: Index out of bounds")
-            }
-
-            if position < kvoWrapper.sections.count {
-                let oldSection = kvoWrapper.sections[position]
-                let oldSectionIndex = kvoWrapper._allSections.firstIndex(of: oldSection as! Section)!
-                // Remove the previous section from the form
-                kvoWrapper._allSections[oldSectionIndex].willBeRemovedFromForm()
-                kvoWrapper._allSections[oldSectionIndex] = newValue
-            } else {
-                kvoWrapper._allSections.append(newValue)
-            }
-
-            kvoWrapper.sections[position] = newValue
-            newValue.wasAddedTo(form: self)
-        }
-    }
-    public func index(after i: Int) -> Int {
-        return i+1 <= endIndex ? i+1 : endIndex
-    }
-    public func index(before i: Int) -> Int {
-        return i > startIndex ? i-1 : startIndex
-    }
-    public var last: Section? {
-        return reversed().first
-    }
-
-}
-
-extension Form : RangeReplaceableCollection {
-
-    // MARK: RangeReplaceableCollectionType
-
-    public func append(_ formSection: Section) {
-        kvoWrapper.sections.insert(formSection, at: kvoWrapper.sections.count)
-        kvoWrapper._allSections.append(formSection)
-        formSection.wasAddedTo(form: self)
-    }
-
-    public func append<S: Sequence>(contentsOf newElements: S) where S.Iterator.Element == Section {
-        kvoWrapper.sections.addObjects(from: newElements.map { $0 })
-        kvoWrapper._allSections.append(contentsOf: newElements)
-        for section in newElements {
-            section.wasAddedTo(form: self)
-        }
-    }
-
-    public func replaceSubrange<C: Collection>(
-        _ subRange: Range<Int>,
-        with newElements: C
-    ) where C.Iterator.Element == Section {
-        for i in subRange.lowerBound..<subRange.upperBound {
-            if let section = kvoWrapper.sections.object(at: i) as? Section {
-                section.willBeRemovedFromForm()
-                kvoWrapper._allSections.remove(at: kvoWrapper._allSections.firstIndex(of: section)!)
-            }
-        }
-        kvoWrapper.sections.replaceObjects(
-            in: NSRange(location: subRange.lowerBound, length: subRange.upperBound - subRange.lowerBound),
-            withObjectsFrom: newElements.map { $0 }
-        )
-        kvoWrapper._allSections.insert(contentsOf: newElements, at: indexForInsertion(at: subRange.lowerBound))
-
-        for section in newElements {
-            section.wasAddedTo(form: self)
-        }
-    }
-
-    public func replaceSubrangeInAllSections<C: Collection>(
-        _ subRange: Range<Int>,
-        with newElements: C
-    ) where C.Iterator.Element == Section {
-        // Remove subrange in all sections
-        for i in subRange.reversed() where kvoWrapper._allSections.count > i {
-            let removed = kvoWrapper._allSections.remove(at: i)
-            removed.willBeRemovedFromForm()
-        }
-
-        kvoWrapper._allSections.insert(contentsOf: newElements, at: indexForInsertion(at: subRange.lowerBound))
-
-        // Replace all visible sections by `kvoWrapper._allSections`, as hidden ones are being removed later anyway
-        kvoWrapper.sections.replaceObjects(
-            in: NSRange(location: 0, length: kvoWrapper.sections.count),
-            withObjectsFrom: kvoWrapper._allSections
-        )
-
-        for section in newElements {
-            section.wasAddedTo(form: self)
-        }
-    }
-
-    public func removeAll(keepingCapacity keepCapacity: Bool = false) {
-        // not doing anything with capacity
-
-        let sections = kvoWrapper._allSections
-        kvoWrapper.removeAllSections()
-
-        for section in sections {
-            section.willBeRemovedFromForm()
-        }
-    }
-
-    public func removeAll(where shouldBeRemoved: (Section) throws -> Bool) rethrows {
-        let indices = try kvoWrapper._allSections.enumerated()
-            .filter { try shouldBeRemoved($0.element)}
-            .map { $0.offset }
-
-        var removedSections = [Section]()
-        for index in indices.reversed() {
-            removedSections.append(kvoWrapper._allSections.remove(at: index))
-        }
-        kvoWrapper.sections.removeObjects(in: removedSections)
-
-        removedSections.forEach { $0.willBeRemovedFromForm() }
-    }
-
-    private func indexForInsertion(at index: Int) -> Int {
-        guard index != 0 else { return 0 }
-
-        let section = kvoWrapper.sections[index-1]
-        if let i = kvoWrapper._allSections.firstIndex(of: section as! Section) {
-            return i + 1
-        }
-        return kvoWrapper._allSections.count
-    }
-
-}
-
-extension Form {
-
-    // MARK: Private Helpers
-
-    class KVOWrapper: NSObject {
-        @objc dynamic private var _sections = NSMutableArray()
-        var sections: NSMutableArray { return mutableArrayValue(forKey: "_sections") }
-        var _allSections = [Section]()
-        private weak var form: Form?
-
-        init(form: Form) {
-            self.form = form
-            super.init()
-            addObserver(self, forKeyPath: "_sections", options: [.new, .old], context:nil)
-        }
-
-        deinit {
-            removeObserver(self, forKeyPath: "_sections")
-            _sections.removeAllObjects()
-            _allSections.removeAll()
-        }
-
-        func removeAllSections() {
-            _sections = []
-            _allSections.removeAll()
-        }
-
-        public override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
-            let newSections = change?[NSKeyValueChangeKey.newKey] as? [Section] ?? []
-            let oldSections = change?[NSKeyValueChangeKey.oldKey] as? [Section] ?? []
-            guard let delegateValue = form?.delegate, let keyPathValue = keyPath, let changeType = change?[NSKeyValueChangeKey.kindKey] else { return }
-            guard keyPathValue == "_sections" else { return }
-            switch (changeType as! NSNumber).uintValue {
-            case NSKeyValueChange.setting.rawValue:
-                if newSections.count == 0 {
-                    let indexSet = IndexSet(integersIn: 0..<oldSections.count)
-                    delegateValue.sectionsHaveBeenRemoved(oldSections, at: indexSet)
-                } else {
-                    let indexSet = change![NSKeyValueChangeKey.indexesKey] as? IndexSet ?? IndexSet(integersIn: 0..<newSections.count)
-                    delegateValue.sectionsHaveBeenAdded(newSections, at: indexSet)
-                }
-            case NSKeyValueChange.insertion.rawValue:
-                let indexSet = change![NSKeyValueChangeKey.indexesKey] as! IndexSet
-                delegateValue.sectionsHaveBeenAdded(newSections, at: indexSet)
-            case NSKeyValueChange.removal.rawValue:
-                let indexSet = change![NSKeyValueChangeKey.indexesKey] as! IndexSet
-                delegateValue.sectionsHaveBeenRemoved(oldSections, at: indexSet)
-            case NSKeyValueChange.replacement.rawValue:
-                let indexSet = change![NSKeyValueChangeKey.indexesKey] as! IndexSet
-                delegateValue.sectionsHaveBeenReplaced(oldSections: oldSections, newSections: newSections, at: indexSet)
-            default:
-                assertionFailure()
-            }
-        }
-    }
-
-    func dictionaryValuesToEvaluatePredicate() -> [String: Any] {
-        return tagToValues
-    }
-
-    func addRowObservers(to taggable: Taggable, rowTags: [String], type: ConditionType) {
-        for rowTag in rowTags {
-            if rowObservers[rowTag] == nil {
-                rowObservers[rowTag] = Dictionary()
-            }
-            if let _ = rowObservers[rowTag]?[type] {
-                if !rowObservers[rowTag]![type]!.contains(where: { $0 === taggable }) {
-                    rowObservers[rowTag]?[type]!.append(taggable)
-                }
-            } else {
-                rowObservers[rowTag]?[type] = [taggable]
-            }
-        }
-    }
-
-    func removeRowObservers(from taggable: Taggable, rowTags: [String], type: ConditionType) {
-        for rowTag in rowTags {
-            guard let arr = rowObservers[rowTag]?[type], let index = arr.firstIndex(where: { $0 === taggable }) else { continue }
-            rowObservers[rowTag]?[type]?.remove(at: index)
-            if rowObservers[rowTag]?[type]?.isEmpty == true {
-                rowObservers[rowTag] = nil
-            }
-        }
-    }
-
-    func nextRow(for row: BaseRow) -> BaseRow? {
-        let allRows = rows
-        guard let index = allRows.firstIndex(of: row) else { return nil }
-        guard index < allRows.count - 1 else { return nil }
-        return allRows[index + 1]
-    }
-
-    func previousRow(for row: BaseRow) -> BaseRow? {
-        let allRows = rows
-        guard let index = allRows.firstIndex(of: row) else { return nil }
-        guard index > 0 else { return nil }
-        return allRows[index - 1]
-    }
-
-    func hideSection(_ section: Section) {
-        kvoWrapper.sections.remove(section)
-    }
-
-    func showSection(_ section: Section) {
-        guard !kvoWrapper.sections.contains(section) else { return }
-        guard var index = kvoWrapper._allSections.firstIndex(of: section) else { return }
-        var formIndex = NSNotFound
-        while formIndex == NSNotFound && index > 0 {
-            index = index - 1
-            let previous = kvoWrapper._allSections[index]
-            formIndex = kvoWrapper.sections.index(of: previous)
-        }
-        kvoWrapper.sections.insert(section, at: formIndex == NSNotFound ? 0 : formIndex + 1 )
-    }
-	
-	var containsMultivaluedSection: Bool {
-		return kvoWrapper._allSections.contains { $0 is BaseMultivaluedSection }
-	}
-
-    func getValues(for rows: [BaseRow]) -> [String: Any?] {
-        return rows.reduce([String: Any?]()) {
-            var result = $0
-            result[$1.tag!] = $1.baseValue
-            return result
-        }
-    }
-
-    func getValues(for multivaluedSections: [BaseMultivaluedSection]?) -> [String: [Any?]] {
-        return multivaluedSections?.reduce([String: [Any?]]()) {
-            var result = $0
-            result[$1.tag!] = $1.values()
-            return result
-            } ?? [:]
-    }
-
-}
-
-extension Form {
-
-    @discardableResult
-    public func validate(includeHidden: Bool = false, includeDisabled: Bool = true, quietly: Bool = false) -> [ValidationError] {
-        let rowsWithHiddenFilter = includeHidden ? allRows : rows
-        let rowsWithDisabledFilter = includeDisabled ? rowsWithHiddenFilter : rowsWithHiddenFilter.filter { $0.isDisabled != true }
-        
-        return rowsWithDisabledFilter.reduce([ValidationError]()) { res, row in
-            var res = res
-            res.append(contentsOf: row.validate(quietly: quietly))
-            return res
-        }
-    }
-    
-    // Reset rows validation
-    public func cleanValidationErrors(){
-        allRows.forEach { $0.cleanValidationErrors() }
-    }
-}
-

+ 0 - 162
Pods/Eureka/Source/Core/HeaderFooterView.swift

@@ -1,162 +0,0 @@
-//  HeaderFooterView.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-/**
- Enumeration used to generate views for the header and footer of a section.
- 
- - Class:              Will generate a view of the specified class.
- - Callback->ViewType: Will generate the view as a result of the given closure.
- - NibFile:            Will load the view from a nib file.
- */
-public enum HeaderFooterProvider<ViewType: UIView> {
-
-    /**
-     * Will generate a view of the specified class.
-     */
-    case `class`
-
-    /**
-     * Will generate the view as a result of the given closure.
-     */
-    case callback(()->ViewType)
-
-    /**
-     * Will load the view from a nib file.
-     */
-    case nibFile(name: String, bundle: Bundle?)
-
-    internal func createView() -> ViewType {
-        switch self {
-        case .class:
-            return ViewType()
-        case .callback(let builder):
-            return builder()
-        case .nibFile(let nibName, let bundle):
-            return (bundle ?? Bundle(for: ViewType.self)).loadNibNamed(nibName, owner: nil, options: nil)![0] as! ViewType
-        }
-    }
-}
-
-/**
- * Represents headers and footers of sections
- */
-public enum HeaderFooterType {
-    case header, footer
-}
-
-/**
- *  Struct used to generate headers and footers either from a view or a String.
- */
-public struct HeaderFooterView<ViewType: UIView> : ExpressibleByStringLiteral, HeaderFooterViewRepresentable {
-
-    /// Holds the title of the view if it was set up with a String.
-    public var title: String?
-
-    /// Generates the view.
-    public var viewProvider: HeaderFooterProvider<ViewType>?
-
-    /// Closure called when the view is created. Useful to customize its appearance.
-    public var onSetupView: ((_ view: ViewType, _ section: Section) -> Void)?
-
-    /// A closure that returns the height for the header or footer view.
-    public var height: (() -> CGFloat)?
-
-    /**
-     This method can be called to get the view corresponding to the header or footer of a section in a specific controller.
-     
-     - parameter section:    The section from which to get the view.
-     - parameter type:       Either header or footer.
-     - parameter controller: The controller from which to get that view.
-     
-     - returns: The header or footer of the specified section.
-     */
-    public func viewForSection(_ section: Section, type: HeaderFooterType) -> UIView? {
-        var view: ViewType?
-        if type == .header {
-            view = section.headerView as? ViewType ?? {
-                            let result = viewProvider?.createView()
-                            section.headerView = result
-                            return result
-                        }()
-        } else {
-            view = section.footerView as? ViewType ?? {
-                            let result = viewProvider?.createView()
-                            section.footerView = result
-                            return result
-                        }()
-        }
-        guard let v = view else { return nil }
-        onSetupView?(v, section)
-        return v
-    }
-
-    /**
-     Initiates the view with a String as title
-     */
-    public init?(title: String?) {
-        guard let t = title else { return nil }
-        self.init(stringLiteral: t)
-    }
-
-    /**
-     Initiates the view with a view provider, ideal for customized headers or footers
-     */
-    public init(_ provider: HeaderFooterProvider<ViewType>) {
-        viewProvider = provider
-    }
-
-    /**
-     Initiates the view with a String as title
-     */
-    public init(unicodeScalarLiteral value: String) {
-        self.title  = value
-    }
-
-    /**
-     Initiates the view with a String as title
-     */
-    public init(extendedGraphemeClusterLiteral value: String) {
-        self.title = value
-    }
-
-    /**
-     Initiates the view with a String as title
-     */
-    public init(stringLiteral value: String) {
-        self.title = value
-    }
-}
-
-extension UIView {
-
-    func eurekaInvalidate() {
-        setNeedsUpdateConstraints()
-        updateConstraintsIfNeeded()
-        setNeedsLayout()
-    }
-
-}

+ 0 - 79
Pods/Eureka/Source/Core/Helpers.swift

@@ -1,79 +0,0 @@
-//  Helpers.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-extension UIView {
-
-    public func findFirstResponder() -> UIView? {
-        if isFirstResponder { return self }
-        for subView in subviews {
-            if let firstResponder = subView.findFirstResponder() {
-                return firstResponder
-            }
-        }
-        return nil
-    }
-
-    public func formCell() -> BaseCell? {
-        if self is UITableViewCell {
-            return self as? BaseCell
-        }
-        return superview?.formCell()
-    }
-}
-
-extension NSPredicate {
-
-    var predicateVars: [String] {
-        var ret = [String]()
-        if let compoundPredicate = self as? NSCompoundPredicate {
-            for subPredicate in compoundPredicate.subpredicates where subPredicate is NSPredicate {
-                ret.append(contentsOf: (subPredicate as! NSPredicate).predicateVars)
-            }
-        } else if let comparisonPredicate = self as? NSComparisonPredicate {
-            ret.append(contentsOf: comparisonPredicate.leftExpression.expressionVars)
-            ret.append(contentsOf: comparisonPredicate.rightExpression.expressionVars)
-        }
-        return ret
-    }
-}
-
-extension NSExpression {
-
-    var expressionVars: [String] {
-        switch expressionType {
-            case .function, .variable:
-                let str = "\(self)"
-                if let range = str.range(of: ".") {
-                    return [String(str[str.index(str.startIndex, offsetBy: 1)..<range.lowerBound])]
-                } else {
-                    return [String(str[str.index(str.startIndex, offsetBy: 1)...])]
-                }
-            default:
-                return []
-        }
-    }
-}

+ 0 - 147
Pods/Eureka/Source/Core/InlineRowType.swift

@@ -1,147 +0,0 @@
-//  InlineRowType.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-public protocol BaseInlineRowType {
-    /**
-     Method that can be called to expand (open) an inline row
-     */
-    func expandInlineRow()
-
-    /**
-     Method that can be called to collapse (close) an inline row
-     */
-    func collapseInlineRow()
-
-    /**
-     Method that can be called to change the status of an inline row (expanded/collapsed)
-     */
-    func toggleInlineRow()
-}
-
-/**
- *  Protocol that every inline row type has to conform to.
- */
-public protocol InlineRowType: TypedRowType, BaseInlineRowType {
-
-    associatedtype InlineRow: BaseRow, RowType
-
-    /**
-     This function is responsible for setting up an inline row before it is first shown.
-     */
-    func setupInlineRow(_ inlineRow: InlineRow)
-}
-
-extension InlineRowType where Self: BaseRow, Self.Cell.Value ==  Self.InlineRow.Cell.Value {
-
-    /// The row that will be inserted below after the current one when it is selected.
-    public var inlineRow: Self.InlineRow? { return _inlineRow as? Self.InlineRow }
-
-    /**
-     Method that can be called to expand (open) an inline row.
-     */
-    public func expandInlineRow() {
-        if let _ = inlineRow { return }
-        if var section = section, let form = section.form {
-            let inline = InlineRow.init { _ in }
-            inline.value = value
-            inline.onChange { [weak self] in
-                self?.value = $0.value
-                self?.updateCell()
-            }
-            setupInlineRow(inline)
-            if (form.inlineRowHideOptions ?? Form.defaultInlineRowHideOptions).contains(.AnotherInlineRowIsShown) {
-                for row in form.allRows {
-                    if let inlineRow = row as? BaseInlineRowType {
-                        inlineRow.collapseInlineRow()
-                    }
-                }
-            }
-            if let onExpandInlineRowCallback = onExpandInlineRowCallback {
-                onExpandInlineRowCallback(cell, self, inline)
-            }
-            if let indexPath = indexPath {
-                _inlineRow = inline
-                section.insert(inline, at: indexPath.row + 1)
-                cell.formViewController()?.makeRowVisible(inline, destinationScrollPosition: destinationScrollPosition)
-            }
-        }
-    }
-
-    /**
-     Method that can be called to collapse (close) an inline row.
-     */
-    public func collapseInlineRow() {
-        if let selectedRowPath = indexPath, let inlineRow = _inlineRow {
-            if let onCollapseInlineRowCallback = onCollapseInlineRowCallback {
-                onCollapseInlineRowCallback(cell, self, inlineRow as! InlineRow)
-            }
-            _inlineRow = nil
-            section?.remove(at: selectedRowPath.row + 1)
-        }
-    }
-
-    /**
-     Method that can be called to change the status of an inline row (expanded/collapsed).
-     */
-    public func toggleInlineRow() {
-        if let _ = inlineRow {
-            collapseInlineRow()
-        } else {
-            expandInlineRow()
-        }
-    }
-
-    /**
-     Sets a block to be executed when a row is expanded.
-     */
-    @discardableResult
-    public func onExpandInlineRow(_ callback: @escaping (Cell, Self, InlineRow) -> Void) -> Self {
-        callbackOnExpandInlineRow = callback
-        return self
-    }
-
-    /**
-     Sets a block to be executed when a row is collapsed.
-     */
-    @discardableResult
-    public func onCollapseInlineRow(_ callback: @escaping (Cell, Self, InlineRow) -> Void) -> Self {
-        callbackOnCollapseInlineRow = callback
-        return self
-    }
-
-    /// Returns the block that will be executed when this row expands
-    public var onCollapseInlineRowCallback: ((Cell, Self, InlineRow) -> Void)? {
-        return callbackOnCollapseInlineRow as! ((Cell, Self, InlineRow) -> Void)?
-    }
-
-    /// Returns the block that will be executed when this row collapses
-    public var onExpandInlineRowCallback: ((Cell, Self, InlineRow) -> Void)? {
-        return callbackOnExpandInlineRow as! ((Cell, Self, InlineRow) -> Void)?
-    }
-
-    public var isExpanded: Bool { return _inlineRow != nil }
-    public var isCollapsed: Bool { return !isExpanded }
-}

+ 0 - 155
Pods/Eureka/Source/Core/NavigationAccessoryView.swift

@@ -1,155 +0,0 @@
-//  NavigationAccessoryView.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-public protocol NavigationAccessory {
-    var doneClosure: (() -> ())? { get set }
-    var nextClosure: (() -> ())? { get set }
-    var previousClosure: (() -> ())? { get set }
-
-    var previousEnabled: Bool { get set }
-    var nextEnabled: Bool { get set }
-}
-
-/// Class for the navigation accessory view used in FormViewController
-@objc(EurekaNavigationAccessoryView)
-open class NavigationAccessoryView: UIToolbar, NavigationAccessory {
-    open var previousButton: UIBarButtonItem!
-    open var nextButton: UIBarButtonItem!
-    open var doneButton: UIBarButtonItem!
-    private var fixedSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
-    private var flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
-
-    public override init(frame: CGRect) {
-        super.init(frame: CGRect(x: 0, y: 0, width: frame.size.width, height: 44.0))
-        autoresizingMask = .flexibleWidth
-        fixedSpace.width = 22.0
-        initializeChevrons()
-        initializeDoneButton()
-        setItems([previousButton, fixedSpace, nextButton, flexibleSpace, doneButton], animated: false)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    private func drawChevron(pointingRight: Bool) -> UIImage? {
-        // Hardcoded chevron size
-        let width = 12
-        let height = 20
-
-        // Begin the image context, with which we are going to draw a chevron
-        UIGraphicsBeginImageContextWithOptions(CGSize(width: width, height: height), false, 0.0)
-        guard let context = UIGraphicsGetCurrentContext() else { return nil }
-        defer {
-            UIGraphicsEndImageContext()
-        }
-
-        // The chevron looks like > or <. This can be drawn with 3 points; the Y coordinates of the points
-        // are independant of whether it is to be pointing left or right; the X coordinates will depend, as follows.
-        // The 1s are to ensure that the point of the chevron does not sit exactly on the edge of the frame, which
-        // would slightly truncate the point.
-        let chevronPointXCoordinate, chevronTailsXCoordinate: Int
-        if pointingRight {
-            chevronPointXCoordinate = width - 1
-            chevronTailsXCoordinate = 1
-        } else {
-            chevronPointXCoordinate = 1
-            chevronTailsXCoordinate = width - 1
-        }
-
-        // Draw the lines and return the image
-        context.setLineWidth(1.5)
-        context.setLineCap(.square)
-        context.strokeLineSegments(between: [
-            CGPoint(x: chevronTailsXCoordinate, y: 0),
-            CGPoint(x: chevronPointXCoordinate, y: height / 2),
-            CGPoint(x: chevronPointXCoordinate, y: height / 2),
-            CGPoint(x: chevronTailsXCoordinate, y: height)
-        ])
-
-        return UIGraphicsGetImageFromCurrentImageContext()
-    }
-    
-    private func initializeChevrons() {
-        var imageLeftChevron, imageRightChevron: UIImage?
-        if #available(iOS 13.0, *) {
-            // If we have access to SFSymbols, use the system chevron images, rather than faffing around with our own
-            imageLeftChevron = UIImage(systemName: "chevron.left")
-            imageRightChevron = UIImage(systemName: "chevron.right")
-        } else {
-            imageLeftChevron = drawChevron(pointingRight: false)
-            imageRightChevron = drawChevron(pointingRight: true)
-        }
-        
-        // RTL language support
-        imageLeftChevron = imageLeftChevron?.imageFlippedForRightToLeftLayoutDirection()
-        imageRightChevron = imageRightChevron?.imageFlippedForRightToLeftLayoutDirection()
-
-        previousButton = UIBarButtonItem(image: imageLeftChevron, style: .plain, target: self, action: #selector(didTapPrevious))
-        nextButton = UIBarButtonItem(image: imageRightChevron, style: .plain, target: self, action: #selector(didTapNext))
-    }
-    
-    private func initializeDoneButton() {
-        doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(didTapDone))
-    }
-
-    open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {}
-
-    public var doneClosure: (() -> ())?
-    public var nextClosure: (() -> ())?
-    public var previousClosure: (() -> ())?
-
-    @objc private func didTapDone() {
-        doneClosure?()
-    }
-
-    @objc private func didTapNext() {
-        nextClosure?()
-    }
-
-    @objc private func didTapPrevious() {
-        previousClosure?()
-    }
-
-    public var previousEnabled: Bool {
-        get {
-            return previousButton.isEnabled
-        }
-        set {
-            previousButton.isEnabled = newValue
-        }
-    }
-
-    public var nextEnabled: Bool {
-        get {
-            return nextButton.isEnabled
-        }
-        set {
-            nextButton.isEnabled = newValue
-        }
-    }
-}

+ 0 - 161
Pods/Eureka/Source/Core/Operators.swift

@@ -1,161 +0,0 @@
-//  Operators.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-// MARK: Operators
-
-precedencegroup FormPrecedence {
-    associativity: left
-    higherThan: LogicalConjunctionPrecedence
-}
-
-precedencegroup SectionPrecedence {
-    associativity: left
-    higherThan: FormPrecedence
-}
-
-infix operator +++ : FormPrecedence
-
-/**
- Appends a section to a form
- 
- - parameter left:  the form
- - parameter right: the section to be appended
- 
- - returns: the updated form
- */
-@discardableResult
-public func +++ (left: Form, right: Section) -> Form {
-    left.append(right)
-    return left
-}
-
-/**
- Appends a row to the last section of a form
- 
- - parameter left:  the form
- - parameter right: the row
- */
-@discardableResult
-public func +++ (left: Form, right: BaseRow) -> Form {
-    let section = Section()
-    let _ =  left +++ section <<< right
-    return left
-}
-
-/**
- Creates a form with two sections
- 
- - parameter left:  the first section
- - parameter right: the second section
- 
- - returns: the created form
- */
-@discardableResult
-public func +++ (left: Section, right: Section) -> Form {
-    let form = Form()
-    let _ =  form +++ left +++ right
-    return form
-}
-
-/**
- Appends the row wrapped in a new section
- 
- - parameter left: a section of the form
- - parameter right: a row to be appended
- 
- - returns: the form
- */
-@discardableResult
-public func +++ (left: Section, right: BaseRow) -> Form {
-    let section = Section()
-    section <<< right
-    return left +++ section
-}
-
-/**
- Creates a form with two sections, each containing one row.
- 
- - parameter left:  The row for the first section
- - parameter right: The row for the second section
- 
- - returns: the created form
- */
-@discardableResult
-public func +++ (left: BaseRow, right: BaseRow) -> Form {
-    let form = Section() <<< left +++ Section() <<< right
-    return form
-}
-
-infix operator <<< : SectionPrecedence
-
-/**
- Appends a row to a section.
- 
- - parameter left:  the section
- - parameter right: the row to be appended
- 
- - returns: the section
- */
-@discardableResult
-public func <<< (left: Section, right: BaseRow) -> Section {
-    left.append(right)
-    return left
-}
-
-/**
- Creates a section with two rows
- 
- - parameter left:  The first row
- - parameter right: The second row
- 
- - returns: the created section
- */
-@discardableResult
-public func <<< (left: BaseRow, right: BaseRow) -> Section {
-    let section = Section()
-    section <<< left <<< right
-    return section
-}
-
-/**
- Appends a collection of rows to a section
- 
- - parameter lhs: the section
- - parameter rhs: the rows to be appended
- */
-public func += <C: Collection>(lhs: inout Section, rhs: C) where C.Iterator.Element == BaseRow {
-    lhs.append(contentsOf: rhs)
-}
-
-/**
- Appends a collection of section to a form
- 
- - parameter lhs: the form
- - parameter rhs: the sections to be appended
- */
-public func += <C: Collection>(lhs: inout Form, rhs: C) where C.Iterator.Element == Section {
-    lhs.append(contentsOf: rhs)
-}

+ 0 - 57
Pods/Eureka/Source/Core/PresenterRowType.swift

@@ -1,57 +0,0 @@
-//  PresenterRowType.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-/**
- *  Protocol that every row that displays a new view controller must conform to.
- *  This includes presenting or pushing view controllers.
- */
-public protocol PresenterRowType: TypedRowType {
-
-    associatedtype PresentedControllerType : UIViewController, TypedRowControllerType
-
-    /// Defines how the view controller will be presented, pushed, etc.
-    var presentationMode: PresentationMode<PresentedControllerType>? { get set }
-
-    /// Will be called before the presentation occurs.
-    var onPresentCallback: ((FormViewController, PresentedControllerType) -> Void)? { get set }
-}
-
-extension PresenterRowType {
-
-    /**
-     Sets a block to be executed when the row presents a view controller
-     
-     - parameter callback: the block
-     
-     - returns: this row
-     */
-    @discardableResult
-    public func onPresent(_ callback: ((FormViewController, PresentedControllerType) -> Void)?) -> Self {
-        onPresentCallback = callback
-        return self
-    }
-}

+ 0 - 203
Pods/Eureka/Source/Core/Row.swift

@@ -1,203 +0,0 @@
-//  Row.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-open class RowOf<T>: BaseRow where T: Equatable {
-
-    private var _value: T? {
-        didSet {
-            guard _value != oldValue else { return }
-            guard let form = section?.form else { return }
-            if let delegate = form.delegate {
-                delegate.valueHasBeenChanged(for: self, oldValue: oldValue, newValue: value)
-                callbackOnChange?()
-            }
-            guard let t = tag else { return }
-            form.tagToValues[t] = (value != nil ? value! : NSNull())
-            if let rowObservers = form.rowObservers[t]?[.hidden] {
-                for rowObserver in rowObservers {
-                    (rowObserver as? Hidable)?.evaluateHidden()
-                }
-            }
-            if let rowObservers = form.rowObservers[t]?[.disabled] {
-                for rowObserver in rowObservers {
-                    (rowObserver as? Disableable)?.evaluateDisabled()
-                }
-            }
-        }
-    }
-
-    /// The typed value of this row.
-    open var value: T? {
-        set (newValue) {
-            _value = newValue
-            guard let _ = section?.form else { return }
-            wasChanged = true
-            if validationOptions.contains(.validatesOnChange) || (wasBlurred && validationOptions.contains(.validatesOnChangeAfterBlurred)) ||  (!isValid && validationOptions != .validatesOnDemand) {
-                validate()
-            }
-        }
-        get {
-            return _value
-        }
-    }
-    
-    /// The reset value of this row. Sets the value property to the value of this row on the resetValue method call.
-    open var resetValue: T?
-
-    /// The untyped value of this row.
-    public override var baseValue: Any? {
-        get { return value }
-        set { value = newValue as? T }
-    }
-
-    /// Block variable used to get the String that should be displayed for the value of this row.
-    public var displayValueFor: ((T?) -> String?)? = {
-        return $0.map { String(describing: $0) }
-    }
-
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-
-    public internal(set) var rules: [ValidationRuleHelper<T>] = []
-
-    @discardableResult
-    open override func validate(quietly: Bool = false) -> [ValidationError] {
-        var vErrors = [ValidationError]()
-        #if swift(>=4.1)
-        vErrors = rules.compactMap { $0.validateFn(value) }
-        #else
-        vErrors = rules.flatMap { $0.validateFn(value) }
-        #endif
-        if (!quietly) {
-            validationErrors = vErrors
-        }
-        return vErrors
-    }
-    
-    /// Resets the value of the row. Setting it's value to it's reset value.
-    public func resetRowValue() {
-        value = resetValue
-    }
-
-    /// Add a Validation rule for the Row
-    /// - Parameter rule: RuleType object to add
-    public func add<Rule: RuleType>(rule: Rule) where T == Rule.RowValueType {
-        let validFn: ((T?) -> ValidationError?) = { (val: T?) in
-            return rule.isValid(value: val)
-        }
-        rules.append(ValidationRuleHelper(validateFn: validFn, rule: rule))
-    }
-
-    /// Add a Validation rule set for the Row
-    /// - Parameter ruleSet: RuleSet<T> set of rules to add
-    public func add(ruleSet: RuleSet<T>) {
-        rules.append(contentsOf: ruleSet.rules)
-    }
-
-    public func remove(ruleWithIdentifier identifier: String) {
-        if let index = rules.firstIndex(where: { (validationRuleHelper) -> Bool in
-            return validationRuleHelper.rule.id == identifier
-        }) {
-            rules.remove(at: index)
-        }
-    }
-
-    public func removeAllRules() {
-        validationErrors.removeAll()
-        rules.removeAll()
-    }
-
-}
-
-/// Generic class that represents an Eureka row.
-open class Row<Cell: CellType>: RowOf<Cell.Value>, TypedRowType where Cell: BaseCell {
-
-    /// Responsible for creating the cell for this row.
-    public var cellProvider = CellProvider<Cell>()
-
-    /// The type of the cell associated to this row.
-    public let cellType: Cell.Type! = Cell.self
-
-    private var _cell: Cell! {
-        didSet {
-            RowDefaults.cellSetup["\(type(of: self))"]?(_cell, self)
-            (callbackCellSetup as? ((Cell) -> Void))?(_cell)
-        }
-    }
-
-    /// The cell associated to this row.
-    public var cell: Cell! {
-        return _cell ?? {
-            let result = cellProvider.makeCell(style: self.cellStyle)
-            result.row = self
-            result.setup()
-            _cell = result
-            return _cell
-        }()
-    }
-
-    /// The untyped cell associated to this row
-    public override var baseCell: BaseCell { return cell }
-
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-
-    /**
-     Method that reloads the cell
-     */
-    override open func updateCell() {
-        super.updateCell()
-        cell.update()
-        customUpdateCell()
-        RowDefaults.cellUpdate["\(type(of: self))"]?(cell, self)
-        callbackCellUpdate?()
-    }
-
-    /**
-     Method called when the cell belonging to this row was selected. Must call the corresponding method in its cell.
-     */
-    open override func didSelect() {
-        super.didSelect()
-        if !isDisabled {
-            cell?.didSelect()
-        }
-        customDidSelect()
-        callbackCellOnSelection?()
-    }
-
-    /**
-     Will be called inside `didSelect` method of the row. Can be used to customize row selection from the definition of the row.
-     */
-    open func customDidSelect() {}
-
-    /**
-     Will be called inside `updateCell` method of the row. Can be used to customize reloading a row from its definition.
-     */
-    open func customUpdateCell() {}
-
-}

+ 0 - 35
Pods/Eureka/Source/Core/RowControllerType.swift

@@ -1,35 +0,0 @@
-//  RowControllerType.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-/**
- *  Base protocol for view controllers presented by Eureka rows.
- */
-public protocol RowControllerType: NSObjectProtocol {
-
-    /// A closure to be called when the controller disappears.
-    var onDismissCallback: ((UIViewController) -> Void)? { get set }
-}

+ 0 - 62
Pods/Eureka/Source/Core/RowProtocols.swift

@@ -1,62 +0,0 @@
-//  RowProtocols.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-/**
- *  Protocol that view controllers pushed or presented by a row should conform to.
- */
-public protocol TypedRowControllerType: RowControllerType {
-    associatedtype RowValue: Equatable
-
-    /// The row that pushed or presented this controller
-    var row: RowOf<Self.RowValue>! { get set }
-}
-
-// MARK: Header Footer Protocols
-
-/**
- *  Protocol used to set headers and footers to sections.
- *  Can be set with a view or a String
- */
-public protocol HeaderFooterViewRepresentable {
-
-    /**
-     This method can be called to get the view corresponding to the header or footer of a section in a specific controller.
-     
-     - parameter section:    The section from which to get the view.
-     - parameter type:       Either header or footer.
-     - parameter controller: The controller from which to get that view.
-     
-     - returns: The header or footer of the specified section.
-     */
-    func viewForSection(_ section: Section, type: HeaderFooterType) -> UIView?
-
-    /// If the header or footer of a section was created with a String then it will be stored in the title.
-    var title: String? { get set }
-
-    /// The height of the header or footer.
-    var height: (() -> CGFloat)? { get set }
-}

+ 0 - 258
Pods/Eureka/Source/Core/RowType.swift

@@ -1,258 +0,0 @@
-//  RowType.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-protocol Disableable: Taggable {
-    func evaluateDisabled()
-    var disabled: Condition? { get set }
-    var isDisabled: Bool { get }
-}
-
-protocol Hidable: Taggable {
-    func evaluateHidden()
-    var hidden: Condition? { get set }
-    var isHidden: Bool { get }
-}
-
-public protocol KeyboardReturnHandler: BaseRowType {
-    var keyboardReturnType: KeyboardReturnTypeConfiguration? { get set }
-}
-
-public protocol Taggable: AnyObject {
-    var tag: String? { get set }
-}
-
-public protocol BaseRowType: Taggable {
-
-    /// The cell associated to this row.
-    var baseCell: BaseCell! { get }
-
-    /// The section to which this row belongs.
-    var section: Section? { get }
-
-    /// Parameter used when creating the cell for this row.
-    var cellStyle: UITableViewCell.CellStyle { get set }
-
-    /// The title will be displayed in the textLabel of the row.
-    var title: String? { get set }
-
-    /**
-     Method that should re-display the cell
-     */
-    func updateCell()
-
-    /**
-     Method called when the cell belonging to this row was selected. Must call the corresponding method in its cell.
-     */
-    func didSelect()
-
-    /**
-     Typically we don't need to explicitly call this method since it is called by Eureka framework. It will validates the row if you invoke it.
-     */
-    func validate(quietly: Bool) -> [ValidationError]
-}
-
-public protocol TypedRowType: BaseRowType {
-
-    associatedtype Cell: BaseCell, TypedCellType
-
-    /// The typed cell associated to this row.
-    var cell: Cell! { get }
-
-    /// The typed value this row stores.
-    var value: Cell.Value? { get set }
-
-    func add<Rule: RuleType>(rule: Rule) where Rule.RowValueType == Cell.Value
-    func remove(ruleWithIdentifier: String)
-}
-
-/**
- *  Protocol that every row type has to conform to.
- */
-public protocol RowType: TypedRowType {
-    init(_ tag: String?, _ initializer: (Self) -> Void)
-}
-
-extension RowType where Self: BaseRow {
-
-    /**
-     Default initializer for a row
-     */
-    public init(_ tag: String? = nil, _ initializer: (Self) -> Void = { _ in }) {
-        self.init(tag: tag)
-        RowDefaults.rowInitialization["\(type(of: self))"]?(self)
-        initializer(self)
-    }
-}
-
-extension RowType where Self: BaseRow {
-
-    /// The default block executed when the cell is updated. Applies to every row of this type.
-    public static var defaultCellUpdate: ((Cell, Self) -> Void)? {
-        set {
-            if let newValue = newValue {
-                let wrapper: (BaseCell, BaseRow) -> Void = { (baseCell: BaseCell, baseRow: BaseRow) in
-                    newValue(baseCell as! Cell, baseRow as! Self)
-                }
-                RowDefaults.cellUpdate["\(self)"] = wrapper
-                RowDefaults.rawCellUpdate["\(self)"] = newValue
-            } else {
-                RowDefaults.cellUpdate["\(self)"] = nil
-                RowDefaults.rawCellUpdate["\(self)"] = nil
-            }
-        }
-        get { return RowDefaults.rawCellUpdate["\(self)"] as? ((Cell, Self) -> Void) }
-    }
-
-    /// The default block executed when the cell is created. Applies to every row of this type.
-    public static var defaultCellSetup: ((Cell, Self) -> Void)? {
-        set {
-            if let newValue = newValue {
-                let wrapper: (BaseCell, BaseRow) -> Void = { (baseCell: BaseCell, baseRow: BaseRow) in
-                    newValue(baseCell as! Cell, baseRow as! Self)
-                }
-                RowDefaults.cellSetup["\(self)"] = wrapper
-                RowDefaults.rawCellSetup["\(self)"] = newValue
-            } else {
-                RowDefaults.cellSetup["\(self)"] = nil
-                RowDefaults.rawCellSetup["\(self)"] = nil
-            }
-        }
-        get { return RowDefaults.rawCellSetup["\(self)"] as? ((Cell, Self) -> Void) }
-    }
-
-    /// The default block executed when the cell becomes first responder. Applies to every row of this type.
-    public static var defaultOnCellHighlightChanged: ((Cell, Self) -> Void)? {
-        set {
-            if let newValue = newValue {
-                let wrapper: (BaseCell, BaseRow) -> Void = { (baseCell: BaseCell, baseRow: BaseRow) in
-                    newValue(baseCell as! Cell, baseRow as! Self)
-                }
-                RowDefaults.onCellHighlightChanged ["\(self)"] = wrapper
-                RowDefaults.rawOnCellHighlightChanged["\(self)"] = newValue
-            } else {
-                RowDefaults.onCellHighlightChanged["\(self)"] = nil
-                RowDefaults.rawOnCellHighlightChanged["\(self)"] = nil
-            }
-        }
-        get { return RowDefaults.rawOnCellHighlightChanged["\(self)"] as? ((Cell, Self) -> Void) }
-    }
-
-    /// The default block executed to initialize a row. Applies to every row of this type.
-    public static var defaultRowInitializer: ((Self) -> Void)? {
-        set {
-            if let newValue = newValue {
-                let wrapper: (BaseRow) -> Void = { (baseRow: BaseRow) in
-                    newValue(baseRow as! Self)
-                }
-                RowDefaults.rowInitialization["\(self)"] = wrapper
-                RowDefaults.rawRowInitialization["\(self)"] = newValue
-            } else {
-                RowDefaults.rowInitialization["\(self)"] = nil
-                RowDefaults.rawRowInitialization["\(self)"] = nil
-            }
-        }
-        get { return RowDefaults.rawRowInitialization["\(self)"] as? ((Self) -> Void) }
-    }
-
-    /// The default block executed to initialize a row. Applies to every row of this type.
-    public static var defaultOnRowValidationChanged: ((Cell, Self) -> Void)? {
-        set {
-            if let newValue = newValue {
-                let wrapper: (BaseCell, BaseRow) -> Void = { (baseCell: BaseCell, baseRow: BaseRow) in
-                    newValue(baseCell as! Cell, baseRow as! Self)
-                }
-                RowDefaults.onRowValidationChanged["\(self)"] = wrapper
-                RowDefaults.rawOnRowValidationChanged["\(self)"] = newValue
-            } else {
-                RowDefaults.onRowValidationChanged["\(self)"] = nil
-                RowDefaults.rawOnRowValidationChanged["\(self)"] = nil
-            }
-        }
-        get { return RowDefaults.rawOnRowValidationChanged["\(self)"] as? ((Cell, Self) -> Void) }
-    }
-
-    /**
-     Sets a block to be called when the value of this row changes.
-
-     - returns: this row
-     */
-    @discardableResult
-    public func onChange(_ callback: @escaping (Self) -> Void) -> Self {
-        callbackOnChange = { [weak self] in callback(self!) }
-        return self
-    }
-
-    /**
-     Sets a block to be called when the cell corresponding to this row is refreshed.
-
-     - returns: this row
-     */
-    @discardableResult
-    public func cellUpdate(_ callback: @escaping ((_ cell: Cell, _ row: Self) -> Void)) -> Self {
-        callbackCellUpdate = { [weak self] in  callback(self!.cell, self!) }
-        return self
-    }
-
-    /**
-     Sets a block to be called when the cell corresponding to this row is created.
-
-     - returns: this row
-     */
-    @discardableResult
-    public func cellSetup(_ callback: @escaping ((_ cell: Cell, _ row: Self) -> Void)) -> Self {
-        callbackCellSetup = { [weak self] (cell: Cell) in  callback(cell, self!) }
-        return self
-    }
-
-    /**
-     Sets a block to be called when the cell corresponding to this row is selected.
-
-     - returns: this row
-     */
-    @discardableResult
-    public func onCellSelection(_ callback: @escaping ((_ cell: Cell, _ row: Self) -> Void)) -> Self {
-        callbackCellOnSelection = { [weak self] in  callback(self!.cell, self!) }
-        return self
-    }
-
-    /**
-     Sets a block to be called when the cell corresponding to this row becomes or resigns the first responder.
-
-     - returns: this row
-     */
-    @discardableResult
-    public func onCellHighlightChanged(_ callback: @escaping (_ cell: Cell, _ row: Self) -> Void) -> Self {
-        callbackOnCellHighlightChanged = { [weak self] in callback(self!.cell, self!) }
-        return self
-    }
-
-    @discardableResult
-    public func onRowValidationChanged(_ callback: @escaping (_ cell: Cell, _ row: Self) -> Void) -> Self {
-        callbackOnRowValidationChanged = { [weak self] in  callback(self!.cell, self!) }
-        return self
-    }
-}

+ 0 - 598
Pods/Eureka/Source/Core/Section.swift

@@ -1,598 +0,0 @@
-//  Section.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-/// The delegate of the Eureka sections.
-public protocol SectionDelegate: AnyObject {
-    func rowsHaveBeenAdded(_ rows: [BaseRow], at: IndexSet)
-    func rowsHaveBeenRemoved(_ rows: [BaseRow], at: IndexSet)
-    func rowsHaveBeenReplaced(oldRows: [BaseRow], newRows: [BaseRow], at: IndexSet)
-}
-
-// MARK: Section
-
-extension Section : Equatable {}
-
-public func == (lhs: Section, rhs: Section) -> Bool {
-    return lhs === rhs
-}
-
-extension Section : Hidable, SectionDelegate {}
-
-extension Section {
-
-    public func reload(with rowAnimation: UITableView.RowAnimation = .none) {
-        guard let tableView = (form?.delegate as? FormViewController)?.tableView, let index = index, index < tableView.numberOfSections else { return }
-        tableView.reloadSections(IndexSet(integer: index), with: rowAnimation)
-    }
-}
-
-extension Section {
-
-    internal class KVOWrapper: NSObject {
-
-        @objc dynamic private var _rows = NSMutableArray()
-        var rows: NSMutableArray {
-            return mutableArrayValue(forKey: "_rows")
-        }
-        var _allRows = [BaseRow]()
-
-        private weak var section: Section?
-
-        init(section: Section) {
-            self.section = section
-            super.init()
-            addObserver(self, forKeyPath: "_rows", options: [.new, .old], context:nil)
-        }
-
-        deinit {
-            removeObserver(self, forKeyPath: "_rows")
-            _rows.removeAllObjects()
-            _allRows.removeAll()
-        }
-
-        func removeAllRows() {
-            _rows = []
-            _allRows.removeAll()
-        }
-
-        public override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
-            let newRows = change![NSKeyValueChangeKey.newKey] as? [BaseRow] ?? []
-            let oldRows = change![NSKeyValueChangeKey.oldKey] as? [BaseRow] ?? []
-            guard let keyPathValue = keyPath, let changeType = change?[NSKeyValueChangeKey.kindKey] else { return }
-            let delegateValue = section?.form?.delegate
-            guard keyPathValue == "_rows" else { return }
-            switch (changeType as! NSNumber).uintValue {
-            case NSKeyValueChange.setting.rawValue:
-                if newRows.count == 0 {
-                    let indexSet = IndexSet(integersIn: 0..<oldRows.count)
-                    section?.rowsHaveBeenRemoved(oldRows, at: indexSet)
-                    if let _index = section?.index {
-                        delegateValue?.rowsHaveBeenRemoved(oldRows, at: (0..<oldRows.count).map { IndexPath(row: $0, section: _index) })
-                    }
-                } else {
-                    let indexSet = IndexSet(integersIn: 0..<newRows.count)
-                    section?.rowsHaveBeenAdded(newRows, at: indexSet)
-                    if let _index = section?.index {
-                        delegateValue?.rowsHaveBeenAdded(newRows, at: indexSet.map { IndexPath(row: $0, section: _index) })
-                    }
-                }
-            case NSKeyValueChange.insertion.rawValue:
-                let indexSet = change![NSKeyValueChangeKey.indexesKey] as! IndexSet
-                section?.rowsHaveBeenAdded(newRows, at: indexSet)
-                if let _index = section?.index {
-                    delegateValue?.rowsHaveBeenAdded(newRows, at: indexSet.map { IndexPath(row: $0, section: _index ) })
-                }
-            case NSKeyValueChange.removal.rawValue:
-                let indexSet = change![NSKeyValueChangeKey.indexesKey] as! IndexSet
-                section?.rowsHaveBeenRemoved(oldRows, at: indexSet)
-                if let _index = section?.index {
-                    delegateValue?.rowsHaveBeenRemoved(oldRows, at: indexSet.map { IndexPath(row: $0, section: _index ) })
-                }
-            case NSKeyValueChange.replacement.rawValue:
-                let indexSet = change![NSKeyValueChangeKey.indexesKey] as! IndexSet
-                section?.rowsHaveBeenReplaced(oldRows: oldRows, newRows: newRows, at: indexSet)
-                if let _index = section?.index {
-                    delegateValue?.rowsHaveBeenReplaced(oldRows: oldRows, newRows: newRows, at: indexSet.map { IndexPath(row: $0, section: _index)})
-                }
-            default:
-                assertionFailure()
-            }
-        }
-    }
-
-    /**
-     *  If this section contains a row (hidden or not) with the passed parameter as tag then that row will be returned.
-     *  If not, it returns nil.
-     */
-    public func rowBy<Row: RowType>(tag: String) -> Row? {
-        guard let index = kvoWrapper._allRows.firstIndex(where: { $0.tag == tag }) else { return nil }
-        return kvoWrapper._allRows[index] as? Row
-    }
-}
-
-/// The class representing the sections in a Eureka form.
-open class Section {
-
-    /// The tag is used to uniquely identify a Section. Must be unique among sections and rows.
-    public var tag: String?
-
-    /// The form that contains this section
-    public internal(set) weak var form: Form?
-
-    /// The header of this section.
-    public var header: HeaderFooterViewRepresentable? {
-        willSet {
-            headerView = nil
-        }
-    }
-
-    /// The footer of this section
-    public var footer: HeaderFooterViewRepresentable? {
-        willSet {
-            footerView = nil
-        }
-    }
-
-    /// Index of this section in the form it belongs to.
-    public var index: Int? { return form?.firstIndex(of: self) }
-
-    /// Condition that determines if the section should be hidden or not.
-    public var hidden: Condition? {
-        willSet { removeFromRowObservers() }
-        didSet { addToRowObservers() }
-    }
-
-    /// Returns if the section is currently hidden or not.
-    public var isHidden: Bool { return hiddenCache }
-
-    /// Returns all the rows in this section, including hidden rows.
-    public var allRows: [BaseRow] {
-        return kvoWrapper._allRows
-    }
-
-    public required init() {}
-
-    #if swift(>=4.1)
-    public required init<S>(_ elements: S) where S: Sequence, S.Element == BaseRow {
-        self.append(contentsOf: elements)
-    }
-    #endif
-
-    public init(_ initializer: @escaping (Section) -> Void) {
-        initializer(self)
-    }
-
-    public init(_ header: String?, _ initializer: @escaping (Section) -> Void = { _ in }) {
-        if let header = header {
-            self.header = HeaderFooterView(stringLiteral: header)
-        }
-        initializer(self)
-    }
-
-    public init(header: String?, footer: String?, _ initializer: (Section) -> Void = { _ in }) {
-        if let header = header {
-            self.header = HeaderFooterView(stringLiteral: header)
-        }
-        if let footer = footer {
-            self.footer = HeaderFooterView(stringLiteral: footer)
-        }
-        initializer(self)
-    }
-
-    public init(footer: String?, _ initializer: (Section) -> Void = { _ in }) {
-        if let footer = footer {
-            self.footer = HeaderFooterView(stringLiteral: footer)
-        }
-        initializer(self)
-    }
-
-    // MARK: SectionDelegate
-
-    /**
-     *  Delegate method called by the framework when one or more rows have been added to the section.
-     */
-    open func rowsHaveBeenAdded(_ rows: [BaseRow], at: IndexSet) {}
-
-    /**
-     *  Delegate method called by the framework when one or more rows have been removed from the section.
-     */
-    open func rowsHaveBeenRemoved(_ rows: [BaseRow], at: IndexSet) {}
-
-    /**
-     *  Delegate method called by the framework when one or more rows have been replaced in the section.
-     */
-    open func rowsHaveBeenReplaced(oldRows: [BaseRow], newRows: [BaseRow], at: IndexSet) {}
-
-    // MARK: Private
-    lazy var kvoWrapper: KVOWrapper = { [unowned self] in return KVOWrapper(section: self) }()
-
-    var headerView: UIView?
-    var footerView: UIView?
-    var hiddenCache = false
-}
-
-extension Section: MutableCollection, BidirectionalCollection {
-
-    // MARK: MutableCollectionType
-
-    public var startIndex: Int { return 0 }
-    public var endIndex: Int { return kvoWrapper.rows.count }
-    public subscript (position: Int) -> BaseRow {
-        get {
-            if position >= kvoWrapper.rows.count {
-                assertionFailure("Section: Index out of bounds")
-            }
-            return kvoWrapper.rows[position] as! BaseRow
-        }
-        set {
-            if position > kvoWrapper.rows.count {
-                assertionFailure("Section: Index out of bounds")
-            }
-
-            if position < kvoWrapper.rows.count {
-                let oldRow = kvoWrapper.rows[position]
-                let oldRowIndex = kvoWrapper._allRows.firstIndex(of: oldRow as! BaseRow)!
-                // Remove the previous row from the form
-                kvoWrapper._allRows[oldRowIndex].willBeRemovedFromSection()
-                kvoWrapper._allRows[oldRowIndex] = newValue
-            } else {
-                kvoWrapper._allRows.append(newValue)
-            }
-
-            kvoWrapper.rows[position] = newValue
-            newValue.wasAddedTo(section: self)
-        }
-    }
-
-    public subscript (range: Range<Int>) -> ArraySlice<BaseRow> {
-        get { return kvoWrapper.rows.map { $0 as! BaseRow }[range] }
-        set { replaceSubrange(range, with: newValue) }
-    }
-
-    public func index(after i: Int) -> Int { return i + 1 }
-    public func index(before i: Int) -> Int { return i - 1 }
-
-}
-
-extension Section: RangeReplaceableCollection {
-
-    // MARK: RangeReplaceableCollectionType
-
-    public func append(_ formRow: BaseRow) {
-        kvoWrapper.rows.insert(formRow, at: kvoWrapper.rows.count)
-        kvoWrapper._allRows.append(formRow)
-        formRow.wasAddedTo(section: self)
-    }
-
-    public func append<S: Sequence>(contentsOf newElements: S) where S.Iterator.Element == BaseRow {
-        kvoWrapper.rows.addObjects(from: newElements.map { $0 })
-        kvoWrapper._allRows.append(contentsOf: newElements)
-        for row in newElements {
-            row.wasAddedTo(section: self)
-        }
-    }
-
-    public func replaceSubrange<C>(_ subrange: Range<Int>, with newElements: C) where C : Collection, C.Element == BaseRow {
-        for i in subrange.lowerBound..<subrange.upperBound {
-            if let row = kvoWrapper.rows.object(at: i) as? BaseRow {
-                row.willBeRemovedFromSection()
-                kvoWrapper._allRows.remove(at: kvoWrapper._allRows.firstIndex(of: row)!)
-            }
-        }
-
-        kvoWrapper.rows.replaceObjects(in: NSRange(location: subrange.lowerBound, length: subrange.upperBound - subrange.lowerBound),
-                                       withObjectsFrom: newElements.map { $0 })
-
-        kvoWrapper._allRows.insert(contentsOf: newElements, at: indexForInsertion(at: subrange.lowerBound))
-        for row in newElements {
-            row.wasAddedTo(section: self)
-        }
-    }
-
-    public func removeAll(keepingCapacity keepCapacity: Bool = false) {
-        // not doing anything with capacity
-
-        let rows = kvoWrapper._allRows
-        kvoWrapper.removeAllRows()
-
-        for row in rows {
-            row.willBeRemovedFromSection()
-        }
-    }
-
-    public func removeAll(where shouldBeRemoved: (BaseRow) throws -> Bool) rethrows {
-        let indices = try kvoWrapper._allRows.enumerated()
-            .filter { try shouldBeRemoved($0.element)}
-            .map { $0.offset }
-        
-        var removedRows = [BaseRow]()
-        for index in indices.reversed() {
-            removedRows.append(kvoWrapper._allRows.remove(at: index))
-        }
-        kvoWrapper.rows.removeObjects(in: removedRows)
-
-        removedRows.forEach { $0.willBeRemovedFromSection() }
-    }
-
-    @discardableResult
-    public func remove(at position: Int) -> BaseRow {
-        let row = kvoWrapper.rows.object(at: position) as! BaseRow
-        row.willBeRemovedFromSection()
-        kvoWrapper.rows.removeObject(at: position)
-        if let index = kvoWrapper._allRows.firstIndex(of: row) {
-            kvoWrapper._allRows.remove(at: index)
-        }
-
-        return row
-    }
-
-    private func indexForInsertion(at index: Int) -> Int {
-        guard index != 0 else { return 0 }
-
-        let row = kvoWrapper.rows[index-1]
-        if let i = kvoWrapper._allRows.firstIndex(of: row as! BaseRow) {
-            return i + 1
-        }
-        return kvoWrapper._allRows.count
-    }
-
-}
-
-extension Section /* Condition */ {
-
-    // MARK: Hidden/Disable Engine
-
-    /**
-     Function that evaluates if the section should be hidden and updates it accordingly.
-     */
-    public final func evaluateHidden() {
-        if let h = hidden, let f = form {
-            switch h {
-            case .function(_, let callback):
-                hiddenCache = callback(f)
-            case .predicate(let predicate):
-                hiddenCache = predicate.evaluate(with: self, substitutionVariables: f.dictionaryValuesToEvaluatePredicate())
-            }
-            if hiddenCache {
-                form?.hideSection(self)
-            } else {
-                form?.showSection(self)
-            }
-        }
-    }
-
-    /**
-     Internal function called when this section was added to a form.
-     */
-    func wasAddedTo(form: Form) {
-        self.form = form
-        addToRowObservers()
-        evaluateHidden()
-        for row in kvoWrapper._allRows {
-            row.wasAddedTo(section: self)
-        }
-    }
-
-    /**
-     Internal function called to add this section to the observers of certain rows. Called when the hidden variable is set and depends on other rows.
-     */
-    func addToRowObservers() {
-        guard let h = hidden else { return }
-        switch h {
-        case .function(let tags, _):
-            form?.addRowObservers(to: self, rowTags: tags, type: .hidden)
-        case .predicate(let predicate):
-            form?.addRowObservers(to: self, rowTags: predicate.predicateVars, type: .hidden)
-        }
-    }
-
-    /**
-     Internal function called when this section was removed from a form.
-     */
-    func willBeRemovedFromForm() {
-        for row in kvoWrapper._allRows {
-            row.willBeRemovedFromForm()
-        }
-        removeFromRowObservers()
-        self.form = nil
-    }
-
-    /**
-     Internal function called to remove this section from the observers of certain rows. Called when the hidden variable is changed.
-     */
-    func removeFromRowObservers() {
-        guard let h = hidden else { return }
-        switch h {
-        case .function(let tags, _):
-            form?.removeRowObservers(from: self, rowTags: tags, type: .hidden)
-        case .predicate(let predicate):
-            form?.removeRowObservers(from: self, rowTags: predicate.predicateVars, type: .hidden)
-        }
-    }
-
-    func hide(row: BaseRow) {
-        row.baseCell.cellResignFirstResponder()
-        (row as? BaseInlineRowType)?.collapseInlineRow()
-        kvoWrapper.rows.remove(row)
-    }
-
-    func show(row: BaseRow) {
-        guard !kvoWrapper.rows.contains(row) else { return }
-        guard var index = kvoWrapper._allRows.firstIndex(of: row) else { return }
-        var formIndex = NSNotFound
-        while formIndex == NSNotFound && index > 0 {
-            index = index - 1
-            let previous = kvoWrapper._allRows[index]
-            formIndex = kvoWrapper.rows.index(of: previous)
-        }
-        kvoWrapper.rows.insert(row, at: formIndex == NSNotFound ? 0 : formIndex + 1)
-    }
-}
-
-extension Section /* Helpers */ {
-
-    /**
-     *  This method inserts a row after another row.
-     *  It is useful if you want to insert a row after a row that is currently hidden. Otherwise use `insert(at: Int)`.
-     *  It throws an error if the old row is not in this section.
-     */
-    public func insert(row newRow: BaseRow, after previousRow: BaseRow) throws {
-        guard let rowIndex = (kvoWrapper._allRows as [BaseRow]).firstIndex(of: previousRow) else {
-            throw EurekaError.rowNotInSection(row: previousRow)
-        }
-        kvoWrapper._allRows.insert(newRow, at: index(after: rowIndex))
-        show(row: newRow)
-        newRow.wasAddedTo(section: self)
-    }
-
-}
-
-/**
- *  Navigation options for a form view controller.
- */
-public struct MultivaluedOptions: OptionSet {
-
-    private enum Options: Int {
-        case none = 0, insert = 1, delete = 2, reorder = 4
-    }
-    public let rawValue: Int
-    public  init(rawValue: Int) { self.rawValue = rawValue}
-    private init(_ options: Options) { self.rawValue = options.rawValue }
-
-    /// No multivalued.
-    public static let None = MultivaluedOptions(.none)
-
-    /// Allows user to insert rows.
-    public static let Insert = MultivaluedOptions(.insert)
-
-    /// Allows user to delete rows.
-    public static let Delete = MultivaluedOptions(.delete)
-
-    /// Allows user to reorder rows
-    public static let Reorder = MultivaluedOptions(.reorder)
-}
-
-/// Base class for multivalued sections. Use one of the subclasses.
-open class BaseMultivaluedSection: Section {
-    public var multivaluedOptions: MultivaluedOptions
-    public var showInsertIconInAddButton = true
-
-    public var multivaluedRowToInsertAt: ((Int) -> BaseRow)?
-
-    public required init(multivaluedOptions: MultivaluedOptions = MultivaluedOptions.Insert.union(.Delete),
-                         header: String? = nil,
-                         footer: String? = nil,
-                         _ initializer: (BaseMultivaluedSection) -> Void = { _ in }) {
-        self.multivaluedOptions = multivaluedOptions
-        super.init(header: header, footer: footer, {section in initializer(section as! BaseMultivaluedSection) })
-        guard multivaluedOptions.contains(.Insert) else { return }
-        initialize()
-    }
-
-    public required init() {
-        self.multivaluedOptions = MultivaluedOptions.Insert.union(.Delete)
-        super.init()
-        initialize()
-    }
-
-    #if swift(>=4.1)
-    public required init<S>(_ elements: S) where S : Sequence, S.Element == BaseRow {
-        self.multivaluedOptions = MultivaluedOptions.Insert.union(.Delete)
-        super.init(elements)
-        initialize()
-    }
-    #endif
-
-    func initialize() {
-        // Overridden by subclasses
-    }
-
-    /**
-     Method used to get all the values of the section.
-
-     - returns: An Array mapping the row values. [value]
-     */
-    public func values() -> [Any?] {
-        return kvoWrapper._allRows.filter({ $0.baseValue != nil }).map({ $0.baseValue })
-    }
-
-}
-
-/// Generic multivalued section. Pass the type of the add button row as generic parameter.
-open class GenericMultivaluedSection<AddButtonType: RowType>: BaseMultivaluedSection where AddButtonType: BaseRow {
-
-    public var addButtonProvider: ((GenericMultivaluedSection<AddButtonType>) -> AddButtonType)!
-
-    public required init(multivaluedOptions: MultivaluedOptions = MultivaluedOptions.Insert.union(.Delete),
-                         header: String? = nil,
-                         footer: String? = nil,
-                         _ initializer: (GenericMultivaluedSection<AddButtonType>) -> Void = { _ in }) {
-        super.init(multivaluedOptions: multivaluedOptions, header: header, footer: footer, {section in initializer(section as! GenericMultivaluedSection<AddButtonType>) })
-    }
-
-    public required init() {
-        super.init()
-    }
-
-    #if swift(>=4.1)
-    public required init<S>(_ elements: S) where S : Sequence, S.Element == BaseRow {
-        super.init(elements)
-    }
-    #endif
-
-    override func initialize() {
-        let addRow = addButtonProvider(self)
-        addRow.onCellSelection { cell, row in
-            guard !row.isDisabled else { return }
-            guard let tableView = cell.formViewController()?.tableView, let indexPath = row.indexPath else { return }
-            cell.formViewController()?.tableView(tableView, commit: .insert, forRowAt: indexPath)
-        }
-        self <<< addRow
-    }
-
-}
-
-/**
- *  Multivalued sections allows us to easily create insertable, deletable and reorderable sections. By using a multivalued section we can add multiple values for a certain field, such as telephone numbers in a contact.
- */
-open class MultivaluedSection: GenericMultivaluedSection<ButtonRow> {
-
-    override func initialize() {
-        if addButtonProvider == nil {
-            addButtonProvider = { _ in
-                return ButtonRow {
-                    $0.title = "Add"
-                    $0.cellStyle = .value1
-                    }.cellUpdate { cell, _ in
-                        cell.textLabel?.textAlignment = .left
-                }
-            }
-        }
-        super.initialize()
-    }
-
-}

+ 0 - 32
Pods/Eureka/Source/Core/SelectableRowType.swift

@@ -1,32 +0,0 @@
-//  SelectableRowType.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-/**
- *  Every row that shall be used in a SelectableSection must conform to this protocol.
- */
-public protocol SelectableRowType: RowType {
-    var selectableValue: Cell.Value? { get set }
-}

+ 0 - 155
Pods/Eureka/Source/Core/SelectableSection.swift

@@ -1,155 +0,0 @@
-//  SelectableSection.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-// MARK: SelectableSection
-
-/**
- Defines how the selection works in a SelectableSection
- 
- - MultipleSelection: Multiple options can be selected at once
- - SingleSelection:   Only one selection at a time. Can additionally specify if deselection is enabled or not.
- */
-public enum SelectionType {
-
-    /**
-     * Multiple options can be selected at once
-     */
-    case multipleSelection
-
-    /**
-     * Only one selection at a time. Can additionally specify if deselection is enabled or not.
-     */
-    case singleSelection(enableDeselection: Bool)
-}
-
-/**
- *  Protocol to be implemented by selectable sections types. Enables easier customization
- */
-public protocol SelectableSectionType: Collection {
-    associatedtype SelectableRow: BaseRow, SelectableRowType
-
-    /// Defines how the selection works (single / multiple selection)
-    var selectionType: SelectionType { get set }
-
-    /// A closure called when a row of this section is selected.
-    var onSelectSelectableRow: ((SelectableRow.Cell, SelectableRow) -> Void)? { get set }
-
-    func selectedRow() -> SelectableRow?
-    func selectedRows() -> [SelectableRow]
-}
-
-extension SelectableSectionType where Element == BaseRow, Self: AnyObject {
-    /**
-     Returns the selected row of this section. Should be used if selectionType is SingleSelection
-     */
-    public func selectedRow() -> SelectableRow? {
-        return selectedRows().first
-    }
-
-    /**
-     Returns the selected rows of this section. Should be used if selectionType is MultipleSelection
-     */
-    public func selectedRows() -> [SelectableRow] {
-        let selectedRows: [BaseRow] = self.filter { $0 is SelectableRow && $0.baseValue != nil }
-        return selectedRows.map { $0 as! SelectableRow }
-    }
-
-    /**
-     Internal function used to set up a collection of rows before they are added to the section
-     */
-    func prepare(selectableRows rows: [BaseRow]) {
-        for row in rows {
-            if let row = row as? SelectableRow {
-                row.onCellSelection { [weak self] cell, row in
-                    guard let s = self, !row.isDisabled else { return }
-                    switch s.selectionType {
-                    case .multipleSelection:
-                        row.value = row.value == nil ? row.selectableValue : nil
-                    case let .singleSelection(enableDeselection):
-                        s.forEach {
-                            guard $0.baseValue != nil && $0 != row && $0 is SelectableRow else { return }
-                            $0.baseValue = nil
-                            $0.updateCell()
-                        }
-                        // Check if row is not already selected
-                        if row.value == nil {
-                            row.value = row.selectableValue
-                        } else if enableDeselection {
-                            row.value = nil
-                        }
-                    }
-                    row.updateCell()
-                    s.onSelectSelectableRow?(cell, row)
-                }
-            }
-        }
-    }
-
-}
-
-/// A subclass of Section that serves to create a section with a list of selectable options.
-open class SelectableSection<Row>: Section, SelectableSectionType where Row: SelectableRowType, Row: BaseRow {
-
-    public typealias SelectableRow = Row
-
-    /// Defines how the selection works (single / multiple selection)
-    public var selectionType = SelectionType.singleSelection(enableDeselection: true)
-
-    /// A closure called when a row of this section is selected.
-    public var onSelectSelectableRow: ((Row.Cell, Row) -> Void)?
-
-    public override init(_ initializer: @escaping (SelectableSection<Row>) -> Void) {
-        super.init({ _ in })
-        initializer(self)
-    }
-
-    public init(_ header: String?, selectionType: SelectionType, _ initializer: @escaping (SelectableSection<Row>) -> Void = { _ in }) {
-        self.selectionType = selectionType
-        super.init(header, { _ in })
-        initializer(self)
-    }
-
-    public init(header: String?, footer: String?, selectionType: SelectionType, _ initializer: @escaping (SelectableSection<Row>) -> Void = { _ in }) {
-        self.selectionType = selectionType
-        super.init(header: header, footer: footer, { _ in })
-        initializer(self)
-    }
-
-    public required init() {
-        super.init()
-    }
-
-    #if swift(>=4.1)
-    public required init<S>(_ elements: S) where S : Sequence, S.Element == BaseRow {
-        super.init(elements)
-    }
-    #endif
-
-    open override func rowsHaveBeenAdded(_ rows: [BaseRow], at: IndexSet) {
-        prepare(selectableRows: rows)
-    }
-}

+ 0 - 152
Pods/Eureka/Source/Core/SwipeActions.swift

@@ -1,152 +0,0 @@
-//
-//  Swipe.swift
-//  Eureka
-//
-//  Created by Marco Betschart on 14.06.17.
-//  Copyright © 2017 Xmartlabs. All rights reserved.
-//
-
-import Foundation
-import UIKit
-
-public typealias SwipeActionHandler = (SwipeAction, BaseRow, ((Bool) -> Void)?) -> Void
-
-public class SwipeAction: ContextualAction {
-    let handler: SwipeActionHandler
-    let style: Style
-
-    public var actionBackgroundColor: UIColor?
-    public var image: UIImage?
-    public var title: String?
-
-    @available (*, deprecated, message: "Use actionBackgroundColor instead")
-    public var backgroundColor: UIColor? {
-        get { return actionBackgroundColor }
-        set { self.actionBackgroundColor = newValue }
-    }
-
-    public init(style: Style, title: String?, handler: @escaping SwipeActionHandler){
-        self.style = style
-        self.title = title
-        self.handler = handler
-    }
-
-    func contextualAction(forRow: BaseRow) -> ContextualAction {
-        var action: ContextualAction
-        if #available(iOS 11, *){
-            action = UIContextualAction(style: style.contextualStyle as! UIContextualAction.Style, title: title){ [weak self] action, view, completion -> Void in
-                guard let strongSelf = self else{ return }
-                strongSelf.handler(strongSelf, forRow) { shouldComplete in
-                    if #available(iOS 13, *) { // starting in iOS 13, completion handler is not removing the row automatically, so we need to remove it ourselves
-                        if shouldComplete && action.style == .destructive {
-                            forRow.section?.remove(at: forRow.indexPath!.row)
-                        }
-                    }
-                    completion(shouldComplete)
-                }
-            }
-        } else {
-            action = UITableViewRowAction(style: style.contextualStyle as! UITableViewRowAction.Style,title: title){ [weak self] (action, indexPath) -> Void in
-                guard let strongSelf = self else{ return }
-				strongSelf.handler(strongSelf, forRow) { _ in
-					DispatchQueue.main.async {
-						guard action.style == .destructive else {
-							forRow.baseCell?.formViewController()?.tableView?.setEditing(false, animated: true)
-							return
-						}
-						forRow.section?.remove(at: indexPath.row)
-					}
-				}
-            }
-        }
-        if let color = self.actionBackgroundColor {
-            action.actionBackgroundColor = color
-        }
-        if let image = self.image {
-            action.image = image
-        }
-        return action
-    }
-	
-    public enum Style {
-        case normal
-        case destructive
-        
-        var contextualStyle: ContextualStyle {
-            if #available(iOS 11, *){
-                switch self{
-                case .normal:
-                    return UIContextualAction.Style.normal
-                case .destructive:
-                    return UIContextualAction.Style.destructive
-                }
-            } else {
-                switch self{
-                case .normal:
-                    return UITableViewRowAction.Style.normal
-                case .destructive:
-                    return UITableViewRowAction.Style.destructive
-                }
-            }
-        }
-    }
-}
-
-public struct SwipeConfiguration {
-	
-    unowned var row: BaseRow
-    
-	init(_ row: BaseRow){
-		self.row = row
-	}
-	
-	public var performsFirstActionWithFullSwipe = false
-	public var actions: [SwipeAction] = []
-}
-
-extension SwipeConfiguration {
-    @available(iOS 11.0, *)
-    var contextualConfiguration: UISwipeActionsConfiguration? {
-        let contextualConfiguration = UISwipeActionsConfiguration(actions: self.contextualActions as! [UIContextualAction])
-        contextualConfiguration.performsFirstActionWithFullSwipe = self.performsFirstActionWithFullSwipe
-        return contextualConfiguration
-    }
-
-    var contextualActions: [ContextualAction]{
-        return self.actions.map { $0.contextualAction(forRow: self.row) }
-    }
-}
-
-protocol ContextualAction {
-    var actionBackgroundColor: UIColor? { get set }
-    var image: UIImage? { get set }
-    var title: String? { get set }
-}
-
-extension UITableViewRowAction: ContextualAction {
-    public var image: UIImage? {
-        get { return nil }
-        set { return }
-    }
-
-    public var actionBackgroundColor: UIColor? {
-        get { return backgroundColor }
-        set { self.backgroundColor = newValue }
-    }
-}
-
-@available(iOS 11.0, *)
-extension UIContextualAction: ContextualAction {
-
-    public var actionBackgroundColor: UIColor? {
-        get { return backgroundColor }
-        set { self.backgroundColor = newValue }
-    }
-
-}
-
-public protocol ContextualStyle{}
-extension UITableViewRowAction.Style: ContextualStyle {}
-
-@available(iOS 11.0, *)
-extension UIContextualAction.Style: ContextualStyle {}

+ 0 - 99
Pods/Eureka/Source/Core/Validation.swift

@@ -1,99 +0,0 @@
-//  RowValidationType.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-public struct ValidationError: Equatable {
-
-    public let msg: String
-
-    public init(msg: String) {
-        self.msg = msg
-    }
-}
-
-public func == (lhs: ValidationError, rhs: ValidationError) -> Bool {
-    return lhs.msg == rhs.msg
-}
-
-public protocol BaseRuleType {
-    var id: String? { get set }
-    var validationError: ValidationError { get set }
-}
-
-public protocol RuleType: BaseRuleType {
-    associatedtype RowValueType
-
-    func isValid(value: RowValueType?) -> ValidationError?
-}
-
-public struct ValidationOptions: OptionSet {
-
-    public let rawValue: Int
-
-    public init(rawValue: Int) {
-        self.rawValue = rawValue
-    }
-
-    public static let validatesOnDemand  = ValidationOptions(rawValue: 1 << 0)
-    public static let validatesOnChange  = ValidationOptions(rawValue: 1 << 1)
-    public static let validatesOnBlur = ValidationOptions(rawValue: 1 << 2)
-    public static let validatesOnChangeAfterBlurred = ValidationOptions(rawValue: 1 << 3)
-
-    public static let validatesAlways: ValidationOptions = [.validatesOnChange, .validatesOnBlur]
-}
-
-public struct ValidationRuleHelper<T> where T: Equatable {
-    let validateFn: ((T?) -> ValidationError?)
-    public let rule: BaseRuleType
-}
-
-public struct RuleSet<T: Equatable> {
-
-    internal var rules: [ValidationRuleHelper<T>] = []
-
-    public init() {}
-
-    /// Add a validation Rule to a Row
-    /// - Parameter rule: RuleType object typed to the same type of the Row.value
-    public mutating func add<Rule: RuleType>(rule: Rule) where T == Rule.RowValueType {
-        let validFn: ((T?) -> ValidationError?) = { (val: T?) in
-            return rule.isValid(value: val)
-        }
-        rules.append(ValidationRuleHelper(validateFn: validFn, rule: rule))
-    }
-
-    public mutating func remove(ruleWithIdentifier identifier: String) {
-        if let index = rules.firstIndex(where: { (validationRuleHelper) -> Bool in
-            return validationRuleHelper.rule.id == identifier
-        }) {
-            rules.remove(at: index)
-        }
-    }
-
-    public mutating func removeAllRules() {
-        rules.removeAll()
-    }
-
-}

+ 0 - 96
Pods/Eureka/Source/Rows/ActionSheetRow.swift

@@ -1,96 +0,0 @@
-//  ActionSheetRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-open class AlertSelectorCell<T> : Cell<T>, CellType where T: Equatable {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func update() {
-        super.update()
-        accessoryType = .none
-        editingAccessoryType = accessoryType
-        selectionStyle = row.isDisabled ? .none : .default
-    }
-
-    open override func didSelect() {
-        super.didSelect()
-        row.deselect()
-    }
-}
-
-open class _ActionSheetRow<Cell: CellType>: AlertOptionsRow<Cell>, PresenterRowType where Cell: BaseCell {
-
-    public typealias ProviderType = SelectorAlertController<_ActionSheetRow<Cell>>
-    
-    public var onPresentCallback: ((FormViewController, ProviderType) -> Void)?
-    lazy public var presentationMode: PresentationMode<ProviderType>? = {
-        return .presentModally(controllerProvider: ControllerProvider.callback { [weak self] in
-            let vc = SelectorAlertController<_ActionSheetRow<Cell>>(title: self?.selectorTitle, message: nil, preferredStyle: .actionSheet)
-            if let popView = vc.popoverPresentationController {
-                guard let cell = self?.cell, let tableView = cell.formViewController()?.tableView else { fatalError() }
-                popView.sourceView = tableView
-                popView.sourceRect = tableView.convert(cell.detailTextLabel?.frame ?? cell.textLabel?.frame ?? cell.contentView.frame, from: cell)
-            }
-            vc.row = self
-            return vc
-        },
-        onDismiss: { [weak self] in
-            $0.dismiss(animated: true)
-            self?.cell?.formViewController()?.tableView?.reloadData()
-        })
-    }()
-
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-
-    open override func customDidSelect() {
-        super.customDidSelect()
-        if let presentationMode = presentationMode, !isDisabled {
-            if let controller = presentationMode.makeController() {
-                controller.row = self
-                onPresentCallback?(cell.formViewController()!, controller)
-                presentationMode.present(controller, row: self, presentingController: cell.formViewController()!)
-            } else {
-                presentationMode.present(nil, row: self, presentingController: cell.formViewController()!)
-            }
-        }
-    }
-}
-
-/// An options row where the user can select an option from an ActionSheet
-public final class ActionSheetRow<T>: _ActionSheetRow<AlertSelectorCell<T>>, RowType where T: Equatable {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 66
Pods/Eureka/Source/Rows/AlertRow.swift

@@ -1,66 +0,0 @@
-//  AlertRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-import Foundation
-import UIKit
-
-open class _AlertRow<Cell: CellType>: AlertOptionsRow<Cell>, PresenterRowType where Cell: BaseCell {
-
-    public typealias PresentedController = SelectorAlertController<_AlertRow<Cell>>
-    
-    open var onPresentCallback: ((FormViewController, PresentedController) -> Void)?
-    lazy open var presentationMode: PresentationMode<PresentedController>? = {
-        return .presentModally(controllerProvider: ControllerProvider<PresentedController>.callback { [weak self] in
-            let vc = PresentedController(title: self?.selectorTitle, message: nil, preferredStyle: .alert)
-            vc.row = self
-            return vc
-        }, onDismiss: { [weak self] in
-            $0.dismiss(animated: true)
-            self?.cell?.formViewController()?.tableView?.reloadData()
-        })
-    }()
-
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-
-    open override func customDidSelect() {
-        super.customDidSelect()
-        if let presentationMode = presentationMode, !isDisabled {
-            if let controller = presentationMode.makeController() {
-                controller.row = self
-                onPresentCallback?(cell.formViewController()!, controller)
-                presentationMode.present(controller, row: self, presentingController: cell.formViewController()!)
-            } else {
-                presentationMode.present(nil, row: self, presentingController: cell.formViewController()!)
-            }
-        }
-    }
-}
-
-/// An options row where the user can select an option from a modal Alert
-public final class AlertRow<T: Equatable>: _AlertRow<AlertSelectorCell<T>>, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 104
Pods/Eureka/Source/Rows/ButtonRow.swift

@@ -1,104 +0,0 @@
-//  ButtonRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-// MARK: ButtonCell
-
-open class ButtonCellOf<T: Equatable>: Cell<T>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func update() {
-        super.update()
-        selectionStyle = row.isDisabled ? .none : .default
-        accessoryType = .none
-        editingAccessoryType = accessoryType
-        textLabel?.textAlignment = .center
-        textLabel?.textColor = tintColor.withAlphaComponent(row.isDisabled ? 0.3 : 1.0)
-    }
-
-    open override func didSelect() {
-        super.didSelect()
-        row.deselect()
-    }
-}
-
-public typealias ButtonCell = ButtonCellOf<String>
-
-// MARK: ButtonRow
-
-open class _ButtonRowOf<T: Equatable> : Row<ButtonCellOf<T>> {
-    open var presentationMode: PresentationMode<UIViewController>?
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        displayValueFor = nil
-        cellStyle = .default
-    }
-
-    open override func customDidSelect() {
-        super.customDidSelect()
-        if !isDisabled {
-            if let presentationMode = presentationMode {
-                if let controller = presentationMode.makeController() {
-                    presentationMode.present(controller, row: self, presentingController: self.cell.formViewController()!)
-                } else {
-                    presentationMode.present(nil, row: self, presentingController: self.cell.formViewController()!)
-                }
-            }
-        }
-    }
-
-    open override func customUpdateCell() {
-        super.customUpdateCell()
-        let leftAligmnment = presentationMode != nil
-        cell.textLabel?.textAlignment = leftAligmnment ? .left : .center
-        cell.accessoryType = !leftAligmnment || isDisabled ? .none : .disclosureIndicator
-        cell.editingAccessoryType = cell.accessoryType
-        cell.textLabel?.textColor = !leftAligmnment ? cell.tintColor.withAlphaComponent(isDisabled ? 0.3 : 1.0) : nil
-    }
-
-    open override func prepare(for segue: UIStoryboardSegue) {
-        super.prepare(for: segue)
-        (segue.destination as? RowControllerType)?.onDismissCallback = presentationMode?.onDismissCallback
-    }
-}
-
-/// A generic row with a button. The action of this button can be anything but normally will push a new view controller
-public final class ButtonRowOf<T: Equatable> : _ButtonRowOf<T>, RowType {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A row with a button and String value. The action of this button can be anything but normally will push a new view controller
-public typealias ButtonRow = ButtonRowOf<String>

+ 0 - 88
Pods/Eureka/Source/Rows/ButtonRowWithPresent.swift

@@ -1,88 +0,0 @@
-//  Rows.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-open class _ButtonRowWithPresent<VCType: TypedRowControllerType>: Row<ButtonCellOf<VCType.RowValue>>, PresenterRowType where VCType: UIViewController {
-
-    open var presentationMode: PresentationMode<VCType>?
-    open var onPresentCallback: ((FormViewController, VCType) -> Void)?
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        displayValueFor = nil
-        cellStyle = .default
-    }
-
-    open override func customUpdateCell() {
-        super.customUpdateCell()
-        let leftAligmnment = presentationMode != nil
-        cell.textLabel?.textAlignment = leftAligmnment ? .left : .center
-        cell.accessoryType = !leftAligmnment || isDisabled ? .none : .disclosureIndicator
-        cell.editingAccessoryType = cell.accessoryType
-        if !leftAligmnment {
-            var red: CGFloat = 0, green: CGFloat = 0, blue: CGFloat = 0, alpha: CGFloat = 0
-            cell.tintColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
-            cell.textLabel?.textColor  = UIColor(red: red, green: green, blue: blue, alpha:isDisabled ? 0.3 : 1.0)
-        } else {
-            cell.textLabel?.textColor = nil
-        }
-    }
-
-    open override func customDidSelect() {
-        super.customDidSelect()
-        if let presentationMode = presentationMode, !isDisabled {
-            if let controller = presentationMode.makeController() {
-                controller.row = self
-                onPresentCallback?(cell.formViewController()!, controller)
-                presentationMode.present(controller, row: self, presentingController: cell.formViewController()!)
-            } else {
-                presentationMode.present(nil, row: self, presentingController: cell.formViewController()!)
-            }
-        }
-    }
-
-    open override func prepare(for segue: UIStoryboardSegue) {
-        super.prepare(for: segue)
-        guard let rowVC = segue.destination as? VCType else {
-            return
-        }
-        if let callback = presentationMode?.onDismissCallback {
-            rowVC.onDismissCallback = callback
-        }
-        rowVC.row = self
-        onPresentCallback?(cell.formViewController()!, rowVC)
-    }
-
-}
-
-// MARK: Rows
-
-/// A generic row with a button that presents a view controller when tapped
-public final class ButtonRowWithPresent<VCType: TypedRowControllerType> : _ButtonRowWithPresent<VCType>, RowType where VCType: UIViewController {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 83
Pods/Eureka/Source/Rows/CheckRow.swift

@@ -1,83 +0,0 @@
-//  CheckRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-// MARK: CheckCell
-
-open class CheckCell: Cell<Bool>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func update() {
-        super.update()
-        accessoryType = row.value == true ? .checkmark : .none
-        editingAccessoryType = accessoryType
-        selectionStyle = .default
-        if row.isDisabled {
-            tintAdjustmentMode = .dimmed
-            selectionStyle = .none
-        } else {
-            tintAdjustmentMode = .automatic
-        }
-    }
-
-    open override func setup() {
-        super.setup()
-        accessoryType = .checkmark
-        editingAccessoryType = accessoryType
-    }
-
-    open override func didSelect() {
-        row.value = row.value ?? false ? false : true
-        row.deselect()
-        row.updateCell()
-    }
-
-}
-
-// MARK: CheckRow
-
-open class _CheckRow: Row<CheckCell> {
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        displayValueFor = nil
-    }
-}
-
-///// Boolean row that has a checkmark as accessoryType
-public final class CheckRow: _CheckRow, RowType {
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 41
Pods/Eureka/Source/Rows/Common/AlertOptionsRow.swift

@@ -1,41 +0,0 @@
-//
-//  AlertOptionsRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-
-import Foundation
-
-open class AlertOptionsRow<Cell: CellType> : OptionsRow<Cell>, AlertOptionsProviderRow where Cell: BaseCell {
-
-    typealias OptionsProviderType = OptionsProvider<Cell.Value>
-
-    open var cancelTitle: String?
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-
-}

+ 0 - 144
Pods/Eureka/Source/Rows/Common/DateFieldRow.swift

@@ -1,144 +0,0 @@
-//  DateFieldRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-public protocol DatePickerRowProtocol: AnyObject {
-    var minimumDate: Date? { get set }
-    var maximumDate: Date? { get set }
-    var minuteInterval: Int? { get set }
-}
-
-open class DateCell: Cell<Date>, CellType {
-
-    public var datePicker: UIDatePicker
-
-    public required init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        datePicker = UIDatePicker()
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        datePicker = UIDatePicker()
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        accessoryType = .none
-        editingAccessoryType =  .none
-        datePicker.datePickerMode = datePickerMode()
-        datePicker.addTarget(self, action: #selector(DateCell.datePickerValueChanged(_:)), for: .valueChanged)
-
-        #if swift(>=5.2)
-            if #available(iOS 13.4, *) {
-                datePicker.preferredDatePickerStyle = .wheels
-            }
-        #endif
-    }
-
-    deinit {
-        datePicker.removeTarget(self, action: nil, for: .allEvents)
-    }
-
-    open override func update() {
-        super.update()
-        selectionStyle = row.isDisabled ? .none : .default
-        datePicker.setDate(row.value ?? Date(), animated: row is CountDownPickerRow)
-        datePicker.minimumDate = (row as? DatePickerRowProtocol)?.minimumDate
-        datePicker.maximumDate = (row as? DatePickerRowProtocol)?.maximumDate
-        if let minuteIntervalValue = (row as? DatePickerRowProtocol)?.minuteInterval {
-            datePicker.minuteInterval = minuteIntervalValue
-        }
-        if row.isHighlighted {
-            textLabel?.textColor = tintColor
-        }
-    }
-
-    open override func didSelect() {
-        super.didSelect()
-        row.deselect()
-    }
-
-    override open var inputView: UIView? {
-        if let v = row.value {
-            datePicker.setDate(v, animated:row is CountDownRow)
-        }
-        return datePicker
-    }
-
-    @objc(pickerDateChanged:) func datePickerValueChanged(_ sender: UIDatePicker) {
-        row.value = sender.date
-        detailTextLabel?.text = row.displayValueFor?(row.value)
-    }
-
-    private func datePickerMode() -> UIDatePicker.Mode {
-        switch row {
-        case is DateRow:
-            return .date
-        case is TimeRow:
-            return .time
-        case is DateTimeRow:
-            return .dateAndTime
-        case is CountDownRow:
-            return .countDownTimer
-        default:
-            return .date
-        }
-    }
-
-    open override func cellCanBecomeFirstResponder() -> Bool {
-        return canBecomeFirstResponder
-    }
-
-    override open var canBecomeFirstResponder: Bool {
-        return !row.isDisabled
-    }
-}
-
-open class _DateFieldRow: Row<DateCell>, DatePickerRowProtocol, NoValueDisplayTextConformance {
-
-    /// The minimum value for this row's UIDatePicker
-    open var minimumDate: Date?
-
-    /// The maximum value for this row's UIDatePicker
-    open var maximumDate: Date?
-
-    /// The interval between options for this row's UIDatePicker
-    open var minuteInterval: Int?
-
-    /// The formatter for the date picked by the user
-    open var dateFormatter: DateFormatter?
-
-    open var noValueDisplayText: String? = nil
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        displayValueFor = { [unowned self] value in
-            guard let val = value, let formatter = self.dateFormatter else { return nil }
-            return formatter.string(from: val)
-        }
-    }
-}

+ 0 - 80
Pods/Eureka/Source/Rows/Common/DateInlineFieldRow.swift

@@ -1,80 +0,0 @@
-//  DateInlineFieldRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-open class DateInlineCell: Cell<Date>, CellType {
-
-    public required init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        accessoryType = .none
-        editingAccessoryType =  .none
-    }
-
-    open override func update() {
-        super.update()
-        selectionStyle = row.isDisabled ? .none : .default
-    }
-
-    open override func didSelect() {
-        super.didSelect()
-        row.deselect()
-    }
-}
-
-open class _DateInlineFieldRow: Row<DateInlineCell>, DatePickerRowProtocol, NoValueDisplayTextConformance {
-
-    /// The minimum value for this row's UIDatePicker
-    open var minimumDate: Date?
-
-    /// The maximum value for this row's UIDatePicker
-    open var maximumDate: Date?
-
-    /// The interval between options for this row's UIDatePicker
-    open var minuteInterval: Int?
-
-    /// The formatter for the date picked by the user
-    open var dateFormatter: DateFormatter?
-
-    open var noValueDisplayText: String?
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        dateFormatter = DateFormatter()
-        dateFormatter?.locale = Locale.current
-        displayValueFor = { [unowned self] value in
-            guard let val = value, let formatter = self.dateFormatter else { return nil }
-            return formatter.string(from: val)
-        }
-    }
-}

+ 0 - 59
Pods/Eureka/Source/Rows/Common/DecimalFormatter.swift

@@ -1,59 +0,0 @@
-//  DecimalFormatter.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-/// A custom formatter for numbers with two digits after the decimal mark
-open class DecimalFormatter: NumberFormatter, FormatterProtocol {
-
-    /// Creates the formatter with 2 Fraction Digits, Locale set to .current and .decimal NumberFormatter.Style
-    public override init() {
-        super.init()
-        locale = Locale.current
-        numberStyle = .decimal
-        minimumFractionDigits = 2
-        maximumFractionDigits = 2
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        fatalError("init(coder:) has not been implemented")
-    }
-
-    /// Creates an NSNumber from the given String
-    /// - Parameter obj: Pointer to NSNumber object to assign
-    /// - Parameter string: String with number assumed to have the configured min. fraction digits.
-    /// - Parameter rangep: Unused range parameter
-    override open func getObjectValue(_ obj: AutoreleasingUnsafeMutablePointer<AnyObject?>?, for string: String, range rangep: UnsafeMutablePointer<NSRange>?) throws {
-        guard obj != nil else { return  }
-        let str = string.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "")
-        // Recover the number from the string in a way that forces the formatter's fraction digits
-        // numberWithoutDecimals / 10 ^ minimumFractionDigits
-        obj?.pointee = NSNumber(value: (Double(str) ?? 0.0)/Double(pow(10.0, Double(minimumFractionDigits))))
-    }
-
-    open func getNewPosition(forPosition position: UITextPosition, inTextInput textInput: UITextInput, oldValue: String?, newValue: String?) -> UITextPosition {
-        return textInput.position(from: position, offset:((newValue?.count ?? 0) - (oldValue?.count ?? 0))) ?? position
-    }
-}

+ 0 - 494
Pods/Eureka/Source/Rows/Common/FieldRow.swift

@@ -1,494 +0,0 @@
-//  FieldRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-public protocol InputTypeInitiable {
-    init?(string stringValue: String)
-}
-
-public protocol FieldRowConformance : FormatterConformance {
-    var titlePercentage : CGFloat? { get set }
-    var placeholder : String? { get set }
-    var placeholderColor : UIColor? { get set }
-}
-
-extension Int: InputTypeInitiable {
-
-    public init?(string stringValue: String) {
-        self.init(stringValue, radix: 10)
-    }
-}
-extension Float: InputTypeInitiable {
-    public init?(string stringValue: String) {
-        self.init(stringValue)
-    }
-}
-extension String: InputTypeInitiable {
-    public init?(string stringValue: String) {
-        self.init(stringValue)
-    }
-}
-extension URL: InputTypeInitiable {}
-extension Double: InputTypeInitiable {
-    public init?(string stringValue: String) {
-        self.init(stringValue)
-    }
-}
-
-open class FormatteableRow<Cell: CellType>: Row<Cell>, FormatterConformance where Cell: BaseCell, Cell: TextInputCell {
-
-    /// A formatter to be used to format the user's input
-    open var formatter: Formatter?
-
-    /// If the formatter should be used while the user is editing the text.
-    open var useFormatterDuringInput = false
-    open var useFormatterOnDidBeginEditing: Bool?
-
-    public required init(tag: String?) {
-        super.init(tag: tag)
-        displayValueFor = { [unowned self] value in
-            guard let v = value else { return nil }
-            guard let formatter = self.formatter else { return String(describing: v) }
-            if (self.cell.textInput as? UIView)?.isFirstResponder == true {
-                return self.useFormatterDuringInput ? formatter.editingString(for: v) : String(describing: v)
-            }
-            return formatter.string(for: v)
-        }
-    }
-
-}
-
-open class FieldRow<Cell: CellType>: FormatteableRow<Cell>, FieldRowConformance, KeyboardReturnHandler where Cell: BaseCell, Cell: TextFieldCell {
-
-    /// Configuration for the keyboardReturnType of this row
-    open var keyboardReturnType: KeyboardReturnTypeConfiguration?
-
-    /// The percentage of the cell that should be occupied by the textField
-	@available (*, deprecated, message: "Use titlePercentage instead")
-	open var textFieldPercentage : CGFloat? {
-		get {
-			return titlePercentage.map { 1 - $0 }
-		}
-		set {
-			titlePercentage = newValue.map { 1 - $0 }
-		}
-	}
-
-	/// The percentage of the cell that should be occupied by the title (i.e. the titleLabel and optional imageView combined)
-	open var titlePercentage: CGFloat?
-
-    /// The placeholder for the textField
-    open var placeholder: String?
-
-    /// The textColor for the textField's placeholder
-    open var placeholderColor: UIColor?
-
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/**
- *  Protocol for cells that contain a UITextField
- */
-public protocol TextInputCell {
-    var textInput: UITextInput { get }
-}
-
-public protocol TextFieldCell: TextInputCell {
-    var textField: UITextField! { get }
-}
-
-extension TextFieldCell {
-
-    public var textInput: UITextInput {
-        return textField
-    }
-}
-
-open class _FieldCell<T> : Cell<T>, UITextFieldDelegate, TextFieldCell where T: Equatable, T: InputTypeInitiable {
-
-    @IBOutlet public weak var textField: UITextField!
-    @IBOutlet public weak var titleLabel: UILabel?
-
-    fileprivate var observingTitleText = false
-    private var awakeFromNibCalled = false
-
-    open var dynamicConstraints = [NSLayoutConstraint]()
-
-	private var calculatedTitlePercentage: CGFloat = 0.7
-
-    public required init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-
-        let textField = UITextField()
-        self.textField = textField
-        textField.translatesAutoresizingMaskIntoConstraints = false
-
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-
-        setupTitleLabel()
-
-        contentView.addSubview(titleLabel!)
-        contentView.addSubview(textField)
-
-        NotificationCenter.default.addObserver(forName: UIApplication.willResignActiveNotification, object: nil, queue: nil) { [weak self] _ in
-            guard let me = self else { return }
-            guard me.observingTitleText else { return }
-            me.titleLabel?.removeObserver(me, forKeyPath: "text")
-            me.observingTitleText = false
-        }
-        NotificationCenter.default.addObserver(forName: UIApplication.didBecomeActiveNotification, object: nil, queue: nil) { [weak self] _ in
-            guard let me = self else { return }
-            guard !me.observingTitleText else { return }
-            me.titleLabel?.addObserver(me, forKeyPath: "text", options: [.new, .old], context: nil)
-            me.observingTitleText = true
-        }
-
-        NotificationCenter.default.addObserver(forName: UIContentSizeCategory.didChangeNotification, object: nil, queue: nil) { [weak self] _ in
-            self?.setupTitleLabel()
-            self?.setNeedsUpdateConstraints()
-        }
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func awakeFromNib() {
-        super.awakeFromNib()
-        awakeFromNibCalled = true
-    }
-
-    deinit {
-        textField?.delegate = nil
-        textField?.removeTarget(self, action: nil, for: .allEvents)
-        guard !awakeFromNibCalled else { return }
-        if observingTitleText {
-            titleLabel?.removeObserver(self, forKeyPath: "text")
-        }
-        imageView?.removeObserver(self, forKeyPath: "image")
-        NotificationCenter.default.removeObserver(self, name: UIApplication.willResignActiveNotification, object: nil)
-        NotificationCenter.default.removeObserver(self, name: UIApplication.didBecomeActiveNotification, object: nil)
-        NotificationCenter.default.removeObserver(self, name: UIContentSizeCategory.didChangeNotification, object: nil)
-    }
-
-    open override func setup() {
-        super.setup()
-        selectionStyle = .none
-
-        if !awakeFromNibCalled {
-            titleLabel?.addObserver(self, forKeyPath: "text", options: [.new, .old], context: nil)
-            observingTitleText = true
-            imageView?.addObserver(self, forKeyPath: "image", options: [.new, .old], context: nil)
-        }
-        textField.addTarget(self, action: #selector(_FieldCell.textFieldDidChange(_:)), for: .editingChanged)
-
-        if let titleLabel = titleLabel {
-            // Make sure the title takes over most of the empty space so that the text field starts editing at the back.
-            let priority = UILayoutPriority(rawValue: titleLabel.contentHuggingPriority(for: .horizontal).rawValue + 1)
-            textField.setContentHuggingPriority(priority, for: .horizontal)
-        }
-    }
-
-    open override func update() {
-        super.update()
-        detailTextLabel?.text = nil
-
-        if !awakeFromNibCalled {
-            if let title = row.title {
-                switch row.cellStyle {
-                case .subtitle:
-                    textField.textAlignment = .left
-                    textField.clearButtonMode = .whileEditing
-                default:
-                    textField.textAlignment = title.isEmpty ? .left : .right
-                    textField.clearButtonMode = title.isEmpty ? .whileEditing : .never
-                }
-            } else {
-                textField.textAlignment = .left
-                textField.clearButtonMode = .whileEditing
-            }
-        } else {
-            textLabel?.text = nil
-            titleLabel?.text = row.title
-            if #available(iOS 13.0, *) {
-                titleLabel?.textColor = row.isDisabled ? .tertiaryLabel : .label
-            } else {
-                titleLabel?.textColor = row.isDisabled ? .gray : .black
-            }
-        }
-        textField.delegate = self
-        textField.text = row.displayValueFor?(row.value)
-        textField.isEnabled = !row.isDisabled
-        if #available(iOS 13.0, *) {
-            textField.textColor = row.isDisabled ? .tertiaryLabel : .label
-        } else {
-            textField.textColor = row.isDisabled ? .gray : .black
-        }
-        textField.font = .preferredFont(forTextStyle: .body)
-        if let placeholder = (row as? FieldRowConformance)?.placeholder {
-            if let color = (row as? FieldRowConformance)?.placeholderColor {
-                textField.attributedPlaceholder = NSAttributedString(string: placeholder, attributes: [.foregroundColor: color])
-            } else {
-                textField.placeholder = (row as? FieldRowConformance)?.placeholder
-            }
-        }
-        if row.isHighlighted {
-            titleLabel?.textColor = tintColor
-        }
-    }
-
-    open override func cellCanBecomeFirstResponder() -> Bool {
-        return !row.isDisabled && textField?.canBecomeFirstResponder == true
-    }
-
-    open override func cellBecomeFirstResponder(withDirection: Direction) -> Bool {
-        return textField.becomeFirstResponder()
-    }
-
-    open override func cellResignFirstResponder() -> Bool {
-        return textField.resignFirstResponder()
-    }
-
-    open override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
-        let obj = object as AnyObject?
-
-        if let keyPathValue = keyPath, let changeType = change?[NSKeyValueChangeKey.kindKey],
-            ((obj === titleLabel && keyPathValue == "text") || (obj === imageView && keyPathValue == "image")) &&
-                (changeType as? NSNumber)?.uintValue == NSKeyValueChange.setting.rawValue {
-            setNeedsUpdateConstraints()
-            updateConstraintsIfNeeded()
-        }
-    }
-
-    // MARK: Helpers
-
-    open func customConstraints() {
-
-        guard !awakeFromNibCalled else { return }
-        contentView.removeConstraints(dynamicConstraints)
-        dynamicConstraints = []
-        
-        switch row.cellStyle {
-        case .subtitle:
-            var views: [String: AnyObject] =  ["textField": textField]
-            
-            if let titleLabel = titleLabel, let text = titleLabel.text, !text.isEmpty {
-                views["titleLabel"] = titleLabel
-                dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|-[titleLabel]-3-[textField]-|",
-                                                                     options: .alignAllLeading, metrics: nil, views: views)
-                titleLabel.setContentHuggingPriority(
-                    UILayoutPriority(textField.contentHuggingPriority(for: .vertical).rawValue + 1), for: .vertical)
-                dynamicConstraints.append(NSLayoutConstraint(item: titleLabel, attribute: .centerX, relatedBy: .equal, toItem: textField, attribute: .centerX, multiplier: 1, constant: 0))
-            } else {
-                dynamicConstraints.append(NSLayoutConstraint(item: textField!, attribute: .centerY, relatedBy: .equal, toItem: contentView, attribute: .centerY, multiplier: 1, constant: 0))
-            }
-            
-            if let imageView = imageView, let _ = imageView.image {
-                views["imageView"] = imageView
-                if let titleLabel = titleLabel, let text = titleLabel.text, !text.isEmpty {
-                    dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "H:[imageView]-(15)-[titleLabel]-|", options: [], metrics: nil, views: views)
-                    dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "H:[imageView]-(15)-[textField]-|", options: [], metrics: nil, views: views)
-                } else {
-                    dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "H:[imageView]-(15)-[textField]-|", options: [], metrics: nil, views: views)
-                }
-            } else {
-                if let titleLabel = titleLabel, let text = titleLabel.text, !text.isEmpty {
-                    dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|-[titleLabel]-|", options: [], metrics: nil, views: views)
-                    dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|-[textField]-|", options: [], metrics: nil, views: views)
-                } else {
-                    dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|-[textField]-|", options: .alignAllLeft, metrics: nil, views: views)
-                }
-            }
-            
-        default:
-            var views: [String: AnyObject] =  ["textField": textField]
-            dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|-[textField]-|", options: .alignAllLastBaseline, metrics: nil, views: views)
-            
-            if let titleLabel = titleLabel, let text = titleLabel.text, !text.isEmpty {
-                views["titleLabel"] = titleLabel
-                dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|-[titleLabel]-|", options: .alignAllLastBaseline, metrics: nil, views: views)
-                dynamicConstraints.append(NSLayoutConstraint(item: titleLabel, attribute: .centerY, relatedBy: .equal, toItem: textField, attribute: .centerY, multiplier: 1, constant: 0))
-            }
-            
-            if let imageView = imageView, let _ = imageView.image {
-                views["imageView"] = imageView
-                if let titleLabel = titleLabel, let text = titleLabel.text, !text.isEmpty {
-                    dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "H:[imageView]-(15)-[titleLabel]-[textField]-|", options: [], metrics: nil, views: views)
-                    dynamicConstraints.append(NSLayoutConstraint(item: titleLabel,
-                                                                 attribute: .width,
-                                                                 relatedBy: (row as? FieldRowConformance)?.titlePercentage != nil ? .equal : .lessThanOrEqual,
-                                                                 toItem: contentView,
-                                                                 attribute: .width,
-                                                                 multiplier: calculatedTitlePercentage,
-                                                                 constant: 0.0))
-                } else {
-                    dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "H:[imageView]-(15)-[textField]-|", options: [], metrics: nil, views: views)
-                }
-            } else {
-                if let titleLabel = titleLabel, let text = titleLabel.text, !text.isEmpty {
-                    dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|-[titleLabel]-[textField]-|", options: [], metrics: nil, views: views)
-                    dynamicConstraints.append(NSLayoutConstraint(item: titleLabel,
-                                                                 attribute: .width,
-                                                                 relatedBy: (row as? FieldRowConformance)?.titlePercentage != nil ? .equal : .lessThanOrEqual,
-                                                                 toItem: contentView,
-                                                                 attribute: .width,
-                                                                 multiplier: calculatedTitlePercentage,
-                                                                 constant: 0.0))
-                } else {
-                    dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|-[textField]-|", options: .alignAllLeft, metrics: nil, views: views)
-                }
-            }
-        }
-        contentView.addConstraints(dynamicConstraints)
-    }
-
-    open override func updateConstraints() {
-        customConstraints()
-        super.updateConstraints()
-    }
-
-    @objc open func textFieldDidChange(_ textField: UITextField) {
-        
-        guard textField.markedTextRange == nil else { return }
-
-        guard let textValue = textField.text else {
-            row.value = nil
-            return
-        }
-        guard let fieldRow = row as? FieldRowConformance, let formatter = fieldRow.formatter else {
-            row.value = textValue.isEmpty ? nil : (T.init(string: textValue) ?? row.value)
-            return
-        }
-        if fieldRow.useFormatterDuringInput {
-            let unsafePointer = UnsafeMutablePointer<T>.allocate(capacity: 1)
-            defer {
-                unsafePointer.deallocate()
-            }
-            let value: AutoreleasingUnsafeMutablePointer<AnyObject?> = AutoreleasingUnsafeMutablePointer<AnyObject?>.init(unsafePointer)
-            let errorDesc: AutoreleasingUnsafeMutablePointer<NSString?>? = nil
-            if formatter.getObjectValue(value, for: textValue, errorDescription: errorDesc) {
-                row.value = value.pointee as? T
-                guard var selStartPos = textField.selectedTextRange?.start else { return }
-                let oldVal = textField.text
-                textField.text = row.displayValueFor?(row.value)
-                selStartPos = (formatter as? FormatterProtocol)?.getNewPosition(forPosition: selStartPos, inTextInput: textField, oldValue: oldVal, newValue: textField.text) ?? selStartPos
-                textField.selectedTextRange = textField.textRange(from: selStartPos, to: selStartPos)
-                return
-            }
-        } else {
-            let unsafePointer = UnsafeMutablePointer<T>.allocate(capacity: 1)
-            defer {
-                unsafePointer.deallocate()
-            }
-            let value: AutoreleasingUnsafeMutablePointer<AnyObject?> = AutoreleasingUnsafeMutablePointer<AnyObject?>.init(unsafePointer)
-            let errorDesc: AutoreleasingUnsafeMutablePointer<NSString?>? = nil
-            if formatter.getObjectValue(value, for: textValue, errorDescription: errorDesc) {
-                row.value = value.pointee as? T
-            } else {
-                row.value = textValue.isEmpty ? nil : (T.init(string: textValue) ?? row.value)
-            }
-        }
-    }
-
-    // MARK: Helpers
-
-    private func setupTitleLabel() {
-        titleLabel = self.textLabel
-        titleLabel?.translatesAutoresizingMaskIntoConstraints = false
-        titleLabel?.setContentHuggingPriority(UILayoutPriority(rawValue: 500), for: .horizontal)
-        titleLabel?.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 1000), for: .horizontal)
-    }
-
-    private func displayValue(useFormatter: Bool) -> String? {
-        guard let v = row.value else { return nil }
-        if let formatter = (row as? FormatterConformance)?.formatter, useFormatter {
-            return textField?.isFirstResponder == true ? formatter.editingString(for: v) : formatter.string(for: v)
-        }
-        return String(describing: v)
-    }
-
-    // MARK: TextFieldDelegate
-
-    open func textFieldDidBeginEditing(_ textField: UITextField) {
-        formViewController()?.beginEditing(of: self)
-        formViewController()?.textInputDidBeginEditing(textField, cell: self)
-        if let fieldRowConformance = row as? FormatterConformance, let _ = fieldRowConformance.formatter, fieldRowConformance.useFormatterOnDidBeginEditing ?? fieldRowConformance.useFormatterDuringInput {
-            textField.text = displayValue(useFormatter: true)
-        } else {
-            textField.text = displayValue(useFormatter: false)
-        }
-    }
-
-    open func textFieldDidEndEditing(_ textField: UITextField) {
-        formViewController()?.endEditing(of: self)
-        formViewController()?.textInputDidEndEditing(textField, cell: self)
-        textFieldDidChange(textField)
-        textField.text = displayValue(useFormatter: (row as? FormatterConformance)?.formatter != nil)
-    }
-
-    open func textFieldShouldReturn(_ textField: UITextField) -> Bool {
-        return formViewController()?.textInputShouldReturn(textField, cell: self) ?? true
-    }
-
-    open func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
-        return formViewController()?.textInput(textField, shouldChangeCharactersInRange:range, replacementString:string, cell: self) ?? true
-    }
-
-    open func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
-        return formViewController()?.textInputShouldBeginEditing(textField, cell: self) ?? true
-    }
-
-    open func textFieldShouldClear(_ textField: UITextField) -> Bool {
-        return formViewController()?.textInputShouldClear(textField, cell: self) ?? true
-    }
-
-    open func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
-        return formViewController()?.textInputShouldEndEditing(textField, cell: self) ?? true
-	}
-
-	open override func layoutSubviews() {
-		super.layoutSubviews()
-		guard let row = (row as? FieldRowConformance) else { return }
-		defer {
-			// As titleLabel is the textLabel, iOS may re-layout without updating constraints, for example:
-			// swiping, showing alert or actionsheet from the same section.
-			// thus we need forcing update to use customConstraints()
-			setNeedsUpdateConstraints()
-			updateConstraintsIfNeeded()
-		}
-		guard let titlePercentage = row.titlePercentage else  { return }
-		var targetTitleWidth = bounds.size.width * titlePercentage
-		if let imageView = imageView, let _ = imageView.image, let titleLabel = titleLabel {
-			var extraWidthToSubtract = titleLabel.frame.minX - imageView.frame.minX // Left-to-right interface layout
-            if UIView.userInterfaceLayoutDirection(for: self.semanticContentAttribute) == .rightToLeft {
-                extraWidthToSubtract = imageView.frame.maxX - titleLabel.frame.maxX
-            }
-			targetTitleWidth -= extraWidthToSubtract
-		}
-		calculatedTitlePercentage = targetTitleWidth / contentView.bounds.size.width
-	}
-}

+ 0 - 86
Pods/Eureka/Source/Rows/Common/GenericMultipleSelectorRow.swift

@@ -1,86 +0,0 @@
-//  GenericMultipleSelectorRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-/// Generic options selector row that allows multiple selection.
-open class GenericMultipleSelectorRow<T, Cell: CellType>: Row<Cell>, PresenterRowType, NoValueDisplayTextConformance, OptionsProviderRow
-            where Cell: BaseCell, Cell.Value == Set<T> {
-    
-    public typealias PresentedController = MultipleSelectorViewController<GenericMultipleSelectorRow<T,Cell>>
-
-    /// Defines how the view controller will be presented, pushed, etc.
-    open var presentationMode: PresentationMode<PresentedController>?
-
-    /// Will be called before the presentation occurs.
-    open var onPresentCallback: ((FormViewController, PresentedController) -> Void)?
-
-    /// Title to be displayed for the options
-    open var selectorTitle: String?
-    open var noValueDisplayText: String?
-
-    /// Options from which the user will choose
-    open var optionsProvider: OptionsProvider<T>?
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        displayValueFor = { (rowValue: Set<T>?) in
-            return rowValue?.map({ String(describing: $0) }).sorted().joined(separator: ", ")
-        }
-        presentationMode = .show(controllerProvider: ControllerProvider.callback {
-                return MultipleSelectorViewController<GenericMultipleSelectorRow<T,Cell>>()
-        }, onDismiss: { vc in
-            let _ = vc.navigationController?.popViewController(animated: true)
-        })
-    }
-
-    /**
-     Extends `didSelect` method
-     */
-    open override func customDidSelect() {
-        super.customDidSelect()
-        guard let presentationMode = presentationMode, !isDisabled else { return }
-        if let controller = presentationMode.makeController() {
-            controller.row = self
-            controller.title = selectorTitle ?? controller.title
-            onPresentCallback?(cell.formViewController()!, controller)
-            presentationMode.present(controller, row: self, presentingController: self.cell.formViewController()!)
-        } else {
-            presentationMode.present(nil, row: self, presentingController: self.cell.formViewController()!)
-        }
-    }
-
-    /**
-     Prepares the pushed row setting its title and completion callback.
-     */
-    open override func prepare(for segue: UIStoryboardSegue) {
-        super.prepare(for: segue)
-        guard let rowVC = segue.destination as Any as? PresentedController else { return }
-        rowVC.title = selectorTitle ?? rowVC.title
-        rowVC.onDismissCallback = presentationMode?.onDismissCallback ?? rowVC.onDismissCallback
-        onPresentCallback?(cell.formViewController()!, rowVC)
-        rowVC.row = self
-    }
-}

+ 0 - 37
Pods/Eureka/Source/Rows/Common/OptionsRow.swift

@@ -1,37 +0,0 @@
-//  OptionsRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-open class OptionsRow<Cell: CellType> : Row<Cell>, NoValueDisplayTextConformance, OptionsProviderRow where Cell: BaseCell {
-    
-    open var optionsProvider: OptionsProvider<Cell.Value>?
-    
-    open var selectorTitle: String?
-    open var noValueDisplayText: String?
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 35
Pods/Eureka/Source/Rows/Common/Protocols.swift

@@ -1,35 +0,0 @@
-//  Protocols.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-public protocol FormatterConformance: AnyObject {
-    var formatter: Formatter? { get set }
-    var useFormatterDuringInput: Bool { get set }
-    var useFormatterOnDidBeginEditing: Bool? { get set }
-}
-
-public protocol NoValueDisplayTextConformance: AnyObject {
-    var noValueDisplayText: String? { get set }
-}

+ 0 - 87
Pods/Eureka/Source/Rows/Common/SelectorRow.swift

@@ -1,87 +0,0 @@
-//  SelectorRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-open class PushSelectorCell<T: Equatable> : Cell<T>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func update() {
-        super.update()
-        accessoryType = .disclosureIndicator
-        editingAccessoryType = accessoryType
-        selectionStyle = row.isDisabled ? .none : .default
-    }
-}
-
-/// Generic row type where a user must select a value among several options.
-open class SelectorRow<Cell: CellType>: OptionsRow<Cell>, PresenterRowType where Cell: BaseCell {
-
-    
-    /// Defines how the view controller will be presented, pushed, etc.
-    open var presentationMode: PresentationMode<SelectorViewController<SelectorRow<Cell>>>?
-
-    /// Will be called before the presentation occurs.
-    open var onPresentCallback: ((FormViewController, SelectorViewController<SelectorRow<Cell>>) -> Void)?
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-
-    /**
-     Extends `didSelect` method
-     */
-    open override func customDidSelect() {
-        super.customDidSelect()
-        guard let presentationMode = presentationMode, !isDisabled else { return }
-        if let controller = presentationMode.makeController() {
-            controller.row = self
-            controller.title = selectorTitle ?? controller.title
-            onPresentCallback?(cell.formViewController()!, controller)
-            presentationMode.present(controller, row: self, presentingController: self.cell.formViewController()!)
-        } else {
-            presentationMode.present(nil, row: self, presentingController: self.cell.formViewController()!)
-        }
-    }
-
-    /**
-     Prepares the pushed row setting its title and completion callback.
-     */
-    open override func prepare(for segue: UIStoryboardSegue) {
-        super.prepare(for: segue)
-        guard let rowVC = segue.destination as Any as? SelectorViewController<SelectorRow<Cell>> else { return }
-        rowVC.title = selectorTitle ?? rowVC.title
-        rowVC.onDismissCallback = presentationMode?.onDismissCallback ?? rowVC.onDismissCallback
-        onPresentCallback?(cell.formViewController()!, rowVC)
-        rowVC.row = self
-    }
-}

+ 0 - 149
Pods/Eureka/Source/Rows/Controllers/MultipleSelectorViewController.swift

@@ -1,149 +0,0 @@
-//  MultipleSelectorViewController.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-/// Selector Controller that enables multiple selection
-open class _MultipleSelectorViewController<Row: SelectableRowType, OptionsRow: OptionsProviderRow> : FormViewController, TypedRowControllerType where Row: BaseRow, Row.Cell.Value == OptionsRow.OptionsProviderType.Option, OptionsRow.OptionsProviderType.Option: Hashable {
-
-    /// The row that pushed or presented this controller
-    public var row: RowOf<Set<OptionsRow.OptionsProviderType.Option>>!
-
-    public var selectableRowSetup: ((_ row: Row) -> Void)?
-    public var selectableRowCellSetup: ((_ cell: Row.Cell, _ row: Row) -> Void)?
-    public var selectableRowCellUpdate: ((_ cell: Row.Cell, _ row: Row) -> Void)?
-    
-    /// A closure to be called when the controller disappears.
-    public var onDismissCallback: ((UIViewController) -> Void)?
-
-    /// A closure that should return key for particular row value.
-    /// This key is later used to break options by sections.
-    public var sectionKeyForValue: ((Row.Cell.Value) -> (String))?
-
-    /// A closure that returns header title for a section for particular key.
-    /// By default returns the key itself.
-    public var sectionHeaderTitleForKey: ((String) -> String?)? = { $0 }
-
-    /// A closure that returns footer title for a section for particular key.
-    public var sectionFooterTitleForKey: ((String) -> String?)?
-
-
-    public var optionsProviderRow: OptionsRow {
-        return row as! OptionsRow
-    }
-    
-
-    override public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
-        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
-    }
-
-    convenience public init(_ callback: ((UIViewController) -> Void)?) {
-        self.init(nibName: nil, bundle: nil)
-        onDismissCallback = callback
-    }
-
-    public required init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func viewDidLoad() {
-        super.viewDidLoad()
-        setupForm()
-    }
-
-    open func setupForm() {
-        optionsProviderRow.optionsProvider?.options(for: self) { [weak self] (options: [OptionsRow.OptionsProviderType.Option]?) in
-            guard let strongSelf = self, let options = options else { return }
-            strongSelf.optionsProviderRow.cachedOptionsData = options
-            strongSelf.setupForm(with: options)
-        }
-    }
-    
-    open func setupForm(with options: [OptionsRow.OptionsProviderType.Option]) {
-        if let optionsBySections = optionsBySections(with: options) {
-            for (sectionKey, options) in optionsBySections {
-                form +++ section(with: options,
-                                 header: sectionHeaderTitleForKey?(sectionKey),
-                                 footer: sectionFooterTitleForKey?(sectionKey))
-            }
-        } else {
-            form +++ section(with: options, header: row.title, footer: nil)
-        }
-    }
-    
-    open func optionsBySections(with options: [OptionsRow.OptionsProviderType.Option]) -> [(String, [Row.Cell.Value])]? {
-        guard let sectionKeyForValue = sectionKeyForValue else { return nil }
-
-        let sections = options.reduce([:]) { (reduced, option) -> [String: [Row.Cell.Value]] in
-            var reduced = reduced
-            let key = sectionKeyForValue(option)
-            var items = reduced[key] ?? []
-            items.append(option)
-            reduced[key] = items
-            return reduced
-        }
-
-        return sections.sorted(by: { (lhs, rhs) in lhs.0 < rhs.0 })
-    }
-
-    func section(with options: [OptionsRow.OptionsProviderType.Option], header: String?, footer: String?) -> SelectableSection<Row> {
-        let section = SelectableSection<Row>(header: header ?? "", footer: footer ?? "", selectionType: .multipleSelection) { section in
-            section.onSelectSelectableRow = {  [weak self] _, selectableRow in
-                var newValue: Set<OptionsRow.OptionsProviderType.Option> = self?.row.value ?? []
-                if let selectableValue = selectableRow.value {
-                    newValue.insert(selectableValue)
-                } else {
-                    newValue.remove(selectableRow.selectableValue!)
-                }
-                self?.row.value = newValue
-            }
-        }
-        for option in options {
-            section <<< Row.init { lrow in
-                lrow.title = String(describing: option)
-                lrow.selectableValue = option
-                lrow.value = self.row.value?.contains(option) ?? false ? option : nil
-                self.selectableRowSetup?(lrow)
-            }.cellSetup { [weak self] cell, row in
-                self?.selectableRowCellSetup?(cell, row)
-            }.cellUpdate { [weak self] cell, row in
-                self?.selectableRowCellUpdate?(cell, row)
-            }
-        }
-        return section
-    }
-}
-
-open class MultipleSelectorViewController<OptionsRow: OptionsProviderRow>: _MultipleSelectorViewController<ListCheckRow<OptionsRow.OptionsProviderType.Option>, OptionsRow> where OptionsRow.OptionsProviderType.Option: Hashable{
-    
-    override public init(nibName nibNameOrNil: String? = nil, bundle nibBundleOrNil: Bundle? = nil) {
-        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
-    }
-    
-    public required init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-    
-}

+ 0 - 80
Pods/Eureka/Source/Rows/Controllers/SelectorAlertController.swift

@@ -1,80 +0,0 @@
-//  SelectorAlertController.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-/// Specific type, Responsible for the options passed to a selector alert view controller
-public protocol AlertOptionsProviderRow: OptionsProviderRow {
-
-    var cancelTitle: String? { get set }
-
-}
-
-/// Selector UIAlertController
-open class SelectorAlertController<AlertOptionsRow: AlertOptionsProviderRow>: UIAlertController, TypedRowControllerType where AlertOptionsRow.OptionsProviderType.Option == AlertOptionsRow.Cell.Value, AlertOptionsRow: BaseRow {
-
-    /// The row that pushed or presented this controller
-    public var row: RowOf<AlertOptionsRow.Cell.Value>!
-
-    @available(*, deprecated, message: "Use AlertOptionsRow.cancelTitle instead.")
-    public var cancelTitle = NSLocalizedString("Cancel", comment: "")
-
-    /// A closure to be called when the controller disappears.
-    public var onDismissCallback: ((UIViewController) -> Void)?
-    
-    /// Options provider to use to get available options.
-    /// If not set will use synchronous data provider built with `row.dataProvider.arrayData`.
-    //    public var optionsProvider: OptionsProvider<T>?
-    public var optionsProviderRow: AlertOptionsRow {
-        return row as Any as! AlertOptionsRow
-    }
-
-    override public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
-        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    convenience public init(_ callback: ((UIViewController) -> Void)?) {
-        self.init()
-        onDismissCallback = callback
-    }
-
-    open override func viewDidLoad() {
-        super.viewDidLoad()
-        guard let options = optionsProviderRow.options else { return }
-        let cancelTitle = optionsProviderRow.cancelTitle ?? NSLocalizedString("Cancel", comment: "")
-        addAction(UIAlertAction(title: cancelTitle, style: .cancel, handler: nil))
-        for option in options {
-            addAction(UIAlertAction(title: row.displayValueFor?(option), style: .default, handler: { [weak self] _ in
-                self?.row.value = option
-                self?.onDismissCallback?(self!)
-            }))
-        }
-    }
-
-}

+ 0 - 232
Pods/Eureka/Source/Rows/Controllers/SelectorViewController.swift

@@ -1,232 +0,0 @@
-//  SelectorViewController.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-/**
- *  Responsible for the options passed to a selector view controller
- */
-
-public protocol OptionsProviderRow: TypedRowType {
-    associatedtype OptionsProviderType: OptionsProviderConformance
-    
-    var optionsProvider: OptionsProviderType? { get set }
-    
-    var cachedOptionsData: [OptionsProviderType.Option]? { get set }
-}
-
-extension OptionsProviderRow where Self: BaseRow {
-    
-    public var options: [OptionsProviderType.Option]? {
-        set (newValue){
-            let optProvider = OptionsProviderType.init(array: newValue)
-            optionsProvider = optProvider
-        }
-        get {
-            return self.cachedOptionsData ?? optionsProvider?.optionsArray
-        }
-    }
-    
-    public var cachedOptionsData: [OptionsProviderType.Option]? {
-        get {
-            return self._cachedOptionsData as? [OptionsProviderType.Option]
-        }
-        set {
-            self._cachedOptionsData = newValue
-        }
-    }
-}
-
-public protocol OptionsProviderConformance: ExpressibleByArrayLiteral {
-    associatedtype Option: Equatable
-    
-    init(array: [Option]?)
-    func options(for selectorViewController: FormViewController, completion: @escaping ([Option]?) -> Void)
-    var optionsArray: [Option]? { get }
-    
-}
-
-/// Provider of selectable options.
-public enum OptionsProvider<T: Equatable>: OptionsProviderConformance {
-    
-    /// Synchronous provider that provides array of options it was initialized with
-    case array([T]?)
-    /// Provider that uses closure it was initialized with to provide options. Can be synchronous or asynchronous.
-    case lazy((FormViewController, @escaping ([T]?) -> Void) -> Void)
-    
-    public init(array: [T]?) {
-        self = .array(array)
-    }
-    
-    public init(arrayLiteral elements: T...) {
-        self = .array(elements)
-    }
-    
-    public func options(for selectorViewController: FormViewController, completion: @escaping ([T]?) -> Void) {
-        switch self {
-        case let .array(array):
-            completion(array)
-        case let .lazy(fetch):
-            fetch(selectorViewController, completion)
-        }
-    }
-    
-    public var optionsArray: [T]?{
-        switch self {
-        case let .array(arrayData):
-            return arrayData
-        default:
-            return nil
-        }
-    }
-}
-
-open class _SelectorViewController<Row: SelectableRowType, OptionsRow: OptionsProviderRow>: FormViewController, TypedRowControllerType where Row: BaseRow, Row.Cell.Value == OptionsRow.OptionsProviderType.Option {
-
-    /// The row that pushed or presented this controller
-    public var row: RowOf<Row.Cell.Value>!
-    public var enableDeselection = true
-    public var dismissOnSelection = true
-    public var dismissOnChange = true
-
-    public var selectableRowSetup: ((_ row: Row) -> Void)?
-    public var selectableRowCellUpdate: ((_ cell: Row.Cell, _ row: Row) -> Void)?
-    public var selectableRowCellSetup: ((_ cell: Row.Cell, _ row: Row) -> Void)?
-	
-    /// A closure to be called when the controller disappears.
-    public var onDismissCallback: ((UIViewController) -> Void)?
-
-    /// A closure that should return key for particular row value.
-    /// This key is later used to break options by sections.
-    public var sectionKeyForValue: ((Row.Cell.Value) -> (String))?
-
-    /// A closure that returns header title for a section for particular key.
-    /// By default returns the key itself.
-    public var sectionHeaderTitleForKey: ((String) -> String?)? = { $0 }
-
-    /// A closure that returns footer title for a section for particular key.
-    public var sectionFooterTitleForKey: ((String) -> String?)?
-    
-    public var optionsProviderRow: OptionsRow {
-        return row as! OptionsRow
-    }
-
-    override public init(style: UITableView.Style) {
-        super.init(style: style)
-    }
-
-    override public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
-        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
-    }
-
-    convenience public init(_ callback: ((UIViewController) -> Void)?) {
-        self.init(nibName: nil, bundle: nil)
-        onDismissCallback = callback
-    }
-
-    public required init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func viewDidLoad() {
-        super.viewDidLoad()
-        setupForm()
-    }
-
-    open func setupForm() {
-        let optProvider = optionsProviderRow.optionsProvider
-        optProvider?.options(for: self) { [weak self] (options: [Row.Cell.Value]?) in
-            guard let strongSelf = self, let options = options else { return }
-            strongSelf.optionsProviderRow.cachedOptionsData = options
-            strongSelf.setupForm(with: options)
-        }
-    }
-    
-    open func setupForm(with options: [Row.Cell.Value]) {
-        if let optionsBySections = optionsBySections(with: options) {
-            for (sectionKey, options) in optionsBySections {
-                form +++ section(with: options,
-                                 header: sectionHeaderTitleForKey?(sectionKey),
-                                 footer: sectionFooterTitleForKey?(sectionKey))
-            }
-        } else {
-            form +++ section(with: options, header: nil, footer: nil)
-        }
-    }
-    
-    func optionsBySections(with options: [Row.Cell.Value]) -> [(String, [Row.Cell.Value])]? {
-        guard let sectionKeyForValue = sectionKeyForValue else { return nil }
-
-        let sections = options.reduce([:]) { (reduced, option) -> [String: [Row.Cell.Value]] in
-            var reduced = reduced
-            let key = sectionKeyForValue(option)
-            reduced[key] = (reduced[key] ?? []) + [option]
-            return reduced
-        }
-
-        return sections.sorted(by: { (lhs, rhs) in lhs.0 < rhs.0 })
-    }
-
-    func section(with options: [Row.Cell.Value], header: String?, footer: String?) -> SelectableSection<Row> {
-        let section = SelectableSection<Row>(header: header, footer: footer, selectionType: .singleSelection(enableDeselection: enableDeselection)) { section in
-            section.onSelectSelectableRow = { [weak self] _, row in
-                let changed = self?.row.value != row.value
-                self?.row.value = row.value
-                
-                if let form = row.section?.form {
-                    for section in form where section !== row.section && section is SelectableSection<Row> {
-                        let section = section as Any as! SelectableSection<Row>
-                        if let selectedRow = section.selectedRow(), selectedRow !== row {
-                            selectedRow.value = nil
-                            selectedRow.updateCell()
-                        }
-                    }
-                }
-                
-                if self?.dismissOnSelection == true || (changed && self?.dismissOnChange == true) {
-                    self?.onDismissCallback?(self!)
-                }
-            }
-        }
-        for option in options {
-            section <<< Row.init(String(describing: option)) { lrow in
-                lrow.title = self.row.displayValueFor?(option)
-                lrow.selectableValue = option
-                lrow.value = self.row.value == option ? option : nil
-                self.selectableRowSetup?(lrow)
-            }.cellSetup { [weak self] cell, row in
-                self?.selectableRowCellSetup?(cell, row)
-            }.cellUpdate { [weak self] cell, row in
-                self?.selectableRowCellUpdate?(cell, row)
-            }
-        }
-        return section
-    }
-
-}
-
-/// Selector Controller (used to select one option among a list)
-open class SelectorViewController<OptionsRow: OptionsProviderRow>: _SelectorViewController<ListCheckRow<OptionsRow.OptionsProviderType.Option>, OptionsRow> {
-}

+ 0 - 214
Pods/Eureka/Source/Rows/DateInlineRow.swift

@@ -1,214 +0,0 @@
-//  DateInliuneRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-extension DatePickerRowProtocol {
-
-    func configureInlineRow(_ inlineRow: DatePickerRowProtocol) {
-        inlineRow.minimumDate = minimumDate
-        inlineRow.maximumDate = maximumDate
-        inlineRow.minuteInterval = minuteInterval
-    }
-    
-    func configurePickerStyle(_ cell: DatePickerCell, _ mode: UIDatePicker.Mode = .dateAndTime) {
-        cell.datePicker.datePickerMode = mode
-        // For Xcode 11.4 and above
-        #if swift(>=5.2)
-            if #available(iOS 14.0, *) {
-                #if swift(>=5.3) && !(os(OSX) || (os(iOS) && targetEnvironment(macCatalyst)))
-                    cell.datePicker.preferredDatePickerStyle = .inline
-                #else
-                    cell.datePicker.preferredDatePickerStyle = .wheels
-                #endif
-            }
-            else if #available(iOS 13.4, *) {
-                cell.datePicker.preferredDatePickerStyle = .wheels
-            }
-        #endif
-    }
-
-}
-
-open class _DateInlineRow: _DateInlineFieldRow {
-
-    public typealias InlineRow = DatePickerRow
-
-    public required init(tag: String?) {
-        super.init(tag: tag)
-        dateFormatter?.timeStyle = .none
-        dateFormatter?.dateStyle = .medium
-    }
-
-    open func setupInlineRow(_ inlineRow: DatePickerRow) {
-        configureInlineRow(inlineRow)
-        configurePickerStyle(inlineRow.cell, .date)
-    }
-}
-
-open class _TimeInlineRow: _DateInlineFieldRow {
-
-    public typealias InlineRow = TimePickerRow
-
-    public required init(tag: String?) {
-        super.init(tag: tag)
-        dateFormatter?.timeStyle = .short
-        dateFormatter?.dateStyle = .none
-    }
-
-    open func setupInlineRow(_ inlineRow: TimePickerRow) {
-        configureInlineRow(inlineRow)
-        configurePickerStyle(inlineRow.cell, .time)
-    }
-}
-
-open class _DateTimeInlineRow: _DateInlineFieldRow {
-
-    public typealias InlineRow = DateTimePickerRow
-
-    public required init(tag: String?) {
-        super.init(tag: tag)
-        dateFormatter?.timeStyle = .short
-        dateFormatter?.dateStyle = .short
-    }
-
-    open func setupInlineRow(_ inlineRow: DateTimePickerRow) {
-        configureInlineRow(inlineRow)
-        configurePickerStyle(inlineRow.cell)
-    }
-}
-
-open class _CountDownInlineRow: _DateInlineFieldRow {
-
-    public typealias InlineRow = CountDownPickerRow
-
-    public required init(tag: String?) {
-        super.init(tag: tag)
-        displayValueFor = {
-            guard let date = $0 else {
-                return nil
-            }
-
-            let dateComponents = Calendar.current.dateComponents([.hour, .minute], from: date)
-            return DateComponentsFormatter.localizedString(from: dateComponents, unitsStyle: .full)?.replacingOccurrences(of: ",", with: "")
-        }
-    }
-
-    public func setupInlineRow(_ inlineRow: CountDownPickerRow) {
-        configureInlineRow(inlineRow)
-    }
-}
-
-/// A row with an Date as value where the user can select a date from an inline picker view.
-public final class DateInlineRow_<T>: _DateInlineRow, RowType, InlineRowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        onExpandInlineRow { cell, row, _ in
-            let color = cell.detailTextLabel?.textColor
-            row.onCollapseInlineRow { cell, _, _ in
-                cell.detailTextLabel?.textColor = color
-            }
-            cell.detailTextLabel?.textColor = cell.tintColor
-        }
-    }
-
-    public override func customDidSelect() {
-        super.customDidSelect()
-        if !isDisabled {
-            toggleInlineRow()
-        }
-    }
-}
-
-public typealias DateInlineRow = DateInlineRow_<Date>
-
-/// A row with an Date as value where the user can select date and time from an inline picker view.
-public final class DateTimeInlineRow_<T>: _DateTimeInlineRow, RowType, InlineRowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        onExpandInlineRow { cell, row, _ in
-            let color = cell.detailTextLabel?.textColor
-            row.onCollapseInlineRow { cell, _, _ in
-                cell.detailTextLabel?.textColor = color
-            }
-            cell.detailTextLabel?.textColor = cell.tintColor
-        }
-    }
-
-    public override func customDidSelect() {
-        super.customDidSelect()
-        if !isDisabled {
-            toggleInlineRow()
-        }
-    }
-}
-
-public typealias DateTimeInlineRow = DateTimeInlineRow_<Date>
-
-/// A row with an Date as value where the user can select a time from an inline picker view.
-public final class TimeInlineRow_<T>: _TimeInlineRow, RowType, InlineRowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        onExpandInlineRow { cell, row, _ in
-            let color = cell.detailTextLabel?.textColor
-            row.onCollapseInlineRow { cell, _, _ in
-                cell.detailTextLabel?.textColor = color
-            }
-            cell.detailTextLabel?.textColor = cell.tintColor
-        }
-    }
-
-    public override func customDidSelect() {
-        super.customDidSelect()
-        if !isDisabled {
-            toggleInlineRow()
-        }
-    }
-}
-
-public typealias TimeInlineRow = TimeInlineRow_<Date>
-
-///// A row with an Date as value where the user can select hour and minute as a countdown timer in an inline picker view.
-public final class CountDownInlineRow_<T>: _CountDownInlineRow, RowType, InlineRowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        onExpandInlineRow { cell, row, _ in
-            let color = cell.detailTextLabel?.textColor
-            row.onCollapseInlineRow { cell, _, _ in
-                cell.detailTextLabel?.textColor = color
-            }
-            cell.detailTextLabel?.textColor = cell.tintColor
-        }
-    }
-
-    public override func customDidSelect() {
-        super.customDidSelect()
-        if !isDisabled {
-            toggleInlineRow()
-        }
-    }
-}
-
-public typealias CountDownInlineRow = CountDownInlineRow_<Date>

+ 0 - 156
Pods/Eureka/Source/Rows/DatePickerRow.swift

@@ -1,156 +0,0 @@
-//  DateRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-open class DatePickerCell: Cell<Date>, CellType {
-
-    @IBOutlet weak public var datePicker: UIDatePicker!
-
-    public required init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        let datePicker = UIDatePicker()
-        self.datePicker = datePicker
-        self.datePicker.translatesAutoresizingMaskIntoConstraints = false
-
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-
-        self.contentView.addSubview(self.datePicker)
-        self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[picker]-0-|", options: [], metrics: nil, views: ["picker": self.datePicker!]))
-        self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[picker]-0-|", options: [], metrics: nil, views: ["picker": self.datePicker!]))
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        selectionStyle = .none
-        accessoryType = .none
-        editingAccessoryType =  .none
-        height = { UITableView.automaticDimension }
-        datePicker.datePickerMode = datePickerMode()
-        datePicker.addTarget(self, action: #selector(DatePickerCell.datePickerValueChanged(_:)), for: .valueChanged)
-
-        if datePicker.datePickerMode != .countDownTimer {
-            #if swift(>=5.2)
-                if #available(iOS 14.0, *) {
-                    #if swift(>=5.3) && !(os(OSX) || (os(iOS) && targetEnvironment(macCatalyst)))
-                        datePicker.preferredDatePickerStyle = .inline
-                    #else
-                        datePicker.preferredDatePickerStyle = .wheels
-                    #endif
-                } else if #available(iOS 13.4, *) {
-                    datePicker.preferredDatePickerStyle = .wheels
-                }
-             #endif
-        }
-    }
-
-    deinit {
-        datePicker?.removeTarget(self, action: nil, for: .allEvents)
-    }
-
-    open override func update() {
-        super.update()
-        selectionStyle = row.isDisabled ? .none : .default
-        datePicker.isUserInteractionEnabled = !row.isDisabled
-        detailTextLabel?.text = nil
-        textLabel?.text = nil
-        datePicker.setDate(row.value ?? Date(), animated: row is CountDownPickerRow)
-        datePicker.minimumDate = (row as? DatePickerRowProtocol)?.minimumDate
-        datePicker.maximumDate = (row as? DatePickerRowProtocol)?.maximumDate
-        if let minuteIntervalValue = (row as? DatePickerRowProtocol)?.minuteInterval {
-            datePicker.minuteInterval = minuteIntervalValue
-        }
-    }
-
-    @objc(pickerDateChanged:) func datePickerValueChanged(_ sender: UIDatePicker) {
-        row?.value = sender.date
-        
-        // workaround for UIDatePicker bug when it doesn't trigger "value changed" event after trying to pick 00:00 value
-        // for details see this comment: https://stackoverflow.com/questions/20181980/uidatepicker-bug-uicontroleventvaluechanged-after-hitting-minimum-internal#comment56681891_20204225
-        if sender.datePickerMode == .countDownTimer && sender.countDownDuration == TimeInterval(sender.minuteInterval * 60) {
-            datePicker.countDownDuration = sender.countDownDuration
-        }
-        
-    }
-
-    private func datePickerMode() -> UIDatePicker.Mode {
-        switch row {
-        case is DatePickerRow:
-            return .date
-        case is TimePickerRow:
-            return .time
-        case is DateTimePickerRow:
-            return .dateAndTime
-        case is CountDownPickerRow:
-            return .countDownTimer
-        default:
-            return .date
-        }
-    }
-
-}
-
-open class _DatePickerRow: Row<DatePickerCell>, DatePickerRowProtocol {
-
-    open var minimumDate: Date?
-    open var maximumDate: Date?
-    open var minuteInterval: Int?
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        displayValueFor = nil
-    }
-}
-
-/// A row with an Date as value where the user can select a date directly.
-public final class DatePickerRow: _DatePickerRow, RowType {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A row with an Date as value where the user can select a time directly.
-public final class TimePickerRow: _DatePickerRow, RowType {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A row with an Date as value where the user can select date and time directly.
-public final class DateTimePickerRow: _DatePickerRow, RowType {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A row with an Date as value where the user can select hour and minute as a countdown timer.
-public final class CountDownPickerRow: _DatePickerRow, RowType {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 99
Pods/Eureka/Source/Rows/DateRow.swift

@@ -1,99 +0,0 @@
-//  DateRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-import Foundation
-
-open class _DateRow: _DateFieldRow {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        dateFormatter = DateFormatter()
-        dateFormatter?.timeStyle = .none
-        dateFormatter?.dateStyle = .medium
-        dateFormatter?.locale = Locale.current
-    }
-}
-
-open class _TimeRow: _DateFieldRow {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        dateFormatter = DateFormatter()
-        dateFormatter?.timeStyle = .short
-        dateFormatter?.dateStyle = .none
-        dateFormatter?.locale = Locale.current
-    }
-}
-
-open class _DateTimeRow: _DateFieldRow {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        dateFormatter = DateFormatter()
-        dateFormatter?.timeStyle = .short
-        dateFormatter?.dateStyle = .short
-        dateFormatter?.locale = Locale.current
-    }
-}
-
-open class _CountDownRow: _DateFieldRow {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        displayValueFor = { [unowned self] value in
-            guard let val = value else {
-                return nil
-            }
-            if let formatter = self.dateFormatter {
-                return formatter.string(from: val)
-            }
-
-            let dateComponents = Calendar.current.dateComponents([.hour, .minute], from: val)
-            return DateComponentsFormatter.localizedString(from: dateComponents, unitsStyle: .full)?.replacingOccurrences(of: ",", with: "")
-        }
-    }
-}
-
-/// A row with an Date as value where the user can select a date from a picker view.
-public final class DateRow: _DateRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A row with an Date as value where the user can select a time from a picker view.
-public final class TimeRow: _TimeRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A row with an Date as value where the user can select date and time from a picker view.
-public final class DateTimeRow: _DateTimeRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A row with an Date as value where the user can select hour and minute as a countdown timer in a picker view.
-public final class CountDownRow: _CountDownRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 112
Pods/Eureka/Source/Rows/DoublePickerInputRow.swift

@@ -1,112 +0,0 @@
-//
-//  DoublePickerInputRow.swift
-//  Eureka
-//
-//  Created by Mathias Claassen on 5/10/18.
-//  Copyright © 2018 Xmartlabs. All rights reserved.
-//
-
-import Foundation
-import UIKit
-
-open class DoublePickerInputCell<A, B> : _PickerInputCell<Tuple<A, B>> where A: Equatable, B: Equatable {
-
-    private var pickerRow: _DoublePickerInputRow<A, B>! { return row as? _DoublePickerInputRow<A, B> }
-
-    public required init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func update() {
-        super.update()
-        if let selectedValue = pickerRow.value, let indexA = pickerRow.firstOptions().firstIndex(of: selectedValue.a),
-            let indexB = pickerRow.secondOptions(selectedValue.a).firstIndex(of: selectedValue.b) {
-            picker.selectRow(indexA, inComponent: 0, animated: true)
-            picker.selectRow(indexB, inComponent: 1, animated: true)
-        }
-    }
-
-    open override func numberOfComponents(in pickerView: UIPickerView) -> Int {
-        return 2
-    }
-
-    open override func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
-        return  component == 0 ? pickerRow.firstOptions().count : pickerRow.secondOptions(pickerRow.selectedFirst()).count
-    }
-
-    open override func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
-        if component == 0 {
-            return pickerRow.displayValueForFirstRow(pickerRow.firstOptions()[row])
-        } else {
-            return pickerRow.displayValueForSecondRow(pickerRow.secondOptions(pickerRow.selectedFirst())[row])
-        }
-    }
-
-    open override func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
-        if component == 0 {
-            let a = pickerRow.firstOptions()[row]
-            if let value = pickerRow.value {
-                guard value.a != a else {
-                    return
-                }
-                if pickerRow.secondOptions(a).contains(value.b) {
-                    pickerRow.value = Tuple(a: a, b: value.b)
-                    pickerView.reloadComponent(1)
-                    update()
-                    return
-                } else {
-                    pickerRow.value = Tuple(a: a, b: pickerRow.secondOptions(a)[0])
-                }
-            } else {
-                pickerRow.value = Tuple(a: a, b: pickerRow.secondOptions(a)[0])
-            }
-            pickerView.reloadComponent(1)
-            pickerView.selectRow(0, inComponent: 1, animated: true)
-        } else {
-            let a = pickerRow.selectedFirst()
-            pickerRow.value = Tuple(a: a, b: pickerRow.secondOptions(a)[row])
-        }
-        update()
-    }
-}
-
-open class _DoublePickerInputRow<A: Equatable, B: Equatable> : Row<DoublePickerInputCell<A, B>>, NoValueDisplayTextConformance {
-
-    open var noValueDisplayText: String? = nil
-    /// Options for first component. Will be called often so should be O(1)
-    public var firstOptions: (() -> [A]) = {[]}
-    /// Options for second component given the selected value from the first component. Will be called often so should be O(1)
-    public var secondOptions: ((A) -> [B]) = {_ in []}
-    
-    /// Modify the displayed values for the first picker row.
-    public var displayValueForFirstRow: ((A) -> (String)) = { a in return String(describing: a) }
-    /// Modify the displayed values for the second picker row.
-    public var displayValueForSecondRow: ((B) -> (String)) = { b in return String(describing: b) }
-    
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-
-    func selectedFirst() -> A {
-        return value?.a ?? firstOptions()[0]
-    }
-
-}
-
-/// A generic row where the user can pick an option from a picker view displayed in the keyboard area
-public final class DoublePickerInputRow<A, B>: _DoublePickerInputRow<A, B>, RowType where A: Equatable, B: Equatable {
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        self.displayValueFor = { [weak self] tuple in
-            guard let tuple = tuple else {
-                return self?.noValueDisplayText
-            }
-            return String(describing: tuple.a) + ", " + String(describing: tuple.b)
-        }
-    }
-}

+ 0 - 129
Pods/Eureka/Source/Rows/DoublePickerRow.swift

@@ -1,129 +0,0 @@
-//
-//  MultiplePickerRow.swift
-//  Eureka
-//
-//  Created by Mathias Claassen on 5/8/18.
-//  Copyright © 2018 Xmartlabs. All rights reserved.
-//
-
-import Foundation
-import UIKit
-
-public struct Tuple<A: Equatable, B: Equatable> {
-    
-    public let a: A
-    public let b: B
-
-    public init(a: A, b: B) {
-        self.a = a
-        self.b = b
-    }
-
-}
-
-extension Tuple: Equatable {}
-
-public func == <A: Equatable, B: Equatable>(lhs: Tuple<A, B>, rhs: Tuple<A, B>) -> Bool {
-    return lhs.a == rhs.a && lhs.b == rhs.b
-}
-
-// MARK: MultiplePickerCell
-
-open class DoublePickerCell<A, B> : _PickerCell<Tuple<A, B>> where A: Equatable, B: Equatable {
-
-    private var pickerRow: _DoublePickerRow<A, B>? { return row as? _DoublePickerRow<A, B> }
-
-    public required init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func update() {
-        super.update()
-        if let selectedValue = pickerRow?.value, let indexA = pickerRow?.firstOptions().firstIndex(of: selectedValue.a),
-            let indexB = pickerRow?.secondOptions(selectedValue.a).firstIndex(of: selectedValue.b) {
-            picker.selectRow(indexA, inComponent: 0, animated: true)
-            picker.selectRow(indexB, inComponent: 1, animated: true)
-        }
-    }
-
-    open override func numberOfComponents(in pickerView: UIPickerView) -> Int {
-        return 2
-    }
-
-    open override func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
-        guard let pickerRow = pickerRow else { return 0 }
-        return component == 0 ? pickerRow.firstOptions().count : pickerRow.secondOptions(pickerRow.selectedFirst()).count
-    }
-
-    open override func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
-        guard let pickerRow = pickerRow else { return "" }
-        if component == 0 {
-            return pickerRow.displayValueForFirstRow(pickerRow.firstOptions()[row])
-        } else {
-            return pickerRow.displayValueForSecondRow(pickerRow.secondOptions(pickerRow.selectedFirst())[row])
-        }
-    }
-
-    open override func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
-        guard let pickerRow = pickerRow else { return }
-        if component == 0 {
-            let a = pickerRow.firstOptions()[row]
-            if let value = pickerRow.value {
-                guard value.a != a else {
-                    return
-                }
-                if pickerRow.secondOptions(a).contains(value.b) {
-                    pickerRow.value = Tuple(a: a, b: value.b)
-                    pickerView.reloadComponent(1)
-                    return
-                } else {
-                    pickerRow.value = Tuple(a: a, b: pickerRow.secondOptions(a)[0])
-                }
-            } else {
-                pickerRow.value = Tuple(a: a, b: pickerRow.secondOptions(a)[0])
-            }
-            pickerView.reloadComponent(1)
-            pickerView.selectRow(0, inComponent: 1, animated: true)
-        } else {
-            let a = pickerRow.selectedFirst()
-            pickerRow.value = Tuple(a: a, b: pickerRow.secondOptions(a)[row])
-        }
-    }
-
-}
-
-// MARK: PickerRow
-open class _DoublePickerRow<A, B> : Row<DoublePickerCell<A, B>> where A: Equatable, B: Equatable {
-
-    /// Options for first component. Will be called often so should be O(1)
-    public var firstOptions: (() -> [A]) = {[]}
-    /// Options for second component given the selected value from the first component. Will be called often so should be O(1)
-    public var secondOptions: ((A) -> [B]) = {_ in []}
-    
-    /// Modify the displayed values for the first picker row.
-    public var displayValueForFirstRow: ((A) -> (String)) = { a in return String(describing: a) }
-    /// Modify the displayed values for the second picker row.
-    public var displayValueForSecondRow: ((B) -> (String)) = { b in return String(describing: b) }
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-
-    func selectedFirst() -> A {
-        return value?.a ?? firstOptions()[0]
-    }
-
-}
-
-/// A generic row where the user can pick an option from a picker view
-public final class DoublePickerRow<A, B>: _DoublePickerRow<A, B>, RowType where A: Equatable, B: Equatable {
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-
-}

+ 0 - 399
Pods/Eureka/Source/Rows/FieldsRow.swift

@@ -1,399 +0,0 @@
-//  FieldsRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-open class TextCell: _FieldCell<String>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        textField.autocorrectionType = .default
-        textField.autocapitalizationType = .sentences
-        textField.keyboardType = .default
-    }
-}
-
-open class IntCell: _FieldCell<Int>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        textField.autocorrectionType = .default
-        textField.autocapitalizationType = .none
-        textField.keyboardType = .numberPad
-    }
-}
-
-open class PhoneCell: _FieldCell<String>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        textField.keyboardType = .phonePad
-        if #available(iOS 10,*) {
-            textField.textContentType = .telephoneNumber
-        }
-    }
-}
-
-open class NameCell: _FieldCell<String>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        textField.autocorrectionType = .no
-        textField.autocapitalizationType = .words
-        textField.keyboardType = .asciiCapable
-        if #available(iOS 10,*) {
-            textField.textContentType = .name
-        }
-    }
-}
-
-open class EmailCell: _FieldCell<String>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        textField.autocorrectionType = .no
-        textField.autocapitalizationType = .none
-        textField.keyboardType = .emailAddress
-        if #available(iOS 10,*) {
-            textField.textContentType = .emailAddress
-        }
-    }
-}
-
-open class PasswordCell: _FieldCell<String>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        textField.autocorrectionType = .no
-        textField.autocapitalizationType = .none
-        textField.keyboardType = .asciiCapable
-        textField.isSecureTextEntry = true
-        if let textLabel = textLabel {
-            textField.setContentHuggingPriority(textLabel.contentHuggingPriority(for: .horizontal) - 1, for: .horizontal)
-        }
-        if #available(iOS 11,*) {
-            textField.textContentType = .password
-        }
-    }
-}
-
-open class DecimalCell: _FieldCell<Double>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        textField.autocorrectionType = .no
-        textField.keyboardType = .decimalPad
-    }
-}
-
-open class URLCell: _FieldCell<URL>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        textField.autocorrectionType = .no
-        textField.autocapitalizationType = .none
-        textField.keyboardType = .URL
-        if #available(iOS 10,*) {
-            textField.textContentType = .URL
-        }
-    }
-}
-
-open class TwitterCell: _FieldCell<String>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        textField.autocorrectionType = .no
-        textField.autocapitalizationType = .none
-        textField.keyboardType = .twitter
-    }
-}
-
-open class AccountCell: _FieldCell<String>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        textField.autocorrectionType = .no
-        textField.autocapitalizationType = .none
-        textField.keyboardType = .asciiCapable
-        if #available(iOS 11,*) {
-            textField.textContentType = .username
-        }
-    }
-}
-
-open class ZipCodeCell: _FieldCell<String>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func update() {
-        super.update()
-        textField.autocorrectionType = .no
-        textField.autocapitalizationType = .allCharacters
-        textField.keyboardType = .numbersAndPunctuation
-        if #available(iOS 10,*) {
-            textField.textContentType = .postalCode
-        }
-    }
-}
-
-open class _TextRow: FieldRow<TextCell> {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-open class _IntRow: FieldRow<IntCell> {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-        let numberFormatter = NumberFormatter()
-        numberFormatter.locale = Locale.current
-        numberFormatter.numberStyle = .decimal
-        numberFormatter.minimumFractionDigits = 0
-        formatter = numberFormatter
-    }
-}
-
-open class _PhoneRow: FieldRow<PhoneCell> {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-open class _NameRow: FieldRow<NameCell> {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-open class _EmailRow: FieldRow<EmailCell> {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-open class _PasswordRow: FieldRow<PasswordCell> {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-open class _DecimalRow: FieldRow<DecimalCell> {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-        let numberFormatter = NumberFormatter()
-        numberFormatter.locale = Locale.current
-        numberFormatter.numberStyle = .decimal
-        numberFormatter.minimumFractionDigits = 2
-        formatter = numberFormatter
-    }
-}
-
-open class _URLRow: FieldRow<URLCell> {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-open class _TwitterRow: FieldRow<TwitterCell> {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-open class _AccountRow: FieldRow<AccountCell> {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-open class _ZipCodeRow: FieldRow<ZipCodeCell> {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A String valued row where the user can enter arbitrary text.
-public final class TextRow: _TextRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A String valued row where the user can enter names. Biggest difference to TextRow is that it autocapitalization is set to Words.
-public final class NameRow: _NameRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A String valued row where the user can enter secure text.
-public final class PasswordRow: _PasswordRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A String valued row where the user can enter an email address.
-public final class EmailRow: _EmailRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A String valued row where the user can enter a twitter username.
-public final class TwitterRow: _TwitterRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A String valued row where the user can enter a simple account username.
-public final class AccountRow: _AccountRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A String valued row where the user can enter a zip code.
-public final class ZipCodeRow: _ZipCodeRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A row where the user can enter an integer number.
-public final class IntRow: _IntRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A row where the user can enter a decimal number.
-public final class DecimalRow: _DecimalRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A row where the user can enter an URL. The value of this row will be a URL.
-public final class URLRow: _URLRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A String valued row where the user can enter a phone number.
-public final class PhoneRow: _PhoneRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 61
Pods/Eureka/Source/Rows/LabelRow.swift

@@ -1,61 +0,0 @@
-//  LabelRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-// MARK: LabelCell
-
-open class LabelCellOf<T: Equatable>: Cell<T>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        selectionStyle = .none
-    }
-}
-
-public typealias LabelCell = LabelCellOf<String>
-
-// MARK: LabelRow
-
-open class _LabelRow: Row<LabelCell> {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// Simple row that can show title and value but is not editable by user.
-public final class LabelRow: _LabelRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 38
Pods/Eureka/Source/Rows/MultipleSelectorRow.swift

@@ -1,38 +0,0 @@
-//  MultipleSelectorRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-open class _MultipleSelectorRow<T, Cell: CellType>: GenericMultipleSelectorRow<T, Cell> where Cell: BaseCell, Cell.Value == Set<T> {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A selector row where the user can pick several options from a pushed view controller
-public final class MultipleSelectorRow<T: Hashable> : _MultipleSelectorRow<T, PushSelectorCell<Set<T>>>, RowType {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 202
Pods/Eureka/Source/Rows/PickerInlineRow.swift

@@ -1,202 +0,0 @@
-//  PickerInlineRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-open class PickerInlineCell<T: Equatable> : Cell<T>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        accessoryType = .none
-        editingAccessoryType =  .none
-    }
-
-    open override func update() {
-        super.update()
-        selectionStyle = row.isDisabled ? .none : .default
-    }
-
-    open override func didSelect() {
-        super.didSelect()
-        row.deselect()
-    }
-}
-
-// MARK: PickerInlineRow
-
-open class _PickerInlineRow<T> : Row<PickerInlineCell<T>>, NoValueDisplayTextConformance where T: Equatable {
-
-    public typealias InlineRow = PickerRow<T>
-    open var options = [T]()
-    open var noValueDisplayText: String?
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A generic inline row where the user can pick an option from a picker view which shows and hides itself automatically
-public final class PickerInlineRow<T> : _PickerInlineRow<T>, RowType, InlineRowType where T: Equatable {
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        onExpandInlineRow { cell, row, _ in
-            let color = cell.detailTextLabel?.textColor
-            row.onCollapseInlineRow { cell, _, _ in
-                cell.detailTextLabel?.textColor = color
-            }
-            cell.detailTextLabel?.textColor = cell.tintColor
-        }
-    }
-
-    public override func customDidSelect() {
-        super.customDidSelect()
-        if !isDisabled {
-            toggleInlineRow()
-        }
-    }
-
-    public func setupInlineRow(_ inlineRow: InlineRow) {
-        inlineRow.options = self.options
-        inlineRow.displayValueFor = self.displayValueFor
-        inlineRow.cell.height = { UITableView.automaticDimension }
-    }
-}
-
-open class _DoublePickerInlineRow<A, B> : Row<PickerInlineCell<Tuple<A, B>>>, NoValueDisplayTextConformance where A: Equatable, B: Equatable {
-
-    public typealias InlineRow = DoublePickerRow<A, B>
-
-    /// Options for first component. Will be called often so should be O(1)
-    public var firstOptions: (() -> [A]) = {[]}
-
-    /// Options for second component given the selected value from the first component. Will be called often so should be O(1)
-    public var secondOptions: ((A) -> [B]) = { _ in [] }
-    
-    public var noValueDisplayText: String?
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        self.displayValueFor = { [weak self] tuple in
-            if let tuple = tuple {
-                return String(describing: tuple.a) + ", " + String(describing: tuple.b)
-            }
-            return self?.noValueDisplayText
-        }
-    }
-}
-
-/// A generic inline row where the user can pick an option from a picker view which shows and hides itself automatically
-public final class DoublePickerInlineRow<A, B> : _DoublePickerInlineRow<A, B>, RowType, InlineRowType where A: Equatable, B: Equatable {
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        onExpandInlineRow { cell, row, _ in
-            let color = cell.detailTextLabel?.textColor
-            row.onCollapseInlineRow { cell, _, _ in
-                cell.detailTextLabel?.textColor = color
-            }
-            cell.detailTextLabel?.textColor = cell.tintColor
-        }
-    }
-
-    public override func customDidSelect() {
-        super.customDidSelect()
-        if !isDisabled {
-            toggleInlineRow()
-        }
-    }
-
-    public func setupInlineRow(_ inlineRow: InlineRow) {
-        inlineRow.firstOptions = firstOptions
-        inlineRow.secondOptions = secondOptions
-        inlineRow.displayValueFor = self.displayValueFor
-        inlineRow.cell.height = { UITableView.automaticDimension }
-    }
-}
-
-open class _TriplePickerInlineRow<A, B, C> : Row<PickerInlineCell<Tuple3<A, B, C>>>, NoValueDisplayTextConformance
-    where A: Equatable, B: Equatable, C: Equatable {
-
-    public typealias InlineRow = TriplePickerRow<A, B, C>
-
-    /// Options for first component. Will be called often so should be O(1)
-    public var firstOptions: (() -> [A]) = {[]}
-    /// Options for second component given the selected value from the first component. Will be called often so should be O(1)
-    public var secondOptions: ((A) -> [B]) = { _ in [] }
-    /// Options for third component given the selected value from the first and second components. Will be called often so should be O(1)
-    public var thirdOptions: ((A, B) -> [C]) = {_, _ in []}
-
-    open var noValueDisplayText: String?
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        self.displayValueFor = { [weak self] tuple in
-            if let tuple = tuple {
-                return String(describing: tuple.a) + ", " + String(describing: tuple.b) + ", " + String(describing: tuple.c)
-            }
-            return self?.noValueDisplayText
-        }
-    }
-}
-
-/// A generic inline row where the user can pick an option from a picker view which shows and hides itself automatically
-public final class TriplePickerInlineRow<A, B, C> : _TriplePickerInlineRow<A, B, C>, RowType, InlineRowType
-    where A: Equatable, B: Equatable, C: Equatable {
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        onExpandInlineRow { cell, row, _ in
-            let color = cell.detailTextLabel?.textColor
-            row.onCollapseInlineRow { cell, _, _ in
-                cell.detailTextLabel?.textColor = color
-            }
-            cell.detailTextLabel?.textColor = cell.tintColor
-        }
-    }
-
-    public override func customDidSelect() {
-        super.customDidSelect()
-        if !isDisabled {
-            toggleInlineRow()
-        }
-    }
-
-    public func setupInlineRow(_ inlineRow: InlineRow) {
-        inlineRow.firstOptions = firstOptions
-        inlineRow.secondOptions = secondOptions
-        inlineRow.thirdOptions = thirdOptions
-        inlineRow.displayValueFor = self.displayValueFor
-        inlineRow.cell.height = { UITableView.automaticDimension }
-    }
-}

+ 0 - 159
Pods/Eureka/Source/Rows/PickerInputRow.swift

@@ -1,159 +0,0 @@
-//  PickerInputRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-// MARK: PickerInputCell
-
-open class _PickerInputCell<T> : Cell<T>, CellType, UIPickerViewDataSource, UIPickerViewDelegate where T: Equatable {
-
-    lazy public var picker: UIPickerView = {
-        let picker = UIPickerView()
-        picker.translatesAutoresizingMaskIntoConstraints = false
-        return picker
-    }()
-
-    fileprivate var pickerInputRow: _PickerInputRow<T>? { return row as? _PickerInputRow<T> }
-
-    public required init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        accessoryType = .none
-        editingAccessoryType = .none
-        picker.delegate = self
-        picker.dataSource = self
-    }
-
-    deinit {
-        picker.delegate = nil
-        picker.dataSource = nil
-    }
-
-    open override func update() {
-        super.update()
-        selectionStyle = row.isDisabled ? .none : .default
-
-        if row.title?.isEmpty == false {
-            detailTextLabel?.text = row.displayValueFor?(row.value) ?? (row as? NoValueDisplayTextConformance)?.noValueDisplayText
-        } else {
-            textLabel?.text = row.displayValueFor?(row.value) ?? (row as? NoValueDisplayTextConformance)?.noValueDisplayText
-            detailTextLabel?.text = nil
-        }
-
-        if #available(iOS 13.0, *) {
-            textLabel?.textColor = row.isDisabled ? .tertiaryLabel : .label
-        } else {
-            textLabel?.textColor = row.isDisabled ? .gray : .black
-        }
-        if row.isHighlighted {
-            textLabel?.textColor = tintColor
-        }
-
-        picker.reloadAllComponents()
-    }
-
-    open override func didSelect() {
-        super.didSelect()
-        row.deselect()
-    }
-
-    open override var inputView: UIView? {
-        return picker
-    }
-
-    open override func cellCanBecomeFirstResponder() -> Bool {
-        return canBecomeFirstResponder
-    }
-
-    override open var canBecomeFirstResponder: Bool {
-        return !row.isDisabled
-    }
-
-    open func numberOfComponents(in pickerView: UIPickerView) -> Int {
-        return 1
-    }
-
-    open func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
-        return pickerInputRow?.options.count ?? 0
-    }
-
-    open func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
-        return pickerInputRow?.displayValueFor?(pickerInputRow?.options[row])
-    }
-
-    open func pickerView(_ pickerView: UIPickerView, didSelectRow rowNumber: Int, inComponent component: Int) {
-        if let picker = pickerInputRow, picker.options.count > rowNumber {
-            picker.value = picker.options[rowNumber]
-            update()
-        }
-    }
-}
-
-open class PickerInputCell<T>: _PickerInputCell<T> where T: Equatable {
-
-    public required init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-    
-    open override func update() {
-        super.update()
-        if let selectedValue = pickerInputRow?.value, let index = pickerInputRow?.options.firstIndex(of: selectedValue) {
-            picker.selectRow(index, inComponent: 0, animated: true)
-        }
-    }
-
-}
-
-// MARK: PickerInputRow
-
-open class _PickerInputRow<T> : Row<PickerInputCell<T>>, NoValueDisplayTextConformance where T: Equatable {
-    open var noValueDisplayText: String? = nil
-
-    open var options = [T]()
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-
-    }
-}
-
-/// A generic row where the user can pick an option from a picker view displayed in the keyboard area
-public final class PickerInputRow<T>: _PickerInputRow<T>, RowType where T: Equatable {
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 137
Pods/Eureka/Source/Rows/PickerRow.swift

@@ -1,137 +0,0 @@
-//  PickerRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-// MARK: PickerCell
-
-open class _PickerCell<T> : Cell<T>, CellType, UIPickerViewDataSource, UIPickerViewDelegate where T: Equatable {
-
-    @IBOutlet public weak var picker: UIPickerView!
-
-    fileprivate var pickerRow: _PickerRow<T>? { return row as? _PickerRow<T> }
-
-    public required init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        let pickerView = UIPickerView()
-        self.picker = pickerView
-        self.picker?.translatesAutoresizingMaskIntoConstraints = false
-
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-
-        self.contentView.addSubview(pickerView)
-        self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[picker]-0-|", options: [], metrics: nil, views: ["picker": pickerView]))
-        self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[picker]-0-|", options: [], metrics: nil, views: ["picker": pickerView]))
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        accessoryType = .none
-        editingAccessoryType = .none
-        height = { UITableView.automaticDimension }
-        picker.delegate = self
-        picker.dataSource = self
-    }
-
-    open override func update() {
-        super.update()
-        textLabel?.text = nil
-        detailTextLabel?.text = nil
-        picker.reloadAllComponents()
-    }
-
-    deinit {
-        picker?.delegate = nil
-        picker?.dataSource = nil
-    }
-
-    open var pickerTextAttributes: [NSAttributedString.Key: Any]?
-
-    open func numberOfComponents(in pickerView: UIPickerView) -> Int {
-        return 1
-    }
-
-    open func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
-        return pickerRow?.options.count ?? 0
-    }
-
-    open func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
-        return pickerRow?.displayValueFor?(pickerRow?.options[row])
-    }
-
-    open func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
-        if let picker = pickerRow, !picker.options.isEmpty {
-            picker.value = picker.options[row]
-        }
-    }
-
-    open func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
-        guard let pickerTextAttributes = pickerTextAttributes, let text = self.pickerView(pickerView, titleForRow: row, forComponent: component) else {
-            return nil
-        }
-        return NSAttributedString(string: text, attributes: pickerTextAttributes)
-    }
-}
-
-open class PickerCell<T> : _PickerCell<T> where T: Equatable {
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    public required init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    open override func update() {
-        super.update()
-        if let selectedValue = pickerRow?.value, let index = pickerRow?.options.firstIndex(of: selectedValue) {
-            picker.selectRow(index, inComponent: 0, animated: true)
-        }
-    }
-
-}
-
-// MARK: PickerRow
-
-open class _PickerRow<T> : Row<PickerCell<T>> where T: Equatable {
-
-    open var options = [T]()
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A generic row where the user can pick an option from a picker view
-public final class PickerRow<T>: _PickerRow<T>, RowType where T: Equatable {
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 55
Pods/Eureka/Source/Rows/PopoverSelectorRow.swift

@@ -1,55 +0,0 @@
-//  PopoverSelectorRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-open class _PopoverSelectorRow<Cell: CellType> : SelectorRow<Cell> where Cell: BaseCell {
-
-    public required init(tag: String?) {
-        super.init(tag: tag)
-        onPresentCallback = { [weak self] (_, viewController) -> Void in
-            guard let porpoverController = viewController.popoverPresentationController, let tableView = self?.baseCell.formViewController()?.tableView, let cell = self?.cell else {
-                fatalError()
-            }
-            porpoverController.sourceView = tableView
-            porpoverController.sourceRect = tableView.convert(cell.detailTextLabel?.frame ?? cell.textLabel?.frame ?? cell.contentView.frame, from: cell)
-        }
-        presentationMode = .popover(controllerProvider: ControllerProvider.callback { return SelectorViewController<SelectorRow<Cell>> { _ in } }, onDismiss: { [weak self] in
-            $0.dismiss(animated: true)
-            self?.reload()
-        })
-    }
-
-    open override func didSelect() {
-        deselect()
-        super.didSelect()
-    }
-}
-
-public final class PopoverSelectorRow<T: Equatable> : _PopoverSelectorRow<PushSelectorCell<T>>, RowType {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 42
Pods/Eureka/Source/Rows/PushRow.swift

@@ -1,42 +0,0 @@
-//  PushRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-open class _PushRow<Cell: CellType>: SelectorRow<Cell> where Cell: BaseCell {
-
-    public required init(tag: String?) {
-        super.init(tag: tag)
-        presentationMode = .show(controllerProvider: ControllerProvider.callback { return SelectorViewController<SelectorRow<Cell>> { _ in } }, onDismiss: { vc in
-            let _ = vc.navigationController?.popViewController(animated: true) })
-    }
-}
-
-/// A selector row where the user can pick an option from a pushed view controller
-public final class PushRow<T: Equatable> : _PushRow<PushSelectorCell<T>>, RowType {
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 194
Pods/Eureka/Source/Rows/SegmentedRow.swift

@@ -1,194 +0,0 @@
-//  SegmentedRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-// MARK: SegmentedCell
-
-open class SegmentedCell<T: Equatable> : Cell<T>, CellType {
-
-    @IBOutlet public weak var segmentedControl: UISegmentedControl!
-    @IBOutlet public weak var titleLabel: UILabel?
-
-    private var dynamicConstraints = [NSLayoutConstraint]()
-    fileprivate var observingTitleText = false
-    private var awakeFromNibCalled = false
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-
-        let segmentedControl = UISegmentedControl()
-        segmentedControl.translatesAutoresizingMaskIntoConstraints = false
-        segmentedControl.setContentHuggingPriority(UILayoutPriority(rawValue: 250), for: .horizontal)
-        self.segmentedControl = segmentedControl
-
-        self.titleLabel = self.textLabel
-        self.titleLabel?.translatesAutoresizingMaskIntoConstraints = false
-        self.titleLabel?.setContentHuggingPriority(UILayoutPriority(rawValue: 500), for: .horizontal)
-        self.titleLabel?.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
-
-        NotificationCenter.default.addObserver(forName: UIApplication.willResignActiveNotification, object: nil, queue: nil) { [weak self] _ in
-            guard let me = self else { return }
-            guard me.observingTitleText else { return }
-            me.titleLabel?.removeObserver(me, forKeyPath: "text")
-            me.observingTitleText = false
-        }
-        NotificationCenter.default.addObserver(forName: UIApplication.didBecomeActiveNotification, object: nil, queue: nil) { [weak self] _ in
-            guard let me = self else { return }
-            guard !me.observingTitleText else { return }
-            me.titleLabel?.addObserver(me, forKeyPath: "text", options: [.new, .old], context: nil)
-            me.observingTitleText = true
-        }
-
-        NotificationCenter.default.addObserver(forName: UIContentSizeCategory.didChangeNotification, object: nil, queue: nil) { [weak self] _ in
-            self?.titleLabel = self?.textLabel
-            self?.setNeedsUpdateConstraints()
-        }
-        contentView.addSubview(titleLabel!)
-        contentView.addSubview(segmentedControl)
-        titleLabel?.addObserver(self, forKeyPath: "text", options: [.old, .new], context: nil)
-        observingTitleText = true
-        imageView?.addObserver(self, forKeyPath: "image", options: [.old, .new], context: nil)
-
-        contentView.addConstraint(NSLayoutConstraint(item: segmentedControl, attribute: .centerY, relatedBy: .equal, toItem: contentView, attribute: .centerY, multiplier: 1, constant: 0))
-
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func awakeFromNib() {
-        super.awakeFromNib()
-        awakeFromNibCalled = true
-    }
-
-    deinit {
-        segmentedControl.removeTarget(self, action: nil, for: .allEvents)
-        if !awakeFromNibCalled {
-            if observingTitleText {
-                titleLabel?.removeObserver(self, forKeyPath: "text")
-            }
-            imageView?.removeObserver(self, forKeyPath: "image")
-            NotificationCenter.default.removeObserver(self, name: UIApplication.willResignActiveNotification, object: nil)
-            NotificationCenter.default.removeObserver(self, name: UIApplication.didBecomeActiveNotification, object: nil)
-            NotificationCenter.default.removeObserver(self, name: UIContentSizeCategory.didChangeNotification, object: nil)
-        }
-
-    }
-
-    open override func setup() {
-        super.setup()
-        selectionStyle = .none
-        segmentedControl.addTarget(self, action: #selector(SegmentedCell.valueChanged), for: .valueChanged)
-    }
-
-    open override func update() {
-        super.update()
-        detailTextLabel?.text = nil
-
-        updateSegmentedControl()
-        segmentedControl.selectedSegmentIndex = selectedIndex() ?? UISegmentedControl.noSegment
-        segmentedControl.isEnabled = !row.isDisabled
-    }
-
-    @objc (valueDidChange) func valueChanged() {
-        row.value = (row as! OptionsRow<Self>).options?[segmentedControl.selectedSegmentIndex]
-    }
-
-    open override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
-        let obj = object as AnyObject?
-
-        if let changeType = change, let _ = keyPath, ((obj === titleLabel && keyPath == "text") || (obj === imageView && keyPath == "image")) &&
-            (changeType[NSKeyValueChangeKey.kindKey] as? NSNumber)?.uintValue == NSKeyValueChange.setting.rawValue, !awakeFromNibCalled {
-            setNeedsUpdateConstraints()
-            updateConstraintsIfNeeded()
-        }
-    }
-
-    func updateSegmentedControl() {
-        segmentedControl.removeAllSegments()
-
-        (row as! OptionsRow<Self>).options?.reversed().forEach {
-            if let image = $0 as? UIImage {
-                segmentedControl.insertSegment(with: image, at: 0, animated: false)
-            } else {
-                segmentedControl.insertSegment(withTitle: row.displayValueFor?($0) ?? "", at: 0, animated: false)
-            }
-        }
-    }
-
-    open override func updateConstraints() {
-        guard !awakeFromNibCalled else {
-            super.updateConstraints()
-            return
-        }
-        contentView.removeConstraints(dynamicConstraints)
-        dynamicConstraints = []
-        var views: [String: AnyObject] =  ["segmentedControl": segmentedControl]
-
-        var hasImageView = false
-        var hasTitleLabel = false
-
-        if let imageView = imageView, let _ = imageView.image {
-            views["imageView"] = imageView
-            hasImageView = true
-        }
-
-        if let titleLabel = titleLabel, let text = titleLabel.text, !text.isEmpty {
-            views["titleLabel"] = titleLabel
-            hasTitleLabel = true
-            dynamicConstraints.append(NSLayoutConstraint(item: titleLabel, attribute: .centerY, relatedBy: .equal, toItem: contentView, attribute: .centerY, multiplier: 1, constant: 0))
-        }
-
-        dynamicConstraints.append(NSLayoutConstraint(item: segmentedControl!, attribute: .width, relatedBy: .greaterThanOrEqual, toItem: contentView, attribute: .width, multiplier: 0.3, constant: 0.0))
-
-        if hasImageView && hasTitleLabel {
-            dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "H:[imageView]-(15)-[titleLabel]-[segmentedControl]-|", options: [], metrics: nil, views: views)
-        } else if hasImageView && !hasTitleLabel {
-            dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "H:[imageView]-[segmentedControl]-|", options: [], metrics: nil, views: views)
-        } else if !hasImageView && hasTitleLabel {
-            dynamicConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-[titleLabel]-[segmentedControl]-|", options: .alignAllCenterY, metrics: nil, views: views)
-        } else {
-            dynamicConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-[segmentedControl]-|", options: .alignAllCenterY, metrics: nil, views: views)
-        }
-        contentView.addConstraints(dynamicConstraints)
-        super.updateConstraints()
-    }
-
-    func selectedIndex() -> Int? {
-        guard let value = row.value else { return nil }
-        return (row as! OptionsRow<Self>).options?.firstIndex(of: value)
-    }
-}
-
-// MARK: SegmentedRow
-
-/// An options row where the user can select an option from an UISegmentedControl
-public final class SegmentedRow<T: Equatable>: OptionsRow<SegmentedCell<T>>, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 70
Pods/Eureka/Source/Rows/SelectableRows/ListCheckRow.swift

@@ -1,70 +0,0 @@
-//  ListCheckRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-open class ListCheckCell<T: Equatable> : Cell<T>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func update() {
-        super.update()
-        accessoryType = row.value != nil ? .checkmark : .none
-        editingAccessoryType = accessoryType
-        selectionStyle = .default
-        if row.isDisabled {
-            tintAdjustmentMode = .dimmed
-            selectionStyle = .none
-        } else {
-            tintAdjustmentMode = .automatic
-        }
-    }
-
-    open override func setup() {
-        super.setup()
-        accessoryType =  .checkmark
-        editingAccessoryType = accessoryType
-    }
-
-    open override func didSelect() {
-        row.deselect()
-        row.updateCell()
-    }
-
-}
-
-public final class ListCheckRow<T>: Row<ListCheckCell<T>>, SelectableRowType, RowType where T: Equatable {
-    public var selectableValue: T?
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        displayValueFor = nil
-    }
-}

+ 0 - 175
Pods/Eureka/Source/Rows/SliderRow.swift

@@ -1,175 +0,0 @@
-//  SliderRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import UIKit
-
-/// The cell of the SliderRow
-open class SliderCell: Cell<Float>, CellType {
-
-    private var awakeFromNibCalled = false
-
-    @IBOutlet open weak var titleLabel: UILabel!
-    @IBOutlet open weak var valueLabel: UILabel!
-    @IBOutlet open weak var slider: UISlider!
-
-    open var formatter: NumberFormatter?
-
-    public required init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: .value1, reuseIdentifier: reuseIdentifier)
-
-        NotificationCenter.default.addObserver(forName: UIContentSizeCategory.didChangeNotification, object: nil, queue: nil) { [weak self] _ in
-            guard let me = self else { return }
-            if me.shouldShowTitle {
-                me.titleLabel = me.textLabel
-                me.valueLabel = me.detailTextLabel
-                me.setNeedsUpdateConstraints()
-            }
-        }
-    }
-
-    deinit {
-        guard !awakeFromNibCalled else { return }
-        NotificationCenter.default.removeObserver(self, name: UIContentSizeCategory.didChangeNotification, object: nil)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-        awakeFromNibCalled = true
-    }
-
-    open override func setup() {
-        super.setup()
-        if !awakeFromNibCalled {
-            let title = textLabel
-            textLabel?.translatesAutoresizingMaskIntoConstraints = false
-            textLabel?.setContentHuggingPriority(UILayoutPriority(rawValue: 500), for: .horizontal)
-            self.titleLabel = title
-
-            let value = detailTextLabel
-            value?.translatesAutoresizingMaskIntoConstraints = false
-            value?.setContentHuggingPriority(UILayoutPriority(500), for: .horizontal)
-            value?.adjustsFontSizeToFitWidth = true
-            value?.minimumScaleFactor = 0.5
-            self.valueLabel = value
-
-            let slider = UISlider()
-            slider.translatesAutoresizingMaskIntoConstraints = false
-            slider.setContentHuggingPriority(UILayoutPriority(rawValue: 500), for: .horizontal)
-            self.slider = slider
-
-            if shouldShowTitle {
-                contentView.addSubview(titleLabel)
-            }
-
-            if !sliderRow.shouldHideValue {
-              contentView.addSubview(valueLabel)
-            }
-            contentView.addSubview(slider)
-            setNeedsUpdateConstraints()
-        }
-        selectionStyle = .none
-        slider.minimumValue = 0
-        slider.maximumValue = 10
-        slider.addTarget(self, action: #selector(SliderCell.valueChanged), for: .valueChanged)
-    }
-
-    open override func update() {
-        super.update()
-        titleLabel.text = row.title
-        titleLabel.isHidden = !shouldShowTitle
-        valueLabel.text = row.displayValueFor?(row.value ?? slider.minimumValue)
-        valueLabel.isHidden = sliderRow.shouldHideValue
-        slider.value = row.value ?? slider.minimumValue
-        slider.isEnabled = !row.isDisabled
-    }
-
-    @objc (valueDidChange) func valueChanged() {
-        let roundedValue: Float
-        let steps = Float(sliderRow.steps)
-        if steps > 0 {
-            let stepValue = round((slider.value - slider.minimumValue) / (slider.maximumValue - slider.minimumValue) * steps)
-            let stepAmount = (slider.maximumValue - slider.minimumValue) / steps
-            roundedValue = stepValue * stepAmount + self.slider.minimumValue
-        } else {
-            roundedValue = slider.value
-        }
-        row.value = roundedValue
-        row.updateCell()
-    }
-
-    var shouldShowTitle: Bool {
-        return row?.title?.isEmpty == false
-    }
-
-    private var sliderRow: SliderRow {
-        return row as! SliderRow
-    }
-    
-    open override func updateConstraints() {
-        customConstraints()
-        super.updateConstraints()
-    }
-    
-    open var dynamicConstraints = [NSLayoutConstraint]()
-    
-    open func customConstraints() {
-        guard !awakeFromNibCalled else { return }
-        contentView.removeConstraints(dynamicConstraints)
-        dynamicConstraints = []
-        
-        var views: [String : Any] = ["titleLabel": titleLabel!, "slider": slider!, "valueLabel": valueLabel!]
-        let metrics = ["spacing": 15.0]
-        valueLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
-        titleLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
-        
-        let title = shouldShowTitle ? "[titleLabel]-spacing-" : ""
-        let value = !sliderRow.shouldHideValue ? "-[valueLabel]" : ""
-        
-        if let imageView = imageView, let _ = imageView.image {
-            views["imageView"] = imageView
-            let hContraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-[imageView]-(15)-\(title)[slider]\(value)-|", options: .alignAllCenterY, metrics: metrics, views: views)
-            imageView.translatesAutoresizingMaskIntoConstraints = false
-            dynamicConstraints.append(contentsOf: hContraints)
-        } else {
-            let hContraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-\(title)[slider]\(value)-|", options: .alignAllCenterY, metrics: metrics, views: views)
-            dynamicConstraints.append(contentsOf: hContraints)
-        }
-        let vContraint = NSLayoutConstraint(item: slider!, attribute: .centerY, relatedBy: .equal, toItem: contentView, attribute: .centerY, multiplier: 1, constant: 0)
-        dynamicConstraints.append(vContraint)
-        contentView.addConstraints(dynamicConstraints)
-    }
-
-}
-        
-
-/// A row that displays a UISlider. If there is a title set then the title and value will appear above the UISlider.
-public final class SliderRow: Row<SliderCell>, RowType {
-
-    public var steps: UInt = 20
-    public var shouldHideValue = false
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 157
Pods/Eureka/Source/Rows/StepperRow.swift

@@ -1,157 +0,0 @@
-//
-//  StepperRow.swift
-//  Eureka
-//
-//  Created by Andrew Holt on 3/4/16.
-//  Copyright © 2016 Xmartlabs. All rights reserved.
-//
-
-import UIKit
-
-// MARK: StepperCell
-
-open class StepperCell: Cell<Double>, CellType {
-  
-  
-    @IBOutlet open weak var stepper: UIStepper!
-    @IBOutlet open weak var valueLabel: UILabel!
-    @IBOutlet open weak var titleLabel: UILabel!
-
-    private var awakeFromNibCalled = false
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: .value1, reuseIdentifier: reuseIdentifier)
-      
-        NotificationCenter.default.addObserver(forName: UIContentSizeCategory.didChangeNotification, object: nil, queue: nil) { [weak self] _ in
-            guard let me = self else { return }
-            if me.shouldShowTitle {
-                me.titleLabel = me.textLabel
-                me.setNeedsUpdateConstraints()
-            }
-        }
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-        awakeFromNibCalled = true
-    }
-
-    open override func setup() {
-        super.setup()
-        if !awakeFromNibCalled {
-            let title = textLabel
-            textLabel?.translatesAutoresizingMaskIntoConstraints = false
-            textLabel?.setContentHuggingPriority(UILayoutPriority(rawValue: 500), for: .horizontal)
-            self.titleLabel = title
-         
-            let stepper = UIStepper()
-            stepper.translatesAutoresizingMaskIntoConstraints = false
-            stepper.setContentHuggingPriority(UILayoutPriority(rawValue: 500), for: .horizontal)
-            self.stepper = stepper
-          
-            if shouldShowTitle {
-                contentView.addSubview(titleLabel)
-            }
-
-            setupValueLabel()
-            contentView.addSubview(stepper)
-            setNeedsUpdateConstraints()
-        }
-        selectionStyle = .none
-        stepper.addTarget(self, action: #selector(StepperCell.valueChanged), for: .valueChanged)
-    }
-
-    open func setupValueLabel() {
-        let label = UILabel()
-        label.translatesAutoresizingMaskIntoConstraints = false
-        label.setContentHuggingPriority(UILayoutPriority(500), for: .horizontal)
-        label.adjustsFontSizeToFitWidth = true
-        label.minimumScaleFactor = 0.5
-        self.valueLabel = label
-        contentView.addSubview(valueLabel)
-    }
-  
-    open override func update() {
-        super.update()
-        detailTextLabel?.text = nil
-        stepper.isEnabled = !row.isDisabled
-        
-        titleLabel.isHidden = !shouldShowTitle
-        stepper.value = row.value ?? 0
-        stepper.alpha = row.isDisabled ? 0.3 : 1.0
-        valueLabel?.textColor = tintColor
-        valueLabel?.alpha = row.isDisabled ? 0.3 : 1.0
-        valueLabel?.text = row.displayValueFor?(row.value)
-    }
-
-    @objc(valueDidChange) func valueChanged() {
-        row.value = stepper.value
-        row.updateCell()
-    }
-  
-    var shouldShowTitle: Bool {
-        return row?.title?.isEmpty == false
-    }
-  
-    private var stepperRow: StepperRow {
-        return row as! StepperRow
-    }
-    
-    deinit {
-        stepper.removeTarget(self, action: nil, for: .allEvents)
-        guard !awakeFromNibCalled else { return }
-        NotificationCenter.default.removeObserver(self, name: UIContentSizeCategory.didChangeNotification, object: nil)
-    }
-
-    open override func updateConstraints() {
-        customConstraints()
-        super.updateConstraints()
-    }
-  
-    open var dynamicConstraints = [NSLayoutConstraint]()
-  
-    open func customConstraints() {
-        guard !awakeFromNibCalled else { return }
-        contentView.removeConstraints(dynamicConstraints)
-        dynamicConstraints = []
-      
-        var views: [String : Any] = ["titleLabel": titleLabel!, "stepper": stepper!, "valueLabel": valueLabel!]
-        let metrics = ["spacing": 15.0]
-        valueLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
-        titleLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
-      
-        let title = shouldShowTitle ? "[titleLabel]-(>=15@250)-" : ""
-      
-        if let imageView = imageView, let _ = imageView.image {
-            views["imageView"] = imageView
-            let hContraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-[imageView]-(15)-\(title)[valueLabel]-[stepper]-|", options: .alignAllCenterY, metrics: metrics, views: views)
-            imageView.translatesAutoresizingMaskIntoConstraints = false
-            dynamicConstraints.append(contentsOf: hContraints)
-        } else {
-            let hContraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-\(title)[valueLabel]-[stepper]-|", options: .alignAllCenterY, metrics: metrics, views: views)
-            dynamicConstraints.append(contentsOf: hContraints)
-        }
-        let vContraint = NSLayoutConstraint(item: stepper!, attribute: .centerY, relatedBy: .equal, toItem: contentView, attribute: .centerY, multiplier: 1, constant: 0)
-        dynamicConstraints.append(vContraint)
-        contentView.addConstraints(dynamicConstraints)
-    }
-  
-}
-
-// MARK: StepperRow
-
-open class _StepperRow: Row<StepperCell> {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        displayValueFor = { value in
-                                guard let value = value else { return nil }
-                                return DecimalFormatter().string(from: NSNumber(value: value)) }
-    }
-}
-
-/// Double row that has a UIStepper as accessoryType
-public final class StepperRow: _StepperRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 81
Pods/Eureka/Source/Rows/SwitchRow.swift

@@ -1,81 +0,0 @@
-//  SwitchRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-// MARK: SwitchCell
-
-open class SwitchCell: Cell<Bool>, CellType {
-
-    @IBOutlet public weak var switchControl: UISwitch!
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-        let switchC = UISwitch()
-        switchControl = switchC
-        accessoryView = switchControl
-        editingAccessoryView = accessoryView
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func setup() {
-        super.setup()
-        selectionStyle = .none
-        switchControl.addTarget(self, action: #selector(SwitchCell.valueChanged), for: .valueChanged)
-    }
-
-    deinit {
-        switchControl?.removeTarget(self, action: nil, for: .allEvents)
-    }
-
-    open override func update() {
-        super.update()
-        switchControl.isOn = row.value ?? false
-        switchControl.isEnabled = !row.isDisabled
-    }
-
-    @objc (valueDidChange) func valueChanged() {
-        row.value = switchControl?.isOn ?? false
-    }
-}
-
-// MARK: SwitchRow
-
-open class _SwitchRow: Row<SwitchCell> {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        displayValueFor = nil
-    }
-}
-
-/// Boolean row that has a UISwitch as accessoryType
-public final class SwitchRow: _SwitchRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 336
Pods/Eureka/Source/Rows/TextAreaRow.swift

@@ -1,336 +0,0 @@
-//  TextAreaRow.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-// TODO: Temporary workaround for Xcode 10 beta
-#if swift(>=4.2)
-import UIKit.UIGeometry
-extension UIEdgeInsets {
-    static let zero = UIEdgeInsets()
-}
-#endif
-
-public enum TextAreaHeight {
-    case fixed(cellHeight: CGFloat)
-    case dynamic(initialTextViewHeight: CGFloat)
-}
-
-public enum TextAreaMode {
-    case normal
-    case readOnly
-}
-
-protocol TextAreaConformance: FormatterConformance {
-    var placeholder: String? { get set }
-    var textAreaHeight: TextAreaHeight { get set }
-    var titlePercentage: CGFloat? { get set}
-}
-
-/**
- *  Protocol for cells that contain a UITextView
- */
-public protocol AreaCell: TextInputCell {
-    var textView: UITextView! { get }
-}
-
-extension AreaCell {
-    public var textInput: UITextInput {
-        return textView
-    }
-}
-
-open class _TextAreaCell<T> : Cell<T>, UITextViewDelegate, AreaCell where T: Equatable, T: InputTypeInitiable {
-
-    @IBOutlet public weak var textView: UITextView!
-    @IBOutlet public weak var placeholderLabel: UILabel?
-
-    private var awakeFromNibCalled = false
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-
-        let textView = UITextView()
-        self.textView = textView
-        textView.translatesAutoresizingMaskIntoConstraints = false
-        textView.keyboardType = .default
-        textView.font = .preferredFont(forTextStyle: .body)
-        textView.textContainer.lineFragmentPadding = 0
-        textView.textContainerInset = UIEdgeInsets.zero
-        textView.backgroundColor = .clear
-        contentView.addSubview(textView)
-
-        let placeholderLabel = UILabel()
-        self.placeholderLabel = placeholderLabel
-        placeholderLabel.translatesAutoresizingMaskIntoConstraints = false
-        placeholderLabel.numberOfLines = 0
-        if #available(iOS 13.0, *) {
-            placeholderLabel.textColor = UIColor.tertiaryLabel
-        } else {
-            placeholderLabel.textColor = UIColor(white: 0, alpha: 0.22)
-        }
-        placeholderLabel.font = textView.font
-        contentView.addSubview(placeholderLabel)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func awakeFromNib() {
-        super.awakeFromNib()
-        awakeFromNibCalled = true
-    }
-
-    open var dynamicConstraints = [NSLayoutConstraint]()
-
-    open override func setup() {
-        super.setup()
-        let textAreaRow = row as! TextAreaConformance
-        switch textAreaRow.textAreaHeight {
-        case .dynamic(_):
-            height = { UITableView.automaticDimension }
-            textView.isScrollEnabled = false
-        case .fixed(let cellHeight):
-            height = { cellHeight }
-        }
-
-        textView.delegate = self
-        selectionStyle = .none
-        if !awakeFromNibCalled {
-            imageView?.addObserver(self, forKeyPath: "image", options: [.new, .old], context: nil)
-        }
-        setNeedsUpdateConstraints()
-    }
-
-    deinit {
-        textView?.delegate = nil
-        if !awakeFromNibCalled {
-            imageView?.removeObserver(self, forKeyPath: "image")
-        }
-    }
-
-    open override func update() {
-        super.update()
-        textLabel?.text = nil
-        detailTextLabel?.text = nil
-        textView.isEditable = !row.isDisabled
-        if #available(iOS 13.0, *) {
-            textView.textColor = row.isDisabled ? .tertiaryLabel : .label
-        } else {
-            textView.textColor = row.isDisabled ? .gray : .black
-        }
-        textView.text = row.displayValueFor?(row.value)
-        placeholderLabel?.text = (row as? TextAreaConformance)?.placeholder
-        placeholderLabel?.isHidden = textView.text.count != 0
-    }
-
-    open override func cellCanBecomeFirstResponder() -> Bool {
-        return !row.isDisabled && textView?.canBecomeFirstResponder == true
-    }
-
-    open override func cellBecomeFirstResponder(withDirection: Direction) -> Bool {
-        // workaround to solve https://github.com/xmartlabs/Eureka/issues/887 UIKit issue
-        textView?.perform(#selector(UITextView.becomeFirstResponder), with: nil, afterDelay: 0.0)
-        return true
-
-    }
-
-    open override func cellResignFirstResponder() -> Bool {
-        return textView?.resignFirstResponder() ?? true
-    }
-
-    open override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
-        let obj = object as AnyObject?
-
-        if let keyPathValue = keyPath, let changeType = change?[NSKeyValueChangeKey.kindKey], obj === imageView && keyPathValue == "image" &&
-            (changeType as? NSNumber)?.uintValue == NSKeyValueChange.setting.rawValue, !awakeFromNibCalled {
-            setNeedsUpdateConstraints()
-            updateConstraintsIfNeeded()
-        }
-    }
-
-    //Mark: Helpers
-
-    private func displayValue(useFormatter: Bool) -> String? {
-        guard let v = row.value else { return nil }
-        if let formatter = (row as? FormatterConformance)?.formatter, useFormatter {
-            return textView?.isFirstResponder == true ? formatter.editingString(for: v) : formatter.string(for: v)
-        }
-        return String(describing: v)
-    }
-
-    // MARK: TextFieldDelegate
-
-    open func textViewDidBeginEditing(_ textView: UITextView) {
-        formViewController()?.beginEditing(of: self)
-        formViewController()?.textInputDidBeginEditing(textView, cell: self)
-        if let textAreaConformance = (row as? TextAreaConformance), let _ = textAreaConformance.formatter, textAreaConformance.useFormatterOnDidBeginEditing ?? textAreaConformance.useFormatterDuringInput {
-            textView.text = self.displayValue(useFormatter: true)
-        } else {
-            textView.text = self.displayValue(useFormatter: false)
-        }
-    }
-
-    open func textViewDidEndEditing(_ textView: UITextView) {
-        formViewController()?.endEditing(of: self)
-        formViewController()?.textInputDidEndEditing(textView, cell: self)
-        textViewDidChange(textView)
-        textView.text = displayValue(useFormatter: (row as? FormatterConformance)?.formatter != nil)
-    }
-
-    open func textViewDidChange(_ textView: UITextView) {
-
-        if let textAreaConformance = row as? TextAreaConformance, case .dynamic = textAreaConformance.textAreaHeight, let tableView = formViewController()?.tableView {
-            let currentOffset = tableView.contentOffset
-            UIView.performWithoutAnimation {
-                tableView.beginUpdates()
-                tableView.endUpdates()
-            }
-            tableView.setContentOffset(currentOffset, animated: false)
-        }
-        placeholderLabel?.isHidden = textView.text.count != 0
-        guard let textValue = textView.text else {
-            row.value = nil
-            return
-        }
-        guard let formatterRow = row as? FormatterConformance, let formatter = formatterRow.formatter else {
-            row.value = textValue.isEmpty ? nil : (T.init(string: textValue) ?? row.value)
-            return
-        }
-        if formatterRow.useFormatterDuringInput {
-            let value: AutoreleasingUnsafeMutablePointer<AnyObject?> = AutoreleasingUnsafeMutablePointer<AnyObject?>.init(UnsafeMutablePointer<T>.allocate(capacity: 1))
-            let errorDesc: AutoreleasingUnsafeMutablePointer<NSString?>? = nil
-            if formatter.getObjectValue(value, for: textValue, errorDescription: errorDesc) {
-                row.value = value.pointee as? T
-                guard var selStartPos = textView.selectedTextRange?.start else { return }
-                let oldVal = textView.text
-                textView.text = row.displayValueFor?(row.value)
-                selStartPos = (formatter as? FormatterProtocol)?.getNewPosition(forPosition: selStartPos, inTextInput: textView, oldValue: oldVal, newValue: textView.text) ?? selStartPos
-                textView.selectedTextRange = textView.textRange(from: selStartPos, to: selStartPos)
-                return
-            }
-        } else {
-            let value: AutoreleasingUnsafeMutablePointer<AnyObject?> = AutoreleasingUnsafeMutablePointer<AnyObject?>.init(UnsafeMutablePointer<T>.allocate(capacity: 1))
-            let errorDesc: AutoreleasingUnsafeMutablePointer<NSString?>? = nil
-            if formatter.getObjectValue(value, for: textValue, errorDescription: errorDesc) {
-                row.value = value.pointee as? T
-            }
-        }
-    }
-
-    open func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
-        return formViewController()?.textInput(textView, shouldChangeCharactersInRange: range, replacementString: text, cell: self) ?? true
-    }
-
-    open func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
-        if let textAreaRow = self.row as? _TextAreaRow, textAreaRow.textAreaMode == .readOnly {
-            return false
-        }
-        return formViewController()?.textInputShouldBeginEditing(textView, cell: self) ?? true
-    }
-
-    open func textViewShouldEndEditing(_ textView: UITextView) -> Bool {
-        return formViewController()?.textInputShouldEndEditing(textView, cell: self) ?? true
-    }
-
-    open override func updateConstraints() {
-        customConstraints()
-        super.updateConstraints()
-    }
-
-    open func customConstraints() {
-        guard !awakeFromNibCalled else { return }
-
-        contentView.removeConstraints(dynamicConstraints)
-        dynamicConstraints = []
-        var views: [String: AnyObject] = ["textView": textView, "label": placeholderLabel!]
-        dynamicConstraints.append(contentsOf: NSLayoutConstraint.constraints(withVisualFormat: "V:|-[label]", options: [], metrics: nil, views: views))
-        if let textAreaConformance = row as? TextAreaConformance, case .dynamic(let initialTextViewHeight) = textAreaConformance.textAreaHeight {
-            dynamicConstraints.append(contentsOf: NSLayoutConstraint.constraints(withVisualFormat: "V:|-[textView(>=initialHeight@800)]-|", options: [], metrics: ["initialHeight": initialTextViewHeight], views: views))
-        } else {
-            dynamicConstraints.append(contentsOf: NSLayoutConstraint.constraints(withVisualFormat: "V:|-[textView]-|", options: [], metrics: nil, views: views))
-        }
-        if let imageView = imageView, let _ = imageView.image {
-            views["imageView"] = imageView
-            dynamicConstraints.append(contentsOf: NSLayoutConstraint.constraints(withVisualFormat: "H:[imageView]-(15)-[textView]-|", options: [], metrics: nil, views: views))
-            dynamicConstraints.append(contentsOf: NSLayoutConstraint.constraints(withVisualFormat: "H:[imageView]-(15)-[label]-|", options: [], metrics: nil, views: views))
-        } else if let titlePercentage = (row as? TextAreaConformance)?.titlePercentage, titlePercentage > 0.0 {
-            textView.textAlignment = .right
-            dynamicConstraints += NSLayoutConstraint.constraints(withVisualFormat: "H:[textView]-|", options: [], metrics: nil, views: views)
-            let sideSpaces = (layoutMargins.right + layoutMargins.left)
-            dynamicConstraints.append(NSLayoutConstraint(item: textView!,
-                                                         attribute: .width,
-                                                         relatedBy: .equal,
-                                                         toItem: contentView,
-                                                         attribute: .width,
-                                                         multiplier: 1 - titlePercentage,
-                                                         constant: -sideSpaces))
-        } else {
-            dynamicConstraints.append(contentsOf: NSLayoutConstraint.constraints(withVisualFormat: "H:|-[textView]-|", options: [], metrics: nil, views: views))
-            dynamicConstraints.append(contentsOf: NSLayoutConstraint.constraints(withVisualFormat: "H:|-[label]-|", options: [], metrics: nil, views: views))
-        }
-        contentView.addConstraints(dynamicConstraints)
-    }
-
-}
-
-open class TextAreaCell: _TextAreaCell<String>, CellType {
-
-    required public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-}
-
-open class AreaRow<Cell: CellType>: FormatteableRow<Cell>, TextAreaConformance where Cell: BaseCell, Cell: AreaCell {
-
-    open var placeholder: String?
-    open var textAreaHeight = TextAreaHeight.fixed(cellHeight: 110)
-    open var textAreaMode = TextAreaMode.normal
-    /// The percentage of the cell that should be occupied by the remaining space to the left of the textArea. This is equivalent to the space occupied by a title in FieldRow, making the textArea aligned to fieldRows using the same titlePercentage. This behavior works only if the cell does not contain an image, due to its automatically set constraints in the cell.
-    open var titlePercentage: CGFloat?
-
-    public required init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-open class _TextAreaRow: AreaRow<TextAreaCell> {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}
-
-/// A row with a UITextView where the user can enter large text.
-public final class TextAreaRow: _TextAreaRow, RowType {
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-}

+ 0 - 158
Pods/Eureka/Source/Rows/TriplePickerInputRow.swift

@@ -1,158 +0,0 @@
-//
-//  TriplePickerInputRow.swift
-//  Eureka
-//
-//  Created by Mathias Claassen on 5/10/18.
-//  Copyright © 2018 Xmartlabs. All rights reserved.
-//
-
-import Foundation
-import UIKit
-
-open class TriplePickerInputCell<A, B, C> : _PickerInputCell<Tuple3<A, B, C>> where A: Equatable, B: Equatable, C: Equatable {
-
-    private var pickerRow: _TriplePickerInputRow<A, B, C>! { return row as? _TriplePickerInputRow<A, B, C> }
-
-    public required init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func update() {
-        super.update()
-        if let selectedValue = pickerRow.value, let indexA = pickerRow.firstOptions().firstIndex(of: selectedValue.a),
-            let indexB = pickerRow.secondOptions(selectedValue.a).firstIndex(of: selectedValue.b),
-            let indexC = pickerRow.thirdOptions(selectedValue.a, selectedValue.b).firstIndex(of: selectedValue.c){
-            picker.selectRow(indexA, inComponent: 0, animated: true)
-            picker.selectRow(indexB, inComponent: 1, animated: true)
-            picker.selectRow(indexC, inComponent: 2, animated: true)
-        }
-    }
-
-    open override func numberOfComponents(in pickerView: UIPickerView) -> Int {
-        return 3
-    }
-
-    open override func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
-        if component == 0 {
-            return pickerRow.firstOptions().count
-        } else if component == 1 {
-            return pickerRow.secondOptions(pickerRow.selectedFirst()).count
-        } else {
-            return pickerRow.thirdOptions(pickerRow.selectedFirst(), pickerRow.selectedSecond()).count
-        }
-    }
-
-    open override func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
-        if component == 0 {
-            return pickerRow.displayValueForFirstRow(pickerRow.firstOptions()[row])
-        } else if component == 1 {
-            return pickerRow.displayValueForSecondRow(pickerRow.secondOptions(pickerRow.selectedFirst())[row])
-        } else {
-            return pickerRow.displayValueForThirdRow(pickerRow.thirdOptions(pickerRow.selectedFirst(), pickerRow.selectedSecond())[row])
-        }
-    }
-
-    open override func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
-        if component == 0 {
-            let a = pickerRow.firstOptions()[row]
-            if let value = pickerRow.value {
-                guard value.a != a else {
-                    return
-                }
-
-                let b: B = pickerRow.secondOptions(a).contains(value.b) ? value.b : pickerRow.secondOptions(a)[0]
-                let c: C = pickerRow.thirdOptions(a, b).contains(value.c) ? value.c : pickerRow.thirdOptions(a, b)[0]
-                pickerRow.value = Tuple3(a: a, b: b, c: c)
-                pickerView.reloadComponent(1)
-                pickerView.reloadComponent(2)
-                if b != value.b {
-                    pickerView.selectRow(0, inComponent: 1, animated: true)
-                }
-                if c != value.c {
-                    pickerView.selectRow(0, inComponent: 2, animated: true)
-                }
-            } else {
-                let b = pickerRow.secondOptions(a)[0]
-                pickerRow.value = Tuple3(a: a, b: b, c: pickerRow.thirdOptions(a, b)[0])
-                pickerView.reloadComponent(1)
-                pickerView.reloadComponent(2)
-                pickerView.selectRow(0, inComponent: 1, animated: true)
-                pickerView.selectRow(0, inComponent: 2, animated: true)
-            }
-        } else if component == 1 {
-            let a = pickerRow.selectedFirst()
-            let b = pickerRow.secondOptions(a)[row]
-            if let value = pickerRow.value {
-                guard value.b != b else {
-                    return
-                }
-                if pickerRow.thirdOptions(a, b).contains(value.c) {
-                    pickerRow.value = Tuple3(a: a, b: b, c: value.c)
-                    pickerView.reloadComponent(2)
-                    update()
-                    return
-                } else {
-                    pickerRow.value = Tuple3(a: a, b: b, c: pickerRow.thirdOptions(a, b)[0])
-                }
-            } else {
-                pickerRow.value = Tuple3(a: a, b: b, c: pickerRow.thirdOptions(a, b)[0])
-            }
-            pickerView.reloadComponent(2)
-            pickerView.selectRow(0, inComponent: 2, animated: true)
-        } else {
-            let a = pickerRow.selectedFirst()
-            let b = pickerRow.selectedSecond()
-            pickerRow.value = Tuple3(a: a, b: b, c: pickerRow.thirdOptions(a, b)[row])
-        }
-        update()
-    }
-}
-
-open class _TriplePickerInputRow<A: Equatable, B: Equatable, C: Equatable> : Row<TriplePickerInputCell<A, B, C>>, NoValueDisplayTextConformance {
-
-    open var noValueDisplayText: String? = nil
-    /// Options for first component. Will be called often so should be O(1)
-    public var firstOptions: (() -> [A]) = {[]}
-    /// Options for second component given the selected value from the first component. Will be called often so should be O(1)
-    public var secondOptions: ((A) -> [B]) = {_ in []}
-    /// Options for third component given the selected value from the first and second components. Will be called often so should be O(1)
-    public var thirdOptions: ((A, B) -> [C]) = {_, _ in []}
-    
-    /// Modify the displayed values for the first picker row.
-    public var displayValueForFirstRow: ((A) -> (String)) = { a in return String(describing: a) }
-    /// Modify the displayed values for the second picker row.
-    public var displayValueForSecondRow: ((B) -> (String)) = { b in return String(describing: b) }
-    /// Modify the displayed values for the third picker row.
-    public var displayValueForThirdRow: ((C) -> (String)) = { c in return String(describing: c) }
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-
-    func selectedFirst() -> A {
-        return value?.a ?? firstOptions()[0]
-    }
-
-    func selectedSecond() -> B {
-        return value?.b ?? secondOptions(selectedFirst())[0]
-    }
-
-}
-
-/// A generic row where the user can pick an option from a picker view displayed in the keyboard area
-public final class TriplePickerInputRow<A, B, C>: _TriplePickerInputRow<A, B, C>, RowType where A: Equatable, B: Equatable, C: Equatable {
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-        self.displayValueFor = { [weak self] tuple in
-            guard let tuple = tuple else {
-                return self?.noValueDisplayText
-            }
-            return String(describing: tuple.a) + ", " + String(describing: tuple.b) + ", " + String(describing: tuple.c)
-        }
-    }
-}

+ 0 - 176
Pods/Eureka/Source/Rows/TriplePickerRow.swift

@@ -1,176 +0,0 @@
-//
-//  TriplePickerRow.swift
-//  Eureka
-//
-//  Created by Mathias Claassen on 5/9/18.
-//  Copyright © 2018 Xmartlabs. All rights reserved.
-//
-
-import Foundation
-import UIKit
-
-public struct Tuple3<A: Equatable, B: Equatable, C: Equatable> {
-    public let a: A
-    public let b: B
-    public let c: C
-
-    public init(a: A, b: B, c: C) {
-        self.a = a
-        self.b = b
-        self.c = c
-    }
-
-}
-
-extension Tuple3: Equatable {}
-
-public func == <A: Equatable, B: Equatable, C: Equatable>(lhs: Tuple3<A, B, C>, rhs: Tuple3<A, B, C>) -> Bool {
-    return lhs.a == rhs.a && lhs.b == rhs.b && lhs.c == rhs.c
-}
-
-// MARK: MultiplePickerCell
-
-open class TriplePickerCell<A, B, C> : _PickerCell<Tuple3<A, B, C>> where A: Equatable, B: Equatable, C: Equatable {
-
-    private var pickerRow: _TriplePickerRow<A, B, C>? { return row as? _TriplePickerRow<A, B, C> }
-
-    public required init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-    }
-
-    open override func update() {
-        super.update()
-        if let selectedValue = pickerRow?.value, let indexA = pickerRow?.firstOptions().firstIndex(of: selectedValue.a),
-            let indexB = pickerRow?.secondOptions(selectedValue.a).firstIndex(of: selectedValue.b),
-            let indexC = pickerRow?.thirdOptions(selectedValue.a, selectedValue.b).firstIndex(of: selectedValue.c) {
-            picker.selectRow(indexA, inComponent: 0, animated: true)
-            picker.selectRow(indexB, inComponent: 1, animated: true)
-            picker.selectRow(indexC, inComponent: 2, animated: true)
-        }
-    }
-
-    open override func numberOfComponents(in pickerView: UIPickerView) -> Int {
-        return 3
-    }
-
-    open override func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
-        guard let pickerRow = pickerRow else { return 0 }
-        if component == 0 {
-            return pickerRow.firstOptions().count
-        } else if component == 1 {
-            return pickerRow.secondOptions(pickerRow.selectedFirst()).count
-        } else {
-            return pickerRow.thirdOptions(pickerRow.selectedFirst(), pickerRow.selectedSecond()).count
-        }
-    }
-
-    open override func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
-        guard let pickerRow = pickerRow else { return "" }
-        if component == 0 {
-            return pickerRow.displayValueForFirstRow(pickerRow.firstOptions()[row])
-        } else if component == 1 {
-            return pickerRow.displayValueForSecondRow(pickerRow.secondOptions(pickerRow.selectedFirst())[row])
-        } else {
-            return pickerRow.displayValueForThirdRow(pickerRow.thirdOptions(pickerRow.selectedFirst(), pickerRow.selectedSecond())[row])
-        }
-    }
-
-    open override func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
-        guard let pickerRow = pickerRow else { return }
-        if component == 0 {
-            let a = pickerRow.firstOptions()[row]
-            if let value = pickerRow.value {
-                guard value.a != a else {
-                    return
-                }
-
-                let b: B = pickerRow.secondOptions(a).contains(value.b) ? value.b : pickerRow.secondOptions(a)[0]
-                let c: C = pickerRow.thirdOptions(a, b).contains(value.c) ? value.c : pickerRow.thirdOptions(a, b)[0]
-                pickerRow.value = Tuple3(a: a, b: b, c: c)
-                pickerView.reloadComponent(1)
-                pickerView.reloadComponent(2)
-                if b != value.b {
-                    pickerView.selectRow(0, inComponent: 1, animated: true)
-                }
-                if c != value.c {
-                    pickerView.selectRow(0, inComponent: 2, animated: true)
-                }
-            } else {
-                let b = pickerRow.secondOptions(a)[0]
-                pickerRow.value = Tuple3(a: a, b: b, c: pickerRow.thirdOptions(a, b)[0])
-                pickerView.reloadComponent(1)
-                pickerView.reloadComponent(2)
-                pickerView.selectRow(0, inComponent: 1, animated: true)
-                pickerView.selectRow(0, inComponent: 2, animated: true)
-            }
-        } else if component == 1 {
-            let a = pickerRow.selectedFirst()
-            let b = pickerRow.secondOptions(a)[row]
-            if let value = pickerRow.value {
-                guard value.b != b else {
-                    return
-                }
-                if pickerRow.thirdOptions(a, b).contains(value.c) {
-                    pickerRow.value = Tuple3(a: a, b: b, c: value.c)
-                    pickerView.reloadComponent(2)
-                    return
-                } else {
-                    pickerRow.value = Tuple3(a: a, b: b, c: pickerRow.thirdOptions(a, b)[0])
-                }
-            } else {
-                pickerRow.value = Tuple3(a: a, b: b, c: pickerRow.thirdOptions(a, b)[0])
-            }
-            pickerView.reloadComponent(2)
-            pickerView.selectRow(0, inComponent: 2, animated: true)
-        } else {
-            let a = pickerRow.selectedFirst()
-            let b = pickerRow.selectedSecond()
-            pickerRow.value = Tuple3(a: a, b: b, c: pickerRow.thirdOptions(a, b)[row])
-        }
-    }
-
-}
-
-// MARK: PickerRow
-open class _TriplePickerRow<A, B, C> : Row<TriplePickerCell<A, B, C>> where A: Equatable, B: Equatable, C: Equatable {
-
-    /// Options for first component. Will be called often so should be O(1)
-    public var firstOptions: (() -> [A]) = {[]}
-    /// Options for second component given the selected value from the first component. Will be called often so should be O(1)
-    public var secondOptions: ((A) -> [B]) = {_ in []}
-    /// Options for third component given the selected value from the first and second components. Will be called often so should be O(1)
-    public var thirdOptions: ((A, B) -> [C]) = {_, _ in []}
-    
-    /// Modify the displayed values for the first picker row.
-    public var displayValueForFirstRow: ((A) -> (String)) = { a in return String(describing: a) }
-    /// Modify the displayed values for the second picker row.
-    public var displayValueForSecondRow: ((B) -> (String)) = { b in return String(describing: b) }
-    /// Modify the displayed values for the third picker row.
-    public var displayValueForThirdRow: ((C) -> (String)) = { c in return String(describing: c) }
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-
-    func selectedFirst() -> A {
-        return value?.a ?? firstOptions()[0]
-    }
-
-    func selectedSecond() -> B {
-        return value?.b ?? secondOptions(selectedFirst())[0]
-    }
-
-}
-
-/// A generic row where the user can pick an option from a picker view
-public final class TriplePickerRow<A, B, C>: _TriplePickerRow<A, B, C>, RowType where A: Equatable, B: Equatable, C: Equatable {
-
-    required public init(tag: String?) {
-        super.init(tag: tag)
-    }
-
-}

+ 0 - 43
Pods/Eureka/Source/Validations/RuleClosure.swift

@@ -1,43 +0,0 @@
-//  RuleClosure.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-public struct RuleClosure<T: Equatable>: RuleType {
-
-    public var id: String?
-    public var validationError: ValidationError
-
-    public var closure: (T?) -> ValidationError?
-
-    public func isValid(value: T?) -> ValidationError? {
-        return closure(value)
-    }
-
-    public init(validationError: ValidationError = ValidationError(msg: "Field validation fails.."), id: String? = nil, closure: @escaping ((T?) -> ValidationError?)) {
-        self.validationError = validationError
-        self.closure = closure
-        self.id = id
-    }
-}

+ 0 - 33
Pods/Eureka/Source/Validations/RuleEmail.swift

@@ -1,33 +0,0 @@
-//  RuleEmail.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-public class RuleEmail: RuleRegExp {
-
-    public init(msg: String = "Field value should be a valid email!", id: String? = nil) {
-        super.init(regExpr: RegExprPattern.EmailAddress.rawValue, allowsEmpty: true, msg: msg, id: id)
-    }
-
-}

+ 0 - 55
Pods/Eureka/Source/Validations/RuleEqualsToRow.swift

@@ -1,55 +0,0 @@
-//  RuleRequire.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-public struct RuleEqualsToRow<T: Equatable>: RuleType {
-
-    public init(form: Form, tag: String, msg: String = "Fields don't match!", id: String? = nil) {
-        self.validationError = ValidationError(msg: msg)
-        self.form = form
-        self.tag = tag
-        self.row = nil
-        self.id = id
-    }
-
-    public init(row: RowOf<T>, msg: String = "Fields don't match!", id: String? = nil) {
-        self.validationError = ValidationError(msg: msg)
-        self.form = nil
-        self.tag = nil
-        self.row = row
-        self.id = id
-    }
-
-    public var id: String?
-    public var validationError: ValidationError
-    public weak var form: Form?
-    public var tag: String?
-    public weak var row: RowOf<T>?
-
-    public func isValid(value: T?) -> ValidationError? {
-        let rowAux: RowOf<T> = row ?? form!.rowBy(tag: tag!)!
-        return rowAux.value == value ? nil : validationError
-    }
-}

+ 0 - 84
Pods/Eureka/Source/Validations/RuleLength.swift

@@ -1,84 +0,0 @@
-//  RuleLength.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-public struct RuleMinLength: RuleType {
-
-    let min: UInt
-
-    public var id: String?
-    public var validationError: ValidationError
-
-    public init(minLength: UInt, msg: String? = nil, id: String? = nil) {
-        let ruleMsg = msg ?? "Field value must have at least \(minLength) characters"
-        min = minLength
-        validationError = ValidationError(msg: ruleMsg)
-        self.id = id
-    }
-
-    public func isValid(value: String?) -> ValidationError? {
-        guard let value = value, !value.isEmpty else { return nil }
-        return value.count < Int(min) ? validationError : nil
-    }
-}
-
-public struct RuleMaxLength: RuleType {
-
-    let max: UInt
-
-    public var id: String?
-    public var validationError: ValidationError
-
-    public init(maxLength: UInt, msg: String? = nil, id: String? = nil) {
-        let ruleMsg = msg ?? "Field value must have less than \(maxLength) characters"
-        max = maxLength
-        validationError = ValidationError(msg: ruleMsg)
-        self.id = id
-    }
-
-    public func isValid(value: String?) -> ValidationError? {
-        guard let value = value, !value.isEmpty else { return nil }
-        return value.count > Int(max) ? validationError : nil
-    }
-}
-
-public struct RuleExactLength: RuleType {
-    let length: UInt
-    
-    public var id: String?
-    public var validationError: ValidationError
-    
-    public init(exactLength: UInt, msg: String? = nil, id: String? = nil) {
-        let ruleMsg = msg ?? "Field value must have exactly \(exactLength) characters"
-        length = exactLength
-        validationError = ValidationError(msg: ruleMsg)
-        self.id = id
-    }
-    
-    public func isValid(value: String?) -> ValidationError? {
-        guard let value = value, !value.isEmpty else { return nil }
-        return value.count != Int(length) ? validationError : nil
-    }
-}

+ 0 - 109
Pods/Eureka/Source/Validations/RuleRange.swift

@@ -1,109 +0,0 @@
-//  RuleRange.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-public struct RuleGreaterThan<T: Comparable>: RuleType {
-
-    let min: T
-
-    public var id: String?
-    public var validationError: ValidationError
-
-    public init(min: T, msg: String? = nil, id: String? = nil) {
-        let ruleMsg = msg ?? "Field value must be greater than \(min)"
-        self.min = min
-        self.validationError = ValidationError(msg: ruleMsg)
-        self.id = id
-    }
-
-    public func isValid(value: T?) -> ValidationError? {
-        guard let val = value else { return nil }
-        guard val > min else { return validationError }
-        return nil
-    }
-}
-
-public struct RuleGreaterOrEqualThan<T: Comparable>: RuleType {
-
-    let min: T
-
-    public var id: String?
-    public var validationError: ValidationError
-
-    public init(min: T, msg: String? = nil, id: String? = nil) {
-        let ruleMsg = msg ?? "Field value must be greater or equals than \(min)"
-        self.min = min
-        self.validationError = ValidationError(msg: ruleMsg)
-        self.id = id
-    }
-
-    public func isValid(value: T?) -> ValidationError? {
-        guard let val = value else { return nil }
-        guard val >= min else { return validationError }
-        return nil
-    }
-}
-
-public struct RuleSmallerThan<T: Comparable>: RuleType {
-
-    let max: T
-
-    public var id: String?
-    public var validationError: ValidationError
-
-    public init(max: T, msg: String? = nil, id: String? = nil) {
-        let ruleMsg = msg ??  "Field value must be smaller than \(max)"
-        self.max = max
-        self.validationError = ValidationError(msg: ruleMsg)
-        self.id = id
-    }
-
-    public func isValid(value: T?) -> ValidationError? {
-        guard let val = value else { return nil }
-        guard val < max else { return validationError }
-        return nil
-    }
-}
-
-public struct RuleSmallerOrEqualThan<T: Comparable>: RuleType {
-
-    let max: T
-
-    public var id: String?
-    public var validationError: ValidationError
-
-    public init(max: T, msg: String? = nil, id: String? = nil) {
-        let ruleMsg = msg ?? "Field value must be smaller or equals than \(max)"
-        self.max = max
-        self.validationError = ValidationError(msg: ruleMsg)
-        self.id = id
-    }
-
-    public func isValid(value: T?) -> ValidationError? {
-        guard let val = value else { return nil }
-        guard val <= max else { return validationError }
-        return nil
-    }
-}

+ 0 - 61
Pods/Eureka/Source/Validations/RuleRegExp.swift

@@ -1,61 +0,0 @@
-//  RegexRule.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-public enum RegExprPattern: String {
-    case EmailAddress = "^[_A-Za-z0-9-+!?#$%'`*/=~^{}|]+(\\.[_A-Za-z0-9-+!?#$%'`*/=~^{}|]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z‌​]{2,})$"
-    case URL = "((https|http)://)((\\w|-)+)(([.]|[/])((\\w|-)+))+([/?#]\\S*)?"
-    case ContainsNumber = ".*\\d.*"
-    case ContainsCapital = "^.*?[A-Z].*?$"
-    case ContainsLowercase = "^.*?[a-z].*?$"
-}
-
-open class RuleRegExp: RuleType {
-
-    public var regExpr: String = ""
-    public var id: String?
-    public var validationError: ValidationError
-    public var allowsEmpty = true
-
-    public init(regExpr: String, allowsEmpty: Bool = true, msg: String = "Invalid field value!", id: String? = nil) {
-        self.validationError = ValidationError(msg: msg)
-        self.regExpr = regExpr
-        self.allowsEmpty = allowsEmpty
-        self.id = id
-    }
-
-    public func isValid(value: String?) -> ValidationError? {
-        if let value = value, !value.isEmpty {
-            let predicate = NSPredicate(format: "SELF MATCHES %@", regExpr)
-            guard predicate.evaluate(with: value) else {
-                return validationError
-            }
-            return nil
-        } else if !allowsEmpty {
-            return validationError
-        }
-        return nil
-    }
-}

+ 0 - 43
Pods/Eureka/Source/Validations/RuleRequired.swift

@@ -1,43 +0,0 @@
-//  RuleRequire.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-public struct RuleRequired<T: Equatable>: RuleType {
-
-    public init(msg: String = "Field required!", id: String? = nil) {
-        self.validationError = ValidationError(msg: msg)
-        self.id = id
-    }
-
-    public var id: String?
-    public var validationError: ValidationError
-
-    public func isValid(value: T?) -> ValidationError? {
-        if let str = value as? String {
-            return str.isEmpty ? validationError : nil
-        }
-        return value != nil ? nil : validationError
-    }
-}

+ 0 - 54
Pods/Eureka/Source/Validations/RuleURL.swift

@@ -1,54 +0,0 @@
-//  RuleURL.swift
-//  Eureka ( https://github.com/xmartlabs/Eureka )
-//
-//  Copyright (c) 2016 Xmartlabs SRL ( http://xmartlabs.com )
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-import UIKit
-
-public struct RuleURL: RuleType {
-
-    public init(allowsEmpty: Bool = true, requiresProtocol: Bool = false, msg: String = "Field value must be an URL!", id: String? = nil) {
-        validationError = ValidationError(msg: msg)
-        self.allowsEmpty = allowsEmpty
-        self.requiresProtocol = requiresProtocol
-        self.id = id
-    }
-
-    public var id: String?
-    public var allowsEmpty = true
-    public var requiresProtocol = false
-    public var validationError: ValidationError
-
-    public func isValid(value: URL?) -> ValidationError? {
-        if let value = value, value.absoluteString.isEmpty == false {
-            let predicate = NSPredicate(format:"SELF MATCHES %@", RegExprPattern.URL.rawValue)
-            guard predicate.evaluate(with: value.absoluteString) else {
-                return validationError
-            }
-            return nil
-        } else if !allowsEmpty {
-            return validationError
-        }
-        return nil
-    }
-}

+ 0 - 29
Pods/Local Podspecs/Eureka.podspec.json

@@ -1,29 +0,0 @@
-{
-  "name": "Eureka",
-  "version": "5.3.6",
-  "license": "MIT",
-  "summary": "Elegant iOS Forms in pure Swift",
-  "homepage": "https://github.com/xmartlabs/Eureka",
-  "social_media_url": "http://twitter.com/xmartlabs",
-  "authors": {
-    "Martin Barreto": "martin@xmartlabs.com",
-    "Mathias Claassen": "mathias@xmartlabs.com"
-  },
-  "source": {
-    "git": "https://github.com/xmartlabs/Eureka.git",
-    "tag": "5.3.6"
-  },
-  "platforms": {
-    "ios": "9.0"
-  },
-  "ios": {
-    "frameworks": [
-      "UIKit",
-      "Foundation"
-    ]
-  },
-  "source_files": "Source/**/*.swift",
-  "requires_arc": true,
-  "swift_versions": "5.0",
-  "swift_version": "5.0"
-}

+ 0 - 8
Pods/Manifest.lock

@@ -3,13 +3,11 @@ PODS:
     - Charts/Core (= 4.1.0)
   - Charts/Core (4.1.0):
     - SwiftAlgorithms (~> 1.0)
-  - Eureka (5.3.6)
   - ShareClient (1.2)
   - SwiftAlgorithms (1.0.0)
 
 DEPENDENCIES:
   - Charts
-  - Eureka (from `https://github.com/xmartlabs/Eureka.git`)
   - ShareClient (from `https://github.com/loopandlearn/dexcom-share-client-swift.git`, branch `loopfollow`)
 
 SPEC REPOS:
@@ -18,23 +16,17 @@ SPEC REPOS:
     - SwiftAlgorithms
 
 EXTERNAL SOURCES:
-  Eureka:
-    :git: https://github.com/xmartlabs/Eureka.git
   ShareClient:
     :branch: loopfollow
     :git: https://github.com/loopandlearn/dexcom-share-client-swift.git
 
 CHECKOUT OPTIONS:
-  Eureka:
-    :commit: 044e31674d319c8edb19d993a5f8ea4e24641542
-    :git: https://github.com/xmartlabs/Eureka.git
   ShareClient:
     :commit: d7a3323a014d41827ee177a92d528786f9f09e75
     :git: https://github.com/loopandlearn/dexcom-share-client-swift.git
 
 SPEC CHECKSUMS:
   Charts: ce0768268078eee0336f122c3c4ca248e4e204c5
-  Eureka: 28ad9dec6286cd7cd601fdf8e8df39bb7356a8f4
   ShareClient: 60b911c95e73b0ea9c5aad6d194a9c6b5f34b741
   SwiftAlgorithms: 38dda4731d19027fdeee1125f973111bf3386b53
 

+ 13 - 463
Pods/Pods.xcodeproj/project.pbxproj

@@ -9,18 +9,14 @@
 /* Begin PBXBuildFile section */
 		0031CEAD857A1BA158C0D2BE1870A438 /* Animator.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB10D8BF2F0C2E9B18C2130751D75984 /* Animator.swift */; };
 		00351B69906B07C1950B97C40F65FABE /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C51F17D0D2858BA593E783811A2CF7E6 /* RadarChartData.swift */; };
-		008E02A88C10E3688B4431BFD393F0BE /* DateRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77F3AB1C7064C79A86A62BE1BBB6068C /* DateRow.swift */; };
 		00E171A24B8B214FDC447BED6BB62C31 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B90B940BBEE17272D0FA9602CB3F1E1 /* BarLineScatterCandleBubbleChartDataSet.swift */; };
 		0382A6D93C8BB1218EB1DBA3CF1B3BA7 /* BubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1D0991883487B252954C6AD93262DD /* BubbleChartData.swift */; };
 		04360A4DF646DD99E7AF0AC83FAA56AB /* CandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF58BE2BB556CCFFD3F153CD246BB3B2 /* CandleChartDataSet.swift */; };
-		0568E4D0A08C598F5AE7DDDA0DD59923 /* ActionSheetRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 463B1FFE93072EEE11F06544067346A2 /* ActionSheetRow.swift */; };
-		05E063B80D84B40AEEDC7DC5797FA3FD /* InlineRowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1363CD1C407802F39155303528BAB434 /* InlineRowType.swift */; };
 		078FF70DB7D0BDBE768AB0FA72E19D14 /* RadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 631260726B8649201DF3262C04AE423B /* RadarChartDataSet.swift */; };
 		094130854F03255D5BD94EAE3C6797B4 /* LineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35C07C88A101976F7D43BE7BE4673A37 /* LineRadarChartDataSet.swift */; };
 		0BB393E009EB565C1342EEA8D02C9098 /* BarLineScatterCandleBubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C00C3496A26A3B8ED45E73F3E3AFDAC /* BarLineScatterCandleBubbleChartData.swift */; };
 		0CA67293F83A1EB1004D16D1878B4007 /* LineRadarChartDataSetProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4A498BBC8E4513D82F78F75036A171 /* LineRadarChartDataSetProtocol.swift */; };
 		0D73D4FBCA95E51CDA036332FE5031B4 /* Pods-LoopFollow-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E41188828C3ADE7A96C4DA6ED1CCDA2 /* Pods-LoopFollow-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		0FC606DB282EDA95D6DA95289AA85C61 /* DoublePickerInputRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74854C0CAA3FF3AAE613D06C13CA0511 /* DoublePickerInputRow.swift */; };
 		1251E7AD01C341EFCB0A7A4B70942433 /* BarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CAB9310175D2D05534B5FAA40BDABB8 /* BarChartDataSet.swift */; };
 		1267184A54805C22C30908BFA58279C9 /* BubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D9B0CD14B51E9BB24006EA87AD5758F /* BubbleChartDataProvider.swift */; };
 		13CC355E8703534C3651E1676F54989C /* Compacted.swift in Sources */ = {isa = PBXBuildFile; fileRef = 417ACD10C75E540CA5E23120521A8BA9 /* Compacted.swift */; };
@@ -28,7 +24,6 @@
 		1611A02A50E8ECD5F31ECF1CDDCCFF7F /* LegendEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 719A12B42A88A75148E0A9C8D6C618F0 /* LegendEntry.swift */; };
 		16362413D2756A8A8BD2E5D20726520D /* LineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524C2C5AB08DAC0B62469BC9BAD2BBFC /* LineScatterCandleRadarChartDataSet.swift */; };
 		16C5A86B21B4BF6C530A96DC25C9ECDB /* PieChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD9D1DB1BA530D126D35D218E4439458 /* PieChartDataEntry.swift */; };
-		184CBCE994131F7140410E0B17E94ADE /* SelectorAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2DF6A6FC9E680841A26786E9267590E /* SelectorAlertController.swift */; };
 		18F6D2659567747929F4F67444C6DB5A /* Indexed.swift in Sources */ = {isa = PBXBuildFile; fileRef = F574273E89B9C97C369C430B67186E14 /* Indexed.swift */; };
 		195360D36D20DEA54AC170FB9C9ECB44 /* Suffix.swift in Sources */ = {isa = PBXBuildFile; fileRef = C72D375E25E043A018C9D9E87EF64256 /* Suffix.swift */; };
 		1956BBD2D0434340107A6BE2B68FE4FE /* Intersperse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3897C4A6B7F162E479564409C5CEFB13 /* Intersperse.swift */; };
@@ -36,66 +31,44 @@
 		1C7423F964AEF53EA37E1B4F2F4C8A3D /* MoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0651C9C3E1F7212ACFC0DF4E3E00323D /* MoveViewJob.swift */; };
 		1C903C670AE552000F47F9FF69946132 /* Chunked.swift in Sources */ = {isa = PBXBuildFile; fileRef = 593C5B76ABCE8F5324D1A34783FACC5B /* Chunked.swift */; };
 		1CFCB7624A2D0A7B088428BB898E452E /* Chain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A34EC75AF41BCC80FDC54C5AB3DC008 /* Chain.swift */; };
-		1E048CCA6D1D1B00892BB5A0D87A4D2E /* RowControllerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5833C2A8E049B2690A7651CB63B183C /* RowControllerType.swift */; };
-		205C36FBEAF46B5278F998984AE7AF18 /* LabelRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB89F713B887858D9493B533D256B7B /* LabelRow.swift */; };
 		22725F307C8A12F85C2E583CE9D67A68 /* CrossShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E09B56CDA6CE4B961DE77CE43BF6517D /* CrossShapeRenderer.swift */; };
-		25740149FB6D4EE7E113A1FA47B73554 /* SelectableRowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AF612F2F2ED80B5AA7DA7388FF9D3A9 /* SelectableRowType.swift */; };
 		25D7B9CB6D83A2899E364531C8B465E0 /* XAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52FC9F1F7847D290D9CD7AB6024341FF /* XAxisRendererRadarChart.swift */; };
 		26414DCD243931AD2DF5A7FAEFA9A2F1 /* AxisBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC79A108E546A80FD2E858996EB42D7 /* AxisBase.swift */; };
 		280B9154E146F8A47E47F484ACC815F0 /* ValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7ACE4DAB3C5C84A671AFE0A24BC32E8 /* ValueFormatter.swift */; };
 		28699DA45BB94636CDD55D302CC36D4C /* FillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 421EDDDD69FD4DEF3F201DC7F4EDD885 /* FillFormatter.swift */; };
 		28C0C336867276BB3F88C94BDCF5924F /* AnimatedZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F619C3ACAC8BB97F4CBF04C055CCB24 /* AnimatedZoomViewJob.swift */; };
-		28D8448B496B314D91BAE0EE321646BE /* SelectableSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C040C5E0351A26CDFA6243686064CC2 /* SelectableSection.swift */; };
 		290F4D27B047ECE9E11FE65D45659AA9 /* Platform+Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE0ACEEB9003A6780541B487AD7AD20F /* Platform+Color.swift */; };
 		295E7D31962EAA43CE02A22D291AC827 /* YAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = F448E25F6F3095E674026E503F71BED7 /* YAxisRendererHorizontalBarChart.swift */; };
-		298553E2ECB829B696DF592E6990249A /* HeaderFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54DF8106B99B7AAD32343B0FCA61D868 /* HeaderFooterView.swift */; };
 		2D7A2EBC2FC440678E3F1D63D375EA31 /* CombinedChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7210F7399765A3931B62D5370EF1B4FC /* CombinedChartData.swift */; };
-		2E35BA439FF3906792D64F465A358A13 /* TriplePickerInputRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91757002F52622DC87D0A1967FE2900E /* TriplePickerInputRow.swift */; };
-		2ECA780FC4691E846B5EB4919997A5F4 /* PickerInlineRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A15229B55953AF8036FBE93E658A18C9 /* PickerInlineRow.swift */; };
 		30F6164C5F15445D6BC5D8B22A4131BE /* Permutations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D4695EDCBBD2F14A96C466589AC26B4 /* Permutations.swift */; };
-		31B0A34AA01CC0E71ECA6B7BA7D7EC88 /* AlertOptionsRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DA7213CB1ED6CD5B946A3A1EA36CFE3 /* AlertOptionsRow.swift */; };
 		341C4C56C45E00A6B58E63A7EDF7F7C1 /* BubbleChartDataSetProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97C19D311E35002501E760D893F35E2F /* BubbleChartDataSetProtocol.swift */; };
 		35BFC4C3A46CF7EEC15BEA91AC6CE39B /* HorizontalBarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 896D7BB34CDE275E92DC01AC1F533F26 /* HorizontalBarHighlighter.swift */; };
 		3641D2A955EB369FD725C07BAF82E96F /* Renderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6124C7D917D4C7DC28F7503EBCD596D7 /* Renderer.swift */; };
-		3719CDB1B700C19AB04163DA75B09815 /* Core.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649C6079A86B7348DD9A91E50537DC34 /* Core.swift */; };
 		37C035EBB523276E74097ACE8B88D7DE /* ChartLimitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EE2943C8EAB9AD013BB0D24A3E135AF /* ChartLimitLine.swift */; };
-		3927F2677F09C815B6BC70E94023E335 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */; };
-		3A84D68B004228D5F71FC0FC889FFC07 /* RuleLength.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB609C6137ED4B1E648CCC3F5325177 /* RuleLength.swift */; };
-		3AE49F9C5930DCD727D11A42EA89E640 /* FieldsRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B501803A2305DE95A984916552E769A /* FieldsRow.swift */; };
-		3AEA68431EF66EB90B4E3F1074CF8125 /* RuleEqualsToRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 376D2C21D79D7A27AA844F0E178BC43B /* RuleEqualsToRow.swift */; };
 		3BCB9E6E546029CDD29933889ECF313D /* LineChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F86CBC5DB9A328A34A07A52C1CD5605 /* LineChartDataProvider.swift */; };
 		3BFFA0E6A588A61617609032FF7D48DF /* SwiftAlgorithms-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 44A177D8AC2CE9A04AEC62303E1C012C /* SwiftAlgorithms-dummy.m */; };
 		3C1FAA2B78B8750635AC8D2B088703BA /* PieHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C97D67CE26870DFAA8AFE096DDF8F6CF /* PieHighlighter.swift */; };
 		3C863D4E5E34C7C2173E0B557157A469 /* ChevronDownShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10E2D718053926F7C362A0242C707398 /* ChevronDownShapeRenderer.swift */; };
 		3CCE8A616A323BDE56FA02CAB953BA18 /* BubbleChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F21D683A3D7551D0D6ED48F9BCBDDCB /* BubbleChartView.swift */; };
-		3CEB7EACBD4EB21B47517CC48A994655 /* RuleURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2561CCE278142444D8BDF2C3820193E /* RuleURL.swift */; };
 		3F7DE7DD33C07E28ABBF80B3AFBCDF44 /* HorizontalBarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC882B9BE58FE2D2FCB58677AABEF941 /* HorizontalBarChartRenderer.swift */; };
-		40E090A253097EFA55694770F19FEBAE /* CellType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F15455C959FB8C71196A046437C0EED5 /* CellType.swift */; };
 		42361A518637B458CBB971D21E43346E /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B4B217AE01ABE5E9A1B3FEE24ACD3E /* CombinedChartView.swift */; };
 		4304139B7049F735A4879E7A14DCA236 /* ScatterChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D975F08944D56553EE8F518D883AABD /* ScatterChartRenderer.swift */; };
 		4412B151ED4921518E19FA644D282D99 /* LineRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B0F987BD66CF8FC4B3368F8EB644D6A /* LineRadarRenderer.swift */; };
-		46A11B142CC018088902C05BA2707513 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9D47A544442AC0D1EACE1A847B3DAE4 /* Validation.swift */; };
 		46D629F718073D7735C888E42E1EAB17 /* PieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E1E5F4713322837D7506143802ED222 /* PieChartDataSet.swift */; };
-		4889C566B538BE9C98F084E685CB3C8E /* StepperRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E05949DEB432C9594F64A3B0BEB4BDD /* StepperRow.swift */; };
 		494DAE02C6BD413F95D9B35E4C9B8473 /* Platform+Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7724018046776D153BF2F519E62ED100 /* Platform+Accessibility.swift */; };
 		49F28A30CAC0F0F5E874185195C05EAA /* Joined.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B5D397F5631F7981765A1517F8E752B /* Joined.swift */; };
-		4BADBE8D79E82E6BCA97708DB5E0623C /* RuleEmail.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8C6D9AA85CFF72CA6E5519187388A6F /* RuleEmail.swift */; };
 		4C3E4C1A74F42DC91C726DC9BD262891 /* CombinedChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF14DB72944084EE52D83024A8168D3A /* CombinedChartDataProvider.swift */; };
 		4C7DA896256A295E7DEADFCA8B0136EE /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0047677618FCD329E548FDDC0454A8AC /* LineChartView.swift */; };
 		4CDE5AD6B91F8E1859C196089A01F927 /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CDBEAB7607F1CDCCB6229DF611C0D3B /* BarLineScatterCandleBubbleChartDataProvider.swift */; };
 		4E0CE7C1CD75F9926C1453AC1AFCFBF7 /* BarChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42EF3C460FF3BA09B964B4B078B2FFDC /* BarChartDataProvider.swift */; };
 		50711078539C633D63AEE4D4F4B0642D /* TransformerHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 127D620D9103C646821EE1A9FFDC6AB4 /* TransformerHorizontalBarChart.swift */; };
 		56C71B82E08666FBEC2E57178FF7EB18 /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22D8A4241B43E6A486B3ABFE7CE176D2 /* Platform.swift */; };
-		56E322CBEF2E9EA5777EC3846F888BDB /* PushRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F117C19DCF36AF0FB2648E2D25EA325 /* PushRow.swift */; };
 		5751FF8F73931CF52C588FC93DF87069 /* HorizontalBarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34D137537BF079F35059435323D7452 /* HorizontalBarChartView.swift */; };
-		57FB8912F3DEFA71CF0932D6338A2BF9 /* TextAreaRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ACC6C7F798E27DF68E09694E5645ECF /* TextAreaRow.swift */; };
 		5829E60F3B1D9D7166301BC4AA17E83D /* ViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E3651675689D3E922771781C1C7EBF4 /* ViewPortJob.swift */; };
 		5851F6B6C46E7426DA8693AD1781EDB5 /* ShareClient-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 185455CC1A16D809E6CD52CA7ED7C218 /* ShareClient-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		585FD9DA0B21341F777A5B39ED1CA562 /* RadarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 323A7094F3358B4E346E033FE9AAF79E /* RadarChartDataEntry.swift */; };
 		58889ECB9711CC8D285F5689C9DF4584 /* ChartColorTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CA046D8066D2043078135381049F0A /* ChartColorTemplates.swift */; };
-		5CF70EB49A6DE1B80886F0FD3F780522 /* MultipleSelectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5C7DEB37A5D25E3675AB9B8D8C02F7F /* MultipleSelectorViewController.swift */; };
 		5D998F2454D188B00E592ECF3DFB6371 /* PieChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85FBB9A8A3775D305F8D23740840158D /* PieChartData.swift */; };
-		5DDCB215B020A3C11AAF9EA8766AD7D5 /* PresenterRowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA24EB386C74479E70533D8F03191FED /* PresenterRowType.swift */; };
 		5E6D0EA6A7250B44F8D1416E97248FC2 /* Split.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35CE8AE4FB4FAA915248FFA91AE62338 /* Split.swift */; };
 		5FFB0442423AFC0BFC70DA91859C1FA7 /* SquareShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8151C448D7FF1AE4C18A1D9BAAB84F5 /* SquareShapeRenderer.swift */; };
 		60F208C320EA137DF1E35F58D848DE9A /* CandleStickChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16B9EB6993E134E20A22EFB3F975FAAB /* CandleStickChartView.swift */; };
@@ -103,7 +76,6 @@
 		6138784D2228EEEEC197C541EDB9282C /* BarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 640DB089E7BC7FA9C4C5D67D1E58393A /* BarChartData.swift */; };
 		62425D090FD054F868558C00A83BBCF6 /* MarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C90F7AE53155C1804331C13F95834B2 /* MarkerView.swift */; };
 		6291997C9089F0F4FF4B0172331B31AC /* RadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D024D84271BC3B8711840FD1825F8191 /* RadarChartRenderer.swift */; };
-		6328C306E03099885C3EFCA798C9F5D1 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31D826433F23D509AB5013DA7F1D59F6 /* Operators.swift */; };
 		6351CC48D4CD08A64B93027110D0BFD7 /* Marker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347B2727DAB3007AE54E938A6EDAC926 /* Marker.swift */; };
 		646FE6A25A724BC685702BFB101E021E /* ChartBaseDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D14145B7AD1FC1EC76D1DB43D3100AC2 /* ChartBaseDataSet.swift */; };
 		64B59451EB2C31914C278348F911C715 /* CandleChartDataSetProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E41D7AE4F0AB44736E2E49B07F83AC6 /* CandleChartDataSetProtocol.swift */; };
@@ -113,51 +85,35 @@
 		68047C5BD5B0C77274FAB5CD38F2EF0E /* TriangleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9222FB7877363AAC2E66F4E9BD6BE22F /* TriangleShapeRenderer.swift */; };
 		68A3CE924047F6FF8D7BDDE68BCBD4C1 /* BarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB44185A42C56CCC7B7F24D8A4259044 /* BarHighlighter.swift */; };
 		6916BF3166BE703933C43515B50ADBD7 /* Windows.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D152598E6F7AD2209244F3255EBE2B3 /* Windows.swift */; };
-		697D5116696270B7361C180573C495D3 /* AlertRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39347FDF57F777C67EA286FDF94A50A0 /* AlertRow.swift */; };
-		69B91E7FF91730260D4137B09C015636 /* Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7B8E73E6E0A1CA1E6E26B307989E3F9 /* Protocols.swift */; };
 		69CED83D06805776035CF76DD1DE2C2A /* ChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FC29B40706B2526531F041CD6E5F37 /* ChartViewBase.swift */; };
 		6B89D2717D3A324DF55655D69A21AAAC /* ChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9A488FE97E31BCF19AE78B98C18EE81 /* ChartHighlighter.swift */; };
-		6B905F2AC740B767D002FBB0CA795A7C /* RuleClosure.swift in Sources */ = {isa = PBXBuildFile; fileRef = 445973D461C2CC4957A3BB54B5427B6F /* RuleClosure.swift */; };
 		6B9186D7227163690B8397FAADFF77D3 /* DefaultAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194A8936BCA6DD2C7CC0C0003C0F27BB /* DefaultAxisValueFormatter.swift */; };
 		6D878FE6964089A7F47EB406F566ECC0 /* ScatterChartDataSetProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60B7899F2AE639742DDEE13C16276275 /* ScatterChartDataSetProtocol.swift */; };
 		6E65B4450EE038F9F1DF3F7443BF53DB /* Unique.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99770C7A6099A970C34D7824A7CE280D /* Unique.swift */; };
-		6EC583C2F9CEC762B806A22700E9D800 /* CheckRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D1BC6FE5DDEE26D858B939E9B4E82C /* CheckRow.swift */; };
 		701A1DF09A74742FFCF8BCE3F5A9370B /* SwiftAlgorithms-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B7EBBA8C350C40C7F423CDD638EDB2E /* SwiftAlgorithms-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		70CACB146AA2603CDD775285FA9A4CE9 /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35D58369D6A0FF961EC41F36B0B7D29C /* Range.swift */; };
-		73780F56C4A6F73B569E3009F9AEF09F /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2646204CB36CF4EF6057C2B31604DCA0 /* Helpers.swift */; };
 		75E493B239F29100777CBB38AAAE08D7 /* BarLineScatterCandleBubbleRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C5AFD1B5788F5477102C8DD0F7EAF50 /* BarLineScatterCandleBubbleRenderer.swift */; };
 		782E096BE9488B722DA0F64794A45D40 /* ShareClient.h in Headers */ = {isa = PBXBuildFile; fileRef = A5822CA2A05671BAA9BC5BD4A3BA5D6B /* ShareClient.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		7899A9D1751880EC7A2649DF35617F67 /* Sequence+KeyPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2629C2C6B479EEB26E2F6DA58C30B81 /* Sequence+KeyPath.swift */; };
 		7A52005D206FA5BEC462EC1ED5E34423 /* XAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48FC9D5D68CA4D70155A8959C1179E28 /* XAxisRendererHorizontalBarChart.swift */; };
-		7B59CC19DE0A8FC37B7E78A578968DD4 /* PickerInputRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6207FB4695D962F2B6DF8DD11635A620 /* PickerInputRow.swift */; };
 		7B8211FE68633C9F9EF8C2729FACE32A /* MinMax.swift in Sources */ = {isa = PBXBuildFile; fileRef = 939E4F680A1A71C7BFC00F9917F3E5EB /* MinMax.swift */; };
-		7BD16251FF2F7EA5F18AEACF5DE44C23 /* DateInlineFieldRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FA087B627BA46F392CACF1BD142B7AA /* DateInlineFieldRow.swift */; };
 		7C09D13338B7A0BF4A0EB9763EE60339 /* ChevronUpShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 910799424A3C8A57366C4CE76BE79683 /* ChevronUpShapeRenderer.swift */; };
-		7F7B5556719352AD2C7A756587D348BB /* DatePickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 914C75C3E73448BCC86DF693AD52CAF8 /* DatePickerRow.swift */; };
 		80E88D848625ADD942D49552233940C3 /* XAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 837358B5E2BC5C139A82049EB2895D05 /* XAxisRenderer.swift */; };
 		839F873A001FE9169E9978BE89195B5F /* ScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02BD1A15A0561B886A937317473FCF4D /* ScatterChartDataSet.swift */; };
-		869DB6D9A7692FDEC1FF5537C0413274 /* NavigationAccessoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8F21E10186E4376CA7F0655ECE328A5 /* NavigationAccessoryView.swift */; };
-		873FEA8F7A7D862C00A2335E311DEDC6 /* SegmentedRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BC64D825C8295FFA3E396F2B8D254C /* SegmentedRow.swift */; };
 		8809E0E77C38BC2164874FB080404B2C /* Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 162C2F9A6894149851210E55E6188A43 /* Transformer.swift */; };
 		88DD483D2937E149E31768EAB7567563 /* ZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFD6267883E63FA87B3CF88C8773CCD6 /* ZoomViewJob.swift */; };
 		8BF58ABE3315B02170CA950504A6AF7D /* Product.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80DDB7F7B5FBDC211213044A06C72601 /* Product.swift */; };
-		8F2CC08A2EA2A12CF906555985307D8A /* RuleRequired.swift in Sources */ = {isa = PBXBuildFile; fileRef = D359B9F836FA5FFF4380D1F522C364D8 /* RuleRequired.swift */; };
 		8FD826D1119F87EB638FAC888F74BE51 /* LineChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E12C56B79F0D3D4E449C70724B3B0D2 /* LineChartData.swift */; };
 		8FDCA72F349897774711AA8AB1F23522 /* CandleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1714C5DC04BE72E509DC4E7686AA857F /* CandleChartDataEntry.swift */; };
-		8FF92C53FAAAC2ED824C1E535C187424 /* SwipeActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45C6E3F0D68C882F76B85AE0C2AE35EE /* SwipeActions.swift */; };
 		905D5792F0F95A1D50E0FA79AFF58278 /* FlattenCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C320E80DD7BFAAA5494A8BB4D7A226F /* FlattenCollection.swift */; };
-		91B0EE8C7679DFFD7D0D27DC32BD07D3 /* RowProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2748ACE938277243245CED76CF901E32 /* RowProtocols.swift */; };
 		92C7BAE4CC1EA95C35F3CE1D2DFB463B /* YAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8FE53DE5C6214CB9D501CF937A4A88A /* YAxis.swift */; };
 		92F85BA954CAD476F1964EFD067DF138 /* LineChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 791893088C1075827778DDAFED99EF63 /* LineChartRenderer.swift */; };
 		93E19EA5B507AAA18B0961FD52FDD452 /* CircleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFA8A221F0F4BA00670608D2F68AFBC2 /* CircleShapeRenderer.swift */; };
 		941AA0A965F188AD2989B5B10CAEBB5D /* BubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84585BA74D5FD5927560642A3D8484D /* BubbleChartDataSet.swift */; };
 		95826C07F14DFF13BAA349F49C84917F /* Platform+Graphics.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECF04D337A793DE5FFF6D492CE60D96 /* Platform+Graphics.swift */; };
-		95DEEE38D632C816737E8AB538428A50 /* SelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DAD47DCABD4ECD1C9DFFEAA022A9E17 /* SelectorRow.swift */; };
 		968CA639D9CA2E9D8A41F1038F03C2AE /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E525EC535F76BFC47EF4F3E62BA3654 /* Description.swift */; };
 		97528183B1A64DF1AFB370063327C922 /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = A46A27661B10DDD04786AD58706C55BC /* PieRadarChartViewBase.swift */; };
-		9760DCC9A11340DC2E74E00007F9D3DF /* Eureka-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 47135570F8D5A9E934D001C53B4C0A79 /* Eureka-dummy.m */; };
 		99288EBF5E5716EF2F27C0978E602446 /* AxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA175D42C8D8C40B7D7B4EBA4DFCB613 /* AxisValueFormatter.swift */; };
-		995A8A4C2445BD86C2DC375B14394682 /* ListCheckRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50AFF7F977813F95AC11C077C50CDEF6 /* ListCheckRow.swift */; };
 		99F7945EE1671BCBB0ED04D6AC9361C4 /* Reductions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAAB281721B2A421266EF830D312BC5A /* Reductions.swift */; };
 		9BCAF45D55CDD35A801F95CFE539AE56 /* Platform+Touch Handling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E2A8B52E2E9746619F1216001D0241C /* Platform+Touch Handling.swift */; };
 		9C6B381899CCB8A5784CAEA7FCF140F8 /* RadarChartDataSetProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FDEC8B77727E37AE06D95B16E7B4E24 /* RadarChartDataSetProtocol.swift */; };
@@ -166,8 +122,6 @@
 		9FDE058C5DF72BAE2D498F2EEDD060CA /* CandleStickChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF9EB617791E412932FA1E750D934E36 /* CandleStickChartRenderer.swift */; };
 		A09370996D959442F01BF83FAD70F978 /* ScatterChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B26B283F8811F230A0E0B4FDD225F42 /* ScatterChartView.swift */; };
 		A18DBD8983244A378ED1D37297C8B2D1 /* IndexAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF0AC8618DB750D79CB08822A30BEEB0 /* IndexAxisValueFormatter.swift */; };
-		A2254B25181B13F76C598F0CF5A40FE7 /* RowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AB5F5FEADDDFDB8B4D1F3BFE449F81E /* RowType.swift */; };
-		A3A234EA035289FD713D51AEAF1072C8 /* Form.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0351341FCAFDAA74F7778AF04C9EBE3 /* Form.swift */; };
 		A3BC53817CA91A9716FD1CE460F088A5 /* ChartDataSetProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D18390EFF0AD4A6E0E073DD78EC6A8A /* ChartDataSetProtocol.swift */; };
 		A5A2B62222D6B52255157E45BBFC2D78 /* DefaultFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74FF6EA327297107B81FF9FC08218F94 /* DefaultFillFormatter.swift */; };
 		A90A272F4B1735E0644FD2464064E428 /* LineScatterCandleRadarChartDataSetProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE70E6A38EFD6CC5B06E07C9B8C51DE /* LineScatterCandleRadarChartDataSetProtocol.swift */; };
@@ -177,47 +131,30 @@
 		AE29D92CF287E95326A50122F8279EE8 /* Charts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 64CDF688CF8AB9F834E7C349894B685F /* Charts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		AE3DA54A9DB44D03DF6609CCE1E028F6 /* Pods-LoopFollow-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 28609CC9D3828C150821F3AA18752A77 /* Pods-LoopFollow-dummy.m */; };
 		AED0A95039ECF3204009B8DE9DAE62CE /* FirstNonNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24CB775967538B3FB4C47212A2F8B948 /* FirstNonNil.swift */; };
-		AF4BD9FB7CC229682ED2E26F7E6106A7 /* PopoverSelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43F364E36A952C20EBF4684241A269EC /* PopoverSelectorRow.swift */; };
 		B0A7C2F3CAB5C031F93D81777FD5A421 /* CandleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78F904F74C2B50A8192A7167CAC3C05E /* CandleChartDataProvider.swift */; };
 		B2162A26B36709F6F1B6976DF1A65DAB /* DataRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E40805D1503067A2E679DBFB30BBB8C5 /* DataRenderer.swift */; };
-		B24FAE4A9C6BD92AD64EE7859C2A9D9A /* MultipleSelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5A708FABC6817F1F5703662646AD8A5 /* MultipleSelectorRow.swift */; };
 		B2DD7CF96035374C7AC80D88B8904691 /* ShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7614E1E025FCFFE4FAEA31D79ABD0661 /* ShapeRenderer.swift */; };
 		B4015BE1313094DACA3DBB86191C5030 /* CombinedHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ABCA6CDFA3950D0A999A692D99867D2 /* CombinedHighlighter.swift */; };
 		B4D7DBBE6B8329E0947FFC9D1721B3CD /* YAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = D35FFE6EE2BE8E73855DC66951E7AA12 /* YAxisRendererRadarChart.swift */; };
-		B5E04676C82AC7C36204AB782DD780B9 /* SliderRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0953166A991EECDD39429ABF7F7A9212 /* SliderRow.swift */; };
 		B6580C63B353D52672121417CD3E4DF9 /* LegendRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CC42ADFADC10F4104EF63EB5AAA16E1 /* LegendRenderer.swift */; };
 		B709B3F0FD7D89C78DE139C07924760B /* Highlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 910C2C8431806F8015BAADD54CFF96DC /* Highlighter.swift */; };
-		B88B7CAA00CEB3B5032091BFA45BD219 /* ButtonRowWithPresent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60C304388A3314E30D8620C11790DC5B /* ButtonRowWithPresent.swift */; };
 		BDFE5C038BFAEDE5843A3BE7B78DAB9B /* AnimatedViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB7554208627CE880C0922FFD835465C /* AnimatedViewPortJob.swift */; };
 		BE85BF81DBD61E106AE6168F19DBBF0A /* CandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F3F77E6983047F48C68D513994F9217 /* CandleChartData.swift */; };
 		BEE4705FCD33AD7CCB2B1C8C593CE13D /* DataApproximator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C12EA28BEC17D2657CB75BFAEAC0C7A /* DataApproximator.swift */; };
 		BF4F92B93CCB21881A32201D5283A39E /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7017CD37B02CFCAD0F28034D7D28355A /* BarChartRenderer.swift */; };
-		C11DBC286F46067EFC0E4C15FF014CC6 /* RuleRegExp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ABEC5837F666677B0816396BF6EDB41 /* RuleRegExp.swift */; };
 		C13FB2874A90207FF36E5D61F352A95B /* Stride.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A750E80653FD14B27F8579B9E00B94F /* Stride.swift */; };
-		C241A011154907D4A4B377DB529E9C9D /* DoublePickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC8B3414FF880FE6C38F41AB0DC76F5 /* DoublePickerRow.swift */; };
 		C2CBE67B4FDE638A3DEB5A444B075D28 /* ScatterChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0744A6F4A9EC646DAE57C8935BB5D5B /* ScatterChartData.swift */; };
 		C3CF1A177501EA2D297FDABC1E531C77 /* ChartDataEntryBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18F3AE2D43E5A05FCCE568A3DEC1D68F /* ChartDataEntryBase.swift */; };
 		C472373DFA73FC416CCDB97CFA586249 /* ChartAnimationEasing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E81B8B1A7437FAF56106A8F686AF40F /* ChartAnimationEasing.swift */; };
 		C66E82B3E5B66A711DD8F256171BE4B8 /* Rotate.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECD62CC8A6BE60A76674236FFF80DBAF /* Rotate.swift */; };
-		C6C91F0B055C43A0B6A6865AFDB7614E /* GenericMultipleSelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = F082AA646AB49C314004DBB19E3F3085 /* GenericMultipleSelectorRow.swift */; };
 		C7E4A381095F15F90606D7C157BD9ABA /* ChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73DBDE6ADB4EFCB0BEC6D4BEBE993C55 /* ChartUtils.swift */; };
-		C87A5CE74D4AF4B1180FA67B63CF7A5A /* ButtonRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAD950E015B2FC6DE72638E5978614FC /* ButtonRow.swift */; };
-		C959E50620A9AF66A128EE6249CCD68C /* Row.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7391F5AD340E2F5C60BC1905E0DDC412 /* Row.swift */; };
 		CA589FE7EC72C5BD7743D8EADBDB914E /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0055C3AB0AE0067E0AF50DA569843398 /* BarChartView.swift */; };
-		CC70380478EE7E1E404437B6AA51BA33 /* SwitchRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 064C06660526CDB34A90BC0F8952E907 /* SwitchRow.swift */; };
-		CE0E20A3203F862A375294551E8B8862 /* FieldRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC5DB7370FF5E560126694672372703 /* FieldRow.swift */; };
 		CE4052508D5568AC510602198FDDF212 /* Combinations.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC11923FC3EEE39D1E9BB7D730ABD68B /* Combinations.swift */; };
-		CF4332D8352284FA91A83CD4EF21DA8E /* PickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75774B6B12A8E05908EA4FAC95CB47BB /* PickerRow.swift */; };
 		CF491A4A998823F62438EFF79A37028E /* ViewPortHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51D54B32DD68706AD7AB243DE8165B8F /* ViewPortHandler.swift */; };
 		CF53CF4998B07E3B054A32F34598D911 /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55CFF79657B6FDE2B1BC8C2C101E4819 /* CombinedChartRenderer.swift */; };
-		D22FB0AF38A4FB41C149F5C606088E1E /* Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B206369E7794EE03CDB81B6454C835 /* Cell.swift */; };
 		D41B06FABC2611E44E4C8E39FC415E19 /* ShareClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 269AF5F8DD17D78A0DC4ADFF2FC6E161 /* ShareClient.swift */; };
 		D44078A1F1CDB70D6EE87689EE274CAD /* AnimatedMoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 550FC939A985EF1F598C47237FCEADD0 /* AnimatedMoveViewJob.swift */; };
-		D7F2FB7E382C1C653590BF2870F77C8C /* TriplePickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57F8AAAC0731CEF69400E06C9A733966 /* TriplePickerRow.swift */; };
 		D806EE791E0C1722A40410F0084F63E6 /* BarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 026F25159638B0615F69DBE2054DD74D /* BarChartDataEntry.swift */; };
-		D8DE47A06D3E4B45A6C42AF1DAA87CBE /* RuleRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49A72FD9D0222D44350927E3FDE48A3B /* RuleRange.swift */; };
-		D98E8FA7AB3231918519A8C6C5B998D7 /* Eureka-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 30D27A7845021043EFAEAE8DE5DEB9E0 /* Eureka-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		DA4D5827D6BB320D51945616E0E2B2D6 /* Section.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B7052BEAEC159AC4DB9C28AE87E88F /* Section.swift */; };
 		DB13171585A147FFDE19FED165897AD2 /* PieChartDataSetProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053D919370829DCF76BE4128B30656A0 /* PieChartDataSetProtocol.swift */; };
 		DC9F92CD3F1388C597428F67A8D931B7 /* Partition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BD660179AA5D052339B088934ECB658 /* Partition.swift */; };
 		DD062811D95B55D3C25F0FDE3008F558 /* RadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 948A283C104BDD9D9688A0E2D795698E /* RadarHighlighter.swift */; };
@@ -228,25 +165,19 @@
 		E0505857120DFFE9D41FE45D55406372 /* ComponentBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B8C70494C7C7B66D6F1FB0A3EE70381 /* ComponentBase.swift */; };
 		E0B8C1B3C25E624638B2C2FD105BAD35 /* YAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F8B684C281EB3348C147390CC832689 /* YAxisRenderer.swift */; };
 		E0C8CFE39BA0D706F759E929033C0091 /* DefaultValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C3473E42A5000F936DAB93D6009E6F9 /* DefaultValueFormatter.swift */; };
-		E1770D334AAD9C153792021A44FD6CA2 /* DecimalFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D81E86DC9A69302F26DBF96E59EF42A0 /* DecimalFormatter.swift */; };
 		E184578DB7A0DC4E3FE5C1AE680CB77C /* ShareClient-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D41E1543E1C48B54FFD88D04046B84EB /* ShareClient-dummy.m */; };
 		E2618C372D7762C1796CE24D6AAAFC37 /* Charts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B141C9B60C3C9033C8984CDD8092AF4 /* Charts-dummy.m */; };
 		E36428757F9C876042F5E93B2FF83F10 /* PieRadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E0778A4002F3ADC7C1B16EC33774A0A /* PieRadarHighlighter.swift */; };
-		E3D3815401288A32B309F2454204ABFA /* BaseRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9835CD66397846D129C53CB02CEA2199 /* BaseRow.swift */; };
 		E4465C942848B98723C8F3D642B92BC0 /* ScatterChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3AED254D55D17BB8EA5337BC6262FC1 /* ScatterChartDataProvider.swift */; };
 		E769F96699384D9B8E2E7D35D86438BC /* BarLineScatterCandleBubbleChartDataSetProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E38871A0A7CA272870A24C2EEBC9F2B8 /* BarLineScatterCandleBubbleChartDataSetProtocol.swift */; };
 		E887E039D78DBED7F592D9F4782FD30E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; };
 		E91ABF4FF1105B2C7E0C812E8AF4B7EE /* PieChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F278BBD4B126E05895AFDAB808E64C68 /* PieChartRenderer.swift */; };
 		E95EA2841D37DFBF3466B135E5230EE8 /* Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EF7405D232DFDC4008C8401DE983BCD /* Highlight.swift */; };
 		E97DAF36AF1DDA6607CCE6FFEF2A070F /* EitherSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF672D34AEB39D95AD9315C751AA09E1 /* EitherSequence.swift */; };
-		EA1F322A2BC1D842773115E8B60374CD /* DateInlineRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = D47493593728F91332014990AA8497CF /* DateInlineRow.swift */; };
 		EAED453972AC1583C649AB1A2B1E02E4 /* Fill.swift in Sources */ = {isa = PBXBuildFile; fileRef = B15B2590757F14DE05C07A427600E68A /* Fill.swift */; };
 		EBCA949CA3D0FC990102FA358E0E26C2 /* AdjacentPairs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F370D1C8ED64C66C14E6C1099B5E972 /* AdjacentPairs.swift */; };
-		EEA5878C3C5A22697B2429EAE6DFFB2B /* SelectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6116D5666C5AA3A405FA69AFC3E7817 /* SelectorViewController.swift */; };
 		EF96959C3049DAF932F792D19608F437 /* BubbleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = A21D1B75DCEF0D4F9B98A11E33C41EDB /* BubbleChartDataEntry.swift */; };
 		EFE503C8BD962191136CFAB1255DFFE1 /* MarkerImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C4AA57736F60FDBCF6AA4FA44E71682 /* MarkerImage.swift */; };
-		F2FF6C2BA26E1FBC0F603CCAA690E948 /* OptionsRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 066A470BC83019FF736A9F4E1F671E31 /* OptionsRow.swift */; };
-		F364336C552955B98128F87389D7F7F6 /* DateFieldRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B99954AAFDEFB38844275070432B078 /* DateFieldRow.swift */; };
 		F4FAC7F902EC4E73E672C6840BAD1ACE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; };
 		F8DDF36D6B4FF40D16F8D1F19DD11173 /* XAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA19E07D8FCAFF8056DDCD4180BD7604 /* XAxis.swift */; };
 		F8EF071EA2E3480E0895B783AA777028 /* RadarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0187F74F0F2E1ADE4F205C203F88DE85 /* RadarChartView.swift */; };
@@ -254,7 +185,6 @@
 		FC1FAF373A9EA9E5B476E3A30C226C56 /* AxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7EBFD830ED3E0392581253C75C715F /* AxisRenderer.swift */; };
 		FD8BFF36768B8F569E269ED06BD10557 /* Platform+Gestures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09C552536D704E376A3AB7010EEA316A /* Platform+Gestures.swift */; };
 		FEAE72583E6CFCD21D3AF7406D7C3A22 /* DataApproximator+N.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC49C8B5D37DFB82AA08BC6BC19AD0C5 /* DataApproximator+N.swift */; };
-		FEBB964F0D174EF5001425DB6FA36B79 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; };
 		FF363E21E3A10ADC15B24525D6E6F3E9 /* XShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D58E677C70EAC3CA7313DCFEC5A60D81 /* XShapeRenderer.swift */; };
 /* End PBXBuildFile section */
 
@@ -280,13 +210,6 @@
 			remoteGlobalIDString = 32507FDB9BAD6EF17DCB14A888ECA5D9;
 			remoteInfo = ShareClient;
 		};
-		C415689D09364110E409F97C1313D4E9 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 88BE8BE7A2FE6CED4193CCD8FF3CBEF7;
-			remoteInfo = Eureka;
-		};
 		D1CEF5E80FC13999B22AC6EAF15E629A /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -302,27 +225,19 @@
 		0187F74F0F2E1ADE4F205C203F88DE85 /* RadarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartView.swift; path = Source/Charts/Charts/RadarChartView.swift; sourceTree = "<group>"; };
 		026F25159638B0615F69DBE2054DD74D /* BarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataEntry.swift; sourceTree = "<group>"; };
 		02BD1A15A0561B886A937317473FCF4D /* ScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift; sourceTree = "<group>"; };
-		03BC64D825C8295FFA3E396F2B8D254C /* SegmentedRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SegmentedRow.swift; path = Source/Rows/SegmentedRow.swift; sourceTree = "<group>"; };
 		04CA046D8066D2043078135381049F0A /* ChartColorTemplates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartColorTemplates.swift; path = Source/Charts/Utils/ChartColorTemplates.swift; sourceTree = "<group>"; };
 		053D919370829DCF76BE4128B30656A0 /* PieChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/PieChartDataSetProtocol.swift; sourceTree = "<group>"; };
-		064C06660526CDB34A90BC0F8952E907 /* SwitchRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwitchRow.swift; path = Source/Rows/SwitchRow.swift; sourceTree = "<group>"; };
 		0651C9C3E1F7212ACFC0DF4E3E00323D /* MoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoveViewJob.swift; path = Source/Charts/Jobs/MoveViewJob.swift; sourceTree = "<group>"; };
-		066A470BC83019FF736A9F4E1F671E31 /* OptionsRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OptionsRow.swift; path = Source/Rows/Common/OptionsRow.swift; sourceTree = "<group>"; };
-		082977F3777A7D434AB35C357B487F83 /* Eureka */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Eureka; path = Eureka.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		08518D8C01A8EA542E198BA722EA03C9 /* ChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntry.swift; sourceTree = "<group>"; };
-		0953166A991EECDD39429ABF7F7A9212 /* SliderRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SliderRow.swift; path = Source/Rows/SliderRow.swift; sourceTree = "<group>"; };
 		09C552536D704E376A3AB7010EEA316A /* Platform+Gestures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Gestures.swift"; path = "Source/Charts/Utils/Platform+Gestures.swift"; sourceTree = "<group>"; };
-		0ACC6C7F798E27DF68E09694E5645ECF /* TextAreaRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextAreaRow.swift; path = Source/Rows/TextAreaRow.swift; sourceTree = "<group>"; };
 		0E12C56B79F0D3D4E449C70724B3B0D2 /* LineChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartData.swift; path = Source/Charts/Data/Implementations/Standard/LineChartData.swift; sourceTree = "<group>"; };
 		10E2D718053926F7C362A0242C707398 /* ChevronDownShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronDownShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift; sourceTree = "<group>"; };
 		127D620D9103C646821EE1A9FFDC6AB4 /* TransformerHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformerHorizontalBarChart.swift; path = Source/Charts/Utils/TransformerHorizontalBarChart.swift; sourceTree = "<group>"; };
-		1363CD1C407802F39155303528BAB434 /* InlineRowType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InlineRowType.swift; path = Source/Core/InlineRowType.swift; sourceTree = "<group>"; };
 		1572E89B2070E8BDB7D3E2CBF51DE672 /* Pods-LoopFollow-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LoopFollow-acknowledgements.plist"; sourceTree = "<group>"; };
 		162C2F9A6894149851210E55E6188A43 /* Transformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transformer.swift; path = Source/Charts/Utils/Transformer.swift; sourceTree = "<group>"; };
 		16B9EB6993E134E20A22EFB3F975FAAB /* CandleStickChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartView.swift; path = Source/Charts/Charts/CandleStickChartView.swift; sourceTree = "<group>"; };
 		16D6C652182636AC8246D4751AEC2B19 /* Pods-LoopFollow-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LoopFollow-Info.plist"; sourceTree = "<group>"; };
 		1714C5DC04BE72E509DC4E7686AA857F /* CandleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift; sourceTree = "<group>"; };
-		17D1BC6FE5DDEE26D858B939E9B4E82C /* CheckRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CheckRow.swift; path = Source/Rows/CheckRow.swift; sourceTree = "<group>"; };
 		185455CC1A16D809E6CD52CA7ED7C218 /* ShareClient-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ShareClient-umbrella.h"; sourceTree = "<group>"; };
 		18F3AE2D43E5A05FCCE568A3DEC1D68F /* ChartDataEntryBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntryBase.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift; sourceTree = "<group>"; };
 		194A8936BCA6DD2C7CC0C0003C0F27BB /* DefaultAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultAxisValueFormatter.swift; path = Source/Charts/Formatters/DefaultAxisValueFormatter.swift; sourceTree = "<group>"; };
@@ -333,13 +248,10 @@
 		1D9B0CD14B51E9BB24006EA87AD5758F /* BubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BubbleChartDataProvider.swift; sourceTree = "<group>"; };
 		1EE2943C8EAB9AD013BB0D24A3E135AF /* ChartLimitLine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLimitLine.swift; path = Source/Charts/Components/ChartLimitLine.swift; sourceTree = "<group>"; };
 		1F1D0991883487B252954C6AD93262DD /* BubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartData.swift; sourceTree = "<group>"; };
-		1FA087B627BA46F392CACF1BD142B7AA /* DateInlineFieldRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateInlineFieldRow.swift; path = Source/Rows/Common/DateInlineFieldRow.swift; sourceTree = "<group>"; };
 		22D8A4241B43E6A486B3ABFE7CE176D2 /* Platform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.swift; path = Source/Charts/Utils/Platform.swift; sourceTree = "<group>"; };
 		24CB775967538B3FB4C47212A2F8B948 /* FirstNonNil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FirstNonNil.swift; path = Sources/Algorithms/FirstNonNil.swift; sourceTree = "<group>"; };
 		25F46CE8645206F6372CC648F2859C38 /* SwiftAlgorithms.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftAlgorithms.modulemap; sourceTree = "<group>"; };
-		2646204CB36CF4EF6057C2B31604DCA0 /* Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helpers.swift; path = Source/Core/Helpers.swift; sourceTree = "<group>"; };
 		269AF5F8DD17D78A0DC4ADFF2FC6E161 /* ShareClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShareClient.swift; path = ShareClient/ShareClient.swift; sourceTree = "<group>"; };
-		2748ACE938277243245CED76CF901E32 /* RowProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowProtocols.swift; path = Source/Core/RowProtocols.swift; sourceTree = "<group>"; };
 		28609CC9D3828C150821F3AA18752A77 /* Pods-LoopFollow-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-LoopFollow-dummy.m"; sourceTree = "<group>"; };
 		29D95C88FFDCD29BA7600CB351EEFE0D /* Charts.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Charts.release.xcconfig; sourceTree = "<group>"; };
 		2A750E80653FD14B27F8579B9E00B94F /* Stride.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stride.swift; path = Sources/Algorithms/Stride.swift; sourceTree = "<group>"; };
@@ -350,24 +262,16 @@
 		2D4695EDCBBD2F14A96C466589AC26B4 /* Permutations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Permutations.swift; path = Sources/Algorithms/Permutations.swift; sourceTree = "<group>"; };
 		2E2A8B52E2E9746619F1216001D0241C /* Platform+Touch Handling.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Touch Handling.swift"; path = "Source/Charts/Utils/Platform+Touch Handling.swift"; sourceTree = "<group>"; };
 		2E525EC535F76BFC47EF4F3E62BA3654 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Source/Charts/Components/Description.swift; sourceTree = "<group>"; };
-		2E5D627D1ADFD545DE4D7CE2E37A83B5 /* Eureka.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Eureka.release.xcconfig; sourceTree = "<group>"; };
 		2EF7405D232DFDC4008C8401DE983BCD /* Highlight.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Highlight.swift; path = Source/Charts/Highlight/Highlight.swift; sourceTree = "<group>"; };
-		30D27A7845021043EFAEAE8DE5DEB9E0 /* Eureka-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Eureka-umbrella.h"; sourceTree = "<group>"; };
-		31D826433F23D509AB5013DA7F1D59F6 /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Source/Core/Operators.swift; sourceTree = "<group>"; };
 		323A7094F3358B4E346E033FE9AAF79E /* RadarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift; sourceTree = "<group>"; };
 		347B2727DAB3007AE54E938A6EDAC926 /* Marker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Marker.swift; path = Source/Charts/Components/Marker.swift; sourceTree = "<group>"; };
 		3533AA36E9AC21252154C8D96477D1DE /* ChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataSet.swift; sourceTree = "<group>"; };
 		35C07C88A101976F7D43BE7BE4673A37 /* LineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift; sourceTree = "<group>"; };
 		35CE8AE4FB4FAA915248FFA91AE62338 /* Split.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Split.swift; path = Sources/Algorithms/Split.swift; sourceTree = "<group>"; };
 		35D58369D6A0FF961EC41F36B0B7D29C /* Range.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Range.swift; path = Source/Charts/Highlight/Range.swift; sourceTree = "<group>"; };
-		35F5C5661A73C8D457BFCAA43A272924 /* Eureka.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Eureka.debug.xcconfig; sourceTree = "<group>"; };
 		372DF5E1B5F170A496FC14377B49E5BA /* ShareClient-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ShareClient-Info.plist"; sourceTree = "<group>"; };
-		376D2C21D79D7A27AA844F0E178BC43B /* RuleEqualsToRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleEqualsToRow.swift; path = Source/Validations/RuleEqualsToRow.swift; sourceTree = "<group>"; };
 		3897C4A6B7F162E479564409C5CEFB13 /* Intersperse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Intersperse.swift; path = Sources/Algorithms/Intersperse.swift; sourceTree = "<group>"; };
-		39347FDF57F777C67EA286FDF94A50A0 /* AlertRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlertRow.swift; path = Source/Rows/AlertRow.swift; sourceTree = "<group>"; };
-		3AF612F2F2ED80B5AA7DA7388FF9D3A9 /* SelectableRowType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectableRowType.swift; path = Source/Core/SelectableRowType.swift; sourceTree = "<group>"; };
 		3B26B283F8811F230A0E0B4FDD225F42 /* ScatterChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartView.swift; path = Source/Charts/Charts/ScatterChartView.swift; sourceTree = "<group>"; };
-		3B501803A2305DE95A984916552E769A /* FieldsRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FieldsRow.swift; path = Source/Rows/FieldsRow.swift; sourceTree = "<group>"; };
 		3BD660179AA5D052339B088934ECB658 /* Partition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Partition.swift; path = Sources/Algorithms/Partition.swift; sourceTree = "<group>"; };
 		3C3473E42A5000F936DAB93D6009E6F9 /* DefaultValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultValueFormatter.swift; path = Source/Charts/Formatters/DefaultValueFormatter.swift; sourceTree = "<group>"; };
 		3C5AFD1B5788F5477102C8DD0F7EAF50 /* BarLineScatterCandleBubbleRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleRenderer.swift; path = Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift; sourceTree = "<group>"; };
@@ -378,54 +282,35 @@
 		421EDDDD69FD4DEF3F201DC7F4EDD885 /* FillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FillFormatter.swift; path = Source/Charts/Formatters/FillFormatter.swift; sourceTree = "<group>"; };
 		42CC27FD093CC4B3D0F27B928F7744AF /* ShareClient.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ShareClient.debug.xcconfig; sourceTree = "<group>"; };
 		42EF3C460FF3BA09B964B4B078B2FFDC /* BarChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataProvider.swift; path = Source/Charts/Interfaces/BarChartDataProvider.swift; sourceTree = "<group>"; };
-		43F364E36A952C20EBF4684241A269EC /* PopoverSelectorRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopoverSelectorRow.swift; path = Source/Rows/PopoverSelectorRow.swift; sourceTree = "<group>"; };
-		445973D461C2CC4957A3BB54B5427B6F /* RuleClosure.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleClosure.swift; path = Source/Validations/RuleClosure.swift; sourceTree = "<group>"; };
 		44A177D8AC2CE9A04AEC62303E1C012C /* SwiftAlgorithms-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftAlgorithms-dummy.m"; sourceTree = "<group>"; };
 		44CEB1F80C1D008B41FFA0F59DCBBD9E /* SwiftAlgorithms.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftAlgorithms.release.xcconfig; sourceTree = "<group>"; };
-		45C6E3F0D68C882F76B85AE0C2AE35EE /* SwipeActions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeActions.swift; path = Source/Core/SwipeActions.swift; sourceTree = "<group>"; };
-		463B1FFE93072EEE11F06544067346A2 /* ActionSheetRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ActionSheetRow.swift; path = Source/Rows/ActionSheetRow.swift; sourceTree = "<group>"; };
-		47135570F8D5A9E934D001C53B4C0A79 /* Eureka-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Eureka-dummy.m"; sourceTree = "<group>"; };
-		47B7052BEAEC159AC4DB9C28AE87E88F /* Section.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Section.swift; path = Source/Core/Section.swift; sourceTree = "<group>"; };
 		48FC9D5D68CA4D70155A8959C1179E28 /* XAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/XAxisRendererHorizontalBarChart.swift; sourceTree = "<group>"; };
-		49A72FD9D0222D44350927E3FDE48A3B /* RuleRange.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleRange.swift; path = Source/Validations/RuleRange.swift; sourceTree = "<group>"; };
 		49B4B217AE01ABE5E9A1B3FEE24ACD3E /* CombinedChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartView.swift; path = Source/Charts/Charts/CombinedChartView.swift; sourceTree = "<group>"; };
-		4ABEC5837F666677B0816396BF6EDB41 /* RuleRegExp.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleRegExp.swift; path = Source/Validations/RuleRegExp.swift; sourceTree = "<group>"; };
 		4AE70E6A38EFD6CC5B06E07C9B8C51DE /* LineScatterCandleRadarChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/LineScatterCandleRadarChartDataSetProtocol.swift; sourceTree = "<group>"; };
-		4BACF8B4E5759037E1CC8A6423FF7B67 /* Pods-LoopFollow */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-LoopFollow"; path = Pods_LoopFollow.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		4DA7213CB1ED6CD5B946A3A1EA36CFE3 /* AlertOptionsRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlertOptionsRow.swift; path = Source/Rows/Common/AlertOptionsRow.swift; sourceTree = "<group>"; };
+		4BACF8B4E5759037E1CC8A6423FF7B67 /* Pods_LoopFollow.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LoopFollow.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		4F370D1C8ED64C66C14E6C1099B5E972 /* AdjacentPairs.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdjacentPairs.swift; path = Sources/Algorithms/AdjacentPairs.swift; sourceTree = "<group>"; };
 		4F619C3ACAC8BB97F4CBF04C055CCB24 /* AnimatedZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedZoomViewJob.swift; path = Source/Charts/Jobs/AnimatedZoomViewJob.swift; sourceTree = "<group>"; };
 		4FDEC8B77727E37AE06D95B16E7B4E24 /* RadarChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/RadarChartDataSetProtocol.swift; sourceTree = "<group>"; };
-		50AFF7F977813F95AC11C077C50CDEF6 /* ListCheckRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ListCheckRow.swift; path = Source/Rows/SelectableRows/ListCheckRow.swift; sourceTree = "<group>"; };
 		51D54B32DD68706AD7AB243DE8165B8F /* ViewPortHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortHandler.swift; path = Source/Charts/Utils/ViewPortHandler.swift; sourceTree = "<group>"; };
 		524C2C5AB08DAC0B62469BC9BAD2BBFC /* LineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift; sourceTree = "<group>"; };
 		52FC9F1F7847D290D9CD7AB6024341FF /* XAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererRadarChart.swift; path = Source/Charts/Renderers/XAxisRendererRadarChart.swift; sourceTree = "<group>"; };
 		536232CFD052147F39AE8D2636847BB8 /* SwiftAlgorithms-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftAlgorithms-prefix.pch"; sourceTree = "<group>"; };
-		54DF8106B99B7AAD32343B0FCA61D868 /* HeaderFooterView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HeaderFooterView.swift; path = Source/Core/HeaderFooterView.swift; sourceTree = "<group>"; };
 		550FC939A985EF1F598C47237FCEADD0 /* AnimatedMoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedMoveViewJob.swift; path = Source/Charts/Jobs/AnimatedMoveViewJob.swift; sourceTree = "<group>"; };
 		55CFF79657B6FDE2B1BC8C2C101E4819 /* CombinedChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartRenderer.swift; path = Source/Charts/Renderers/CombinedChartRenderer.swift; sourceTree = "<group>"; };
-		57F8AAAC0731CEF69400E06C9A733966 /* TriplePickerRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriplePickerRow.swift; path = Source/Rows/TriplePickerRow.swift; sourceTree = "<group>"; };
 		593C5B76ABCE8F5324D1A34783FACC5B /* Chunked.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Chunked.swift; path = Sources/Algorithms/Chunked.swift; sourceTree = "<group>"; };
 		5B90B940BBEE17272D0FA9602CB3F1E1 /* BarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift; sourceTree = "<group>"; };
 		5C4AA57736F60FDBCF6AA4FA44E71682 /* MarkerImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerImage.swift; path = Source/Charts/Components/MarkerImage.swift; sourceTree = "<group>"; };
 		5CAB9310175D2D05534B5FAA40BDABB8 /* BarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift; sourceTree = "<group>"; };
 		5D152598E6F7AD2209244F3255EBE2B3 /* Windows.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Windows.swift; path = Sources/Algorithms/Windows.swift; sourceTree = "<group>"; };
-		5E05949DEB432C9594F64A3B0BEB4BDD /* StepperRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StepperRow.swift; path = Source/Rows/StepperRow.swift; sourceTree = "<group>"; };
 		5E0778A4002F3ADC7C1B16EC33774A0A /* PieRadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarHighlighter.swift; path = Source/Charts/Highlight/PieRadarHighlighter.swift; sourceTree = "<group>"; };
-		5F117C19DCF36AF0FB2648E2D25EA325 /* PushRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PushRow.swift; path = Source/Rows/PushRow.swift; sourceTree = "<group>"; };
 		60B7899F2AE639742DDEE13C16276275 /* ScatterChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/ScatterChartDataSetProtocol.swift; sourceTree = "<group>"; };
-		60C304388A3314E30D8620C11790DC5B /* ButtonRowWithPresent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ButtonRowWithPresent.swift; path = Source/Rows/ButtonRowWithPresent.swift; sourceTree = "<group>"; };
 		6124C7D917D4C7DC28F7503EBCD596D7 /* Renderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Renderer.swift; path = Source/Charts/Renderers/Renderer.swift; sourceTree = "<group>"; };
-		6207FB4695D962F2B6DF8DD11635A620 /* PickerInputRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerInputRow.swift; path = Source/Rows/PickerInputRow.swift; sourceTree = "<group>"; };
 		631260726B8649201DF3262C04AE423B /* RadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift; sourceTree = "<group>"; };
 		640DB089E7BC7FA9C4C5D67D1E58393A /* BarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarChartData.swift; sourceTree = "<group>"; };
-		649C6079A86B7348DD9A91E50537DC34 /* Core.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Core.swift; path = Source/Core/Core.swift; sourceTree = "<group>"; };
 		64CDF688CF8AB9F834E7C349894B685F /* Charts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Charts-umbrella.h"; sourceTree = "<group>"; };
-		6B99954AAFDEFB38844275070432B078 /* DateFieldRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateFieldRow.swift; path = Source/Rows/Common/DateFieldRow.swift; sourceTree = "<group>"; };
 		6C90F7AE53155C1804331C13F95834B2 /* MarkerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerView.swift; path = Source/Charts/Components/MarkerView.swift; sourceTree = "<group>"; };
 		6CC42ADFADC10F4104EF63EB5AAA16E1 /* LegendRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendRenderer.swift; path = Source/Charts/Renderers/LegendRenderer.swift; sourceTree = "<group>"; };
 		6D4A498BBC8E4513D82F78F75036A171 /* LineRadarChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/LineRadarChartDataSetProtocol.swift; sourceTree = "<group>"; };
-		6DB609C6137ED4B1E648CCC3F5325177 /* RuleLength.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleLength.swift; path = Source/Validations/RuleLength.swift; sourceTree = "<group>"; };
 		6E1E5F4713322837D7506143802ED222 /* PieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataSet.swift; sourceTree = "<group>"; };
 		6E3651675689D3E922771781C1C7EBF4 /* ViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortJob.swift; path = Source/Charts/Jobs/ViewPortJob.swift; sourceTree = "<group>"; };
 		6F86CBC5DB9A328A34A07A52C1CD5605 /* LineChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataProvider.swift; path = Source/Charts/Interfaces/LineChartDataProvider.swift; sourceTree = "<group>"; };
@@ -433,20 +318,15 @@
 		7017CD37B02CFCAD0F28034D7D28355A /* BarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartRenderer.swift; path = Source/Charts/Renderers/BarChartRenderer.swift; sourceTree = "<group>"; };
 		719A12B42A88A75148E0A9C8D6C618F0 /* LegendEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendEntry.swift; path = Source/Charts/Components/LegendEntry.swift; sourceTree = "<group>"; };
 		7210F7399765A3931B62D5370EF1B4FC /* CombinedChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartData.swift; path = Source/Charts/Data/Implementations/Standard/CombinedChartData.swift; sourceTree = "<group>"; };
-		7391F5AD340E2F5C60BC1905E0DDC412 /* Row.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Row.swift; path = Source/Core/Row.swift; sourceTree = "<group>"; };
 		73DBDE6ADB4EFCB0BEC6D4BEBE993C55 /* ChartUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtils.swift; path = Source/Charts/Utils/ChartUtils.swift; sourceTree = "<group>"; };
-		74854C0CAA3FF3AAE613D06C13CA0511 /* DoublePickerInputRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DoublePickerInputRow.swift; path = Source/Rows/DoublePickerInputRow.swift; sourceTree = "<group>"; };
 		74FF6EA327297107B81FF9FC08218F94 /* DefaultFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultFillFormatter.swift; path = Source/Charts/Formatters/DefaultFillFormatter.swift; sourceTree = "<group>"; };
-		75774B6B12A8E05908EA4FAC95CB47BB /* PickerRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerRow.swift; path = Source/Rows/PickerRow.swift; sourceTree = "<group>"; };
 		7614E1E025FCFFE4FAEA31D79ABD0661 /* ShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ShapeRenderer.swift; sourceTree = "<group>"; };
 		7634384D32BB7CAD35606CF6E2A6DC01 /* Cycle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cycle.swift; path = Sources/Algorithms/Cycle.swift; sourceTree = "<group>"; };
 		7724018046776D153BF2F519E62ED100 /* Platform+Accessibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Accessibility.swift"; path = "Source/Charts/Utils/Platform+Accessibility.swift"; sourceTree = "<group>"; };
 		77C5C283029332E30F3E763EA8969893 /* BarChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/BarChartDataSetProtocol.swift; sourceTree = "<group>"; };
-		77F3AB1C7064C79A86A62BE1BBB6068C /* DateRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateRow.swift; path = Source/Rows/DateRow.swift; sourceTree = "<group>"; };
 		78F904F74C2B50A8192A7167CAC3C05E /* CandleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataProvider.swift; path = Source/Charts/Interfaces/CandleChartDataProvider.swift; sourceTree = "<group>"; };
 		791893088C1075827778DDAFED99EF63 /* LineChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartRenderer.swift; path = Source/Charts/Renderers/LineChartRenderer.swift; sourceTree = "<group>"; };
 		7ABCA6CDFA3950D0A999A692D99867D2 /* CombinedHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedHighlighter.swift; path = Source/Charts/Highlight/CombinedHighlighter.swift; sourceTree = "<group>"; };
-		7C040C5E0351A26CDFA6243686064CC2 /* SelectableSection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectableSection.swift; path = Source/Core/SelectableSection.swift; sourceTree = "<group>"; };
 		7C7647DE512322E9172332E77B1A4DEA /* LineScatterCandleRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarRenderer.swift; path = Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift; sourceTree = "<group>"; };
 		7E41188828C3ADE7A96C4DA6ED1CCDA2 /* Pods-LoopFollow-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-LoopFollow-umbrella.h"; sourceTree = "<group>"; };
 		7EC4B9836E8A2EDD714B8642902033B4 /* BubbleChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartRenderer.swift; path = Source/Charts/Renderers/BubbleChartRenderer.swift; sourceTree = "<group>"; };
@@ -457,41 +337,31 @@
 		85FBB9A8A3775D305F8D23740840158D /* PieChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartData.swift; path = Source/Charts/Data/Implementations/Standard/PieChartData.swift; sourceTree = "<group>"; };
 		896D7BB34CDE275E92DC01AC1F533F26 /* HorizontalBarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarHighlighter.swift; path = Source/Charts/Highlight/HorizontalBarHighlighter.swift; sourceTree = "<group>"; };
 		8A34EC75AF41BCC80FDC54C5AB3DC008 /* Chain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Chain.swift; path = Sources/Algorithms/Chain.swift; sourceTree = "<group>"; };
-		8AB5F5FEADDDFDB8B4D1F3BFE449F81E /* RowType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowType.swift; path = Source/Core/RowType.swift; sourceTree = "<group>"; };
 		8B8C70494C7C7B66D6F1FB0A3EE70381 /* ComponentBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComponentBase.swift; path = Source/Charts/Components/ComponentBase.swift; sourceTree = "<group>"; };
 		8D2868AF0526000F8348B80A354EEF4B /* BarLineChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineChartViewBase.swift; path = Source/Charts/Charts/BarLineChartViewBase.swift; sourceTree = "<group>"; };
 		8D7BD095AE41ABB08964C328CA70F842 /* ChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartData.swift; path = Source/Charts/Data/Implementations/Standard/ChartData.swift; sourceTree = "<group>"; };
 		910799424A3C8A57366C4CE76BE79683 /* ChevronUpShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronUpShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift; sourceTree = "<group>"; };
 		910C2C8431806F8015BAADD54CFF96DC /* Highlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Highlighter.swift; path = Source/Charts/Highlight/Highlighter.swift; sourceTree = "<group>"; };
-		914C75C3E73448BCC86DF693AD52CAF8 /* DatePickerRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatePickerRow.swift; path = Source/Rows/DatePickerRow.swift; sourceTree = "<group>"; };
-		91757002F52622DC87D0A1967FE2900E /* TriplePickerInputRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriplePickerInputRow.swift; path = Source/Rows/TriplePickerInputRow.swift; sourceTree = "<group>"; };
 		9222FB7877363AAC2E66F4E9BD6BE22F /* TriangleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriangleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift; sourceTree = "<group>"; };
 		939E4F680A1A71C7BFC00F9917F3E5EB /* MinMax.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MinMax.swift; path = Sources/Algorithms/MinMax.swift; sourceTree = "<group>"; };
 		948A283C104BDD9D9688A0E2D795698E /* RadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarHighlighter.swift; path = Source/Charts/Highlight/RadarHighlighter.swift; sourceTree = "<group>"; };
 		97C19D311E35002501E760D893F35E2F /* BubbleChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/BubbleChartDataSetProtocol.swift; sourceTree = "<group>"; };
-		9835CD66397846D129C53CB02CEA2199 /* BaseRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseRow.swift; path = Source/Core/BaseRow.swift; sourceTree = "<group>"; };
 		98BFFBB31523D438EF5F22D84F734782 /* Charts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Charts.modulemap; sourceTree = "<group>"; };
 		99770C7A6099A970C34D7824A7CE280D /* Unique.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Unique.swift; path = Sources/Algorithms/Unique.swift; sourceTree = "<group>"; };
 		9B7EBBA8C350C40C7F423CDD638EDB2E /* SwiftAlgorithms-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftAlgorithms-umbrella.h"; sourceTree = "<group>"; };
 		9C00C3496A26A3B8ED45E73F3E3AFDAC /* BarLineScatterCandleBubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift; sourceTree = "<group>"; };
 		9D18390EFF0AD4A6E0E073DD78EC6A8A /* ChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/ChartDataSetProtocol.swift; sourceTree = "<group>"; };
-		9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
-		9DAD47DCABD4ECD1C9DFFEAA022A9E17 /* SelectorRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectorRow.swift; path = Source/Rows/Common/SelectorRow.swift; sourceTree = "<group>"; };
+		9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
 		9E41D7AE4F0AB44736E2E49B07F83AC6 /* CandleChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/CandleChartDataSetProtocol.swift; sourceTree = "<group>"; };
 		9F21D683A3D7551D0D6ED48F9BCBDDCB /* BubbleChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartView.swift; path = Source/Charts/Charts/BubbleChartView.swift; sourceTree = "<group>"; };
 		9F3F77E6983047F48C68D513994F9217 /* CandleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartData.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartData.swift; sourceTree = "<group>"; };
 		A0878FA8411033349498923D4630B956 /* Pods-LoopFollow-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-LoopFollow-frameworks.sh"; sourceTree = "<group>"; };
-		A15229B55953AF8036FBE93E658A18C9 /* PickerInlineRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerInlineRow.swift; path = Source/Rows/PickerInlineRow.swift; sourceTree = "<group>"; };
-		A1C1B977ED8804E8AEEC884E7359EE58 /* Charts */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Charts; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		A1C1B977ED8804E8AEEC884E7359EE58 /* Charts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		A21D1B75DCEF0D4F9B98A11E33C41EDB /* BubbleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataEntry.swift; sourceTree = "<group>"; };
-		A2DF6A6FC9E680841A26786E9267590E /* SelectorAlertController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectorAlertController.swift; path = Source/Rows/Controllers/SelectorAlertController.swift; sourceTree = "<group>"; };
 		A46A27661B10DDD04786AD58706C55BC /* PieRadarChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarChartViewBase.swift; path = Source/Charts/Charts/PieRadarChartViewBase.swift; sourceTree = "<group>"; };
 		A5822CA2A05671BAA9BC5BD4A3BA5D6B /* ShareClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ShareClient.h; path = ShareClient/ShareClient.h; sourceTree = "<group>"; };
-		A5833C2A8E049B2690A7651CB63B183C /* RowControllerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowControllerType.swift; path = Source/Core/RowControllerType.swift; sourceTree = "<group>"; };
 		A7ACE4DAB3C5C84A671AFE0A24BC32E8 /* ValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueFormatter.swift; path = Source/Charts/Formatters/ValueFormatter.swift; sourceTree = "<group>"; };
-		A7B8E73E6E0A1CA1E6E26B307989E3F9 /* Protocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protocols.swift; path = Source/Rows/Common/Protocols.swift; sourceTree = "<group>"; };
 		A7FC29B40706B2526531F041CD6E5F37 /* ChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewBase.swift; path = Source/Charts/Charts/ChartViewBase.swift; sourceTree = "<group>"; };
-		AA24EB386C74479E70533D8F03191FED /* PresenterRowType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PresenterRowType.swift; path = Source/Core/PresenterRowType.swift; sourceTree = "<group>"; };
 		AAAB281721B2A421266EF830D312BC5A /* Reductions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reductions.swift; path = Sources/Algorithms/Reductions.swift; sourceTree = "<group>"; };
 		AB44185A42C56CCC7B7F24D8A4259044 /* BarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarHighlighter.swift; path = Source/Charts/Highlight/BarHighlighter.swift; sourceTree = "<group>"; };
 		AB5301EE4DDA3C7B5DF0C20E0BC9B49E /* SwiftAlgorithms-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftAlgorithms-Info.plist"; sourceTree = "<group>"; };
@@ -501,44 +371,30 @@
 		B9A488FE97E31BCF19AE78B98C18EE81 /* ChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartHighlighter.swift; path = Source/Charts/Highlight/ChartHighlighter.swift; sourceTree = "<group>"; };
 		BC11923FC3EEE39D1E9BB7D730ABD68B /* Combinations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combinations.swift; path = Sources/Algorithms/Combinations.swift; sourceTree = "<group>"; };
 		BE6D57171DBF58C479650D72C1FE7CA4 /* Legend.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Legend.swift; path = Source/Charts/Components/Legend.swift; sourceTree = "<group>"; };
-		BFC8B3414FF880FE6C38F41AB0DC76F5 /* DoublePickerRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DoublePickerRow.swift; path = Source/Rows/DoublePickerRow.swift; sourceTree = "<group>"; };
-		C0351341FCAFDAA74F7778AF04C9EBE3 /* Form.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Form.swift; path = Source/Core/Form.swift; sourceTree = "<group>"; };
-		C2465E4C7B40A2D725278AEE6113E535 /* ShareClient */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ShareClient; path = ShareClient.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		C2465E4C7B40A2D725278AEE6113E535 /* ShareClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ShareClient.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		C51F17D0D2858BA593E783811A2CF7E6 /* RadarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartData.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartData.swift; sourceTree = "<group>"; };
-		C6116D5666C5AA3A405FA69AFC3E7817 /* SelectorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectorViewController.swift; path = Source/Rows/Controllers/SelectorViewController.swift; sourceTree = "<group>"; };
 		C72D375E25E043A018C9D9E87EF64256 /* Suffix.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Suffix.swift; path = Sources/Algorithms/Suffix.swift; sourceTree = "<group>"; };
-		C8B206369E7794EE03CDB81B6454C835 /* Cell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cell.swift; path = Source/Core/Cell.swift; sourceTree = "<group>"; };
 		C8FE53DE5C6214CB9D501CF937A4A88A /* YAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxis.swift; path = Source/Charts/Components/YAxis.swift; sourceTree = "<group>"; };
-		C90FF4B5002FD90F9794D8A196F3BA1A /* Eureka-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Eureka-prefix.pch"; sourceTree = "<group>"; };
 		C97D67CE26870DFAA8AFE096DDF8F6CF /* PieHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieHighlighter.swift; path = Source/Charts/Highlight/PieHighlighter.swift; sourceTree = "<group>"; };
 		C9A7AF5397F6039307E067E746BEA9DC /* ShareClient.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ShareClient.modulemap; sourceTree = "<group>"; };
 		CC49C8B5D37DFB82AA08BC6BC19AD0C5 /* DataApproximator+N.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DataApproximator+N.swift"; path = "Source/Charts/Filters/DataApproximator+N.swift"; sourceTree = "<group>"; };
-		CDC5DB7370FF5E560126694672372703 /* FieldRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FieldRow.swift; path = Source/Rows/Common/FieldRow.swift; sourceTree = "<group>"; };
 		CE0ACEEB9003A6780541B487AD7AD20F /* Platform+Color.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Color.swift"; path = "Source/Charts/Utils/Platform+Color.swift"; sourceTree = "<group>"; };
 		CF0AC8618DB750D79CB08822A30BEEB0 /* IndexAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IndexAxisValueFormatter.swift; path = Source/Charts/Formatters/IndexAxisValueFormatter.swift; sourceTree = "<group>"; };
 		CF58BE2BB556CCFFD3F153CD246BB3B2 /* CandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataSet.swift; sourceTree = "<group>"; };
 		CFA8A221F0F4BA00670608D2F68AFBC2 /* CircleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CircleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift; sourceTree = "<group>"; };
 		D024D84271BC3B8711840FD1825F8191 /* RadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartRenderer.swift; path = Source/Charts/Renderers/RadarChartRenderer.swift; sourceTree = "<group>"; };
-		D092B0076BB7443BDAA65A26F2641A30 /* Eureka-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Eureka-Info.plist"; sourceTree = "<group>"; };
 		D14145B7AD1FC1EC76D1DB43D3100AC2 /* ChartBaseDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartBaseDataSet.swift; path = Source/Charts/Data/Implementations/ChartBaseDataSet.swift; sourceTree = "<group>"; };
 		D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
 		D2629C2C6B479EEB26E2F6DA58C30B81 /* Sequence+KeyPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Sequence+KeyPath.swift"; path = "Source/Charts/Utils/Sequence+KeyPath.swift"; sourceTree = "<group>"; };
-		D359B9F836FA5FFF4380D1F522C364D8 /* RuleRequired.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleRequired.swift; path = Source/Validations/RuleRequired.swift; sourceTree = "<group>"; };
 		D35FFE6EE2BE8E73855DC66951E7AA12 /* YAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererRadarChart.swift; path = Source/Charts/Renderers/YAxisRendererRadarChart.swift; sourceTree = "<group>"; };
 		D41E1543E1C48B54FFD88D04046B84EB /* ShareClient-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ShareClient-dummy.m"; sourceTree = "<group>"; };
-		D47493593728F91332014990AA8497CF /* DateInlineRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateInlineRow.swift; path = Source/Rows/DateInlineRow.swift; sourceTree = "<group>"; };
 		D58E677C70EAC3CA7313DCFEC5A60D81 /* XShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/XShapeRenderer.swift; sourceTree = "<group>"; };
-		D5C7DEB37A5D25E3675AB9B8D8C02F7F /* MultipleSelectorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipleSelectorViewController.swift; path = Source/Rows/Controllers/MultipleSelectorViewController.swift; sourceTree = "<group>"; };
-		D81E86DC9A69302F26DBF96E59EF42A0 /* DecimalFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DecimalFormatter.swift; path = Source/Rows/Common/DecimalFormatter.swift; sourceTree = "<group>"; };
-		D8C6D9AA85CFF72CA6E5519187388A6F /* RuleEmail.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleEmail.swift; path = Source/Validations/RuleEmail.swift; sourceTree = "<group>"; };
 		D8DF094DF5E5637883401F7A64517AB0 /* ShareClient.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ShareClient.release.xcconfig; sourceTree = "<group>"; };
 		D93D093D2D751BD6FA681010A1ECCCA5 /* SwiftAlgorithms.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftAlgorithms.debug.xcconfig; sourceTree = "<group>"; };
 		DA50DFBF9517D3E54497B473A622FFD5 /* Charts-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Charts-Info.plist"; sourceTree = "<group>"; };
-		DAD950E015B2FC6DE72638E5978614FC /* ButtonRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ButtonRow.swift; path = Source/Rows/ButtonRow.swift; sourceTree = "<group>"; };
 		DB10D8BF2F0C2E9B18C2130751D75984 /* Animator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Animator.swift; path = Source/Charts/Animation/Animator.swift; sourceTree = "<group>"; };
 		DB7554208627CE880C0922FFD835465C /* AnimatedViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedViewPortJob.swift; path = Source/Charts/Jobs/AnimatedViewPortJob.swift; sourceTree = "<group>"; };
 		DC882B9BE58FE2D2FCB58677AABEF941 /* HorizontalBarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartRenderer.swift; path = Source/Charts/Renderers/HorizontalBarChartRenderer.swift; sourceTree = "<group>"; };
-		DEB89F713B887858D9493B533D256B7B /* LabelRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LabelRow.swift; path = Source/Rows/LabelRow.swift; sourceTree = "<group>"; };
 		DF14DB72944084EE52D83024A8168D3A /* CombinedChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartDataProvider.swift; path = Source/Charts/Interfaces/CombinedChartDataProvider.swift; sourceTree = "<group>"; };
 		DF672D34AEB39D95AD9315C751AA09E1 /* EitherSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EitherSequence.swift; path = Sources/Algorithms/EitherSequence.swift; sourceTree = "<group>"; };
 		DFD6267883E63FA87B3CF88C8773CCD6 /* ZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZoomViewJob.swift; path = Source/Charts/Jobs/ZoomViewJob.swift; sourceTree = "<group>"; };
@@ -546,7 +402,6 @@
 		E18735DC81F8F3BB4967404CF8ED7E84 /* ChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataProvider.swift; path = Source/Charts/Interfaces/ChartDataProvider.swift; sourceTree = "<group>"; };
 		E38871A0A7CA272870A24C2EEBC9F2B8 /* BarLineScatterCandleBubbleChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/BarLineScatterCandleBubbleChartDataSetProtocol.swift; sourceTree = "<group>"; };
 		E40805D1503067A2E679DBFB30BBB8C5 /* DataRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataRenderer.swift; path = Source/Charts/Renderers/DataRenderer.swift; sourceTree = "<group>"; };
-		E5836BA12B4D08431CFA71E4A245325C /* Eureka.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Eureka.modulemap; sourceTree = "<group>"; };
 		E8151C448D7FF1AE4C18A1D9BAAB84F5 /* SquareShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SquareShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift; sourceTree = "<group>"; };
 		EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
 		EB7EBFD830ED3E0392581253C75C715F /* AxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisRenderer.swift; path = Source/Charts/Renderers/AxisRenderer.swift; sourceTree = "<group>"; };
@@ -557,20 +412,14 @@
 		EF9EB617791E412932FA1E750D934E36 /* CandleStickChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartRenderer.swift; path = Source/Charts/Renderers/CandleStickChartRenderer.swift; sourceTree = "<group>"; };
 		EFAEA5F16C2629852715CED66DB5173B /* Trim.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Trim.swift; path = Sources/Algorithms/Trim.swift; sourceTree = "<group>"; };
 		F0744A6F4A9EC646DAE57C8935BB5D5B /* ScatterChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartData.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartData.swift; sourceTree = "<group>"; };
-		F082AA646AB49C314004DBB19E3F3085 /* GenericMultipleSelectorRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GenericMultipleSelectorRow.swift; path = Source/Rows/Common/GenericMultipleSelectorRow.swift; sourceTree = "<group>"; };
 		F0EFA056547237258760018B2FE0CAD6 /* Pods-LoopFollow-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-LoopFollow-acknowledgements.markdown"; sourceTree = "<group>"; };
-		F15455C959FB8C71196A046437C0EED5 /* CellType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CellType.swift; path = Source/Core/CellType.swift; sourceTree = "<group>"; };
-		F2561CCE278142444D8BDF2C3820193E /* RuleURL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleURL.swift; path = Source/Validations/RuleURL.swift; sourceTree = "<group>"; };
 		F278BBD4B126E05895AFDAB808E64C68 /* PieChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartRenderer.swift; path = Source/Charts/Renderers/PieChartRenderer.swift; sourceTree = "<group>"; };
 		F34D137537BF079F35059435323D7452 /* HorizontalBarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartView.swift; path = Source/Charts/Charts/HorizontalBarChartView.swift; sourceTree = "<group>"; };
 		F3AED254D55D17BB8EA5337BC6262FC1 /* ScatterChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataProvider.swift; path = Source/Charts/Interfaces/ScatterChartDataProvider.swift; sourceTree = "<group>"; };
-		F3E7458F7D38C89A9DE4BBACD3450C88 /* SwiftAlgorithms */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SwiftAlgorithms; path = Algorithms.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		F3E7458F7D38C89A9DE4BBACD3450C88 /* Algorithms.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Algorithms.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		F448E25F6F3095E674026E503F71BED7 /* YAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/YAxisRendererHorizontalBarChart.swift; sourceTree = "<group>"; };
 		F574273E89B9C97C369C430B67186E14 /* Indexed.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Indexed.swift; path = Sources/Algorithms/Indexed.swift; sourceTree = "<group>"; };
-		F5A708FABC6817F1F5703662646AD8A5 /* MultipleSelectorRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipleSelectorRow.swift; path = Source/Rows/MultipleSelectorRow.swift; sourceTree = "<group>"; };
 		F84585BA74D5FD5927560642A3D8484D /* BubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift; sourceTree = "<group>"; };
-		F8F21E10186E4376CA7F0655ECE328A5 /* NavigationAccessoryView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NavigationAccessoryView.swift; path = Source/Core/NavigationAccessoryView.swift; sourceTree = "<group>"; };
-		F9D47A544442AC0D1EACE1A847B3DAE4 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Core/Validation.swift; sourceTree = "<group>"; };
 		FA175D42C8D8C40B7D7B4EBA4DFCB613 /* AxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisValueFormatter.swift; path = Source/Charts/Formatters/AxisValueFormatter.swift; sourceTree = "<group>"; };
 		FA19E07D8FCAFF8056DDCD4180BD7604 /* XAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxis.swift; path = Source/Charts/Components/XAxis.swift; sourceTree = "<group>"; };
 		FAC79A108E546A80FD2E858996EB42D7 /* AxisBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisBase.swift; path = Source/Charts/Components/AxisBase.swift; sourceTree = "<group>"; };
@@ -578,15 +427,6 @@
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
-		04298F5DEE9CFE9AD337DFE74F07F490 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FEBB964F0D174EF5001425DB6FA36B79 /* Foundation.framework in Frameworks */,
-				3927F2677F09C815B6BC70E94023E335 /* UIKit.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
 		5DA9E0A9AAAF4649D65F510D01A75121 /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
@@ -626,7 +466,6 @@
 			isa = PBXGroup;
 			children = (
 				E5EBEB4E3DD769CF77FBA0FB4DD5A204 /* Charts */,
-				ADC2C025B505CB26B7100F9ED9F7A3B7 /* Eureka */,
 				93B5F75356B6491998DC2064F7F3591F /* ShareClient */,
 				A03D44A5466EE402B13CCEE8C95D8E91 /* SwiftAlgorithms */,
 			);
@@ -644,11 +483,10 @@
 		2C61111B3BA91EE50CDF6C9086AE0897 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				A1C1B977ED8804E8AEEC884E7359EE58 /* Charts */,
-				082977F3777A7D434AB35C357B487F83 /* Eureka */,
-				4BACF8B4E5759037E1CC8A6423FF7B67 /* Pods-LoopFollow */,
-				C2465E4C7B40A2D725278AEE6113E535 /* ShareClient */,
-				F3E7458F7D38C89A9DE4BBACD3450C88 /* SwiftAlgorithms */,
+				A1C1B977ED8804E8AEEC884E7359EE58 /* Charts.framework */,
+				4BACF8B4E5759037E1CC8A6423FF7B67 /* Pods_LoopFollow.framework */,
+				C2465E4C7B40A2D725278AEE6113E535 /* ShareClient.framework */,
+				F3E7458F7D38C89A9DE4BBACD3450C88 /* Algorithms.framework */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -840,7 +678,6 @@
 				269AF5F8DD17D78A0DC4ADFF2FC6E161 /* ShareClient.swift */,
 				8D3A1BD14866C606F6AE6DA32BA8C1F4 /* Support Files */,
 			);
-			name = ShareClient;
 			path = ShareClient;
 			sourceTree = "<group>";
 		};
@@ -873,85 +710,9 @@
 				5D152598E6F7AD2209244F3255EBE2B3 /* Windows.swift */,
 				ED8149DD2EC8C7BA0180268D4B9A8034 /* Support Files */,
 			);
-			name = SwiftAlgorithms;
 			path = SwiftAlgorithms;
 			sourceTree = "<group>";
 		};
-		ADC2C025B505CB26B7100F9ED9F7A3B7 /* Eureka */ = {
-			isa = PBXGroup;
-			children = (
-				463B1FFE93072EEE11F06544067346A2 /* ActionSheetRow.swift */,
-				4DA7213CB1ED6CD5B946A3A1EA36CFE3 /* AlertOptionsRow.swift */,
-				39347FDF57F777C67EA286FDF94A50A0 /* AlertRow.swift */,
-				9835CD66397846D129C53CB02CEA2199 /* BaseRow.swift */,
-				DAD950E015B2FC6DE72638E5978614FC /* ButtonRow.swift */,
-				60C304388A3314E30D8620C11790DC5B /* ButtonRowWithPresent.swift */,
-				C8B206369E7794EE03CDB81B6454C835 /* Cell.swift */,
-				F15455C959FB8C71196A046437C0EED5 /* CellType.swift */,
-				17D1BC6FE5DDEE26D858B939E9B4E82C /* CheckRow.swift */,
-				649C6079A86B7348DD9A91E50537DC34 /* Core.swift */,
-				6B99954AAFDEFB38844275070432B078 /* DateFieldRow.swift */,
-				1FA087B627BA46F392CACF1BD142B7AA /* DateInlineFieldRow.swift */,
-				D47493593728F91332014990AA8497CF /* DateInlineRow.swift */,
-				914C75C3E73448BCC86DF693AD52CAF8 /* DatePickerRow.swift */,
-				77F3AB1C7064C79A86A62BE1BBB6068C /* DateRow.swift */,
-				D81E86DC9A69302F26DBF96E59EF42A0 /* DecimalFormatter.swift */,
-				74854C0CAA3FF3AAE613D06C13CA0511 /* DoublePickerInputRow.swift */,
-				BFC8B3414FF880FE6C38F41AB0DC76F5 /* DoublePickerRow.swift */,
-				CDC5DB7370FF5E560126694672372703 /* FieldRow.swift */,
-				3B501803A2305DE95A984916552E769A /* FieldsRow.swift */,
-				C0351341FCAFDAA74F7778AF04C9EBE3 /* Form.swift */,
-				F082AA646AB49C314004DBB19E3F3085 /* GenericMultipleSelectorRow.swift */,
-				54DF8106B99B7AAD32343B0FCA61D868 /* HeaderFooterView.swift */,
-				2646204CB36CF4EF6057C2B31604DCA0 /* Helpers.swift */,
-				1363CD1C407802F39155303528BAB434 /* InlineRowType.swift */,
-				DEB89F713B887858D9493B533D256B7B /* LabelRow.swift */,
-				50AFF7F977813F95AC11C077C50CDEF6 /* ListCheckRow.swift */,
-				F5A708FABC6817F1F5703662646AD8A5 /* MultipleSelectorRow.swift */,
-				D5C7DEB37A5D25E3675AB9B8D8C02F7F /* MultipleSelectorViewController.swift */,
-				F8F21E10186E4376CA7F0655ECE328A5 /* NavigationAccessoryView.swift */,
-				31D826433F23D509AB5013DA7F1D59F6 /* Operators.swift */,
-				066A470BC83019FF736A9F4E1F671E31 /* OptionsRow.swift */,
-				A15229B55953AF8036FBE93E658A18C9 /* PickerInlineRow.swift */,
-				6207FB4695D962F2B6DF8DD11635A620 /* PickerInputRow.swift */,
-				75774B6B12A8E05908EA4FAC95CB47BB /* PickerRow.swift */,
-				43F364E36A952C20EBF4684241A269EC /* PopoverSelectorRow.swift */,
-				AA24EB386C74479E70533D8F03191FED /* PresenterRowType.swift */,
-				A7B8E73E6E0A1CA1E6E26B307989E3F9 /* Protocols.swift */,
-				5F117C19DCF36AF0FB2648E2D25EA325 /* PushRow.swift */,
-				7391F5AD340E2F5C60BC1905E0DDC412 /* Row.swift */,
-				A5833C2A8E049B2690A7651CB63B183C /* RowControllerType.swift */,
-				2748ACE938277243245CED76CF901E32 /* RowProtocols.swift */,
-				8AB5F5FEADDDFDB8B4D1F3BFE449F81E /* RowType.swift */,
-				445973D461C2CC4957A3BB54B5427B6F /* RuleClosure.swift */,
-				D8C6D9AA85CFF72CA6E5519187388A6F /* RuleEmail.swift */,
-				376D2C21D79D7A27AA844F0E178BC43B /* RuleEqualsToRow.swift */,
-				6DB609C6137ED4B1E648CCC3F5325177 /* RuleLength.swift */,
-				49A72FD9D0222D44350927E3FDE48A3B /* RuleRange.swift */,
-				4ABEC5837F666677B0816396BF6EDB41 /* RuleRegExp.swift */,
-				D359B9F836FA5FFF4380D1F522C364D8 /* RuleRequired.swift */,
-				F2561CCE278142444D8BDF2C3820193E /* RuleURL.swift */,
-				47B7052BEAEC159AC4DB9C28AE87E88F /* Section.swift */,
-				03BC64D825C8295FFA3E396F2B8D254C /* SegmentedRow.swift */,
-				3AF612F2F2ED80B5AA7DA7388FF9D3A9 /* SelectableRowType.swift */,
-				7C040C5E0351A26CDFA6243686064CC2 /* SelectableSection.swift */,
-				A2DF6A6FC9E680841A26786E9267590E /* SelectorAlertController.swift */,
-				9DAD47DCABD4ECD1C9DFFEAA022A9E17 /* SelectorRow.swift */,
-				C6116D5666C5AA3A405FA69AFC3E7817 /* SelectorViewController.swift */,
-				0953166A991EECDD39429ABF7F7A9212 /* SliderRow.swift */,
-				5E05949DEB432C9594F64A3B0BEB4BDD /* StepperRow.swift */,
-				45C6E3F0D68C882F76B85AE0C2AE35EE /* SwipeActions.swift */,
-				064C06660526CDB34A90BC0F8952E907 /* SwitchRow.swift */,
-				0ACC6C7F798E27DF68E09694E5645ECF /* TextAreaRow.swift */,
-				91757002F52622DC87D0A1967FE2900E /* TriplePickerInputRow.swift */,
-				57F8AAAC0731CEF69400E06C9A733966 /* TriplePickerRow.swift */,
-				F9D47A544442AC0D1EACE1A847B3DAE4 /* Validation.swift */,
-				DBA520F0C92D0D031D4508B8226CAA9E /* Support Files */,
-			);
-			name = Eureka;
-			path = Eureka;
-			sourceTree = "<group>";
-		};
 		AEDEF3B82F3D135001FB2D1778DAD53F /* Support Files */ = {
 			isa = PBXGroup;
 			children = (
@@ -995,28 +756,12 @@
 			path = "Target Support Files/Pods-LoopFollow";
 			sourceTree = "<group>";
 		};
-		DBA520F0C92D0D031D4508B8226CAA9E /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				E5836BA12B4D08431CFA71E4A245325C /* Eureka.modulemap */,
-				47135570F8D5A9E934D001C53B4C0A79 /* Eureka-dummy.m */,
-				D092B0076BB7443BDAA65A26F2641A30 /* Eureka-Info.plist */,
-				C90FF4B5002FD90F9794D8A196F3BA1A /* Eureka-prefix.pch */,
-				30D27A7845021043EFAEAE8DE5DEB9E0 /* Eureka-umbrella.h */,
-				35F5C5661A73C8D457BFCAA43A272924 /* Eureka.debug.xcconfig */,
-				2E5D627D1ADFD545DE4D7CE2E37A83B5 /* Eureka.release.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/Eureka";
-			sourceTree = "<group>";
-		};
 		E5EBEB4E3DD769CF77FBA0FB4DD5A204 /* Charts */ = {
 			isa = PBXGroup;
 			children = (
 				64FE9452040001E25B5A3EB8D58108DB /* Core */,
 				AEDEF3B82F3D135001FB2D1778DAD53F /* Support Files */,
 			);
-			name = Charts;
 			path = Charts;
 			sourceTree = "<group>";
 		};
@@ -1038,14 +783,6 @@
 /* End PBXGroup section */
 
 /* Begin PBXHeadersBuildPhase section */
-		27FF107BE894F2270BA6E56FBEED3F40 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				D98E8FA7AB3231918519A8C6C5B998D7 /* Eureka-umbrella.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
 		2D480C09AACD90D4C214D8CB1D26CDC8 /* Headers */ = {
 			isa = PBXHeadersBuildPhase;
 			buildActionMask = 2147483647;
@@ -1097,7 +834,7 @@
 			);
 			name = SwiftAlgorithms;
 			productName = Algorithms;
-			productReference = F3E7458F7D38C89A9DE4BBACD3450C88 /* SwiftAlgorithms */;
+			productReference = F3E7458F7D38C89A9DE4BBACD3450C88 /* Algorithms.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		32507FDB9BAD6EF17DCB14A888ECA5D9 /* ShareClient */ = {
@@ -1115,25 +852,7 @@
 			);
 			name = ShareClient;
 			productName = ShareClient;
-			productReference = C2465E4C7B40A2D725278AEE6113E535 /* ShareClient */;
-			productType = "com.apple.product-type.framework";
-		};
-		88BE8BE7A2FE6CED4193CCD8FF3CBEF7 /* Eureka */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 2BD6078BBF4ADE85FF441A7911BD9F20 /* Build configuration list for PBXNativeTarget "Eureka" */;
-			buildPhases = (
-				27FF107BE894F2270BA6E56FBEED3F40 /* Headers */,
-				0CE9B2A0F503C382EE4DD96A78D4C89A /* Sources */,
-				04298F5DEE9CFE9AD337DFE74F07F490 /* Frameworks */,
-				C47833098716CBD801DB087167BADD1B /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = Eureka;
-			productName = Eureka;
-			productReference = 082977F3777A7D434AB35C357B487F83 /* Eureka */;
+			productReference = C2465E4C7B40A2D725278AEE6113E535 /* ShareClient.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		BF03B0B2B8B052092CB5F90CC5FB3757 /* Charts */ = {
@@ -1152,7 +871,7 @@
 			);
 			name = Charts;
 			productName = Charts;
-			productReference = A1C1B977ED8804E8AEEC884E7359EE58 /* Charts */;
+			productReference = A1C1B977ED8804E8AEEC884E7359EE58 /* Charts.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		E187D4B9C2B76F773546AF1E39D2ECCD /* Pods-LoopFollow */ = {
@@ -1168,13 +887,12 @@
 			);
 			dependencies = (
 				BD234F929A36F384DAB2F1A302F4F777 /* PBXTargetDependency */,
-				417EF9FB78516B959611C40A27824B03 /* PBXTargetDependency */,
 				72D00FFECA0A202EFBCFBD5DC6BDFB6C /* PBXTargetDependency */,
 				FBBCCF26094223773400B746C8E1F6DB /* PBXTargetDependency */,
 			);
 			name = "Pods-LoopFollow";
 			productName = Pods_LoopFollow;
-			productReference = 4BACF8B4E5759037E1CC8A6423FF7B67 /* Pods-LoopFollow */;
+			productReference = 4BACF8B4E5759037E1CC8A6423FF7B67 /* Pods_LoopFollow.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 /* End PBXNativeTarget section */
@@ -1200,7 +918,6 @@
 			projectRoot = "";
 			targets = (
 				BF03B0B2B8B052092CB5F90CC5FB3757 /* Charts */,
-				88BE8BE7A2FE6CED4193CCD8FF3CBEF7 /* Eureka */,
 				E187D4B9C2B76F773546AF1E39D2ECCD /* Pods-LoopFollow */,
 				32507FDB9BAD6EF17DCB14A888ECA5D9 /* ShareClient */,
 				2C511EE63C6E7D5843B971D1E441119E /* SwiftAlgorithms */,
@@ -1230,13 +947,6 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		C47833098716CBD801DB087167BADD1B /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
 		F0985DF3FCB396C10277C61C2746A59B /* Resources */ = {
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -1396,80 +1106,6 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		0CE9B2A0F503C382EE4DD96A78D4C89A /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				0568E4D0A08C598F5AE7DDDA0DD59923 /* ActionSheetRow.swift in Sources */,
-				31B0A34AA01CC0E71ECA6B7BA7D7EC88 /* AlertOptionsRow.swift in Sources */,
-				697D5116696270B7361C180573C495D3 /* AlertRow.swift in Sources */,
-				E3D3815401288A32B309F2454204ABFA /* BaseRow.swift in Sources */,
-				C87A5CE74D4AF4B1180FA67B63CF7A5A /* ButtonRow.swift in Sources */,
-				B88B7CAA00CEB3B5032091BFA45BD219 /* ButtonRowWithPresent.swift in Sources */,
-				D22FB0AF38A4FB41C149F5C606088E1E /* Cell.swift in Sources */,
-				40E090A253097EFA55694770F19FEBAE /* CellType.swift in Sources */,
-				6EC583C2F9CEC762B806A22700E9D800 /* CheckRow.swift in Sources */,
-				3719CDB1B700C19AB04163DA75B09815 /* Core.swift in Sources */,
-				F364336C552955B98128F87389D7F7F6 /* DateFieldRow.swift in Sources */,
-				7BD16251FF2F7EA5F18AEACF5DE44C23 /* DateInlineFieldRow.swift in Sources */,
-				EA1F322A2BC1D842773115E8B60374CD /* DateInlineRow.swift in Sources */,
-				7F7B5556719352AD2C7A756587D348BB /* DatePickerRow.swift in Sources */,
-				008E02A88C10E3688B4431BFD393F0BE /* DateRow.swift in Sources */,
-				E1770D334AAD9C153792021A44FD6CA2 /* DecimalFormatter.swift in Sources */,
-				0FC606DB282EDA95D6DA95289AA85C61 /* DoublePickerInputRow.swift in Sources */,
-				C241A011154907D4A4B377DB529E9C9D /* DoublePickerRow.swift in Sources */,
-				9760DCC9A11340DC2E74E00007F9D3DF /* Eureka-dummy.m in Sources */,
-				CE0E20A3203F862A375294551E8B8862 /* FieldRow.swift in Sources */,
-				3AE49F9C5930DCD727D11A42EA89E640 /* FieldsRow.swift in Sources */,
-				A3A234EA035289FD713D51AEAF1072C8 /* Form.swift in Sources */,
-				C6C91F0B055C43A0B6A6865AFDB7614E /* GenericMultipleSelectorRow.swift in Sources */,
-				298553E2ECB829B696DF592E6990249A /* HeaderFooterView.swift in Sources */,
-				73780F56C4A6F73B569E3009F9AEF09F /* Helpers.swift in Sources */,
-				05E063B80D84B40AEEDC7DC5797FA3FD /* InlineRowType.swift in Sources */,
-				205C36FBEAF46B5278F998984AE7AF18 /* LabelRow.swift in Sources */,
-				995A8A4C2445BD86C2DC375B14394682 /* ListCheckRow.swift in Sources */,
-				B24FAE4A9C6BD92AD64EE7859C2A9D9A /* MultipleSelectorRow.swift in Sources */,
-				5CF70EB49A6DE1B80886F0FD3F780522 /* MultipleSelectorViewController.swift in Sources */,
-				869DB6D9A7692FDEC1FF5537C0413274 /* NavigationAccessoryView.swift in Sources */,
-				6328C306E03099885C3EFCA798C9F5D1 /* Operators.swift in Sources */,
-				F2FF6C2BA26E1FBC0F603CCAA690E948 /* OptionsRow.swift in Sources */,
-				2ECA780FC4691E846B5EB4919997A5F4 /* PickerInlineRow.swift in Sources */,
-				7B59CC19DE0A8FC37B7E78A578968DD4 /* PickerInputRow.swift in Sources */,
-				CF4332D8352284FA91A83CD4EF21DA8E /* PickerRow.swift in Sources */,
-				AF4BD9FB7CC229682ED2E26F7E6106A7 /* PopoverSelectorRow.swift in Sources */,
-				5DDCB215B020A3C11AAF9EA8766AD7D5 /* PresenterRowType.swift in Sources */,
-				69B91E7FF91730260D4137B09C015636 /* Protocols.swift in Sources */,
-				56E322CBEF2E9EA5777EC3846F888BDB /* PushRow.swift in Sources */,
-				C959E50620A9AF66A128EE6249CCD68C /* Row.swift in Sources */,
-				1E048CCA6D1D1B00892BB5A0D87A4D2E /* RowControllerType.swift in Sources */,
-				91B0EE8C7679DFFD7D0D27DC32BD07D3 /* RowProtocols.swift in Sources */,
-				A2254B25181B13F76C598F0CF5A40FE7 /* RowType.swift in Sources */,
-				6B905F2AC740B767D002FBB0CA795A7C /* RuleClosure.swift in Sources */,
-				4BADBE8D79E82E6BCA97708DB5E0623C /* RuleEmail.swift in Sources */,
-				3AEA68431EF66EB90B4E3F1074CF8125 /* RuleEqualsToRow.swift in Sources */,
-				3A84D68B004228D5F71FC0FC889FFC07 /* RuleLength.swift in Sources */,
-				D8DE47A06D3E4B45A6C42AF1DAA87CBE /* RuleRange.swift in Sources */,
-				C11DBC286F46067EFC0E4C15FF014CC6 /* RuleRegExp.swift in Sources */,
-				8F2CC08A2EA2A12CF906555985307D8A /* RuleRequired.swift in Sources */,
-				3CEB7EACBD4EB21B47517CC48A994655 /* RuleURL.swift in Sources */,
-				DA4D5827D6BB320D51945616E0E2B2D6 /* Section.swift in Sources */,
-				873FEA8F7A7D862C00A2335E311DEDC6 /* SegmentedRow.swift in Sources */,
-				25740149FB6D4EE7E113A1FA47B73554 /* SelectableRowType.swift in Sources */,
-				28D8448B496B314D91BAE0EE321646BE /* SelectableSection.swift in Sources */,
-				184CBCE994131F7140410E0B17E94ADE /* SelectorAlertController.swift in Sources */,
-				95DEEE38D632C816737E8AB538428A50 /* SelectorRow.swift in Sources */,
-				EEA5878C3C5A22697B2429EAE6DFFB2B /* SelectorViewController.swift in Sources */,
-				B5E04676C82AC7C36204AB782DD780B9 /* SliderRow.swift in Sources */,
-				4889C566B538BE9C98F084E685CB3C8E /* StepperRow.swift in Sources */,
-				8FF92C53FAAAC2ED824C1E535C187424 /* SwipeActions.swift in Sources */,
-				CC70380478EE7E1E404437B6AA51BA33 /* SwitchRow.swift in Sources */,
-				57FB8912F3DEFA71CF0932D6338A2BF9 /* TextAreaRow.swift in Sources */,
-				2E35BA439FF3906792D64F465A358A13 /* TriplePickerInputRow.swift in Sources */,
-				D7F2FB7E382C1C653590BF2870F77C8C /* TriplePickerRow.swift in Sources */,
-				46A11B142CC018088902C05BA2707513 /* Validation.swift in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
 		D6D8EC531B387AE324F4FBC6AFF93EAC /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -1522,12 +1158,6 @@
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXTargetDependency section */
-		417EF9FB78516B959611C40A27824B03 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = Eureka;
-			target = 88BE8BE7A2FE6CED4193CCD8FF3CBEF7 /* Eureka */;
-			targetProxy = C415689D09364110E409F97C1313D4E9 /* PBXContainerItemProxy */;
-		};
 		72D00FFECA0A202EFBCFBD5DC6BDFB6C /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			name = ShareClient;
@@ -1559,7 +1189,6 @@
 			isa = XCBuildConfiguration;
 			baseConfigurationReference = B1DF43F4B1524F385F6090756FA3016A /* Pods-LoopFollow.debug.xcconfig */;
 			buildSettings = {
-				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
 				CLANG_ENABLE_OBJC_WEAK = NO;
 				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
@@ -1729,7 +1358,6 @@
 			isa = XCBuildConfiguration;
 			baseConfigurationReference = EBE2A8C176CC9C76279BE195BDA90B7F /* Pods-LoopFollow.release.xcconfig */;
 			buildSettings = {
-				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
 				CLANG_ENABLE_OBJC_WEAK = NO;
 				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
@@ -1763,75 +1391,6 @@
 			};
 			name = Release;
 		};
-		AE59D8F42374C7745ABF1A1848E33758 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 35F5C5661A73C8D457BFCAA43A272924 /* Eureka.debug.xcconfig */;
-			buildSettings = {
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				GCC_PREFIX_HEADER = "Target Support Files/Eureka/Eureka-prefix.pch";
-				INFOPLIST_FILE = "Target Support Files/Eureka/Eureka-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MODULEMAP_FILE = "Target Support Files/Eureka/Eureka.modulemap";
-				PRODUCT_MODULE_NAME = Eureka;
-				PRODUCT_NAME = Eureka;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Debug;
-		};
-		CED55013787F3397AC938792D90D1C02 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 2E5D627D1ADFD545DE4D7CE2E37A83B5 /* Eureka.release.xcconfig */;
-			buildSettings = {
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				GCC_PREFIX_HEADER = "Target Support Files/Eureka/Eureka-prefix.pch";
-				INFOPLIST_FILE = "Target Support Files/Eureka/Eureka-Info.plist";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MODULEMAP_FILE = "Target Support Files/Eureka/Eureka.modulemap";
-				PRODUCT_MODULE_NAME = Eureka;
-				PRODUCT_NAME = Eureka;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Release;
-		};
 		D1AADB344ABE211C7A14EADDE0C68908 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			baseConfigurationReference = 42CC27FD093CC4B3D0F27B928F7744AF /* ShareClient.debug.xcconfig */;
@@ -2052,15 +1611,6 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
-		2BD6078BBF4ADE85FF441A7911BD9F20 /* Build configuration list for PBXNativeTarget "Eureka" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				AE59D8F42374C7745ABF1A1848E33758 /* Debug */,
-				CED55013787F3397AC938792D90D1C02 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
 		3C9F1E8CC2EB7C944989DFC3E98E9033 /* Build configuration list for PBXNativeTarget "Charts" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (

+ 0 - 26
Pods/Target Support Files/Eureka/Eureka-Info.plist

@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>CFBundleDevelopmentRegion</key>
-  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
-  <key>CFBundleExecutable</key>
-  <string>${EXECUTABLE_NAME}</string>
-  <key>CFBundleIdentifier</key>
-  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>6.0</string>
-  <key>CFBundleName</key>
-  <string>${PRODUCT_NAME}</string>
-  <key>CFBundlePackageType</key>
-  <string>FMWK</string>
-  <key>CFBundleShortVersionString</key>
-  <string>5.3.6</string>
-  <key>CFBundleSignature</key>
-  <string>????</string>
-  <key>CFBundleVersion</key>
-  <string>${CURRENT_PROJECT_VERSION}</string>
-  <key>NSPrincipalClass</key>
-  <string></string>
-</dict>
-</plist>

+ 0 - 5
Pods/Target Support Files/Eureka/Eureka-dummy.m

@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_Eureka : NSObject
-@end
-@implementation PodsDummy_Eureka
-@end

+ 0 - 12
Pods/Target Support Files/Eureka/Eureka-prefix.pch

@@ -1,12 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-

+ 0 - 16
Pods/Target Support Files/Eureka/Eureka-umbrella.h

@@ -1,16 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
-
-FOUNDATION_EXPORT double EurekaVersionNumber;
-FOUNDATION_EXPORT const unsigned char EurekaVersionString[];
-

+ 0 - 15
Pods/Target Support Files/Eureka/Eureka.debug.xcconfig

@@ -1,15 +0,0 @@
-CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Eureka
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
-OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "UIKit"
-OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/Eureka
-PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 0 - 6
Pods/Target Support Files/Eureka/Eureka.modulemap

@@ -1,6 +0,0 @@
-framework module Eureka {
-  umbrella header "Eureka-umbrella.h"
-
-  export *
-  module * { export * }
-}

+ 0 - 15
Pods/Target Support Files/Eureka/Eureka.release.xcconfig

@@ -1,15 +0,0 @@
-CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Eureka
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
-OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "UIKit"
-OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/Eureka
-PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 0 - 25
Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-acknowledgements.markdown

@@ -207,31 +207,6 @@ Apache License
 
 
 
-## Eureka
-
-The MIT License (MIT)
-
-Copyright (c) 2019 XMARTLABS
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
 ## ShareClient
 
 The MIT License (MIT)

+ 0 - 31
Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-acknowledgements.plist

@@ -251,37 +251,6 @@ SOFTWARE.
 			<key>License</key>
 			<string>MIT</string>
 			<key>Title</key>
-			<string>Eureka</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>The MIT License (MIT)
-
-Copyright (c) 2016 Mark Wilson
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-</string>
-			<key>License</key>
-			<string>MIT</string>
-			<key>Title</key>
 			<string>ShareClient</string>
 			<key>Type</key>
 			<string>PSGroupSpecifier</string>

+ 0 - 1
Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Debug-input-files.xcfilelist

@@ -1,5 +1,4 @@
 ${PODS_ROOT}/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks.sh
 ${BUILT_PRODUCTS_DIR}/Charts/Charts.framework
-${BUILT_PRODUCTS_DIR}/Eureka/Eureka.framework
 ${BUILT_PRODUCTS_DIR}/ShareClient/ShareClient.framework
 ${BUILT_PRODUCTS_DIR}/SwiftAlgorithms/Algorithms.framework

+ 0 - 1
Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Debug-output-files.xcfilelist

@@ -1,4 +1,3 @@
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Charts.framework
-${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Eureka.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ShareClient.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Algorithms.framework

+ 0 - 1
Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Release-input-files.xcfilelist

@@ -1,5 +1,4 @@
 ${PODS_ROOT}/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks.sh
 ${BUILT_PRODUCTS_DIR}/Charts/Charts.framework
-${BUILT_PRODUCTS_DIR}/Eureka/Eureka.framework
 ${BUILT_PRODUCTS_DIR}/ShareClient/ShareClient.framework
 ${BUILT_PRODUCTS_DIR}/SwiftAlgorithms/Algorithms.framework

+ 0 - 1
Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Release-output-files.xcfilelist

@@ -1,4 +1,3 @@
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Charts.framework
-${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Eureka.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ShareClient.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Algorithms.framework

+ 0 - 2
Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks.sh

@@ -177,13 +177,11 @@ code_sign_if_enabled() {
 
 if [[ "$CONFIGURATION" == "Debug" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/Charts/Charts.framework"
-  install_framework "${BUILT_PRODUCTS_DIR}/Eureka/Eureka.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/ShareClient/ShareClient.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SwiftAlgorithms/Algorithms.framework"
 fi
 if [[ "$CONFIGURATION" == "Release" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/Charts/Charts.framework"
-  install_framework "${BUILT_PRODUCTS_DIR}/Eureka/Eureka.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/ShareClient/ShareClient.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SwiftAlgorithms/Algorithms.framework"
 fi

+ 3 - 3
Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow.debug.xcconfig

@@ -1,11 +1,11 @@
 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts" "${PODS_CONFIGURATION_BUILD_DIR}/Eureka" "${PODS_CONFIGURATION_BUILD_DIR}/ShareClient" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftAlgorithms"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts" "${PODS_CONFIGURATION_BUILD_DIR}/ShareClient" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftAlgorithms"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts/Charts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Eureka/Eureka.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ShareClient/ShareClient.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftAlgorithms/Algorithms.framework/Headers"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts/Charts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ShareClient/ShareClient.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftAlgorithms/Algorithms.framework/Headers"
 LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
 LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
-OTHER_LDFLAGS = $(inherited) -framework "Algorithms" -framework "Charts" -framework "Eureka" -framework "Foundation" -framework "ShareClient" -framework "UIKit"
+OTHER_LDFLAGS = $(inherited) -framework "Algorithms" -framework "Charts" -framework "Foundation" -framework "ShareClient" -framework "UIKit"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

+ 3 - 3
Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow.release.xcconfig

@@ -1,11 +1,11 @@
 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts" "${PODS_CONFIGURATION_BUILD_DIR}/Eureka" "${PODS_CONFIGURATION_BUILD_DIR}/ShareClient" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftAlgorithms"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts" "${PODS_CONFIGURATION_BUILD_DIR}/ShareClient" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftAlgorithms"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts/Charts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Eureka/Eureka.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ShareClient/ShareClient.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftAlgorithms/Algorithms.framework/Headers"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts/Charts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ShareClient/ShareClient.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftAlgorithms/Algorithms.framework/Headers"
 LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
 LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
-OTHER_LDFLAGS = $(inherited) -framework "Algorithms" -framework "Charts" -framework "Eureka" -framework "Foundation" -framework "ShareClient" -framework "UIKit"
+OTHER_LDFLAGS = $(inherited) -framework "Algorithms" -framework "Charts" -framework "Foundation" -framework "ShareClient" -framework "UIKit"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)