anchor.diff:    /**
      * Adds the popup to the map.
      */
  -  external TileLayer addTo(LeafletMap map);
  +  external TileLayer addTo(Map map);
   
     /**
      * Adds the popup to the map and closes the previous one. The same as map.openPopup(popup).
      */
  -  external TileLayer openOn(LeafletMap map);
  +  external TileLayer openOn(Map map);
   
     /**
      * Sets the geographical point where the popup will open.
  
positive.code:                               num minZoom, num maxZoom, LatLngBounds maxBounds});
  }
  
  @JS("L.latLngBounds")
  class LatLngBounds {
    external LatLngBounds(LatLng southWest, LatLng northEast);
  }
  
  @JS("L.latLng")
  class LatLng {
    external LatLng(double latitude, double longitude);
    external double get lat;
    external double get lng;
  }
  
  @JS()
  class ILayer {
    external void onAdd(LeafletMap map);
    external void onRemove(LeafletMap map);
  }
  
  @JS("L.tileLayer")
  
negative.code:   /**
     * Creates an icon instance with the given options.
     */
    external factory IconOptions({
        String iconUrl,
        String iconRetinaUrl,
        Point iconSize,
        Point iconAnchor,
        String shadowUrl,
        String shadowRetinaUrl,
        Point shadowSize,
        Point shadowAnchor,
        Point popupAnchor,
        String className
      });
  }
  
  @JS("L.point")
  class Point {
    /**
     * Creates a Point object with the given x and y coordinates. If optional round is set to true, rounds the x and y values.
     */
    external factory Point(num x, num y, [bool round]);
  }
  
  @JS("L.featureGroup")
  class FeatureGroup {
  
    /**
     * Create a layer group, optionally given an initial set of layers.
     */
    external factory FeatureGroup([List<ILayer> layers]);
  
    /**
     * Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).
     */
    external LatLngBounds getBounds();
  
    /**
     * Sets the given path options to each layer of the group that has a setStyle method
     */
    external FeatureGroup setStyle(PathOptions style);
  
    /**
     * Brings the layer group to the top of all other layers.
     */
    external FeatureGroup bringToFront();
  
    /**
     * Brings the layer group to the bottom of all other layers.
     */
    external FeatureGroup bringToBack();
  }
  
  @JS()
  @anonymous
  class PathOptions {
  
    external factory PathOptions({
    bool stroke,
    String color,
    num weight,
    num opacity,
    bool fill,
    String fillColor,
    num fillOpacity,
    String fillRule,
    String dashArray,
    String lineCap,
    String lineJoin,
    bool clickable,
    String pointerEvents,
    String className
    });
  }
  
  @JS()
  @anonymous
  class Path  extends ILayer {
  
    /**
     * Adds the layer to the map.
     */
    external Path addTo(Map map);
  
  }
  
  @JS("L.polyline")
  class Polyline extends Path {
  
    external factory Polyline(List<LatLng> latlngs, [PolylineOptions options]);
  
  }
  
  @JS()
  @anonymous
  class PolylineOptions extends PathOptions {
  
    external factory PolylineOptions({
      num smoothFactor,
      bool noClip,
      bool stroke,
      String color,
      num weight,
      num opacity,
      bool fill,
      String fillColor,
      num fillOpacity,
      String fillRule,
      String dashArray,
      String lineCap,
      String lineJoin,
      bool clickable,
      String pointerEvents,
      String className
    });
  }
  
  @JS("L.layerGroup")
  class LayerGroup extends ILayer {
    /**
     * Create a layer group, optionally given an initial set of layers.
     */
    external factory LayerGroup([List<ILayer> layers]);
  
    /**
     * Adds the group of layers to the map.
     */
    external LayerGroup addTo(Map map);
  
    /**
     * Adds a given layer to the group.
     */
    external LayerGroup addLayer(ILayer layer);
  
    /**
     * Removes a given layer from the group.
     */
    external LayerGroup removeLayer(layerOrId);
  
    /**
     * Returns true if the given layer is currently added to the group.
     */
    external bool hasLayer(ILayer layer);
  
    /**
     * Returns the layer with the given id.
     */
    external ILayer getLayer(String id);
  
    /**
     * Returns an array of all the layers added to the group.
     */
    external List<ILayer> getLayers();
  
    /**
     * Removes all the layers from the group.
     */
    external LayerGroup clearLayers();
  
    /**
     * Iterates over the layers of the group, optionally specifying context of the iterator function.
        group.eachLayer(function (layer) {
        layer.bindPopup('Hello');
        });
     */
    external LayerGroup eachLayer(Function fn, [Object context]);
  
    /**
     * Returns a GeoJSON representation of the layer group (GeoJSON FeatureCollection).
     */
    external Object toGeoJSON();
  }