anchor.diff:      this.port('in:elem').forceCondition(Elements.isElement);
       this.port('in:beat').forceCondition(Elements.isElement);
   
  +    this.port('in:elem').onSocketSubscription((sub){
  +        this.port('in:elem').send(this.elem,sub.get('alias'));
  +    });
  +
       this.port('in:elem').tap((n){
         this.elem = n.data;
         beat(n);
  
positive.code:      ]);
     });
    
  }
  
  class GetAttr extends Component{
      html.Element elem;
  
      static create() => new GetAttr();
  
      GetAttr(): super('GetAttr'){
        this.removeDefaultPorts();
      
        this.makePort('in:elem');
        this.makePort('in:get');
        this.makePort('out:value');
        
        this.port('in:elem').forceCondition(Elements.isElement);
        this.port('in:get').forceCondition((n){ return Valids.exist(this.elem); });
        this.port('in:get').forceCondition(Valids.isString);
  
        this.port('in:elem').tap((n){ this.elem = n.data; });
        this.port('in:get').tap((n){
          this.port('out:value').send(this.elem.getAttribute(n.data));
        });
  
  
      }
  }
  
  class SetAttr extends Component{
      html.Element elem;
      
      static create() => new SetAttr();
  
      SetAttr(): super('SetAttr'){
        this.removeDefaultPorts();
  
        this.makePort('in:elem');
        this.makePort('in:set');
        this.makePort('in:attr');
  
        this.port('in:elem').tap((n){ this.elem = n.data; });
        this.port('in:elem').forceCondition(Elements.isElement);
  
        this.port('in:set').forceCondition((n){ return Valids.exist(this.elem); });
        this.port('in:set').forceCondition(Valids.isString);
  
negative.code:    }
  }
  
  class AddClass extends AttrCore{
    
      AddClass(){
        this.meta('id','AddClass');
  
        this.makePort('in:class');
        
        this.port('in:val').forceCondition((n){ return Valids.exist(this.elem); })
        this.port('in:val').forceCondition(Valids.isString);
        this.port('in:val').tap((n){
          this.elem.classes.add(n.data);
        });
      }
  }
  
  class RemoveClass extends AttrCore{
  
      RemoveClass(){
        this.meta('id','RemoveClass');
  
        this.makePort('in:val');
        this.makePort('out:success');
        this.makePort('err:failed');
  
        this.port('in:val').forceCondition((n){ return Valids.exist(this.elem); });
        this.port('in:val').tap((n){
            if(!this.elem.classes.contains(n.data)) return this.port('err:failed').send(n);
            this.elem.remove(n.data);
            this.port('out:success').send(n);
        });
      }
  
  }
  
  class GetDataAttr extends AttrCore{
  
      GetDataAttr(){
        this.meta('id','GetDataAttr');
  
        this.makePort('in:get');
        this.makePort('out:val');
  
        this.port('in:get').forceCondition((n){ return Valids.exist(this.elem); });
        this.port('in:get').forceCondition(Valids.isString);
  
        this.port('in:get').tap((n){
           Funcs.when(this.elem.dataset.containsKey(n.data),(){
             this.port('out:val').send(this.elem.dataset[n.data]);
           });
        });
  
      }
  }
  
  class SetDataAttr extends AttrCore{
  
      SetDataAttr(){
        this.meta('id','SetDataAttr');
  
        this.makePort('in:set');
        this.makePort('out:val');
  
        this.port('in:set').forceCondition(Elements.elementExist(this.elem));
        this.port('in:set').forceCondition(Valids.isString);
  
        this.port('in:set').tap((n){
            
        });
  
      }
  }
  
  class DataAttr extends AttrCore{
  
      DataAttr(){
        this.meta('id','DataAttr');
        this.enableSubnet();
  
        this.makePort('in:get');
        this.makePort('in:set');
        this.makePort('out:res');
  
        this.network.add('elements/GetDataAttr',(com){
  
        });
  
        this.network.add('elements/SetDataAttr',(com){
  
        });
  
      }
  }
  
  
  class Element extends Component{
    html.Element elem;
    
  