anchor.diff:    void _handleTransitionEnd(html.TransitionEvent e) {
       e.stopPropagation();
   
  -    final classes = (e.target as html.Element).classes;
  -    if (classes.contains('enter')) {
  -      classes.remove('enter');
  -      classes.remove('active');
  -    } else if (classes.contains('leave')) {
  -      classes.remove('leave');
  -      classes.remove('active');
  -      (e.target as html.Element).remove();
  +    final html.Element target = e.target;
  +    final key = _nodeKeys[target];
  +    if (key != null) {
  +      final transitionNode = _nodes[key];
  +      switch (transitionNode.state) {
  +        case _CssTransitionNode.normal:
  +          break;
  +        case _CssTransitionNode.enter:
  +          final classes = target.classes;
  +          classes.remove('enter');
  +          classes.remove('active');
  +          transitionNode.state = _CssTransitionNode.normal;
  +          break;
  +        case _CssTransitionNode.leave:
  +          target.remove();
  +          transitionNode.node.dispose();
  +          _nodes.remove(key);
  +          _nodeKeys.remove(target);
  +          break;
  +      }
       }
     }
   
     void insertChild(VNode container, VNode node, VNode next) {
  -    assert((node.flags & VNode.componentFlag) != 0);
  +    assert(invariant((node.flags & VNode.componentFlag) != 0,
  +           'CssTransitionContainer can control Component nodes only.'));
  +    assert(invariant((node.key != null),
  +           'CssTransitionContainer can control nodes with explicit keys only.'));
   
       final nextRef = next == null ? null : next.ref;
       node.create((this as VContext));
  
positive.code: 
  library uix.src.misc.css_transition_container;
  
  import 'dart:html' as html;
  import '../env.dart';
  import '../container.dart';
  import '../vcontext.dart';
  import '../vnode.dart';
  
  /// *EXPERIMENTAL* class for group transitions
  /// (doesn't work properly, proof of concept)
  abstract class CssTransitionContainer implements Container {
    html.Element get element;
  
    void initTransitionListeners() {
      element.onTransitionEnd.listen(_handleTransitionEnd);
  
negative.code: 
    void updateChild(VNode container, VNode aNode, VNode bNode) {
      aNode.update(bNode, (this as VContext));
      _nodes[bNode.key].node = bNode;
    }
  }
  