           defer { tableView.endUpdates() }
         }
         indexPaths.forEach { indexPath in
-          tableView.insertRows(at: IndexSet(integer: indexPath.item), withAnimation: [.effectFade, .slideUp])
+          tableView.insertRows(at: IndexSet(integer: indexPath.item), withAnimation: configurator.insertAnimation)
         }
       case .deleteItems(let indexPaths):
         if !updating && indexPaths.count > 1 {

  }
}

public extension SignalProtocol where Element: DataSourceEventProtocol, Element.DataSource: QueryableDataSourceProtocol, Element.DataSource.Item: Any, Element.DataSource.Index == Int, Error == NoError {

  public typealias DataSource = Element.DataSource

  @discardableResult
  public func bind(to tableView: NSTableView, animated: Bool = true, measureCell: ((DataSource, Int, NSTableView) -> CGFloat)? = nil, createCell: @escaping (DataSource, Int, NSTableView) -> NSView?) -> Disposable {

    let dataSource = Property<DataSource?>(nil)

		if let measureCell = measureCell {
      tableView.reactive.delegate.feed(
				property: dataSource,
				to: #selector(NSTableViewDelegate.tableView(_:heightOfRow:)),

      property: dataSource,
      to: #selector(NSTableViewDelegate.tableView(_:viewFor:row:)),
      map: { (dataSource: DataSource?, tableView: NSTableView, _: NSTableColumn, row: Int) -> NSView? in
        return configurator.createCell(dataSource!, row, tableView)
      }
    )

