[
  {
    "path": ".gitignore",
    "content": "# Mac OS X\n.DS_Store\n\n# Xcode\n\n## Build generated\nbuild/\nDerivedData\n\n## Various settings\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n\n## Other\n*.xccheckout\n*.moved-aside\n*.xcuserstate\n*.xcscmblueprint\n\n## Obj-C/Swift specific\n*.hmap\n*.ipa\n\n## Playgrounds\ntimeline.xctimeline\nplayground.xcworkspace\n\n# Swift Package Manager\n.build/\n\n# Carthage\nCarthage/Build\nExpandableCell.xcworkspace/contents.xcworkspacedata\nPods/Manifest.lock\nPods/Target Support Files/AZExpandable/AZExpandable-dummy.m\nPods/Target Support Files/AZExpandable/AZExpandable-prefix.pch\nPods/Target Support Files/AZExpandable/AZExpandable-umbrella.h\nPods/Target Support Files/AZExpandable/AZExpandable.modulemap\nPods/Target Support Files/AZExpandable/AZExpandable.xcconfig\nPods/Target Support Files/AZExpandable/Info.plist\nPods/Target Support Files/Pods-ExpandableCell/Info.plist\nPods/Target Support Files/Pods-ExpandableCell/Pods-ExpandableCell-acknowledgements.markdown\nPods/Target Support Files/Pods-ExpandableCell/Pods-ExpandableCell-acknowledgements.plist\nPods/Target Support Files/Pods-ExpandableCell/Pods-ExpandableCell-dummy.m\nPods/Target Support Files/Pods-ExpandableCell/Pods-ExpandableCell-frameworks.sh\nPods/Target Support Files/Pods-ExpandableCell/Pods-ExpandableCell-resources.sh\nPods/Target Support Files/Pods-ExpandableCell/Pods-ExpandableCell-umbrella.h\nPods/Target Support Files/Pods-ExpandableCell/Pods-ExpandableCell.debug.xcconfig\nPods/Target Support Files/Pods-ExpandableCell/Pods-ExpandableCell.modulemap\nPods/Target Support Files/Pods-ExpandableCell/Pods-ExpandableCell.release.xcconfig\n"
  },
  {
    "path": "AZExpandable.podspec",
    "content": "\nPod::Spec.new do |s|\n  s.name             = 'AZExpandable'\n  s.version          = '1.1.0'\n  s.summary          = 'AZExpandable is a lightweight proxy for UITableView to expand cells.'\n\n  s.platform = :ios\n  s.ios.deployment_target = '9.0'\n  s.swift_version = '5.0'\n\n  s.homepage         = 'https://github.com/azonov/expandableTable.git'\n  s.license          = { :type => 'MIT', :file => 'LICENSE' }\n  s.author           = { 'Andrey Zonov' => 'andryzonov@gmail.com' }\n  s.source           = { :git => 'https://github.com/azonov/expandableTable.git', :tag => s.version.to_s }\n\n  s.source_files = 'Source/**/*'\n\nend\n"
  },
  {
    "path": "Example/ExpandableCell/Supporting Files/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  ExpandableCell\n//\n//  Created by Andrey Zonov on 18/10/2017.\n//  Copyright © 2017 Andrey Zonov. All rights reserved.\n//\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n        return true\n    }\n}\n\n"
  },
  {
    "path": "Example/ExpandableCell/Supporting Files/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/ExpandableCell/Supporting Files/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13122.16\" systemVersion=\"17A277\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13104.12\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Example/ExpandableCell/Supporting Files/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Demo</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/ExpandableCell/View Controller/BasicDemoViewController.swift",
    "content": "//\n//  BasicDemoViewController.swift\n//  ExpandableCell\n//\n//  Created by Andrey Zonov on 19/12/2017.\n//  Copyright © 2017 Andrey Zonov. All rights reserved.\n//\n\nimport Foundation\nimport AZExpandable\n\nclass BasicDemoViewController: UIViewController {\n    \n    // MARK: IBOutlet's\n    @IBOutlet private weak var tableView: UITableView!\n    \n    // MARK: Private Properties\n    private var expandableTable: ExpandableTable!\n    private var expandedCell: ExpandedCellInfo?\n    \n    // MARK: Lifecycle\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        CellFactory.registerCells(for: tableView)\n        expandableTable = ExpandableTable(with: tableView, infoProvider: self)\n    }\n    \n    private func toggleItem(at indexPath: IndexPath) {\n        guard expandedCell?.indexPath != indexPath else {\n            expandableTable.unexpandCell()\n            expandedCell = nil\n            return\n        }\n        \n        // Construct your cell here\n        let cellType: ExpandedCellInfo.CellType = .custom { [weak self] indexPath -> (UITableViewCell) in\n            let centeredCell = self?.tableView.dequeueReusableCell(withIdentifier: \"CenteredLabelCell\",\n                                                                   for: indexPath) as! CenteredLabelCell\n            centeredCell.configure(with: \"Hint Inside your custom cell\")\n            centeredCell.backgroundColor = .lightGray\n            return centeredCell\n        }\n        let cell = ExpandedCellInfo(for: indexPath, cellType: cellType)\n        expandedCell = cell\n        expandableTable.expandCell(cell)\n    }\n}\n\n// MARK: - UITableViewDataSource\nextension BasicDemoViewController: UITableViewDataSource {\n    \n    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return 100\n    }\n    \n    func tableView(_ tableView: UITableView,\n                   cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = tableView.dequeueReusableCell(withIdentifier: \"CenteredLabelCell\", for: indexPath) as! CenteredLabelCell\n        cell.configure(with: \"Tap to reveal hint for \\(indexPath.row) row\")\n        return cell\n    }\n}\n\n// MARK: - UITableViewDelegate\nextension BasicDemoViewController: UITableViewDelegate {\n    \n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        toggleItem(at: indexPath)\n    }\n}\n"
  },
  {
    "path": "Example/ExpandableCell/View Controller/CellFactory.swift",
    "content": "//\n//  CellFactory.swift\n//  ExpandableCell\n//\n//  Created by Andrey Zonov on 08/11/2017.\n//  Copyright © 2017 Andrey Zonov. All rights reserved.\n//\n\nimport UIKit\n\nstruct CellFactory {\n    \n    // MARK: Private\n    private static let cellIdentifier = \"CenteredLabelCell\"\n    \n    // MARK: Public\n    \n    enum CellFactoryError: Error {\n        case unsupportedType\n        case wrongIdentifier\n    }\n    \n    // MARK: Public\n    static func cell(for cellModel: TableViewModel.Section.Cell,\n                     in tableView: UITableView,\n                     indexPath: IndexPath,\n                     cellAction: @escaping (() -> ())) throws -> UITableViewCell\n    {\n        guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier,\n                                                       for: indexPath) as? CenteredLabelCell\n            else { throw CellFactoryError.wrongIdentifier }\n        \n        cell.configure(with: cellModel.title)\n        \n        return cell\n    }\n    \n    static func registerCells(for tableView: UITableView) {\n        let cellIdentifiers = [cellIdentifier]\n        for cellIdentifier in cellIdentifiers {\n            let nib = UINib(nibName: cellIdentifier, bundle: .main)\n            tableView.register(nib, forCellReuseIdentifier: cellIdentifier)\n        }\n    }\n}\n"
  },
  {
    "path": "Example/ExpandableCell/View Controller/ComplexDemoViewController.swift",
    "content": "//\n//  ComplexDemoViewController.swift\n//  ExpandableCell\n//\n//  Created by Andrey Zonov on 18/10/2017.\n//  Copyright © 2017 Andrey Zonov. All rights reserved.\n//\n\nimport UIKit\nimport AZExpandable\n\nclass ComplexDemoViewController: UIViewController {\n    \n    // MARK: IBOutlet's\n    @IBOutlet private weak var tableView: UITableView!\n    \n    // MARK: Private Properties\n    private var expandableTable: ExpandableTable!\n    private var expandedCell: ExpandedCellInfo?\n    private var tableViewModel = TableViewModelFactory.staticExpandableTable\n    private var pickerController: PickerItemsController?\n    \n    // MARK: Lifecycle\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        CellFactory.registerCells(for: tableView)\n        expandableTable = ExpandableTable(with: tableView, infoProvider: self)\n        // DataSource and Delegate for PickerView, closure is about value changing\n        pickerController = PickerItemsController { title in\n            if let indexPath = self.expandedCell?.indexPath {\n                var viewModel = self.tableViewModel.cell(for: indexPath)\n                viewModel.title = title\n                self.tableViewModel.replace(cell: viewModel, at: indexPath)\n                self.tableView.reloadRows(at: [indexPath], with: .automatic)\n            }\n        }\n    }\n    \n    private func toggleItem(at indexPath: IndexPath) {\n        guard expandedCell?.indexPath != indexPath else {\n            expandableTable.unexpandCell()\n            expandedCell = nil\n            return\n        }\n        let cellViewModel = tableViewModel.sections[indexPath.section].cells[indexPath.row]\n        let cellType: ExpandedCellInfo.CellType\n        switch cellViewModel.expandingType {\n        case .date:\n            cellType = .datePicker { datePicker in\n                datePicker.minimumDate = Date()\n                datePicker.addTarget(self.pickerController,\n                                     action: #selector(PickerItemsController.datePickerDidChangeValue),\n                                     for: .valueChanged)\n            }\n            \n        case .picker:\n            cellType = .picker { picker in\n                picker.dataSource = self.pickerController\n                picker.delegate = self.pickerController\n            }\n            \n        case .custom:\n            cellType = .custom { [weak self] indexPath -> (UITableViewCell) in\n                let centeredCell = self?.tableView.dequeueReusableCell(withIdentifier: \"CenteredLabelCell\",\n                                                                       for: indexPath) as! CenteredLabelCell\n                centeredCell.configure(with: \"Hint Inside your custom cell\")\n                centeredCell.backgroundColor = .lightGray\n                return centeredCell\n            }\n        }\n        let cell = ExpandedCellInfo(for: indexPath, cellType: cellType)\n        expandedCell = cell\n        expandableTable.expandCell(cell)\n    }\n}\n\n// MARK: - UITableViewDataSource\nextension ComplexDemoViewController: UITableViewDataSource {\n    \n    func numberOfSections(in tableView: UITableView) -> Int {\n        return tableViewModel.sections.count\n    }\n    \n    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        let section = tableViewModel.sections[section]\n        return section.title\n    }\n    \n    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return tableViewModel.sections[section].cells.count\n    }\n    \n    func tableView(_ tableView: UITableView,\n                   cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cellModel = tableViewModel.sections[indexPath.section].cells[indexPath.row]\n        do {\n            return try CellFactory.cell(for: cellModel, in: tableView, indexPath: indexPath) { [weak self] in\n                self?.toggleItem(at: indexPath)\n            }\n        } catch {\n            assertionFailure(\"handle \\(error)\")\n            return UITableViewCell(style: .default, reuseIdentifier: \"default\")\n        }\n    }\n}\n\n// MARK: - UITableViewDelegate\nextension ComplexDemoViewController: UITableViewDelegate {\n    \n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        toggleItem(at: indexPath)\n    }\n}\n"
  },
  {
    "path": "Example/ExpandableCell/View Controller/LoadMoreDemoViewController.swift",
    "content": "//\n//  LoadMoreDemoViewController.swift\n//  ExpandableCell\n//\n//  Created by Andrey Zonov on 11/17/18.\n//  Copyright © 2018 Andrey Zonov. All rights reserved.\n//\n\nimport Foundation\nimport AZExpandable\n\nclass LoadMoreDemoViewController: UIViewController {\n    \n    // MARK: IBOutlet's\n    @IBOutlet private weak var tableView: UITableView!\n    \n    // MARK: Private Properties\n    private var pagingTable: PagingTable!\n    private var rowsCount = 20\n    \n    // MARK: Lifecycle\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        CellFactory.registerCells(for: tableView)\n        pagingTable = PagingTable(tableView: tableView, infoProvider: self)\n        { [weak self] paging in\n            DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: {\n                self?.rowsCount += 20\n                self?.tableView.reloadData()\n            })\n        }\n    }\n    \n    @IBAction func paginationValueChanged(_ sender: UISwitch) {\n        if sender.isOn {\n            try? pagingTable.addPagingIndicator()\n        } else {\n            try? pagingTable.removePagingIndicator()\n        }\n    }\n}\n\n// MARK: - UITableViewDataSource\nextension LoadMoreDemoViewController: UITableViewDataSource {\n    \n    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return rowsCount\n    }\n    \n    func tableView(_ tableView: UITableView,\n                   cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = tableView.dequeueReusableCell(withIdentifier: \"CenteredLabelCell\", for: indexPath) as! CenteredLabelCell\n        cell.configure(with: \"\\(indexPath.row) row\")\n        return cell\n    }\n}\n\n// MARK: - UITableViewDelegate\nextension LoadMoreDemoViewController: UITableViewDelegate {}\n"
  },
  {
    "path": "Example/ExpandableCell/View Controller/PickerItemsController.swift",
    "content": "//\n//  PickerItemsController.swift\n//  ExpandableCell\n//\n//  Created by Andrey Zonov on 18/12/2017.\n//  Copyright © 2017 Andrey Zonov. All rights reserved.\n//\n\nimport UIKit\n\nclass PickerItemsController: NSObject, UIPickerViewDelegate, UIPickerViewDataSource {\n    \n    private var updateClosure: (String)->()\n    \n    init(updateClosure: @escaping (String)->()) {\n        self.updateClosure = updateClosure\n    }\n    \n    func numberOfComponents(in pickerView: UIPickerView) -> Int {\n        return 1\n    }\n    \n    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {\n        return 10\n    }\n    \n    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {\n        return \"row \\(row) component \\(component)\"\n    }\n    \n    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {\n        if let title = self.pickerView(pickerView, titleForRow: row, forComponent: component) {\n            updateClosure(title)\n        }\n    }\n    \n    @objc func datePickerDidChangeValue(_ datePicker: UIDatePicker) {\n        let title = DateFormatter.localizedString(from: datePicker.date, dateStyle: .medium, timeStyle: .medium)\n        updateClosure(title)\n    }\n}\n"
  },
  {
    "path": "Example/ExpandableCell/ViewModels/TableViewModel.swift",
    "content": "//\n//  TableViewModel.swift\n//  ExpandableCell\n//\n//  Created by Andrey Zonov on 27/10/2017.\n//  Copyright © 2017 Andrey Zonov. All rights reserved.\n//\n\nimport Foundation\n\nenum ExpandingType {\n    case date\n    case picker\n    case custom\n}\n\nstruct TableViewModel {\n    \n    struct Section {\n        \n        struct Cell {\n            var title: String\n            var expandingType: ExpandingType\n        }\n        let title: String?\n        var cells: [Cell]\n    }\n    \n    static var expandable = TableViewModel(sections: [])\n    var sections: [Section]\n}\n\n\nextension TableViewModel {\n    \n    func cell(for indexPath: IndexPath) -> TableViewModel.Section.Cell {\n        return sections[indexPath.section].cells[indexPath.row]\n    }\n    \n    mutating func replace(cell: TableViewModel.Section.Cell, at indexPath: IndexPath) {\n        sections[indexPath.section].cells[indexPath.row] = cell\n    }\n}\n"
  },
  {
    "path": "Example/ExpandableCell/ViewModels/TableViewModelFactory.swift",
    "content": "//\n//  TableViewModelFactory.swift\n//  ExpandableCell\n//\n//  Created by Andrey Zonov on 08/11/2017.\n//  Copyright © 2017 Andrey Zonov. All rights reserved.\n//\n\nimport Foundation\n\nstruct TableViewModelFactory {\n    \n    static var staticExpandableTable: TableViewModel {\n        \n        let helpCell1 = TableViewModel.Section.Cell(title: \"Tap to reveal help1\", expandingType: .custom)\n        let helpCell2 = TableViewModel.Section.Cell(title: \"Tap to reveal help2\", expandingType: .custom)\n        let helpCell3 = TableViewModel.Section.Cell(title: \"Tap to reveal help3\", expandingType: .custom)\n        \n        let dateCell1 = TableViewModel.Section.Cell(title: \"Date 1\", expandingType: .date)\n        let dateCell2 = TableViewModel.Section.Cell(title: \"Date 2\", expandingType: .date)\n        let dateCell3 = TableViewModel.Section.Cell(title: \"Date 3\", expandingType: .date)\n        \n        let pickerCell1 = TableViewModel.Section.Cell(title: \"Picker 1\", expandingType: .picker)\n        let pickerCell2 = TableViewModel.Section.Cell(title: \"Picker 2\", expandingType: .picker)\n        let pickerCell3 = TableViewModel.Section.Cell(title: \"Picker 3\", expandingType: .picker)\n        \n        let sectionHelp = TableViewModel.Section(title: \"Help cells section\", cells: [helpCell1, helpCell2, helpCell3])\n        let sectionDate = TableViewModel.Section(title: \"Date cells section\", cells: [dateCell1, dateCell2, dateCell3])\n        let sectionPicker = TableViewModel.Section(title: \"Picker cells section\", cells: [pickerCell1, pickerCell2, pickerCell3])\n        \n        return TableViewModel(sections: [sectionHelp, sectionDate, sectionPicker])\n    }\n}\n"
  },
  {
    "path": "Example/ExpandableCell/Views/Base.lproj/Demo.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"14460.31\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"A4z-GJ-Xm8\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14460.20\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Examples-->\n        <scene sceneID=\"3AR-gL-olV\">\n            <objects>\n                <tableViewController id=\"Qfe-Kt-zTA\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"fi3-ym-b78\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <sections>\n                            <tableViewSection id=\"QXs-zl-fFO\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"tpq-ma-EKT\" style=\"IBUITableViewCellStyleDefault\" id=\"F1j-6Y-3Hi\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"F1j-6Y-3Hi\" id=\"bgp-2L-EUY\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" insetsLayoutMarginsFromSafeArea=\"NO\" text=\"Basic Example\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"tpq-ma-EKT\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"343\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"LSg-Xo-NAd\" kind=\"show\" id=\"HoI-zk-SeW\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"1Gh-Pr-GGf\" style=\"IBUITableViewCellStyleDefault\" id=\"qMw-69-Tf4\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"qMw-69-Tf4\" id=\"hjw-MG-isc\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" insetsLayoutMarginsFromSafeArea=\"NO\" text=\"Complex Example\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"1Gh-Pr-GGf\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"343\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"BYZ-38-t0r\" kind=\"show\" id=\"Gxb-BZ-vJQ\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"mdl-Tm-p7a\" style=\"IBUITableViewCellStyleDefault\" id=\"VfJ-q6-kpM\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"88\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"VfJ-q6-kpM\" id=\"nb4-Uf-AEE\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" insetsLayoutMarginsFromSafeArea=\"NO\" text=\"Load More\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"mdl-Tm-p7a\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"343\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"8Lg-0Q-EDq\" kind=\"show\" id=\"uG1-EJ-c0d\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"Qfe-Kt-zTA\" id=\"7EF-NJ-wdU\"/>\n                            <outlet property=\"delegate\" destination=\"Qfe-Kt-zTA\" id=\"26o-uJ-Gus\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"Examples\" id=\"rhb-hN-QWP\"/>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"vmo-CE-Vf8\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"262\" y=\"290\"/>\n        </scene>\n        <!--Navigation Controller-->\n        <scene sceneID=\"bbI-hR-dsE\">\n            <objects>\n                <navigationController id=\"A4z-GJ-Xm8\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" insetsLayoutMarginsFromSafeArea=\"NO\" id=\"7gF-My-XSY\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"20\" width=\"375\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"Qfe-Kt-zTA\" kind=\"relationship\" relationship=\"rootViewController\" id=\"qmn-Sf-FOg\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"61i-Ak-vkD\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-442\" y=\"289\"/>\n        </scene>\n        <!--Basic Demo View Controller-->\n        <scene sceneID=\"N2C-hJ-aZ9\">\n            <objects>\n                <viewController id=\"LSg-Xo-NAd\" customClass=\"BasicDemoViewController\" customModule=\"ExpandableCell\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"gJh-hD-um8\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zAt-Jo-0QJ\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"375\" height=\"603\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"LSg-Xo-NAd\" id=\"EmZ-vZ-eCY\"/>\n                                    <outlet property=\"delegate\" destination=\"LSg-Xo-NAd\" id=\"Oti-bM-5RH\"/>\n                                </connections>\n                            </tableView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"FTD-Ky-SA6\" firstAttribute=\"trailing\" secondItem=\"zAt-Jo-0QJ\" secondAttribute=\"trailing\" id=\"9Ra-iG-d6T\"/>\n                            <constraint firstItem=\"zAt-Jo-0QJ\" firstAttribute=\"leading\" secondItem=\"FTD-Ky-SA6\" secondAttribute=\"leading\" id=\"HKJ-g5-a9H\"/>\n                            <constraint firstItem=\"FTD-Ky-SA6\" firstAttribute=\"bottom\" secondItem=\"zAt-Jo-0QJ\" secondAttribute=\"bottom\" id=\"dQf-6w-MlQ\"/>\n                            <constraint firstItem=\"zAt-Jo-0QJ\" firstAttribute=\"top\" secondItem=\"FTD-Ky-SA6\" secondAttribute=\"top\" id=\"ehM-sf-hZj\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"FTD-Ky-SA6\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"tableView\" destination=\"zAt-Jo-0QJ\" id=\"FAl-ZW-RNe\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Pvg-22-pqK\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1046\" y=\"-38\"/>\n        </scene>\n        <!--Complex Demo View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"ComplexDemoViewController\" customModule=\"ExpandableCell\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"18\" sectionFooterHeight=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"VAF-Vr-Iar\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"375\" height=\"603\"/>\n                                <color key=\"backgroundColor\" cocoaTouchSystemColor=\"groupTableViewBackgroundColor\"/>\n                            </tableView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"6Tk-OE-BBY\" firstAttribute=\"bottom\" secondItem=\"VAF-Vr-Iar\" secondAttribute=\"bottom\" id=\"7Yz-fu-r5C\"/>\n                            <constraint firstItem=\"VAF-Vr-Iar\" firstAttribute=\"leading\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"leading\" id=\"D0u-CX-aje\"/>\n                            <constraint firstItem=\"VAF-Vr-Iar\" firstAttribute=\"top\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"top\" id=\"Tfx-hB-Ozd\"/>\n                            <constraint firstItem=\"6Tk-OE-BBY\" firstAttribute=\"trailing\" secondItem=\"VAF-Vr-Iar\" secondAttribute=\"trailing\" id=\"nMB-b7-SUO\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"tableView\" destination=\"VAF-Vr-Iar\" id=\"dJg-1C-L3F\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1046\" y=\"645\"/>\n        </scene>\n        <!--Load More Demo View Controller-->\n        <scene sceneID=\"ApR-oU-PFc\">\n            <objects>\n                <viewController id=\"8Lg-0Q-EDq\" customClass=\"LoadMoreDemoViewController\" customModule=\"ExpandableCell\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"buT-Ho-Chy\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rbM-8m-cHK\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"375\" height=\"559\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </tableView>\n                            <toolbar opaque=\"NO\" clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ydc-nw-xFQ\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"623\" width=\"375\" height=\"44\"/>\n                                <items>\n                                    <barButtonItem style=\"plain\" id=\"9q0-l9-yY1\">\n                                        <switch key=\"customView\" opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" id=\"GoA-CG-DTN\">\n                                            <rect key=\"frame\" x=\"16\" y=\"6.5\" width=\"51\" height=\"31\"/>\n                                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"paginationValueChanged:\" destination=\"8Lg-0Q-EDq\" eventType=\"valueChanged\" id=\"XLd-da-uvq\"/>\n                                            </connections>\n                                        </switch>\n                                    </barButtonItem>\n                                </items>\n                            </toolbar>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Load more\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"pwF-Yv-Gdh\">\n                                <rect key=\"frame\" x=\"80\" y=\"634.5\" width=\"82\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"rbM-8m-cHK\" firstAttribute=\"leading\" secondItem=\"NoI-GG-6lu\" secondAttribute=\"leading\" id=\"CUR-gC-jag\"/>\n                            <constraint firstItem=\"rbM-8m-cHK\" firstAttribute=\"top\" secondItem=\"NoI-GG-6lu\" secondAttribute=\"top\" id=\"EhK-GG-4Yu\"/>\n                            <constraint firstItem=\"NoI-GG-6lu\" firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"pwF-Yv-Gdh\" secondAttribute=\"trailing\" symbolic=\"YES\" id=\"QYH-v5-kVB\"/>\n                            <constraint firstItem=\"NoI-GG-6lu\" firstAttribute=\"bottom\" secondItem=\"Ydc-nw-xFQ\" secondAttribute=\"bottom\" id=\"YyE-gZ-Cjx\"/>\n                            <constraint firstItem=\"NoI-GG-6lu\" firstAttribute=\"trailing\" secondItem=\"rbM-8m-cHK\" secondAttribute=\"trailing\" id=\"Z0n-MM-qaR\"/>\n                            <constraint firstItem=\"Ydc-nw-xFQ\" firstAttribute=\"leading\" secondItem=\"NoI-GG-6lu\" secondAttribute=\"leading\" id=\"cAn-2h-h8J\"/>\n                            <constraint firstItem=\"pwF-Yv-Gdh\" firstAttribute=\"leading\" secondItem=\"NoI-GG-6lu\" secondAttribute=\"leading\" constant=\"80\" id=\"cS6-vY-6Sk\"/>\n                            <constraint firstItem=\"Ydc-nw-xFQ\" firstAttribute=\"top\" secondItem=\"rbM-8m-cHK\" secondAttribute=\"bottom\" id=\"fAp-Ie-nu8\"/>\n                            <constraint firstItem=\"Ydc-nw-xFQ\" firstAttribute=\"trailing\" secondItem=\"NoI-GG-6lu\" secondAttribute=\"trailing\" id=\"tjN-cg-2bF\"/>\n                            <constraint firstItem=\"pwF-Yv-Gdh\" firstAttribute=\"centerY\" secondItem=\"Ydc-nw-xFQ\" secondAttribute=\"centerY\" id=\"ySy-p7-cOP\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"NoI-GG-6lu\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"tableView\" destination=\"rbM-8m-cHK\" id=\"Kzo-m9-FtN\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"HHM-oa-a9d\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1712.8\" y=\"287.40629685157421\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Example/ExpandableCell/Views/CenteredLabelCell.swift",
    "content": "//\n//  CenteredLabelCell.swift\n//  ExpandableCell\n//\n//  Created by Andrey Zonov on 08/11/2017.\n//  Copyright © 2017 Andrey Zonov. All rights reserved.\n//\n\nimport UIKit\n\nclass CenteredLabelCell: UITableViewCell {\n    \n    // MARK: Private Outlets\n    @IBOutlet private var label: UILabel!\n    \n    // MARK: Lifecycle\n    override func awakeFromNib() {\n        super.awakeFromNib()\n        selectionStyle = .none\n    }\n    \n    override func prepareForReuse() {\n        super.prepareForReuse()\n        label.text = \"\"\n        backgroundColor = .white\n    }\n    \n    // MARK: Public\n    func configure(with title: String) {\n        label.text = title\n    }\n}\n"
  },
  {
    "path": "Example/ExpandableCell/Views/CenteredLabelCell.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"13196\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13174\"/>\n        <capability name=\"Constraints to layout margins\" minToolsVersion=\"6.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"CenteredLabelCell\" id=\"xDi-h4-UJc\" customClass=\"CenteredLabelCell\" customModule=\"ExpandableCell\" customModuleProvider=\"target\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"44\"/>\n            <autoresizingMask key=\"autoresizingMask\"/>\n            <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"xDi-h4-UJc\" id=\"1JT-o5-crR\">\n                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                <autoresizingMask key=\"autoresizingMask\"/>\n                <subviews>\n                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"WNO-cq-URg\">\n                        <rect key=\"frame\" x=\"8\" y=\"8\" width=\"359\" height=\"24\"/>\n                        <fontDescription key=\"fontDescription\" type=\"system\" weight=\"light\" pointSize=\"20\"/>\n                        <nil key=\"textColor\"/>\n                        <nil key=\"highlightedColor\"/>\n                    </label>\n                </subviews>\n                <constraints>\n                    <constraint firstAttribute=\"bottomMargin\" relation=\"greaterThanOrEqual\" secondItem=\"WNO-cq-URg\" secondAttribute=\"bottom\" id=\"PK8-pX-hXS\"/>\n                    <constraint firstAttribute=\"trailingMargin\" secondItem=\"WNO-cq-URg\" secondAttribute=\"trailing\" id=\"aSP-ZB-rQf\"/>\n                    <constraint firstItem=\"WNO-cq-URg\" firstAttribute=\"top\" secondItem=\"1JT-o5-crR\" secondAttribute=\"topMargin\" id=\"ldP-39-kDB\"/>\n                    <constraint firstItem=\"WNO-cq-URg\" firstAttribute=\"leading\" secondItem=\"1JT-o5-crR\" secondAttribute=\"leadingMargin\" id=\"z8r-8g-1uS\"/>\n                </constraints>\n            </tableViewCellContentView>\n            <connections>\n                <outlet property=\"label\" destination=\"WNO-cq-URg\" id=\"sgM-OQ-e0I\"/>\n            </connections>\n            <point key=\"canvasLocation\" x=\"53\" y=\"29\"/>\n        </tableViewCell>\n    </objects>\n</document>\n"
  },
  {
    "path": "Example/ExpandableCell.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 48;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t544BBBECEC7CBA6DC12582BA /* Pods_ExpandableCell.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CAEC0521AA1804F5AD4A219 /* Pods_ExpandableCell.framework */; };\n\t\t5759872B1FA39FE200239B5E /* TableViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5759872A1FA39FE200239B5E /* TableViewModel.swift */; };\n\t\t579732361F971A43006DB071 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 579732351F971A43006DB071 /* AppDelegate.swift */; };\n\t\t579732381F971A43006DB071 /* ComplexDemoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 579732371F971A43006DB071 /* ComplexDemoViewController.swift */; };\n\t\t5797323B1F971A43006DB071 /* Demo.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 579732391F971A43006DB071 /* Demo.storyboard */; };\n\t\t5797323D1F971A43006DB071 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5797323C1F971A43006DB071 /* Assets.xcassets */; };\n\t\t579732401F971A43006DB071 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5797323E1F971A43006DB071 /* LaunchScreen.storyboard */; };\n\t\t57FF07FF1FB2CBC2008C0958 /* TableViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57FF07FE1FB2CBC2008C0958 /* TableViewModelFactory.swift */; };\n\t\t57FF08071FB2D957008C0958 /* CenteredLabelCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 57FF08061FB2D957008C0958 /* CenteredLabelCell.xib */; };\n\t\t57FF08091FB2D9BB008C0958 /* CenteredLabelCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57FF08081FB2D9BB008C0958 /* CenteredLabelCell.swift */; };\n\t\t57FF080D1FB2DB73008C0958 /* CellFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57FF080C1FB2DB73008C0958 /* CellFactory.swift */; };\n\t\tFB3A0DBB1FE82D2A00D5C0A6 /* PickerItemsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB3A0DBA1FE82D2A00D5C0A6 /* PickerItemsController.swift */; };\n\t\tFBAA601B219F0E24004CC2FA /* LoadMoreDemoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBAA601A219F0E24004CC2FA /* LoadMoreDemoViewController.swift */; };\n\t\tFBDF2A041FE8FCC600889B28 /* BasicDemoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBDF2A031FE8FCC600889B28 /* BasicDemoViewController.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t5759872A1FA39FE200239B5E /* TableViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewModel.swift; sourceTree = \"<group>\"; };\n\t\t579732321F971A43006DB071 /* ExpandableCell.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ExpandableCell.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t579732351F971A43006DB071 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t579732371F971A43006DB071 /* ComplexDemoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComplexDemoViewController.swift; sourceTree = \"<group>\"; };\n\t\t5797323A1F971A43006DB071 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Demo.storyboard; sourceTree = \"<group>\"; };\n\t\t5797323C1F971A43006DB071 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t5797323F1F971A43006DB071 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t579732411F971A43006DB071 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t57FF07FE1FB2CBC2008C0958 /* TableViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewModelFactory.swift; sourceTree = \"<group>\"; };\n\t\t57FF08061FB2D957008C0958 /* CenteredLabelCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CenteredLabelCell.xib; sourceTree = \"<group>\"; };\n\t\t57FF08081FB2D9BB008C0958 /* CenteredLabelCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CenteredLabelCell.swift; sourceTree = \"<group>\"; };\n\t\t57FF080C1FB2DB73008C0958 /* CellFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CellFactory.swift; sourceTree = \"<group>\"; };\n\t\t5B9DB0A27CB6D3B14B4FA504 /* Pods-ExpandableCell.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ExpandableCell.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-ExpandableCell/Pods-ExpandableCell.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t8A984765D95495A0BB3DFE38 /* Pods-ExpandableCell.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ExpandableCell.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-ExpandableCell/Pods-ExpandableCell.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t9CAEC0521AA1804F5AD4A219 /* Pods_ExpandableCell.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ExpandableCell.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tFB3A0DBA1FE82D2A00D5C0A6 /* PickerItemsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PickerItemsController.swift; sourceTree = \"<group>\"; };\n\t\tFBAA601A219F0E24004CC2FA /* LoadMoreDemoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadMoreDemoViewController.swift; sourceTree = \"<group>\"; };\n\t\tFBDF2A031FE8FCC600889B28 /* BasicDemoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasicDemoViewController.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t5797322F1F971A43006DB071 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t544BBBECEC7CBA6DC12582BA /* Pods_ExpandableCell.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t0FDE01C8E17946A046C6AC32 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9CAEC0521AA1804F5AD4A219 /* Pods_ExpandableCell.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2CD19F1321C5BD94F03DDF41 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5B9DB0A27CB6D3B14B4FA504 /* Pods-ExpandableCell.debug.xcconfig */,\n\t\t\t\t8A984765D95495A0BB3DFE38 /* Pods-ExpandableCell.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t579732291F971A43006DB071 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t579732341F971A43006DB071 /* ExpandableCell */,\n\t\t\t\t579732331F971A43006DB071 /* Products */,\n\t\t\t\t2CD19F1321C5BD94F03DDF41 /* Pods */,\n\t\t\t\t0FDE01C8E17946A046C6AC32 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t579732331F971A43006DB071 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t579732321F971A43006DB071 /* ExpandableCell.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t579732341F971A43006DB071 /* ExpandableCell */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t57FF08031FB2CEDF008C0958 /* ViewModels */,\n\t\t\t\t57FF08021FB2CED3008C0958 /* Views */,\n\t\t\t\t57FF08011FB2CEB8008C0958 /* View Controller */,\n\t\t\t\t57FF08001FB2CE51008C0958 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = ExpandableCell;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t57FF08001FB2CE51008C0958 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5797323C1F971A43006DB071 /* Assets.xcassets */,\n\t\t\t\t5797323E1F971A43006DB071 /* LaunchScreen.storyboard */,\n\t\t\t\t579732411F971A43006DB071 /* Info.plist */,\n\t\t\t\t579732351F971A43006DB071 /* AppDelegate.swift */,\n\t\t\t);\n\t\t\tpath = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t57FF08011FB2CEB8008C0958 /* View Controller */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFBDF2A031FE8FCC600889B28 /* BasicDemoViewController.swift */,\n\t\t\t\t579732371F971A43006DB071 /* ComplexDemoViewController.swift */,\n\t\t\t\tFBAA601A219F0E24004CC2FA /* LoadMoreDemoViewController.swift */,\n\t\t\t\tFB3A0DBA1FE82D2A00D5C0A6 /* PickerItemsController.swift */,\n\t\t\t\t57FF080C1FB2DB73008C0958 /* CellFactory.swift */,\n\t\t\t);\n\t\t\tpath = \"View Controller\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t57FF08021FB2CED3008C0958 /* Views */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t579732391F971A43006DB071 /* Demo.storyboard */,\n\t\t\t\t57FF08081FB2D9BB008C0958 /* CenteredLabelCell.swift */,\n\t\t\t\t57FF08061FB2D957008C0958 /* CenteredLabelCell.xib */,\n\t\t\t);\n\t\t\tpath = Views;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t57FF08031FB2CEDF008C0958 /* ViewModels */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5759872A1FA39FE200239B5E /* TableViewModel.swift */,\n\t\t\t\t57FF07FE1FB2CBC2008C0958 /* TableViewModelFactory.swift */,\n\t\t\t);\n\t\t\tpath = ViewModels;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t579732311F971A43006DB071 /* ExpandableCell */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 579732441F971A43006DB071 /* Build configuration list for PBXNativeTarget \"ExpandableCell\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t3B9DABDA8FCD5AA9B2C3ADF1 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t5797322E1F971A43006DB071 /* Sources */,\n\t\t\t\t5797322F1F971A43006DB071 /* Frameworks */,\n\t\t\t\t579732301F971A43006DB071 /* Resources */,\n\t\t\t\tC68FC4EE3E073A697ABC5066 /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ExpandableCell;\n\t\t\tproductName = ExpandableCell;\n\t\t\tproductReference = 579732321F971A43006DB071 /* ExpandableCell.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t5797322A1F971A43006DB071 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0900;\n\t\t\t\tLastUpgradeCheck = 1010;\n\t\t\t\tORGANIZATIONNAME = \"Andrey Zonov\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t579732311F971A43006DB071 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.0.1;\n\t\t\t\t\t\tLastSwiftMigration = 1030;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 5797322D1F971A43006DB071 /* Build configuration list for PBXProject \"ExpandableCell\" */;\n\t\t\tcompatibilityVersion = \"Xcode 8.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 579732291F971A43006DB071;\n\t\t\tproductRefGroup = 579732331F971A43006DB071 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t579732311F971A43006DB071 /* ExpandableCell */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t579732301F971A43006DB071 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t579732401F971A43006DB071 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t5797323D1F971A43006DB071 /* Assets.xcassets in Resources */,\n\t\t\t\t5797323B1F971A43006DB071 /* Demo.storyboard in Resources */,\n\t\t\t\t57FF08071FB2D957008C0958 /* CenteredLabelCell.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t3B9DABDA8FCD5AA9B2C3ADF1 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-ExpandableCell-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tC68FC4EE3E073A697ABC5066 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-ExpandableCell/Pods-ExpandableCell-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/AZExpandable/AZExpandable.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AZExpandable.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-ExpandableCell/Pods-ExpandableCell-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t5797322E1F971A43006DB071 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5759872B1FA39FE200239B5E /* TableViewModel.swift in Sources */,\n\t\t\t\t57FF08091FB2D9BB008C0958 /* CenteredLabelCell.swift in Sources */,\n\t\t\t\t579732381F971A43006DB071 /* ComplexDemoViewController.swift in Sources */,\n\t\t\t\t57FF07FF1FB2CBC2008C0958 /* TableViewModelFactory.swift in Sources */,\n\t\t\t\tFB3A0DBB1FE82D2A00D5C0A6 /* PickerItemsController.swift in Sources */,\n\t\t\t\t57FF080D1FB2DB73008C0958 /* CellFactory.swift in Sources */,\n\t\t\t\tFBAA601B219F0E24004CC2FA /* LoadMoreDemoViewController.swift in Sources */,\n\t\t\t\tFBDF2A041FE8FCC600889B28 /* BasicDemoViewController.swift in Sources */,\n\t\t\t\t579732361F971A43006DB071 /* AppDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t579732391F971A43006DB071 /* Demo.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t5797323A1F971A43006DB071 /* Base */,\n\t\t\t);\n\t\t\tname = Demo.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5797323E1F971A43006DB071 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t5797323F1F971A43006DB071 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t579732421F971A43006DB071 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 4.2;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t579732431F971A43006DB071 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tSWIFT_VERSION = 4.2;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t579732451F971A43006DB071 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 5B9DB0A27CB6D3B14B4FA504 /* Pods-ExpandableCell.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = \"ExpandableCell/Supporting Files/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.azonov.ExpandableCell;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t579732461F971A43006DB071 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 8A984765D95495A0BB3DFE38 /* Pods-ExpandableCell.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = \"ExpandableCell/Supporting Files/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.azonov.ExpandableCell;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t5797322D1F971A43006DB071 /* Build configuration list for PBXProject \"ExpandableCell\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t579732421F971A43006DB071 /* Debug */,\n\t\t\t\t579732431F971A43006DB071 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t579732441F971A43006DB071 /* Build configuration list for PBXNativeTarget \"ExpandableCell\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t579732451F971A43006DB071 /* Debug */,\n\t\t\t\t579732461F971A43006DB071 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 5797322A1F971A43006DB071 /* Project object */;\n}\n"
  },
  {
    "path": "Example/ExpandableCell.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:ExpandableCell.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/ExpandableCell.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:ExpandableCell.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/ExpandableCell.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/Podfile",
    "content": "use_frameworks!\n\ntarget 'ExpandableCell' do\n\tpod 'AZExpandable', :path => '../'\nend"
  },
  {
    "path": "Gemfile",
    "content": "# frozen_string_literal: true\n\nsource \"https://rubygems.org\"\n\ngit_source(:github) {|repo_name| \"https://github.com/#{repo_name}\" }\n\ngem \"cocoapods\"\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 Andrey\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "![AZExpandable](https://raw.githubusercontent.com/azonov/expandableTable/master/logo_long.png)\n\n**AZExpandable** is a lightweight proxy for UITableView to expand cells. It incapsulates native NSProxy mechanism inside and gives swifty api outside.\n<br />\n<br />General advantages: **No Subclassing**, **No Swizzling**, **Easy to intagrate**\n\n- [Requirements](#requirements)\n- [Communication](#communication)\n- [Installation](#installation)\n- [Usage](#usage)\n- [License](#license)\n\n## Example\n\n![Alt Text](https://media.giphy.com/media/l0HU17JvuEjnkLskg/giphy.gif)\n\n## Requirements\n\n- iOS 8.0+\n- Xcode 9.2+\n- Swift 4.0+\n\n## Communication\n\n- If you'd like to **ask a general question**, use [Twitter](http://twitter.com/avzonov).\n- If you **found a bug**, open an issue.\n- If you **have a feature request**, open an issue.\n- If you **want to contribute**, submit a pull request.\n\n## Installation\n\n### CocoaPods\n\n[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command:\n\n```bash\n$ gem install cocoapods\n```\n\n> CocoaPods 1.1+ is required to build AZExpandable.\n\nTo integrate AZExpandable into your Xcode project using CocoaPods, specify it in your `Podfile`:\n\n```ruby\nsource 'https://github.com/CocoaPods/Specs.git'\nuse_frameworks!\n\ntarget '<Your Target Name>' do\n    pod 'AZExpandable'\nend\n```\n\nThen, run the following command:\n\n```bash\n$ pod install\n```\n\n## Usage\n\n\n```swift\nprivate var expandableTable: ExpandableTable!// Expanding Table Proxy\n\noverride func viewDidLoad() {\n    super.viewDidLoad()\n    // infoProvider - UITableViewDelegate & UITableViewDataSource\n    expandableTable = ExpandableTable(with: tableView, infoProvider: self)\n}\n\nfunc expandCell(at indexPath: IndexPath) {\n    let cellClosure: CellClosure = { (IndexPath) -> (UITableViewCell) in\n    \t//Your custom expanding cell\n        return self.tableView.dequeueReusableCell(withIdentifier: \"Identifier\", for: indexPath)\n    }\n    expandableTable.expandCell(ExpandedCellInfo(for: indexPath, cellType: .custom(cellClosure)))\n}\n\nfunc unexpandCell() {\n\texpandableTable.unexpandCell()\n}\n```\n\n\n## License\n\nAZExpandable is released under the MIT license. [See LICENSE](https://github.com/azonov/expandableTable/blob/master/LICENSE) for details.\n"
  },
  {
    "path": "Source/ExpandableCell-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n#import \"ExpandableProxy.h\"\n"
  },
  {
    "path": "Source/ExpandableTable/Cells/ActivityIndicatorCell.swift",
    "content": "//\n//  ActivityIndicatorCell.swift\n//  AZExpandable\n//\n//  Created by Andrey Zonov on 11/17/18.\n//\n\nimport UIKit\n\nclass ActivityIndicatorCell: UITableViewCell {\n    \n    // MARK: Public Properties\n    lazy var activityIndicator: UIActivityIndicatorView = {\n        let frame = CGRect(origin: .zero, size: CGSize(width: 50, height: 50))\n        let activityIndicator = UIActivityIndicatorView(frame: frame)\n        \n        activityIndicator.color = .black\n        activityIndicator.hidesWhenStopped = false\n        \n        return activityIndicator\n    }()\n    \n    // MARK: Lifecycle\n    init() {\n        super.init(style: .default, reuseIdentifier: String(describing: type(of: self)))\n        \n        addSubview(activityIndicator)\n        activityIndicator.makeEdgesEqualToSuperView()\n        activityIndicator.startAnimating()\n        heightAnchor.constraint(equalToConstant: 44).isActive = true\n        separatorInset = UIEdgeInsets(top: 0, left: CGFloat.infinity, bottom: 0, right: 0)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n}\n"
  },
  {
    "path": "Source/ExpandableTable/Cells/DatePickerCell.swift",
    "content": "//\n//  DatePickerCell.swift\n//  AZExpandable\n//\n//  Created by Andrey Zonov on 20/10/2017.\n//\n\nimport UIKit\n\nclass DatePickerCell: UITableViewCell {\n    \n    // MARK: Public Properties\n    weak var datePicker: UIDatePicker!\n    \n    // MARK: Lifecycle\n    init() {\n        let datePicker = UIDatePicker(frame: .zero)\n        self.datePicker = datePicker\n        \n        super.init(style: .default, reuseIdentifier: String(describing: type(of: self)))\n        \n        addSubview(datePicker)\n        datePicker.makeEdgesEqualToSuperView()\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n}\n"
  },
  {
    "path": "Source/ExpandableTable/Cells/PickerCell.swift",
    "content": "//\n//  PickerCell.swift\n//  Pods-ExpandableCell\n//\n//  Created by Andrey Zonov on 27/10/2017.\n//\n\nimport UIKit\n\nclass PickerCell: UITableViewCell {\n    \n    // MARK: Public Properties\n    weak var picker: UIPickerView!\n    \n    // MARK: Lifecycle\n    init() {\n        let picker = UIPickerView(frame: .zero)\n        self.picker = picker\n        \n        super.init(style: .default, reuseIdentifier: String(describing: type(of: self)))\n        \n        addSubview(picker)\n        picker.makeEdgesEqualToSuperView()\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n}\n"
  },
  {
    "path": "Source/ExpandableTable/Cells/UIView+Autolayout.swift",
    "content": "//\n//  UIView+Autolayout.swift\n//  AZExpandable\n//\n//  Created by Andrey Zonov on 11/16/18.\n//\n\nimport UIKit\n\nextension UIView {\n    \n    func makeEdgesEqualToSuperView() {\n        guard let superView = superview else {\n            return\n        }\n        translatesAutoresizingMaskIntoConstraints = false\n        \n        NSLayoutConstraint.activate([\n            topAnchor.constraint(equalTo: superView.topAnchor),\n            bottomAnchor.constraint(equalTo: superView.bottomAnchor),\n            leftAnchor.constraint(equalTo: superView.leftAnchor),\n            rightAnchor.constraint(equalTo: superView.rightAnchor)])\n    }\n}\n"
  },
  {
    "path": "Source/ExpandableTable/ExpandableCellInfo.swift",
    "content": "//\n//  ExpandableCellInfo.swift\n//  Pods\n//\n//  Created by Andrey Zonov on 20/10/2017.\n//\n\nimport UIKit\n\npublic typealias CellClosure = ((IndexPath) -> (UITableViewCell))\npublic typealias DatePickerSetupClosure = ((UIDatePicker) -> ())\npublic typealias PickerSetupClosure = ((UIPickerView) -> ())\n\npublic struct ExpandedCellInfo: Equatable {\n    \n    // MARK: Private Data Structures\n    public enum CellType {\n        case datePicker(DatePickerSetupClosure?)\n        case picker(PickerSetupClosure)\n        case custom(CellClosure)\n    }\n    \n    // MARK: Public Properties\n    public var indexPath: IndexPath\n    public var cellType: CellType\n    \n    // MARK: Lifecycle\n    public init(for indexPath: IndexPath, cellType: CellType) {\n        self.indexPath = indexPath\n        self.cellType = cellType\n    }\n    \n    // MARK: Public\n    public static func ==(lhs: ExpandedCellInfo, rhs: ExpandedCellInfo) -> Bool {\n        return lhs.indexPath == rhs.indexPath\n    }\n    \n    func isHigherInSameSection(than hint: ExpandedCellInfo) -> Bool {\n        return hint.indexPath.section == indexPath.section\n            && hint.indexPath.row > indexPath.row\n    }\n    \n    func computedIndexPath(from indexPath: IndexPath) -> IndexPath {\n        var computedIndexPath = indexPath\n        if indexPath.section == self.indexPath.section\n            && indexPath.row > self.indexPath.row {\n            computedIndexPath.decrementRow()\n        }\n        return computedIndexPath\n    }\n}\n"
  },
  {
    "path": "Source/ExpandableTable/ExpandableTable.swift",
    "content": "//\n//  ExpandableTable.swift\n//  ExpandableCell\n//\n//  Created by Andrey Zonov on 18/10/2017.\n//  Copyright © 2017 Andrey Zonov. All rights reserved.\n//\n\nimport Foundation\n\npublic typealias TableInfoProvider = UITableViewDelegate & UITableViewDataSource\n\npublic class ExpandableTable: NSObject {\n    \n    // MARK: Private Properties\n    private var proxy: ExpandableProxy?\n    private var expandedCell: ExpandedCellInfo?\n    private weak var tableView: UITableView!\n    private weak var infoProvider: TableInfoProvider!\n    \n    // MARK: Lifecycle\n    public init(with tableView: UITableView, infoProvider: TableInfoProvider) {\n        self.tableView = tableView\n        self.infoProvider = infoProvider\n        super.init()\n        proxy = ExpandableProxy(tableDelegate: infoProvider, proxyDelegate: self)\n        tableView.dataSource = proxy\n        tableView.delegate = proxy\n    }\n    \n    // MARK: Public\n    public func expandCell(_ cell: ExpandedCellInfo) {\n        var resultCell = cell\n        resultCell.indexPath.incrementRow()\n        \n        guard expandedCell != resultCell else { return }\n        \n        if expandedCell != nil {\n            unexpandCell()\n        }\n        expandedCell = resultCell\n        tableView.beginUpdates()\n        tableView?.insertRows(at: [resultCell.indexPath], with: .middle)\n        tableView.endUpdates()\n    }\n    \n    public func unexpandCell() {\n        guard let indexPath = expandedCell?.indexPath else { return }\n        expandedCell = nil\n        tableView.beginUpdates()\n        tableView?.deleteRows(at: [indexPath], with: .middle)\n        tableView.endUpdates()\n    }\n}\n\n// MARK: - UITableViewDataSource\nextension ExpandableTable: UITableViewDataSource {\n    \n    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        let rows = infoProvider.tableView(tableView ,numberOfRowsInSection: section)\n        guard let expandedCell = expandedCell else {\n            return rows\n        }\n        return expandedCell.indexPath.section == section ? rows + 1 : rows\n    }\n    \n    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        guard indexPath != expandedCell?.indexPath else {\n            switch expandedCell!.cellType {\n            case .custom(let cellClosure):\n                return cellClosure(indexPath)\n                \n            case .datePicker(let setupClosure):\n                let cell = DatePickerCell()\n                setupClosure?(cell.datePicker)\n                return cell\n                \n            case .picker(let setupClosure):\n                let cell = PickerCell()\n                setupClosure(cell.picker)\n                return cell\n            }\n        }\n        let computedIndexPath = expandedCell?.computedIndexPath(from: indexPath) ?? indexPath\n        return infoProvider.tableView(tableView, cellForRowAt: computedIndexPath)\n    }\n}\n\n// MARK: - UITableViewDelegate\nextension ExpandableTable: UITableViewDelegate {\n    \n    public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {\n        guard indexPath != expandedCell?.indexPath else {\n            return UITableView.automaticDimension\n        }\n        let computedIndexPath = expandedCell?.computedIndexPath(from: indexPath) ?? indexPath\n        return infoProvider.tableView?(tableView, heightForRowAt: computedIndexPath) ?? UITableView.automaticDimension\n    }\n    \n    public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        if indexPath != expandedCell?.indexPath {\n            let computedIndexPath = expandedCell?.computedIndexPath(from: indexPath) ?? indexPath\n            infoProvider.tableView?(tableView, didSelectRowAt: computedIndexPath)\n        }\n    }\n}\n"
  },
  {
    "path": "Source/ExpandableTable/IndexPath+SyntaxSugar.swift",
    "content": "//\n//  IndexPath+SyntaxSugar.swift\n//  Pods\n//\n//  Created by Andrey Zonov on 20/10/2017.\n//\n\nimport Foundation\n\nextension IndexPath {\n    \n    mutating func incrementRow() {\n        row += 1\n    }\n    \n    mutating func decrementRow() {\n        row -= 1\n    }\n}\n"
  },
  {
    "path": "Source/ExpandableTable/PagingTable.swift",
    "content": "//\n//  PagingTable.swift\n//  AZExpandable\n//\n//  Created by Andrey Zonov on 18/11/2018.\n//\n\nimport UIKit\n\npublic typealias NextPageClosure = (PagingTable) -> ()\n\npublic class PagingTable: NSObject {\n    \n    public enum PagingError: Error {\n        case described(string: String)\n    }\n    \n    // MARK: Private Properties\n    private var proxy: ExpandableProxy?\n    private var loadMoreIndexPath: IndexPath?\n    private weak var tableView: UITableView!\n    private weak var infoProvider: TableInfoProvider!\n    private var nextPageClosure: NextPageClosure\n    \n    // MARK: Lifecycle\n    public init(tableView: UITableView,\n                infoProvider: TableInfoProvider,\n                nextPage: @escaping NextPageClosure) {\n        self.tableView = tableView\n        self.infoProvider = infoProvider\n        self.nextPageClosure = nextPage\n        super.init()\n        proxy = ExpandableProxy(tableDelegate: infoProvider, proxyDelegate: self)\n        tableView.dataSource = proxy\n        tableView.delegate = proxy\n    }\n    \n    public func addPagingIndicator() throws {\n        try makePagingIndicatorVisible(true)\n    }\n    \n    public func removePagingIndicator() throws {\n        try makePagingIndicatorVisible(false)\n    }\n    \n    private func makePagingIndicatorVisible(_ isVisible: Bool) throws {\n        let sectionsCount = tableView.numberOfSections\n        \n        guard sectionsCount > 0 else {\n            throw PagingError.described(string: \"numberOfSections > 0\")\n        }\n        \n        let rowsCount = tableView.numberOfRows(inSection: sectionsCount - 1)\n        \n        guard rowsCount > 0 else {\n            throw PagingError.described(string: \"rowsCount > 0\")\n        }\n        \n        var indexPath = IndexPath(item: rowsCount - 1,\n                                  section: sectionsCount - 1)\n        loadMoreIndexPath = isVisible ? indexPath : nil\n        tableView.beginUpdates()\n        if isVisible {\n            indexPath.incrementRow()\n            tableView?.insertRows(at: [indexPath], with: .top)\n        } else {\n            tableView?.deleteRows(at: [indexPath], with: .bottom)\n        }\n        tableView.endUpdates()\n    }\n}\n\n// MARK: - UITableViewDataSource\nextension PagingTable: UITableViewDataSource {\n    \n    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        let rows = infoProvider.tableView(tableView ,numberOfRowsInSection: section)\n        if loadMoreIndexPath?.section == section {\n            loadMoreIndexPath?.row = rows\n            return rows + 1\n        } else {\n            return rows\n        }\n    }\n    \n    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        guard loadMoreIndexPath != indexPath else {\n            return ActivityIndicatorCell()\n        }\n        return infoProvider.tableView(tableView, cellForRowAt: indexPath)\n    }\n}\n\n// MARK: - UITableViewDelegate\nextension PagingTable: UITableViewDelegate {\n    \n    public func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {\n        guard loadMoreIndexPath != indexPath else {\n            nextPageClosure(self)\n            return\n        }\n        infoProvider.tableView?(tableView, willDisplay: cell, forRowAt: indexPath)\n    }\n    \n    public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {\n        guard loadMoreIndexPath != indexPath else {\n            return UITableView.automaticDimension\n        }\n        return infoProvider.tableView?(tableView, heightForRowAt: indexPath) ?? UITableView.automaticDimension\n    }\n    \n    public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        guard loadMoreIndexPath != indexPath else {\n            return\n        }\n        infoProvider.tableView?(tableView, didSelectRowAt: indexPath)\n    }\n}\n"
  },
  {
    "path": "Source/Proxy/ExpandableProxy.h",
    "content": "//\n//  ExpandableProxy.h\n//  ExpandableCell\n//\n//  Created by Andrey Zonov on 18/10/2017.\n//  Copyright © 2017 Andrey Zonov. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n\n@interface ExpandableProxy : NSProxy <UITableViewDelegate, UITableViewDataSource>\n\n- (instancetype)initWithTableDelegate:(id <UITableViewDelegate, UITableViewDataSource>)tableDelegate\n                        proxyDelegate:(id <UITableViewDelegate, UITableViewDataSource>)proxyDelegate;\n\n@end\n"
  },
  {
    "path": "Source/Proxy/ExpandableProxy.m",
    "content": "//\n//  ExpandableProxy.m\n//  ExpandableCell\n//\n//  Created by Andrey Zonov on 18/10/2017.\n//  Copyright © 2017 Andrey Zonov. All rights reserved.\n//\n\n#import \"ExpandableProxy.h\"\n\n@interface ExpandableProxy()\n\n@property (nonatomic, weak) id proxyDelegate;\n@property (nonatomic, weak) id tableDelegate;\n\n@end\n\n@implementation ExpandableProxy\n\n- (instancetype)initWithTableDelegate:(id <UITableViewDelegate, UITableViewDataSource>)tableDelegate\n                        proxyDelegate:(id <UITableViewDelegate, UITableViewDataSource>)proxyDelegate\n{\n    self.tableDelegate = tableDelegate;\n    self.proxyDelegate = proxyDelegate;\n    \n    return self;\n}\n\n- (id)forwardingTargetForSelector:(SEL)aSelector {\n    if ([self.proxyDelegate respondsToSelector:aSelector]) {\n        return self.proxyDelegate;\n    } else if ([self.tableDelegate respondsToSelector:aSelector]) {\n        return self.tableDelegate;\n    }\n    return nil;\n}\n\n- (BOOL)respondsToSelector:(SEL)aSelector {\n    if ([self.proxyDelegate respondsToSelector:aSelector]) {\n        return YES;\n    } else if ([self.tableDelegate respondsToSelector:aSelector]) {\n        return YES;\n    }\n    return NO;\n}\n\n- (void)forwardInvocation:(NSInvocation *)invocation {\n    [invocation invokeWithTarget:self.tableDelegate];\n}\n\n- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel {\n    return [self.tableDelegate methodSignatureForSelector:sel];\n}\n\n@end\n"
  },
  {
    "path": "_config.yml",
    "content": "theme: jekyll-theme-architect"
  }
]