├── .eslintrc
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── docs
├── example.html
├── logo
│ ├── github.svg
│ ├── makina.svg
│ └── npm.svg
├── meta.js
├── meta.json
└── style.css
├── images
├── measure-control.png
└── measure-control.svg
├── index.html
├── leaflet.measurecontrol.css
├── leaflet.measurecontrol.js
├── leaflet.measurecontrol.min.js
└── package.json
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "makina",
3 | "env": {
4 | "browser": true,
5 | "amd": true,
6 | "es6": false
7 | },
8 | "parserOptions": {
9 | "ecmaVersion": 5,
10 | "sourceType": "script"
11 | },
12 | "rules": {
13 | "comma-dangle": ["off"],
14 | "func-names": ["off"],
15 | "global-require": ["off"],
16 | "indent": [2, 2, { "SwitchCase": 1, "VariableDeclarator": 1, "outerIIFEBody": 1 }],
17 | "no-console": 1,
18 | "no-param-reassign": 0,
19 | "no-underscore-dangle": 0,
20 | "no-var": ["off"],
21 | "object-shorthand": ["off"],
22 | "prefer-template": ["off"],
23 | "prefer-arrow-callback": ["off"]
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 |
2 | 1.2.0 / 2018-03-09
3 | ==================
4 |
5 | * Put changelog in a dedicated file
6 | * Lint README file and add languages to code blocks
7 | * Enforce new ESLint setup
8 | * Use eslint-config-makina for linting and adapt rules
9 | * Set leaflet Draw as peerDependency
10 | * Add npm script for linting
11 | * Adapt and enforce eslint rules
12 | * Migrate from minifier to uglifyjs
13 | * Upgrade normalize.css to latest version
14 | * Regroup scripts and styles by dependencies
15 | * Simplify demo by including css and style from current project
16 | * Remove useless elements in demo html
17 | * Embed demo scripts in html
18 | * Use Leaflet Draw from CDN instead of including it in sources
19 | * Config responsive menu and add github logo
20 |
21 | 1.1.0 / 2016-09-05
22 | ==================
23 |
24 | * Add npm support
25 | * Add support for AMD and CommonJS loading
26 | * Set example in docs folder
27 |
28 | 1.0.0
29 | =====
30 |
31 | * Initial version
32 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2013, Makina Corpus
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without modification,
5 | are permitted provided that the following conditions are met:
6 |
7 | Redistributions of source code must retain the above copyright notice, this
8 | list of conditions and the following disclaimer.
9 |
10 | Redistributions in binary form must reproduce the above copyright notice, this
11 | list of conditions and the following disclaimer in the documentation and/or
12 | other materials provided with the distribution.
13 |
14 | Neither the name of the {organization} nor the names of its
15 | contributors may be used to endorse or promote products derived from
16 | this software without specific prior written permission.
17 |
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
22 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Leaflet.MeasureControl
5 | ======================
6 |
7 | Leaflet control to mesure distances on the map.
8 |
9 | Requires [Leaflet.Draw](https://github.com/leaflet/Leaflet.Draw#readme)
10 |
11 | Check out the [demo](http://makinacorpus.github.io/Leaflet.MeasureControl/)
12 |
13 | Install
14 | -------
15 |
16 | ```shell
17 | npm install leaflet.measurecontrol
18 | ```
19 |
20 | Usage
21 | -----
22 |
23 | As map option:
24 |
25 | ```js
26 | var map = L.map('map', { measureControl:true });
27 | ```
28 |
29 | Or like any control:
30 |
31 | ```js
32 | L.Control.measureControl().addTo(map);
33 | ```
34 |
35 | Development
36 | -----------
37 |
38 | ```shell
39 | npm install # install dependencies
40 | npm run release # minify js and copy sources in docs (example)
41 | ```
42 |
43 | Changelog
44 | ---------
45 |
46 | See [CHANGELOG.md](./CHANGELOG.md).
47 |
48 | Authors
49 | -------
50 |
51 | * Gilles Bassière
52 | * Alexandra Janin
53 |
54 | [](http://makinacorpus.com)
55 |
--------------------------------------------------------------------------------
/docs/example.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | l
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
36 |
37 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/docs/logo/github.svg:
--------------------------------------------------------------------------------
1 | GitHub
--------------------------------------------------------------------------------
/docs/logo/makina.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
18 |
22 |
25 |
27 |
31 |
35 |
45 |
53 |
61 |
68 |
74 |
90 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/docs/logo/npm.svg:
--------------------------------------------------------------------------------
1 | npm
--------------------------------------------------------------------------------
/docs/meta.js:
--------------------------------------------------------------------------------
1 | const logJson = async () => {
2 | const reponse = await fetch('docs/meta.json');
3 | return await reponse.json();
4 | }
5 |
6 | (async () => {
7 | const meta = await logJson()
8 | document.querySelector("title").innerText= meta.name
9 | document.querySelector(".demo-name").innerText= meta.name
10 | if (meta.npm){
11 | document.querySelector(".npm").href="https://www.npmjs.com/package/" + meta.npm
12 | document.querySelector(".npm .title").innerText= meta.npm
13 | }else{
14 | document.querySelector(".npm").remove()
15 | }
16 | document.querySelector(".sources").href= meta.github
17 | document.querySelector(".readme-md").src= meta.github.replace("github.com","raw.githubusercontent.com") + "HEAD/README.md"
18 | if (meta.moreInfo){
19 | document.querySelector(".moreInfo").innerText= meta.moreInfo
20 | }
21 | })()
22 |
23 |
24 |
--------------------------------------------------------------------------------
/docs/meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "name" : "Leaflet.MeasureControl",
3 | "github" : "https://github.com/makinacorpus/Leaflet.MeasureControl/",
4 | "npm" : "leaflet.measurecontrol"
5 | }
--------------------------------------------------------------------------------
/docs/style.css:
--------------------------------------------------------------------------------
1 | html {
2 | box-sizing: border-box;
3 | font-family: "Helvetica", arial, sans-serif;
4 | }
5 |
6 | html,
7 | body {
8 | height: 100%;
9 | width: 100%;
10 | overflow: hidden;
11 | }
12 |
13 | * {
14 | box-sizing: inherit;
15 | }
16 |
17 | body {
18 | display: flex;
19 | flex-direction: column;
20 | }
21 |
22 | header {
23 | padding: 0.5rem 1rem;
24 | background: #20273c;
25 | color: white;
26 | display: flex;
27 | z-index: 2;
28 | justify-content: space-between;
29 | }
30 |
31 | header a {
32 | color: white;
33 | }
34 |
35 | main {
36 | z-index: 1;
37 | display: flex;
38 | position: relative;
39 | overflow: hidden;
40 | height: 100%;
41 | flex-shrink: 1;
42 | }
43 |
44 | header,
45 | main {
46 | width: 100%;
47 | }
48 |
49 | h1 {
50 | margin: 0;
51 | font-size: 1.5rem;
52 | padding: 0.7rem;
53 | }
54 |
55 | h2 {
56 | margin: 0;
57 | font-size: 1.2rem;
58 | }
59 |
60 | /* ---- MENU ---- */
61 |
62 | .menu {
63 | display: flex;
64 | justify-content: space-around;
65 | align-items: center;
66 | }
67 |
68 | .menu .title {
69 | padding-top: 5px;
70 | }
71 |
72 | .menu > a {
73 | display: flex;
74 | align-items: center;
75 | font-weight: 700;
76 | text-decoration: none;
77 | padding: 0rem;
78 | text-align: right;
79 | margin: 0 0.4rem;
80 | }
81 |
82 | .menu a:hover,
83 | .menu a:focus {
84 | text-decoration: underline;
85 | }
86 |
87 | .menu-toggle {
88 | background: none;
89 | border: none;
90 | outline: none;
91 | cursor: pointer;
92 | display: none;
93 | }
94 |
95 | .menu-toggle.close .bar:nth-child(1) {
96 | transform: translateY(7px) rotateZ(45deg);
97 | }
98 |
99 | .menu-toggle.close .bar:nth-child(2) {
100 | transform: translateX(300px);
101 | }
102 |
103 | .menu-toggle.close .bar:nth-child(3) {
104 | transform: translateY(-7px) rotateZ(-45deg);
105 | }
106 |
107 | .bar {
108 | display: block;
109 | height: 2px;
110 | width: 20px;
111 | margin: 5px 0;
112 | background: white;
113 | border-radius: 2px;
114 | transition: transform 0.2s ease-out;
115 | }
116 |
117 | .icon {
118 | height: 24px;
119 | margin: 4px;
120 | }
121 |
122 | .logo {
123 | height: 50px;
124 | }
125 |
126 | #map {
127 | height: 50%;
128 | width: 100%;
129 | }
130 |
131 | /* ---- SIDEBAR ---- */
132 |
133 | .side {
134 | background-color: #ffffff;
135 | width: 360px;
136 | height: 100%;
137 | flex-shrink: 0;
138 | overflow-y: scroll;
139 | color: rgb(0, 0, 0);
140 | border-left: 1px solid rgba(0, 0, 0, 0.3);
141 | }
142 | .side h1 {
143 | margin-top: 10px;
144 | margin-bottom: 16px;
145 | padding: 0.7px;
146 | padding-bottom: 5px;
147 | margin-left: 5px;
148 | line-height: 1.2;
149 | border-bottom: 1px solid rgba(0,0,0,0.12);
150 | }
151 |
152 | #demoIframe{
153 | border: none;
154 | }
155 |
156 | @media screen and (max-width: 850px) {
157 | .side {
158 | position: absolute;
159 | transform: translateX(0px);
160 | right: 0;
161 | transition:
162 | transform 0.2s ease-out,
163 | box-shadow 0.2s ease-out;
164 |
165 | max-width: 100vw;
166 | -webkit-box-shadow: -5px 0px 15px 0px rgba(0,0,0,0.5);
167 | -moz-box-shadow: -5px 0px 15px 0px rgba(0,0,0,0.5);
168 | box-shadow: -5px 0px 15px 0px rgba(0,0,0,0.5);
169 | }
170 |
171 | .side.closed {
172 | transform: translateX(360px);
173 | -webkit-box-shadow: none;
174 | -moz-box-shadow: none;
175 | box-shadow: none;
176 | }
177 |
178 | .menu a .title {
179 | display: none;
180 | }
181 |
182 | .menu-toggle {
183 | z-index: 3;
184 | display: block;
185 | }
186 |
187 | header {
188 | flex-wrap: wrap;
189 | justify-content: flex-end;
190 | }
191 |
192 | header h1 {
193 | font-size: 1em;
194 | flex-grow: 1;
195 | }
196 | .icon {
197 | height: 18px;
198 | }
199 | .logo {
200 | height: 30px;
201 | }
202 | }
203 |
204 | @media (prefers-color-scheme: dark) {
205 | .side {
206 | background-color: #0d1117;
207 | color: #ffffff;
208 | }
209 | .side h1{
210 | border-bottom-color: rgba(255, 255, 255, 0.15);
211 | }
212 | }
213 |
214 |
215 |
--------------------------------------------------------------------------------
/images/measure-control.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/makinacorpus/Leaflet.MeasureControl/b1a96e9d30df44ecd3a1ba9f3e130faecd801c20/images/measure-control.png
--------------------------------------------------------------------------------
/images/measure-control.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
21 |
23 |
41 |
43 |
44 |
46 | image/svg+xml
47 |
49 |
50 |
51 |
52 |
53 |
58 |
60 |
63 |
70 |
75 |
80 |
85 |
90 |
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
32 |
33 |
35 |
36 |
37 |
38 |
40 |
41 |
43 |
44 |
45 | Description
46 |
47 |
48 |
69 |
71 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
96 |
97 |
98 |
--------------------------------------------------------------------------------
/leaflet.measurecontrol.css:
--------------------------------------------------------------------------------
1 | .leaflet-control-draw-measure {
2 | background-image: url(images/measure-control.png);
3 | }
4 |
--------------------------------------------------------------------------------
/leaflet.measurecontrol.js:
--------------------------------------------------------------------------------
1 | (function (factory, window) {
2 | // define an AMD module that relies on 'leaflet'
3 | if (typeof define === 'function' && define.amd) {
4 | define(['leaflet'], function (L) {
5 | factory(L, window.toGeoJSON);
6 | });
7 |
8 | // define a Common JS module that relies on 'leaflet'
9 | } else if (typeof exports === 'object') {
10 | module.exports = function (L) {
11 | if (L === undefined) {
12 | if (typeof window !== 'undefined') {
13 | L = require('leaflet'); // eslint-disable-line import/no-unresolved
14 | }
15 | }
16 | factory(L);
17 | return L;
18 | };
19 | } else if (typeof window !== 'undefined' && window.L) {
20 | factory(window.L);
21 | }
22 | }(function (L) {
23 | L.Polyline.Measure = L.Draw.Polyline.extend({
24 | addHooks: function () {
25 | L.Draw.Polyline.prototype.addHooks.call(this);
26 | if (this._map) {
27 | this._markerGroup = new L.LayerGroup();
28 | this._map.addLayer(this._markerGroup);
29 |
30 | this._markers = [];
31 | this._map.on('click', this._onClick, this);
32 | this._startShape();
33 | }
34 | },
35 |
36 | removeHooks: function () {
37 | L.Draw.Polyline.prototype.removeHooks.call(this);
38 |
39 | this._clearHideErrorTimeout();
40 |
41 | // !\ Still useful when control is disabled before any drawing (refactor needed?)
42 | this._map
43 | .off('pointermove', this._onMouseMove, this)
44 | .off('mousemove', this._onMouseMove, this)
45 | .off('click', this._onClick, this);
46 |
47 | this._clearGuides();
48 | this._container.style.cursor = '';
49 |
50 | this._removeShape();
51 | },
52 |
53 | _startShape: function () {
54 | this._drawing = true;
55 | this._poly = new L.Polyline([], this.options.shapeOptions);
56 | // this is added as a placeholder, if leaflet doesn't recieve
57 | // this when the tool is turned off all onclick events are removed
58 | this._poly._onClick = function () {};
59 |
60 | this._container.style.cursor = 'crosshair';
61 |
62 | this._updateTooltip();
63 | this._map
64 | .on('pointermove', this._onMouseMove, this)
65 | .on('mousemove', this._onMouseMove, this);
66 | },
67 |
68 | _finishShape: function () {
69 | this._drawing = false;
70 |
71 | this._cleanUpShape();
72 | this._clearGuides();
73 |
74 | this._updateTooltip();
75 |
76 | this._map
77 | .off('pointermove', this._onMouseMove, this)
78 | .off('mousemove', this._onMouseMove, this);
79 |
80 | this._container.style.cursor = '';
81 | },
82 |
83 | _removeShape: function () {
84 | if (!this._poly) return;
85 | this._map.removeLayer(this._poly);
86 | delete this._poly;
87 | this._markers.splice(0);
88 | this._markerGroup.clearLayers();
89 | },
90 |
91 | _onClick: function () {
92 | if (!this._drawing) {
93 | this._removeShape();
94 | this._startShape();
95 | }
96 | },
97 |
98 | _getTooltipText: function () {
99 | var labelText = L.Draw.Polyline.prototype._getTooltipText.call(this);
100 | if (!this._drawing) {
101 | labelText.text = '';
102 | }
103 | return labelText;
104 | }
105 | });
106 |
107 | L.Control.MeasureControl = L.Control.extend({
108 |
109 | statics: {
110 | TITLE: 'Measure distances'
111 | },
112 | options: {
113 | position: 'topleft',
114 | handler: {}
115 | },
116 |
117 | toggle: function () {
118 | if (this.handler.enabled()) {
119 | this.handler.disable.call(this.handler);
120 | } else {
121 | this.handler.enable.call(this.handler);
122 | }
123 | },
124 |
125 | onAdd: function (map) {
126 | var link = null;
127 | var className = 'leaflet-control-draw';
128 |
129 | this._container = L.DomUtil.create('div', 'leaflet-bar');
130 |
131 | this.handler = new L.Polyline.Measure(map, this.options.handler);
132 |
133 | this.handler.on('enabled', function () {
134 | this.enabled = true;
135 | L.DomUtil.addClass(this._container, 'enabled');
136 | }, this);
137 |
138 | this.handler.on('disabled', function () {
139 | delete this.enabled;
140 | L.DomUtil.removeClass(this._container, 'enabled');
141 | }, this);
142 |
143 | link = L.DomUtil.create('a', className + '-measure', this._container);
144 | link.href = '#';
145 | link.title = L.Control.MeasureControl.TITLE;
146 |
147 | L.DomEvent
148 | .addListener(link, 'click', L.DomEvent.stopPropagation)
149 | .addListener(link, 'click', L.DomEvent.preventDefault)
150 | .addListener(link, 'click', this.toggle, this);
151 |
152 | return this._container;
153 | }
154 | });
155 |
156 |
157 | L.Map.mergeOptions({
158 | measureControl: false
159 | });
160 |
161 |
162 | L.Map.addInitHook(function () {
163 | if (this.options.measureControl) {
164 | this.measureControl = L.Control.measureControl().addTo(this);
165 | }
166 | });
167 |
168 |
169 | L.Control.measureControl = function (options) {
170 | return new L.Control.MeasureControl(options);
171 | };
172 | }, window));
173 |
--------------------------------------------------------------------------------
/leaflet.measurecontrol.min.js:
--------------------------------------------------------------------------------
1 | (function(factory,window){if(typeof define==="function"&&define.amd){define(["leaflet"],function(L){factory(L,window.toGeoJSON)})}else if(typeof exports==="object"){module.exports=function(L){if(L===undefined){if(typeof window!=="undefined"){L=require("leaflet")}}factory(L);return L}}else if(typeof window!=="undefined"&&window.L){factory(window.L)}})(function(L){L.Polyline.Measure=L.Draw.Polyline.extend({addHooks:function(){L.Draw.Polyline.prototype.addHooks.call(this);if(this._map){this._markerGroup=new L.LayerGroup;this._map.addLayer(this._markerGroup);this._markers=[];this._map.on("click",this._onClick,this);this._startShape()}},removeHooks:function(){L.Draw.Polyline.prototype.removeHooks.call(this);this._clearHideErrorTimeout();this._map.off("pointermove",this._onMouseMove,this).off("mousemove",this._onMouseMove,this).off("click",this._onClick,this);this._clearGuides();this._container.style.cursor="";this._removeShape()},_startShape:function(){this._drawing=true;this._poly=new L.Polyline([],this.options.shapeOptions);this._poly._onClick=function(){};this._container.style.cursor="crosshair";this._updateTooltip();this._map.on("pointermove",this._onMouseMove,this).on("mousemove",this._onMouseMove,this)},_finishShape:function(){this._drawing=false;this._cleanUpShape();this._clearGuides();this._updateTooltip();this._map.off("pointermove",this._onMouseMove,this).off("mousemove",this._onMouseMove,this);this._container.style.cursor=""},_removeShape:function(){if(!this._poly)return;this._map.removeLayer(this._poly);delete this._poly;this._markers.splice(0);this._markerGroup.clearLayers()},_onClick:function(){if(!this._drawing){this._removeShape();this._startShape();return}},_getTooltipText:function(){var labelText=L.Draw.Polyline.prototype._getTooltipText.call(this);if(!this._drawing){labelText.text=""}return labelText}});L.Control.MeasureControl=L.Control.extend({statics:{TITLE:"Measure distances"},options:{position:"topleft",handler:{}},toggle:function(){if(this.handler.enabled()){this.handler.disable.call(this.handler)}else{this.handler.enable.call(this.handler)}},onAdd:function(map){var link=null;var className="leaflet-control-draw";this._container=L.DomUtil.create("div","leaflet-bar");this.handler=new L.Polyline.Measure(map,this.options.handler);this.handler.on("enabled",function(){this.enabled=true;L.DomUtil.addClass(this._container,"enabled")},this);this.handler.on("disabled",function(){delete this.enabled;L.DomUtil.removeClass(this._container,"enabled")},this);link=L.DomUtil.create("a",className+"-measure",this._container);link.href="#";link.title=L.Control.MeasureControl.TITLE;L.DomEvent.addListener(link,"click",L.DomEvent.stopPropagation).addListener(link,"click",L.DomEvent.preventDefault).addListener(link,"click",this.toggle,this);return this._container}});L.Map.mergeOptions({measureControl:false});L.Map.addInitHook(function(){if(this.options.measureControl){this.measureControl=L.Control.measureControl().addTo(this)}});L.Control.measureControl=function(options){return new L.Control.MeasureControl(options)}},window);
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "leaflet.measurecontrol",
3 | "version": "1.2.0",
4 | "description": "Leaflet control to mesure distances on the map.",
5 | "main": "leaflet.measurecontrol.js",
6 | "scripts": {
7 | "build": "uglifyjs leaflet.measurecontrol.js --output leaflet.measurecontrol.min.js",
8 | "lint": "eslint leaflet.measurecontrol.js"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "git+https://github.com/makinacorpus/Leaflet.MeasureControl.git"
13 | },
14 | "keywords": [
15 | "leaflet",
16 | "measure"
17 | ],
18 | "author": "Makina Corpus (http://makina-corpus.com/)",
19 | "license": "MIT",
20 | "bugs": {
21 | "url": "https://github.com/makinacorpus/Leaflet.MeasureControl/issues"
22 | },
23 | "homepage": "https://github.com/makinacorpus/Leaflet.MeasureControl#readme",
24 | "devDependencies": {
25 | "eslint": "~4.18.2",
26 | "eslint-config-airbnb-base": "^5.0.3",
27 | "uglify-js": "~3.3.13",
28 | "eslint-config-makina": "~0.3.0",
29 | "eslint-plugin-import": "~2.9.0"
30 | },
31 | "peerDependencies": {
32 | "leaflet-draw": "^0.3.2",
33 | "leaflet": "^0.7.3"
34 | },
35 | "dependencies": {}
36 | }
37 |
--------------------------------------------------------------------------------