anchor.diff:        : element = div(a: 'flex', c: 'overflow-y table-border table-virtual'),
           _isVirtual = true {
       _init();
  +
       _spacerBeforeVisibleRows = CoreElement('tr');
       _spacerAfterVisibleRows = CoreElement('tr');
   
  -    // TODO(jacobr): remove call to allowInterop once
  -    // https://github.com/dart-lang/sdk/issues/35484 is fixed.
  -    _visibilityObserver = IntersectionObserver(
  -      allowInterop(_visibilityChange),
  -      {'root': element.element},
  -    );
  -    _visibilityObserver.observe(_spacerBeforeVisibleRows.element);
  -    _visibilityObserver.observe(_spacerAfterVisibleRows.element);
  -    element.onScroll.listen((_) => _rebuildTable());
  -  }
  -
  -  IntersectionObserver _visibilityObserver;
  +    element.onScroll.listen((_) => _scheduleRebuild());
  +  }
   
     final CoreElement element;
     final bool _isVirtual;
  
positive.code:   }
  
    void _rebuildVirtualTable() {
      int firstRenderedRowInclusive = 0;
      int lastRenderedRowExclusive = data?.length ?? 0;
  
  
negative.code: 
          currentColumnIndex++;
  
          // TODO(dantup): Should we make CoreElement expose ClassList instead of
          // having flat strings?
          tableCell.element.classes.clear();
          if (column.cssClass != null) {
            column.cssClass.split(' ').forEach(tableCell.clazz);
  