 
 	@objc func numberOfRowsInTableView(tableView: NSTableView) -> Int {
 		return elements.count
+	}
+
+	func updateCachedHeights() {
+		cachedHeights.removeAll(keepCapacity: true)
+		for element in elements {
+			let node = element.assembleLayoutNode()
+			let layout = node.layout(maxWidth: tableView.frame.size.width)
+			cachedHeights[memoryAddress(element)] = layout.frame.size.height
+		}
 	}
 }
 

	}

	func parentKeyForCell(cell: FewListCell) -> String {
		let ptr = Unmanaged<AnyObject>.passUnretained(cell).toOpaque()
		return "\(ptr)"
	}

	@objc func tableView(tableView: NSTableView, heightOfRow row: Int) -> CGFloat {
		let height = NSHeight(elements[row].frame)
		return height > CGFloat(0) ? height : defaultRowHeight
	}

	@objc func tableViewSelectionIsChanging(notification: NSNotification) {


		if let scrollView = realizedSelf?.view as? FewScrollView {
			let handler = scrollView.handler

			handler?.elements = elements

