react-spatial 1.1.1 → 1.1.2-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-param-reassign */
1
2
  function objectWithoutProperties (obj, exclude) { var target = {}; for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k) && exclude.indexOf(k) === -1) target[k] = obj[k]; return target; }
2
3
  import React, { PureComponent } from 'react';
3
4
  import PropTypes from 'prop-types';
@@ -200,32 +201,43 @@ var CanvasSaveButton = /*@__PURE__*/(function (PureComponent) {
200
201
  return destContext.font;
201
202
  };
202
203
 
203
- // If minimal fontsize is reached, divide copyright in two lines.
204
- CanvasSaveButton.prototype.splitCopyrightLine = function splitCopyrightLine (destContext, destCanvas, maxWidth, copyright, scale) {
205
- var newCopyright = copyright;
206
- var wordNumber = copyright.split(' ').length;
204
+ // eslint-disable-next-line class-methods-use-this
205
+ CanvasSaveButton.prototype.drawTextBackground = function drawTextBackground (
206
+ destContext,
207
+ textMeasure,
208
+ textX,
209
+ textY,
210
+ padding,
211
+ styleOptions
212
+ ) {
213
+ if ( styleOptions === void 0 ) styleOptions = {};
214
+
215
+ /// get width of text
216
+ var width = textMeasure.width;
217
+ var height = textMeasure.height;
218
+ var actualBoundingBoxAscent = textMeasure.actualBoundingBoxAscent;
219
+ destContext.save();
220
+ // Dflt is a white background
221
+ destContext.fillStyle = 'rgba(255,255,255,.8)';
207
222
 
208
- for (var i = 0; i < wordNumber; i += 1) {
209
- newCopyright = newCopyright.substring(0, newCopyright.lastIndexOf(' '));
210
- // Stop removing word when fits within one line.
211
- if (destContext.measureText(newCopyright).width * scale < maxWidth) {
212
- break;
213
- }
214
- }
223
+ // To simplify usability the user could pass a boolean to use only default values.
224
+ if (typeof styleOptions === 'object') {
225
+ Object.entries(styleOptions).forEach(function (ref) {
226
+ var key = ref[0];
227
+ var value = ref[1];
215
228
 
216
- // Draw fist line (line break isn't supported for fillText).
217
- destContext.fillText(
218
- newCopyright,
219
- this.padding,
220
- destCanvas.height / scale - 3 * this.padding
221
- );
229
+ destContext[key] = value;
230
+ });
231
+ }
222
232
 
223
- // Draw second line.
224
- destContext.fillText(
225
- copyright.replace(newCopyright, ''),
226
- this.padding,
227
- destCanvas.height / scale - this.padding
233
+ /// draw background rect assuming height of font
234
+ destContext.fillRect(
235
+ textX - padding,
236
+ textY - actualBoundingBoxAscent - padding,
237
+ width + padding * 2,
238
+ height + padding * 2
228
239
  );
240
+ destContext.restore();
229
241
  };
230
242
 
231
243
  CanvasSaveButton.prototype.drawCopyright = function drawCopyright (destContext, destCanvas, maxWidth) {
@@ -236,33 +248,83 @@ var CanvasSaveButton = /*@__PURE__*/(function (PureComponent) {
236
248
  var text = ref$1.text;
237
249
  var font = ref$1.font;
238
250
  var fillStyle = ref$1.fillStyle;
251
+ var background = ref$1.background;
239
252
  var copyright = typeof text === 'function' ? text() : text;
240
- this.multilineCopyright = false;
241
253
 
242
254
  destContext.save();
243
255
  destContext.scale(scale, scale);
244
- // eslint-disable-next-line no-param-reassign
245
256
  destContext.font = font || '12px Arial';
246
- // eslint-disable-next-line no-param-reassign
257
+ destContext.font = this.decreaseFontSize(
258
+ destContext,
259
+ maxWidth,
260
+ copyright,
261
+ scale
262
+ );
263
+
264
+ destContext.scale(scale, scale);
247
265
  destContext.fillStyle = fillStyle || 'black';
248
266
 
249
- this.decreaseFontSize(destContext, maxWidth, copyright, scale);
267
+ // We search if the display on 2 line is necessary
268
+ var firstLine = copyright;
269
+ var wordNumber = copyright.split(' ').length;
250
270
 
271
+ // If the text is bigger than the max width we split itinto 2 lines
251
272
  if (this.multilineCopyright) {
252
- this.splitCopyrightLine(
273
+ for (var i = 0; i < wordNumber; i += 1) {
274
+ firstLine = firstLine.substring(0, firstLine.lastIndexOf(' '));
275
+ // Stop removing word when fits within one line.
276
+ if (destContext.measureText(firstLine).width * scale < maxWidth) {
277
+ break;
278
+ }
279
+ }
280
+ }
281
+ var secondLine = copyright.replace(firstLine, '');
282
+
283
+ // Draw first line (line break isn't supported for fillText).
284
+ var textX = this.padding;
285
+ var textMeasure = destContext.measureText(firstLine);
286
+ textMeasure.height =
287
+ textMeasure.actualBoundingBoxAscent +
288
+ textMeasure.actualBoundingBoxDescent;
289
+ var firstLineY = destCanvas.height / scale - this.padding;
290
+ var secondLineY = firstLineY;
291
+ var paddingBetweenLines = 3;
292
+ var paddingBackground = paddingBetweenLines / 2;
293
+
294
+ if (secondLine) {
295
+ firstLineY -= textMeasure.height + paddingBetweenLines;
296
+ }
297
+ if (background) {
298
+ this.drawTextBackground(
253
299
  destContext,
254
- destCanvas,
255
- maxWidth,
256
- copyright,
257
- scale
258
- );
259
- } else {
260
- destContext.fillText(
261
- copyright,
262
- this.padding,
263
- destCanvas.height / scale - this.padding
300
+ textMeasure,
301
+ textX,
302
+ firstLineY,
303
+ paddingBackground,
304
+ background
264
305
  );
265
306
  }
307
+ destContext.fillText(firstLine, textX, firstLineY);
308
+
309
+ // Draw second line.
310
+ if (secondLine) {
311
+ textMeasure = destContext.measureText(secondLine);
312
+ textMeasure.height =
313
+ textMeasure.actualBoundingBoxAscent +
314
+ textMeasure.actualBoundingBoxDescent;
315
+ if (background) {
316
+ this.drawTextBackground(
317
+ destContext,
318
+ textMeasure,
319
+ textX,
320
+ secondLineY,
321
+ paddingBackground,
322
+ background
323
+ );
324
+ }
325
+ destContext.fillText(secondLine, textX, secondLineY);
326
+ }
327
+
266
328
  destContext.restore();
267
329
  };
268
330
 
@@ -1 +1 @@
1
- {"version":3,"file":"CanvasSaveButton.js","sources":["../../../src/components/CanvasSaveButton/CanvasSaveButton.js"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport OLMap from 'ol/Map';\nimport { getTopLeft, getBottomRight } from 'ol/extent';\nimport NorthArrowSimple from '../../images/northArrow.url.svg';\nimport NorthArrowCircle from '../../images/northArrowCircle.url.svg';\n\nconst propTypes = {\n /**\n * Automatically download the image saved.\n */\n autoDownload: PropTypes.bool,\n\n /**\n * Children content of the button.\n */\n children: PropTypes.node,\n\n /**\n * Output format of the image.\n */\n format: PropTypes.oneOf(['image/jpeg', 'image/png']),\n\n /** An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html). */\n map: PropTypes.instanceOf(OLMap),\n\n /**\n * Extent for the export. If no extent is given, the whole map is exported.\n */\n extent: PropTypes.arrayOf(PropTypes.number),\n\n /**\n * Array of 4 [ol/Coordinate](https://openlayers.org/en/latest/apidoc/module-ol_coordinate.html#~Coordinate).\n * If no coordinates and no extent are given, the whole map is exported.\n * This property must be used to export rotated map.\n * If you don't need to export rotated map the extent property can be used as well.\n * If extent is specified, coordinates property is ignored.\n */\n coordinates: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.number)),\n\n /**\n * Scale the map for better quality. Possible values: 1, 2 or 3.\n * WARNING: The tiled layer with a WMTS or XYZ source must provides an url\n * for each scale in the config file.\n */\n scale: PropTypes.number,\n\n /**\n * Function called before the dowload process begins.\n */\n onSaveStart: PropTypes.func,\n\n /**\n * Function called after the dowload process ends.\n *\n * @param {object} error Error message the process fails.\n */\n onSaveEnd: PropTypes.func,\n\n /**\n * Extra data, such as copyright, north arrow configuration.\n * All extra data is optional.\n *\n * Example 1:\n *\n {\n copyright: {\n text: 'Example copyright', // Copyright text or function\n font: '10px Arial', // Font, default is '12px Arial'\n fillStyle: 'blue', // Fill style, default is 'black'\n },\n northArrow, // True if the north arrow\n // should be placed with default configuration\n // (default image, rotation=0, circled=False)\n }\n * Example 2:\n *\n {\n northArrow: {\n src: NorthArrowCustom,\n width: 60, // Width in px, default is 80\n height: 100, // Height in px, default is 80\n rotation: 25, // Absolute rotation in degrees as number or function\n\n }\n }\n * Example 3:\n *\n {\n copyright: {\n text: () => { // Copyright as function\n return this.copyright;\n },\n },\n northArrow: {\n rotation: () => { // Rotation as function\n return NorthArrow.radToDeg(this.map.getView().getRotation());\n },\n circled, // Display circle around the north arrow (Does not work for custom src)\n },\n }\n */\n extraData: PropTypes.object,\n};\n\nconst defaultProps = {\n autoDownload: true,\n children: null,\n map: null,\n format: 'image/png',\n extent: null,\n extraData: null,\n coordinates: null,\n scale: 1,\n onSaveStart: (map) => {\n return Promise.resolve(map);\n },\n onSaveEnd: () => {},\n};\n\n/**\n * The CanvasSaveButton component creates a button to save\n * an [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html)\n * canvas as an image.\n */\nclass CanvasSaveButton extends PureComponent {\n constructor(props) {\n super(props);\n const { format } = this.props;\n this.fileExt = format === 'image/jpeg' ? 'jpg' : 'png';\n this.padding = 5;\n }\n\n onClick(evt) {\n const { map, onSaveStart, onSaveEnd, autoDownload } = this.props;\n if (window.navigator.msSaveBlob) {\n // ie only\n evt.preventDefault();\n evt.stopPropagation();\n }\n onSaveStart(map).then((mapToExport) => {\n return this.createCanvasImage(mapToExport || map)\n .then((canvas) => {\n if (autoDownload) {\n this.downloadCanvasImage(canvas).then((blob) => {\n onSaveEnd(mapToExport, canvas, blob);\n });\n } else {\n onSaveEnd(mapToExport, canvas);\n }\n })\n .catch((err) => {\n if (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n onSaveEnd(mapToExport, err);\n });\n });\n }\n\n getDownloadImageName() {\n return (\n `${window.document.title.replace(/ /g, '_').toLowerCase()}` +\n `.${this.fileExt}`\n );\n }\n\n // Ensure the font size fita with the image width.\n decreaseFontSize(destContext, maxWidth, copyright, scale) {\n const minFontSize = 8;\n let sizeMatch;\n let fontSize;\n do {\n sizeMatch = destContext.font.match(/[0-9]+(?:\\.[0-9]+)?(px)/i);\n fontSize = parseInt(sizeMatch[0].replace(sizeMatch[1], ''), 10);\n\n // eslint-disable-next-line no-param-reassign\n destContext.font = destContext.font.replace(fontSize, fontSize - 1);\n\n if (fontSize - 1 === minFontSize) {\n this.multilineCopyright = true;\n }\n } while (\n fontSize - 1 > minFontSize &&\n destContext.measureText(copyright).width * scale > maxWidth\n );\n return destContext.font;\n }\n\n // If minimal fontsize is reached, divide copyright in two lines.\n splitCopyrightLine(destContext, destCanvas, maxWidth, copyright, scale) {\n let newCopyright = copyright;\n const wordNumber = copyright.split(' ').length;\n\n for (let i = 0; i < wordNumber; i += 1) {\n newCopyright = newCopyright.substring(0, newCopyright.lastIndexOf(' '));\n // Stop removing word when fits within one line.\n if (destContext.measureText(newCopyright).width * scale < maxWidth) {\n break;\n }\n }\n\n // Draw fist line (line break isn't supported for fillText).\n destContext.fillText(\n newCopyright,\n this.padding,\n destCanvas.height / scale - 3 * this.padding,\n );\n\n // Draw second line.\n destContext.fillText(\n copyright.replace(newCopyright, ''),\n this.padding,\n destCanvas.height / scale - this.padding,\n );\n }\n\n drawCopyright(destContext, destCanvas, maxWidth) {\n const { extraData, scale } = this.props;\n const { text, font, fillStyle } = extraData.copyright;\n const copyright = typeof text === 'function' ? text() : text;\n this.multilineCopyright = false;\n\n destContext.save();\n destContext.scale(scale, scale);\n // eslint-disable-next-line no-param-reassign\n destContext.font = font || '12px Arial';\n // eslint-disable-next-line no-param-reassign\n destContext.fillStyle = fillStyle || 'black';\n\n this.decreaseFontSize(destContext, maxWidth, copyright, scale);\n\n if (this.multilineCopyright) {\n this.splitCopyrightLine(\n destContext,\n destCanvas,\n maxWidth,\n copyright,\n scale,\n );\n } else {\n destContext.fillText(\n copyright,\n this.padding,\n destCanvas.height / scale - this.padding,\n );\n }\n destContext.restore();\n }\n\n drawElement(data, destCanvas, previousItemSize = [0, 0]) {\n const destContext = destCanvas.getContext('2d');\n const { scale } = this.props;\n const { src, width, height, rotation } = data;\n\n return new Promise((resolve) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.src = src;\n img.onload = () => {\n destContext.save();\n const elementWidth = (width || 80) * scale;\n const elementHeight = (height || 80) * scale;\n destContext.translate(\n destCanvas.width - 2 * this.padding - elementWidth / 2,\n destCanvas.height -\n 2 * this.padding -\n elementHeight / 2 -\n previousItemSize[1],\n );\n\n if (rotation) {\n const angle = typeof rotation === 'function' ? rotation() : rotation;\n destContext.rotate(angle * (Math.PI / 180));\n }\n\n destContext.drawImage(\n img,\n -elementWidth / 2,\n -elementHeight / 2,\n elementWidth,\n elementHeight,\n );\n destContext.restore();\n\n // Return the pixels width of the arrow and the margin right,\n // that must not be occupied by the copyright.\n resolve([\n elementWidth + 2 * this.padding,\n elementHeight + 2 * this.padding,\n ]);\n };\n\n img.onerror = () => {\n resolve();\n };\n });\n }\n\n calculatePixelsToExport(mapToExport) {\n const { extent, coordinates } = this.props;\n let firstCoordinate;\n let oppositeCoordinate;\n\n if (extent) {\n firstCoordinate = getTopLeft(extent);\n oppositeCoordinate = getBottomRight(extent);\n } else if (coordinates) {\n // In case of coordinates coming from DragBox interaction:\n // firstCoordinate is the first coordinate drawn by the user.\n // oppositeCoordinate is the coordinate of the point dragged by the user.\n [firstCoordinate, , oppositeCoordinate] = coordinates;\n }\n\n if (firstCoordinate && oppositeCoordinate) {\n const firstPixel = mapToExport.getPixelFromCoordinate(firstCoordinate);\n const oppositePixel =\n mapToExport.getPixelFromCoordinate(oppositeCoordinate);\n const pixelTopLeft = [\n firstPixel[0] <= oppositePixel[0] ? firstPixel[0] : oppositePixel[0],\n firstPixel[1] <= oppositePixel[1] ? firstPixel[1] : oppositePixel[1],\n ];\n const pixelBottomRight = [\n firstPixel[0] > oppositePixel[0] ? firstPixel[0] : oppositePixel[0],\n firstPixel[1] > oppositePixel[1] ? firstPixel[1] : oppositePixel[1],\n ];\n\n return {\n x: pixelTopLeft[0],\n y: pixelTopLeft[1],\n w: pixelBottomRight[0] - pixelTopLeft[0],\n h: pixelBottomRight[1] - pixelTopLeft[1],\n };\n }\n return null;\n }\n\n createCanvasImage(mapToExport) {\n const { extraData } = this.props;\n\n return new Promise((resolve) => {\n mapToExport.once('rendercomplete', () => {\n // Find all layer canvases and add it to dest canvas.\n const canvases = mapToExport\n .getTargetElement()\n .getElementsByTagName('canvas');\n\n // Create the canvas to export with the good size.\n let destCanvas;\n let destContext;\n\n // canvases is an HTMLCollection, we don't try to transform to array because some compilers like cra doesn't translate it right.\n for (let i = 0; i < canvases.length; i += 1) {\n const canvas = canvases[i];\n if (!canvas.width || !canvas.height) {\n // eslint-disable-next-line no-continue\n continue;\n }\n const clip = this.calculatePixelsToExport(mapToExport) || {\n x: 0,\n y: 0,\n w: canvas.width,\n h: canvas.height,\n };\n\n if (!destCanvas) {\n destCanvas = document.createElement('canvas');\n destCanvas.width = clip.w;\n destCanvas.height = clip.h;\n destContext = destCanvas.getContext('2d');\n }\n\n // Draw canvas to the canvas to export.\n destContext.drawImage(\n canvas,\n clip.x,\n clip.y,\n clip.w,\n clip.h,\n 0,\n 0,\n destCanvas.width,\n destCanvas.height,\n );\n }\n\n // Custom info\n let logoPromise = Promise.resolve();\n if (destContext && extraData && extraData.logo) {\n logoPromise = this.drawElement(extraData.logo, destCanvas);\n }\n\n logoPromise.then((customItemSize = [0, 0]) => {\n // North arrow\n let arrowPromise = Promise.resolve();\n if (destContext && extraData && extraData.northArrow) {\n arrowPromise = this.drawElement(\n {\n src: extraData.northArrow.circled\n ? NorthArrowCircle\n : NorthArrowSimple,\n ...extraData.northArrow,\n },\n destCanvas,\n customItemSize,\n );\n }\n\n // Copyright\n arrowPromise.then((arrowWidth) => {\n const widestElement = Math.max(customItemSize[0], arrowWidth);\n if (\n destContext &&\n extraData &&\n extraData.copyright &&\n extraData.copyright.text\n ) {\n const maxWidth = widestElement\n ? destContext.canvas.width - widestElement\n : destContext.canvas.width;\n this.drawCopyright(destContext, destCanvas, maxWidth);\n }\n resolve(destCanvas);\n });\n });\n });\n mapToExport.renderSync();\n });\n }\n\n downloadCanvasImage(canvas) {\n // Use blob for large images\n const promise = new Promise((resolve) => {\n const { format } = this.props;\n if (/msie (9|10)/gi.test(window.navigator.userAgent.toLowerCase())) {\n // ie 9 and 10\n const url = canvas.toDataURL(format);\n const w = window.open('about:blank', '');\n w.document.write(`<img src=\"${url}\" alt=\"from canvas\"/>`);\n resolve(url);\n }\n if (window.navigator.msSaveBlob) {\n // ie 11 and higher\n let image;\n try {\n image = canvas.msToBlob();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(e);\n }\n const blob = new Blob([image], {\n type: format,\n });\n resolve(blob);\n window.navigator.msSaveBlob(blob, this.getDownloadImageName());\n } else {\n canvas.toBlob((blob) => {\n const link = document.createElement('a');\n link.download = this.getDownloadImageName();\n link.href = URL.createObjectURL(blob);\n // append child to document for firefox to be able to download.\n document.body.appendChild(link);\n link.click();\n resolve(blob);\n }, format);\n }\n });\n return promise;\n }\n\n render() {\n const { children, ...other } = this.props;\n\n delete other.onSaveStart;\n delete other.onSaveEnd;\n delete other.extraData;\n delete other.extent;\n delete other.format;\n delete other.map;\n delete other.coordinates;\n delete other.autoDownload;\n delete other.scale;\n\n return (\n <div\n role=\"button\"\n className=\"rs-canvas-save-button\"\n tabIndex={0}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...other}\n onClick={(e) => {\n return this.onClick(e);\n }}\n onKeyPress={(e) => {\n return e.which === 13 && this.onClick(e);\n }}\n >\n {children}\n </div>\n );\n }\n}\n\nCanvasSaveButton.propTypes = propTypes;\nCanvasSaveButton.defaultProps = defaultProps;\n\nexport default CanvasSaveButton;\n"],"names":["const","super","this","let"],"mappings":"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"}
1
+ {"version":3,"file":"CanvasSaveButton.js","sources":["../../../src/components/CanvasSaveButton/CanvasSaveButton.js"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport OLMap from 'ol/Map';\nimport { getTopLeft, getBottomRight } from 'ol/extent';\nimport NorthArrowSimple from '../../images/northArrow.url.svg';\nimport NorthArrowCircle from '../../images/northArrowCircle.url.svg';\n\nconst propTypes = {\n /**\n * Automatically download the image saved.\n */\n autoDownload: PropTypes.bool,\n\n /**\n * Children content of the button.\n */\n children: PropTypes.node,\n\n /**\n * Output format of the image.\n */\n format: PropTypes.oneOf(['image/jpeg', 'image/png']),\n\n /** An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html). */\n map: PropTypes.instanceOf(OLMap),\n\n /**\n * Extent for the export. If no extent is given, the whole map is exported.\n */\n extent: PropTypes.arrayOf(PropTypes.number),\n\n /**\n * Array of 4 [ol/Coordinate](https://openlayers.org/en/latest/apidoc/module-ol_coordinate.html#~Coordinate).\n * If no coordinates and no extent are given, the whole map is exported.\n * This property must be used to export rotated map.\n * If you don't need to export rotated map the extent property can be used as well.\n * If extent is specified, coordinates property is ignored.\n */\n coordinates: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.number)),\n\n /**\n * Scale the map for better quality. Possible values: 1, 2 or 3.\n * WARNING: The tiled layer with a WMTS or XYZ source must provides an url\n * for each scale in the config file.\n */\n scale: PropTypes.number,\n\n /**\n * Function called before the dowload process begins.\n */\n onSaveStart: PropTypes.func,\n\n /**\n * Function called after the dowload process ends.\n *\n * @param {object} error Error message the process fails.\n */\n onSaveEnd: PropTypes.func,\n\n /**\n * Extra data, such as copyright, north arrow configuration.\n * All extra data is optional.\n *\n * Example 1:\n *\n {\n copyright: {\n text: 'Example copyright', // Copyright text or function\n font: '10px Arial', // Font, default is '12px Arial'\n fillStyle: 'blue', // Fill style, default is 'black'\n },\n northArrow, // True if the north arrow\n // should be placed with default configuration\n // (default image, rotation=0, circled=False)\n }\n * Example 2:\n *\n {\n northArrow: {\n src: NorthArrowCustom,\n width: 60, // Width in px, default is 80\n height: 100, // Height in px, default is 80\n rotation: 25, // Absolute rotation in degrees as number or function\n\n }\n }\n * Example 3:\n *\n {\n copyright: {\n text: () => { // Copyright as function\n return this.copyright;\n },\n },\n northArrow: {\n rotation: () => { // Rotation as function\n return NorthArrow.radToDeg(this.map.getView().getRotation());\n },\n circled, // Display circle around the north arrow (Does not work for custom src)\n },\n }\n */\n extraData: PropTypes.object,\n};\n\nconst defaultProps = {\n autoDownload: true,\n children: null,\n map: null,\n format: 'image/png',\n extent: null,\n extraData: null,\n coordinates: null,\n scale: 1,\n onSaveStart: (map) => {\n return Promise.resolve(map);\n },\n onSaveEnd: () => {},\n};\n\n/**\n * The CanvasSaveButton component creates a button to save\n * an [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html)\n * canvas as an image.\n */\nclass CanvasSaveButton extends PureComponent {\n constructor(props) {\n super(props);\n const { format } = this.props;\n this.fileExt = format === 'image/jpeg' ? 'jpg' : 'png';\n this.padding = 5;\n }\n\n onClick(evt) {\n const { map, onSaveStart, onSaveEnd, autoDownload } = this.props;\n if (window.navigator.msSaveBlob) {\n // ie only\n evt.preventDefault();\n evt.stopPropagation();\n }\n onSaveStart(map).then((mapToExport) => {\n return this.createCanvasImage(mapToExport || map)\n .then((canvas) => {\n if (autoDownload) {\n this.downloadCanvasImage(canvas).then((blob) => {\n onSaveEnd(mapToExport, canvas, blob);\n });\n } else {\n onSaveEnd(mapToExport, canvas);\n }\n })\n .catch((err) => {\n if (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n onSaveEnd(mapToExport, err);\n });\n });\n }\n\n getDownloadImageName() {\n return (\n `${window.document.title.replace(/ /g, '_').toLowerCase()}` +\n `.${this.fileExt}`\n );\n }\n\n // Ensure the font size fita with the image width.\n decreaseFontSize(destContext, maxWidth, copyright, scale) {\n const minFontSize = 8;\n let sizeMatch;\n let fontSize;\n do {\n sizeMatch = destContext.font.match(/[0-9]+(?:\\.[0-9]+)?(px)/i);\n fontSize = parseInt(sizeMatch[0].replace(sizeMatch[1], ''), 10);\n\n // eslint-disable-next-line no-param-reassign\n destContext.font = destContext.font.replace(fontSize, fontSize - 1);\n\n if (fontSize - 1 === minFontSize) {\n this.multilineCopyright = true;\n }\n } while (\n fontSize - 1 > minFontSize &&\n destContext.measureText(copyright).width * scale > maxWidth\n );\n return destContext.font;\n }\n\n // eslint-disable-next-line class-methods-use-this\n drawTextBackground(\n destContext,\n textMeasure,\n textX,\n textY,\n padding,\n styleOptions = {},\n ) {\n /// get width of text\n const { width, height, actualBoundingBoxAscent } = textMeasure;\n destContext.save();\n // Dflt is a white background\n destContext.fillStyle = 'rgba(255,255,255,.8)';\n\n // To simplify usability the user could pass a boolean to use only default values.\n if (typeof styleOptions === 'object') {\n Object.entries(styleOptions).forEach(([key, value]) => {\n destContext[key] = value;\n });\n }\n\n /// draw background rect assuming height of font\n destContext.fillRect(\n textX - padding,\n textY - actualBoundingBoxAscent - padding,\n width + padding * 2,\n height + padding * 2,\n );\n destContext.restore();\n }\n\n drawCopyright(destContext, destCanvas, maxWidth) {\n const { extraData, scale } = this.props;\n const { text, font, fillStyle, background } = extraData.copyright;\n const copyright = typeof text === 'function' ? text() : text;\n\n destContext.save();\n destContext.scale(scale, scale);\n destContext.font = font || '12px Arial';\n destContext.font = this.decreaseFontSize(\n destContext,\n maxWidth,\n copyright,\n scale,\n );\n\n destContext.scale(scale, scale);\n destContext.fillStyle = fillStyle || 'black';\n\n // We search if the display on 2 line is necessary\n let firstLine = copyright;\n const wordNumber = copyright.split(' ').length;\n\n // If the text is bigger than the max width we split itinto 2 lines\n if (this.multilineCopyright) {\n for (let i = 0; i < wordNumber; i += 1) {\n firstLine = firstLine.substring(0, firstLine.lastIndexOf(' '));\n // Stop removing word when fits within one line.\n if (destContext.measureText(firstLine).width * scale < maxWidth) {\n break;\n }\n }\n }\n const secondLine = copyright.replace(firstLine, '');\n\n // Draw first line (line break isn't supported for fillText).\n const textX = this.padding;\n let textMeasure = destContext.measureText(firstLine);\n textMeasure.height =\n textMeasure.actualBoundingBoxAscent +\n textMeasure.actualBoundingBoxDescent;\n let firstLineY = destCanvas.height / scale - this.padding;\n const secondLineY = firstLineY;\n const paddingBetweenLines = 3;\n const paddingBackground = paddingBetweenLines / 2;\n\n if (secondLine) {\n firstLineY -= textMeasure.height + paddingBetweenLines;\n }\n if (background) {\n this.drawTextBackground(\n destContext,\n textMeasure,\n textX,\n firstLineY,\n paddingBackground,\n background,\n );\n }\n destContext.fillText(firstLine, textX, firstLineY);\n\n // Draw second line.\n if (secondLine) {\n textMeasure = destContext.measureText(secondLine);\n textMeasure.height =\n textMeasure.actualBoundingBoxAscent +\n textMeasure.actualBoundingBoxDescent;\n if (background) {\n this.drawTextBackground(\n destContext,\n textMeasure,\n textX,\n secondLineY,\n paddingBackground,\n background,\n );\n }\n destContext.fillText(secondLine, textX, secondLineY);\n }\n\n destContext.restore();\n }\n\n drawElement(data, destCanvas, previousItemSize = [0, 0]) {\n const destContext = destCanvas.getContext('2d');\n const { scale } = this.props;\n const { src, width, height, rotation } = data;\n\n return new Promise((resolve) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.src = src;\n img.onload = () => {\n destContext.save();\n const elementWidth = (width || 80) * scale;\n const elementHeight = (height || 80) * scale;\n destContext.translate(\n destCanvas.width - 2 * this.padding - elementWidth / 2,\n destCanvas.height -\n 2 * this.padding -\n elementHeight / 2 -\n previousItemSize[1],\n );\n\n if (rotation) {\n const angle = typeof rotation === 'function' ? rotation() : rotation;\n destContext.rotate(angle * (Math.PI / 180));\n }\n\n destContext.drawImage(\n img,\n -elementWidth / 2,\n -elementHeight / 2,\n elementWidth,\n elementHeight,\n );\n destContext.restore();\n\n // Return the pixels width of the arrow and the margin right,\n // that must not be occupied by the copyright.\n resolve([\n elementWidth + 2 * this.padding,\n elementHeight + 2 * this.padding,\n ]);\n };\n\n img.onerror = () => {\n resolve();\n };\n });\n }\n\n calculatePixelsToExport(mapToExport) {\n const { extent, coordinates } = this.props;\n let firstCoordinate;\n let oppositeCoordinate;\n\n if (extent) {\n firstCoordinate = getTopLeft(extent);\n oppositeCoordinate = getBottomRight(extent);\n } else if (coordinates) {\n // In case of coordinates coming from DragBox interaction:\n // firstCoordinate is the first coordinate drawn by the user.\n // oppositeCoordinate is the coordinate of the point dragged by the user.\n [firstCoordinate, , oppositeCoordinate] = coordinates;\n }\n\n if (firstCoordinate && oppositeCoordinate) {\n const firstPixel = mapToExport.getPixelFromCoordinate(firstCoordinate);\n const oppositePixel =\n mapToExport.getPixelFromCoordinate(oppositeCoordinate);\n const pixelTopLeft = [\n firstPixel[0] <= oppositePixel[0] ? firstPixel[0] : oppositePixel[0],\n firstPixel[1] <= oppositePixel[1] ? firstPixel[1] : oppositePixel[1],\n ];\n const pixelBottomRight = [\n firstPixel[0] > oppositePixel[0] ? firstPixel[0] : oppositePixel[0],\n firstPixel[1] > oppositePixel[1] ? firstPixel[1] : oppositePixel[1],\n ];\n\n return {\n x: pixelTopLeft[0],\n y: pixelTopLeft[1],\n w: pixelBottomRight[0] - pixelTopLeft[0],\n h: pixelBottomRight[1] - pixelTopLeft[1],\n };\n }\n return null;\n }\n\n createCanvasImage(mapToExport) {\n const { extraData } = this.props;\n\n return new Promise((resolve) => {\n mapToExport.once('rendercomplete', () => {\n // Find all layer canvases and add it to dest canvas.\n const canvases = mapToExport\n .getTargetElement()\n .getElementsByTagName('canvas');\n\n // Create the canvas to export with the good size.\n let destCanvas;\n let destContext;\n\n // canvases is an HTMLCollection, we don't try to transform to array because some compilers like cra doesn't translate it right.\n for (let i = 0; i < canvases.length; i += 1) {\n const canvas = canvases[i];\n if (!canvas.width || !canvas.height) {\n // eslint-disable-next-line no-continue\n continue;\n }\n const clip = this.calculatePixelsToExport(mapToExport) || {\n x: 0,\n y: 0,\n w: canvas.width,\n h: canvas.height,\n };\n\n if (!destCanvas) {\n destCanvas = document.createElement('canvas');\n destCanvas.width = clip.w;\n destCanvas.height = clip.h;\n destContext = destCanvas.getContext('2d');\n }\n\n // Draw canvas to the canvas to export.\n destContext.drawImage(\n canvas,\n clip.x,\n clip.y,\n clip.w,\n clip.h,\n 0,\n 0,\n destCanvas.width,\n destCanvas.height,\n );\n }\n\n // Custom info\n let logoPromise = Promise.resolve();\n if (destContext && extraData && extraData.logo) {\n logoPromise = this.drawElement(extraData.logo, destCanvas);\n }\n\n logoPromise.then((customItemSize = [0, 0]) => {\n // North arrow\n let arrowPromise = Promise.resolve();\n if (destContext && extraData && extraData.northArrow) {\n arrowPromise = this.drawElement(\n {\n src: extraData.northArrow.circled\n ? NorthArrowCircle\n : NorthArrowSimple,\n ...extraData.northArrow,\n },\n destCanvas,\n customItemSize,\n );\n }\n\n // Copyright\n arrowPromise.then((arrowWidth) => {\n const widestElement = Math.max(customItemSize[0], arrowWidth);\n if (\n destContext &&\n extraData &&\n extraData.copyright &&\n extraData.copyright.text\n ) {\n const maxWidth = widestElement\n ? destContext.canvas.width - widestElement\n : destContext.canvas.width;\n this.drawCopyright(destContext, destCanvas, maxWidth);\n }\n resolve(destCanvas);\n });\n });\n });\n mapToExport.renderSync();\n });\n }\n\n downloadCanvasImage(canvas) {\n // Use blob for large images\n const promise = new Promise((resolve) => {\n const { format } = this.props;\n if (/msie (9|10)/gi.test(window.navigator.userAgent.toLowerCase())) {\n // ie 9 and 10\n const url = canvas.toDataURL(format);\n const w = window.open('about:blank', '');\n w.document.write(`<img src=\"${url}\" alt=\"from canvas\"/>`);\n resolve(url);\n }\n if (window.navigator.msSaveBlob) {\n // ie 11 and higher\n let image;\n try {\n image = canvas.msToBlob();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(e);\n }\n const blob = new Blob([image], {\n type: format,\n });\n resolve(blob);\n window.navigator.msSaveBlob(blob, this.getDownloadImageName());\n } else {\n canvas.toBlob((blob) => {\n const link = document.createElement('a');\n link.download = this.getDownloadImageName();\n link.href = URL.createObjectURL(blob);\n // append child to document for firefox to be able to download.\n document.body.appendChild(link);\n link.click();\n resolve(blob);\n }, format);\n }\n });\n return promise;\n }\n\n render() {\n const { children, ...other } = this.props;\n\n delete other.onSaveStart;\n delete other.onSaveEnd;\n delete other.extraData;\n delete other.extent;\n delete other.format;\n delete other.map;\n delete other.coordinates;\n delete other.autoDownload;\n delete other.scale;\n\n return (\n <div\n role=\"button\"\n className=\"rs-canvas-save-button\"\n tabIndex={0}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...other}\n onClick={(e) => {\n return this.onClick(e);\n }}\n onKeyPress={(e) => {\n return e.which === 13 && this.onClick(e);\n }}\n >\n {children}\n </div>\n );\n }\n}\n\nCanvasSaveButton.propTypes = propTypes;\nCanvasSaveButton.defaultProps = defaultProps;\n\nexport default CanvasSaveButton;\n"],"names":["const","super","this","let"],"mappings":"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"}
@@ -116,7 +116,6 @@ describe('CanvasSaveButton', function () {
116
116
  });
117
117
  var spy = jest.spyOn(CanvasSaveButton.prototype, 'createCanvasImage');
118
118
  var spy2 = jest.spyOn(CanvasSaveButton.prototype, 'downloadCanvasImage');
119
- var spy4 = jest.spyOn(CanvasSaveButton.prototype, 'splitCopyrightLine');
120
119
  jest
121
120
  .spyOn(olMap.getTargetElement(), 'getElementsByTagName')
122
121
  .mockReturnValue([canvas]);
@@ -135,11 +134,9 @@ describe('CanvasSaveButton', function () {
135
134
  expect(link.href).toBe('http://localhost/fooblob');
136
135
  expect(link.download).toBe('.jpg');
137
136
  expect(link.click).toHaveBeenCalledTimes(1);
138
- expect(spy4).toHaveBeenCalledTimes(1);
139
137
  spy.mockRestore();
140
138
  spy2.mockRestore();
141
139
  spy3.mockRestore();
142
- spy4.mockRestore();
143
140
  done();
144
141
  });
145
142
  });
@@ -1 +1 @@
1
- {"version":3,"file":"CanvasSaveButton.test.js","sources":["../../../src/components/CanvasSaveButton/CanvasSaveButton.test.js"],"sourcesContent":["import 'jest-canvas-mock';\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport { configure, shallow } from 'enzyme';\nimport Adapter from 'enzyme-adapter-react-16';\nimport Map from 'ol/Map';\nimport View from 'ol/View';\nimport { TiImage } from 'react-icons/ti';\nimport RenderEvent from 'ol/render/Event';\nimport CanvasSaveButton from './CanvasSaveButton';\n\nconfigure({ adapter: new Adapter() });\n\ndescribe('CanvasSaveButton', () => {\n let olMap;\n const conf = {\n title: 'Karte als Bild speichern.',\n icon: <TiImage focusable={false} />,\n className: 'ta-example',\n saveFormat: 'image/jpeg',\n };\n\n beforeEach(() => {\n const target = document.createElement('div');\n document.body.appendChild(target);\n target.style.width = '100px';\n target.style.height = '100px';\n olMap = new Map({\n target,\n controls: [],\n view: new View({\n center: [0, 0],\n zoom: 0,\n }),\n });\n olMap.getView().setCenter([1, 1]);\n });\n\n afterEach(() => {\n if (olMap.getTargetElement()) {\n document.body.removeChild(olMap.getTargetElement());\n }\n olMap.setTarget(null);\n });\n\n test('should match snapshot.', () => {\n const component = renderer.create(\n <CanvasSaveButton format={conf.saveFormat} map={olMap}>\n {conf.icon}\n </CanvasSaveButton>,\n );\n const tree = component.toJSON();\n expect(tree).toMatchSnapshot();\n });\n\n test('should match snapshot with a different attributes', () => {\n const component = renderer.create(\n // eslint-disable-next-line jsx-a11y/tabindex-no-positive\n <CanvasSaveButton title={conf.title} className=\"foo\" tabIndex=\"1\">\n {conf.icon}\n </CanvasSaveButton>,\n );\n const tree = component.toJSON();\n expect(tree).toMatchSnapshot();\n });\n\n test('should call onSaveBefore then download then onSaveEnd function on click.', async (done) => {\n const saveStart = jest.fn((m) => {\n return Promise.resolve(m);\n });\n const saveEnd = jest.fn();\n const wrapper = shallow(\n <CanvasSaveButton\n className=\"ta-example\"\n map={olMap}\n format={conf.saveFormat}\n onSaveStart={saveStart}\n onSaveEnd={saveEnd}\n extraData={{\n copyright: {\n text: () => {\n return (\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)'\n );\n },\n },\n }}\n >\n {conf.icon}\n </CanvasSaveButton>,\n );\n const link = document.createElement('a');\n link.click = jest.fn();\n const div = document.createElement('div');\n const canvas = document.createElement('canvas');\n canvas.toBlob = jest.fn((callback) => {\n return callback();\n });\n global.URL.createObjectURL = jest.fn(() => {\n return 'fooblob';\n });\n // We use a spy here to be able to correctly restore the initial function\n const spy3 = jest\n .spyOn(global.document, 'createElement')\n .mockImplementation((elt) => {\n if (elt === 'canvas') {\n return canvas;\n }\n if (elt === 'div') {\n return div;\n }\n if (elt === 'a') {\n return link;\n }\n return {};\n });\n const spy = jest.spyOn(CanvasSaveButton.prototype, 'createCanvasImage');\n const spy2 = jest.spyOn(CanvasSaveButton.prototype, 'downloadCanvasImage');\n const spy4 = jest.spyOn(CanvasSaveButton.prototype, 'splitCopyrightLine');\n jest\n .spyOn(olMap.getTargetElement(), 'getElementsByTagName')\n .mockReturnValue([canvas]);\n await wrapper.find('.ta-example').simulate('click');\n await olMap.dispatchEvent(\n new RenderEvent('rendercomplete', undefined, undefined, {\n canvas,\n }),\n );\n await window.setTimeout(() => {\n expect(spy).toHaveBeenCalledTimes(1);\n expect(saveStart).toHaveBeenCalledTimes(1);\n expect(saveEnd).toHaveBeenCalledTimes(1);\n expect(spy2.mock.calls[0][0]).toBe(canvas);\n expect(spy2.mock.calls[0][0].toBlob).toHaveBeenCalledTimes(1);\n expect(link.href).toBe('http://localhost/fooblob');\n expect(link.download).toBe('.jpg');\n expect(link.click).toHaveBeenCalledTimes(1);\n expect(spy4).toHaveBeenCalledTimes(1);\n spy.mockRestore();\n spy2.mockRestore();\n spy3.mockRestore();\n spy4.mockRestore();\n done();\n });\n });\n\n test('stops click event propagation on ie.', () => {\n const wrapper = shallow(\n <CanvasSaveButton className=\"ta-example\" title={conf.title} map={olMap}>\n {conf.icon}\n </CanvasSaveButton>,\n );\n\n const evt = {\n stopPropagation: jest.fn(),\n preventDefault: jest.fn(),\n };\n window.navigator.msSaveBlob = true;\n\n const canvas = document.createElement('canvas');\n const p = new Promise((resolve) => {\n resolve(canvas);\n });\n jest\n .spyOn(CanvasSaveButton.prototype, 'createCanvasImage')\n .mockReturnValue(p);\n\n wrapper.find('.ta-example').simulate('click', evt);\n expect(evt.stopPropagation).toHaveBeenCalledTimes(1);\n expect(evt.preventDefault).toHaveBeenCalledTimes(1);\n\n window.navigator.msSaveBlob = false;\n });\n});\n"],"names":["let","const"],"mappings":"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"}
1
+ {"version":3,"file":"CanvasSaveButton.test.js","sources":["../../../src/components/CanvasSaveButton/CanvasSaveButton.test.js"],"sourcesContent":["import 'jest-canvas-mock';\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport { configure, shallow } from 'enzyme';\nimport Adapter from 'enzyme-adapter-react-16';\nimport Map from 'ol/Map';\nimport View from 'ol/View';\nimport { TiImage } from 'react-icons/ti';\nimport RenderEvent from 'ol/render/Event';\nimport CanvasSaveButton from './CanvasSaveButton';\n\nconfigure({ adapter: new Adapter() });\n\ndescribe('CanvasSaveButton', () => {\n let olMap;\n const conf = {\n title: 'Karte als Bild speichern.',\n icon: <TiImage focusable={false} />,\n className: 'ta-example',\n saveFormat: 'image/jpeg',\n };\n\n beforeEach(() => {\n const target = document.createElement('div');\n document.body.appendChild(target);\n target.style.width = '100px';\n target.style.height = '100px';\n olMap = new Map({\n target,\n controls: [],\n view: new View({\n center: [0, 0],\n zoom: 0,\n }),\n });\n olMap.getView().setCenter([1, 1]);\n });\n\n afterEach(() => {\n if (olMap.getTargetElement()) {\n document.body.removeChild(olMap.getTargetElement());\n }\n olMap.setTarget(null);\n });\n\n test('should match snapshot.', () => {\n const component = renderer.create(\n <CanvasSaveButton format={conf.saveFormat} map={olMap}>\n {conf.icon}\n </CanvasSaveButton>,\n );\n const tree = component.toJSON();\n expect(tree).toMatchSnapshot();\n });\n\n test('should match snapshot with a different attributes', () => {\n const component = renderer.create(\n // eslint-disable-next-line jsx-a11y/tabindex-no-positive\n <CanvasSaveButton title={conf.title} className=\"foo\" tabIndex=\"1\">\n {conf.icon}\n </CanvasSaveButton>,\n );\n const tree = component.toJSON();\n expect(tree).toMatchSnapshot();\n });\n\n test('should call onSaveBefore then download then onSaveEnd function on click.', async (done) => {\n const saveStart = jest.fn((m) => {\n return Promise.resolve(m);\n });\n const saveEnd = jest.fn();\n const wrapper = shallow(\n <CanvasSaveButton\n className=\"ta-example\"\n map={olMap}\n format={conf.saveFormat}\n onSaveStart={saveStart}\n onSaveEnd={saveEnd}\n extraData={{\n copyright: {\n text: () => {\n return (\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)'\n );\n },\n },\n }}\n >\n {conf.icon}\n </CanvasSaveButton>,\n );\n const link = document.createElement('a');\n link.click = jest.fn();\n const div = document.createElement('div');\n const canvas = document.createElement('canvas');\n canvas.toBlob = jest.fn((callback) => {\n return callback();\n });\n global.URL.createObjectURL = jest.fn(() => {\n return 'fooblob';\n });\n // We use a spy here to be able to correctly restore the initial function\n const spy3 = jest\n .spyOn(global.document, 'createElement')\n .mockImplementation((elt) => {\n if (elt === 'canvas') {\n return canvas;\n }\n if (elt === 'div') {\n return div;\n }\n if (elt === 'a') {\n return link;\n }\n return {};\n });\n const spy = jest.spyOn(CanvasSaveButton.prototype, 'createCanvasImage');\n const spy2 = jest.spyOn(CanvasSaveButton.prototype, 'downloadCanvasImage');\n jest\n .spyOn(olMap.getTargetElement(), 'getElementsByTagName')\n .mockReturnValue([canvas]);\n await wrapper.find('.ta-example').simulate('click');\n await olMap.dispatchEvent(\n new RenderEvent('rendercomplete', undefined, undefined, {\n canvas,\n }),\n );\n await window.setTimeout(() => {\n expect(spy).toHaveBeenCalledTimes(1);\n expect(saveStart).toHaveBeenCalledTimes(1);\n expect(saveEnd).toHaveBeenCalledTimes(1);\n expect(spy2.mock.calls[0][0]).toBe(canvas);\n expect(spy2.mock.calls[0][0].toBlob).toHaveBeenCalledTimes(1);\n expect(link.href).toBe('http://localhost/fooblob');\n expect(link.download).toBe('.jpg');\n expect(link.click).toHaveBeenCalledTimes(1);\n spy.mockRestore();\n spy2.mockRestore();\n spy3.mockRestore();\n done();\n });\n });\n\n test('stops click event propagation on ie.', () => {\n const wrapper = shallow(\n <CanvasSaveButton className=\"ta-example\" title={conf.title} map={olMap}>\n {conf.icon}\n </CanvasSaveButton>,\n );\n\n const evt = {\n stopPropagation: jest.fn(),\n preventDefault: jest.fn(),\n };\n window.navigator.msSaveBlob = true;\n\n const canvas = document.createElement('canvas');\n const p = new Promise((resolve) => {\n resolve(canvas);\n });\n jest\n .spyOn(CanvasSaveButton.prototype, 'createCanvasImage')\n .mockReturnValue(p);\n\n wrapper.find('.ta-example').simulate('click', evt);\n expect(evt.stopPropagation).toHaveBeenCalledTimes(1);\n expect(evt.preventDefault).toHaveBeenCalledTimes(1);\n\n window.navigator.msSaveBlob = false;\n });\n});\n"],"names":["let","const"],"mappings":"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"}
@@ -183,7 +183,7 @@ var LayerTree = /*@__PURE__*/(function (Component) {
183
183
  LayerTree.prototype.componentWillUnmount = function componentWillUnmount () {
184
184
  var ref = this.props;
185
185
  var layerService = ref.layerService;
186
- layerService.un('change:visible', this.updateLayers);
186
+ layerService.un('change', this.updateLayers);
187
187
  };
188
188
 
189
189
  LayerTree.prototype.onInputClick = function onInputClick (layer, toggle) {
@@ -235,9 +235,9 @@ var LayerTree = /*@__PURE__*/(function (Component) {
235
235
  var ref = this.props;
236
236
  var layerService = ref.layerService;
237
237
  if (layerService) {
238
- layerService.un('change:visible', this.updateLayers);
238
+ layerService.un('change', this.updateLayers);
239
239
  this.updateLayers();
240
- layerService.on('change:visible', this.updateLayers);
240
+ layerService.on('change', this.updateLayers);
241
241
  }
242
242
  };
243
243
 
@@ -1 +1 @@
1
- {"version":3,"file":"LayerTree.js","sources":["../../../src/components/LayerTree/LayerTree.js"],"sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nconst propTypes = {\n /**\n * Layers provider.\n */\n layerService: PropTypes.object,\n\n /**\n * CSS class to apply on the container.\n */\n className: PropTypes.string,\n\n /**\n * Padding left to apply on each level.\n */\n padding: PropTypes.number,\n\n /**\n * Determine if the item is hidden in the tree or not.\n *\n * @param {object} item The item to hide or not.\n *\n * @return {bool} true if the item is not displayed in the tree\n */\n isItemHidden: PropTypes.func,\n\n /**\n * Determine the className used by the div containing the parent and its children.\n */\n getParentClassName: PropTypes.func,\n\n /**\n * Custom function to render an item in the tree.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderItem: PropTypes.func,\n\n /**\n * Custom function to render only the content of an item in the tree.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderItemContent: PropTypes.func,\n\n /**\n * Custom function to render custom content before the list of children of an item.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderBeforeItem: PropTypes.func,\n\n /**\n * Custom function to render custom content after the list of children of an item.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderAfterItem: PropTypes.func,\n\n /**\n * Object holding title for the layer tree's buttons.\n */\n titles: PropTypes.shape({\n /**\n * aria-label on checkbox to show layer.\n */\n layerShow: PropTypes.string,\n /**\n * aria-label on checkbox to hide layer.\n */\n layerHide: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerShow: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerHide: PropTypes.string,\n }),\n\n /**\n * Boolean determining whether children collapse/expand when their parent is toggled\n * @param {...(boolean|function)} expandChildren Boolean or function returning a boolean.\n * @return {boolean} True or false\n */\n expandChildren: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n\n /**\n * Translation function.\n * @param {function} Translation function returning the translated string.\n */\n t: PropTypes.func,\n};\n\nconst defaultProps = {\n layerService: undefined,\n className: 'rs-layer-tree',\n padding: 30,\n isItemHidden: () => {\n return false;\n },\n getParentClassName: () => {\n return undefined;\n },\n renderItem: null,\n renderItemContent: null,\n renderBeforeItem: null,\n renderAfterItem: null,\n titles: {\n layerShow: 'Show layer',\n layerHide: 'Hide layer',\n subLayerShow: 'Show sublayer',\n subLayerHide: 'Hide sublayer',\n },\n t: (s) => {\n return s;\n },\n expandChildren: false,\n};\n\n/**\n * The LayerTree component renders an interface for toggling\n * [mobility-toolbox-js layers](https://mobility-toolbox-js.geops.io/api/identifiers%20html#ol-layers)\n * and their corresponding child layers.\n */\n\nclass LayerTree extends Component {\n constructor(props) {\n super(props);\n const { layerService, isItemHidden } = this.props;\n const initialExpandedLayers =\n layerService && layerService.getLayers()\n ? this.getExpandedLayers(\n layerService.getLayers().filter((l) => {\n return (\n !isItemHidden(l) &&\n l.getVisibleChildren().filter((c) => {\n return !isItemHidden(c);\n }).length\n );\n }),\n )\n : [];\n\n this.state = {\n layers: layerService ? layerService.getLayers() : [],\n expandedLayers: initialExpandedLayers,\n };\n this.updateLayers = this.updateLayers.bind(this);\n this.olKeys = [];\n }\n\n componentDidMount() {\n this.updateLayerService();\n }\n\n componentDidUpdate(prevProps) {\n const { layerService } = this.props;\n\n if (layerService !== prevProps.layerService) {\n this.updateLayerService();\n }\n }\n\n componentWillUnmount() {\n const { layerService } = this.props;\n layerService.un('change:visible', this.updateLayers);\n }\n\n onInputClick(layer, toggle = false) {\n if (toggle) {\n this.onToggle(layer);\n } else {\n layer.setVisible(!layer.visible);\n }\n }\n\n onToggle(layer) {\n const { expandedLayers } = this.state;\n const pos = expandedLayers.indexOf(layer);\n if (pos > -1) {\n expandedLayers.splice(pos, 1);\n } else {\n expandedLayers.push(...this.getExpandedLayers([layer]));\n }\n\n this.setState({ expandedLayers });\n }\n\n /**\n * Get the always expanded ancestors (isAlwaysExpanded=true) of the given layers\n * together with the (given) initially expanded layers\n *\n * @param {Layer} layers Initially expanded layers\n * @return {Array.<Layer>} Initially expanded layers and all its always expanded ancestors\n */\n getExpandedLayers(layers) {\n const { isItemHidden } = this.props;\n const children = layers.flatMap((l) => {\n return l.children.filter((c) => {\n return !isItemHidden(c) && c.get('isAlwaysExpanded');\n });\n });\n\n if (!children.length) {\n return layers;\n }\n return [...layers, this.getExpandedLayers(children)].flat();\n }\n\n updateLayerService() {\n const { layerService } = this.props;\n if (layerService) {\n layerService.un('change:visible', this.updateLayers);\n this.updateLayers();\n layerService.on('change:visible', this.updateLayers);\n }\n }\n\n updateLayers() {\n const { layerService, expandChildren } = this.props;\n const layers = layerService.getLayers();\n if (\n typeof expandChildren === 'function'\n ? expandChildren(layers)\n : expandChildren\n ) {\n this.setState({\n expandedLayers: layers.flatMap((l) => {\n return this.expandLayer(l);\n }),\n });\n }\n this.setState({\n layers,\n });\n }\n\n expandLayer(layer, expLayers = []) {\n const { isItemHidden } = this.props;\n if (layer.visible && !isItemHidden(layer)) {\n const children = layer.children\n .filter((c) => {\n return !isItemHidden(c) && !c.get('isAlwaysExpanded');\n })\n .flatMap((c) => {\n return this.expandLayer(c, expLayers);\n });\n return [...expLayers, ...children, layer];\n }\n return expLayers;\n }\n\n renderInput(layer) {\n const { titles, isItemHidden } = this.props;\n let tabIndex = 0;\n\n if (\n !layer.children.filter((c) => {\n return !isItemHidden(c);\n }).length\n ) {\n // We forbid focus on keypress event for first level layers and layers without children.\n tabIndex = -1;\n }\n\n const inputType = layer.get('radioGroup') ? 'radio' : 'checkbox';\n return (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control,jsx-a11y/no-noninteractive-element-interactions\n <label\n className={`rs-layer-tree-input rs-layer-tree-input-${inputType} rs-${inputType}`}\n tabIndex={tabIndex}\n title={layer.visible ? titles.layerHide : titles.layerShow}\n aria-label={layer.visible ? titles.layerHide : titles.layerShow}\n onKeyPress={(e) => {\n if (e.which === 13) {\n this.onInputClick(layer);\n }\n }}\n >\n <input\n type={inputType}\n tabIndex={-1}\n checked={layer.visible}\n readOnly\n onClick={() => {\n return this.onInputClick(layer);\n }}\n />\n <span />\n </label>\n );\n }\n\n renderArrow(layer) {\n const { isItemHidden } = this.props;\n const { expandedLayers } = this.state;\n\n if (\n !layer.children.filter((c) => {\n return !isItemHidden(c);\n }).length ||\n layer.get('isAlwaysExpanded')\n ) {\n return null;\n }\n\n return (\n <div\n className={`rs-layer-tree-arrow rs-layer-tree-arrow-${\n !expandedLayers.includes(layer) ? 'collapsed' : 'expanded'\n }`}\n />\n );\n }\n\n // Render a button which expands/collapse the layer if there is children\n // or simulate a click on the input otherwise.\n renderToggleButton(layer) {\n const { t, titles, isItemHidden } = this.props;\n const { expandedLayers } = this.state;\n const onInputClick = () => {\n this.onInputClick(\n layer,\n layer.children.filter((c) => {\n return !isItemHidden(c);\n }).length && !layer.get('isAlwaysExpanded'),\n );\n };\n const title = `${t(layer.name)} ${\n !expandedLayers.includes(layer)\n ? titles.subLayerShow\n : titles.subLayerHide\n }`;\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className=\"rs-layer-tree-toggle\"\n title={title}\n aria-expanded={expandedLayers.includes(layer)}\n aria-label={title}\n onClick={onInputClick}\n onKeyPress={onInputClick}\n >\n <div>{t(layer.name)}</div>\n {this.renderArrow(layer)}\n </div>\n );\n }\n\n renderItemContent(layer) {\n return (\n <>\n {this.renderInput(layer)}\n {this.renderToggleButton(layer)}\n </>\n );\n }\n\n renderItem(layer, level) {\n const { isItemHidden } = this.props;\n const {\n renderItem,\n renderItemContent,\n renderBeforeItem,\n renderAfterItem,\n padding,\n getParentClassName,\n } = this.props;\n const { expandedLayers } = this.state;\n\n const children = expandedLayers.includes(layer)\n ? [\n ...layer.children.filter((c) => {\n return !isItemHidden(c);\n }),\n ]\n : [];\n\n if (renderItem) {\n return renderItem(layer, this.onInputClick, this.onToggle);\n }\n\n return (\n <div className={getParentClassName()} key={layer.key}>\n <div\n className={`rs-layer-tree-item ${layer.visible ? 'rs-visible' : ''}`}\n style={{\n paddingLeft: `${padding * level}px`,\n }}\n >\n {renderItemContent\n ? renderItemContent(layer, this)\n : this.renderItemContent(layer)}\n </div>\n {renderBeforeItem && renderBeforeItem(layer, level, this)}\n {[...children].reverse().map((child) => {\n return this.renderItem(child, level + 1);\n })}\n {renderAfterItem && renderAfterItem(layer, level, this)}\n </div>\n );\n }\n\n renderTree() {\n const { isItemHidden } = this.props;\n const { layers } = this.state;\n\n if (!layers) {\n return null;\n }\n\n return (\n <>\n {layers\n .filter((l) => {\n return !isItemHidden(l);\n })\n .reverse()\n .map((l) => {\n return this.renderItem(l, 0);\n })}\n </>\n );\n }\n\n render() {\n const { className } = this.props;\n return <div className={className}>{this.renderTree()}</div>;\n }\n}\n\nLayerTree.propTypes = propTypes;\nLayerTree.defaultProps = defaultProps;\n\nexport default LayerTree;\n"],"names":["const","super","this","let"],"mappings":"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"}
1
+ {"version":3,"file":"LayerTree.js","sources":["../../../src/components/LayerTree/LayerTree.js"],"sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nconst propTypes = {\n /**\n * Layers provider.\n */\n layerService: PropTypes.object,\n\n /**\n * CSS class to apply on the container.\n */\n className: PropTypes.string,\n\n /**\n * Padding left to apply on each level.\n */\n padding: PropTypes.number,\n\n /**\n * Determine if the item is hidden in the tree or not.\n *\n * @param {object} item The item to hide or not.\n *\n * @return {bool} true if the item is not displayed in the tree\n */\n isItemHidden: PropTypes.func,\n\n /**\n * Determine the className used by the div containing the parent and its children.\n */\n getParentClassName: PropTypes.func,\n\n /**\n * Custom function to render an item in the tree.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderItem: PropTypes.func,\n\n /**\n * Custom function to render only the content of an item in the tree.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderItemContent: PropTypes.func,\n\n /**\n * Custom function to render custom content before the list of children of an item.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderBeforeItem: PropTypes.func,\n\n /**\n * Custom function to render custom content after the list of children of an item.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderAfterItem: PropTypes.func,\n\n /**\n * Object holding title for the layer tree's buttons.\n */\n titles: PropTypes.shape({\n /**\n * aria-label on checkbox to show layer.\n */\n layerShow: PropTypes.string,\n /**\n * aria-label on checkbox to hide layer.\n */\n layerHide: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerShow: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerHide: PropTypes.string,\n }),\n\n /**\n * Boolean determining whether children collapse/expand when their parent is toggled\n * @param {...(boolean|function)} expandChildren Boolean or function returning a boolean.\n * @return {boolean} True or false\n */\n expandChildren: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n\n /**\n * Translation function.\n * @param {function} Translation function returning the translated string.\n */\n t: PropTypes.func,\n};\n\nconst defaultProps = {\n layerService: undefined,\n className: 'rs-layer-tree',\n padding: 30,\n isItemHidden: () => {\n return false;\n },\n getParentClassName: () => {\n return undefined;\n },\n renderItem: null,\n renderItemContent: null,\n renderBeforeItem: null,\n renderAfterItem: null,\n titles: {\n layerShow: 'Show layer',\n layerHide: 'Hide layer',\n subLayerShow: 'Show sublayer',\n subLayerHide: 'Hide sublayer',\n },\n t: (s) => {\n return s;\n },\n expandChildren: false,\n};\n\n/**\n * The LayerTree component renders an interface for toggling\n * [mobility-toolbox-js layers](https://mobility-toolbox-js.geops.io/api/identifiers%20html#ol-layers)\n * and their corresponding child layers.\n */\n\nclass LayerTree extends Component {\n constructor(props) {\n super(props);\n const { layerService, isItemHidden } = this.props;\n const initialExpandedLayers =\n layerService && layerService.getLayers()\n ? this.getExpandedLayers(\n layerService.getLayers().filter((l) => {\n return (\n !isItemHidden(l) &&\n l.getVisibleChildren().filter((c) => {\n return !isItemHidden(c);\n }).length\n );\n }),\n )\n : [];\n\n this.state = {\n layers: layerService ? layerService.getLayers() : [],\n expandedLayers: initialExpandedLayers,\n };\n this.updateLayers = this.updateLayers.bind(this);\n this.olKeys = [];\n }\n\n componentDidMount() {\n this.updateLayerService();\n }\n\n componentDidUpdate(prevProps) {\n const { layerService } = this.props;\n\n if (layerService !== prevProps.layerService) {\n this.updateLayerService();\n }\n }\n\n componentWillUnmount() {\n const { layerService } = this.props;\n layerService.un('change', this.updateLayers);\n }\n\n onInputClick(layer, toggle = false) {\n if (toggle) {\n this.onToggle(layer);\n } else {\n layer.setVisible(!layer.visible);\n }\n }\n\n onToggle(layer) {\n const { expandedLayers } = this.state;\n const pos = expandedLayers.indexOf(layer);\n if (pos > -1) {\n expandedLayers.splice(pos, 1);\n } else {\n expandedLayers.push(...this.getExpandedLayers([layer]));\n }\n\n this.setState({ expandedLayers });\n }\n\n /**\n * Get the always expanded ancestors (isAlwaysExpanded=true) of the given layers\n * together with the (given) initially expanded layers\n *\n * @param {Layer} layers Initially expanded layers\n * @return {Array.<Layer>} Initially expanded layers and all its always expanded ancestors\n */\n getExpandedLayers(layers) {\n const { isItemHidden } = this.props;\n const children = layers.flatMap((l) => {\n return l.children.filter((c) => {\n return !isItemHidden(c) && c.get('isAlwaysExpanded');\n });\n });\n\n if (!children.length) {\n return layers;\n }\n return [...layers, this.getExpandedLayers(children)].flat();\n }\n\n updateLayerService() {\n const { layerService } = this.props;\n if (layerService) {\n layerService.un('change', this.updateLayers);\n this.updateLayers();\n layerService.on('change', this.updateLayers);\n }\n }\n\n updateLayers() {\n const { layerService, expandChildren } = this.props;\n const layers = layerService.getLayers();\n if (\n typeof expandChildren === 'function'\n ? expandChildren(layers)\n : expandChildren\n ) {\n this.setState({\n expandedLayers: layers.flatMap((l) => {\n return this.expandLayer(l);\n }),\n });\n }\n this.setState({\n layers,\n });\n }\n\n expandLayer(layer, expLayers = []) {\n const { isItemHidden } = this.props;\n if (layer.visible && !isItemHidden(layer)) {\n const children = layer.children\n .filter((c) => {\n return !isItemHidden(c) && !c.get('isAlwaysExpanded');\n })\n .flatMap((c) => {\n return this.expandLayer(c, expLayers);\n });\n return [...expLayers, ...children, layer];\n }\n return expLayers;\n }\n\n renderInput(layer) {\n const { titles, isItemHidden } = this.props;\n let tabIndex = 0;\n\n if (\n !layer.children.filter((c) => {\n return !isItemHidden(c);\n }).length\n ) {\n // We forbid focus on keypress event for first level layers and layers without children.\n tabIndex = -1;\n }\n\n const inputType = layer.get('radioGroup') ? 'radio' : 'checkbox';\n return (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control,jsx-a11y/no-noninteractive-element-interactions\n <label\n className={`rs-layer-tree-input rs-layer-tree-input-${inputType} rs-${inputType}`}\n tabIndex={tabIndex}\n title={layer.visible ? titles.layerHide : titles.layerShow}\n aria-label={layer.visible ? titles.layerHide : titles.layerShow}\n onKeyPress={(e) => {\n if (e.which === 13) {\n this.onInputClick(layer);\n }\n }}\n >\n <input\n type={inputType}\n tabIndex={-1}\n checked={layer.visible}\n readOnly\n onClick={() => {\n return this.onInputClick(layer);\n }}\n />\n <span />\n </label>\n );\n }\n\n renderArrow(layer) {\n const { isItemHidden } = this.props;\n const { expandedLayers } = this.state;\n\n if (\n !layer.children.filter((c) => {\n return !isItemHidden(c);\n }).length ||\n layer.get('isAlwaysExpanded')\n ) {\n return null;\n }\n\n return (\n <div\n className={`rs-layer-tree-arrow rs-layer-tree-arrow-${\n !expandedLayers.includes(layer) ? 'collapsed' : 'expanded'\n }`}\n />\n );\n }\n\n // Render a button which expands/collapse the layer if there is children\n // or simulate a click on the input otherwise.\n renderToggleButton(layer) {\n const { t, titles, isItemHidden } = this.props;\n const { expandedLayers } = this.state;\n const onInputClick = () => {\n this.onInputClick(\n layer,\n layer.children.filter((c) => {\n return !isItemHidden(c);\n }).length && !layer.get('isAlwaysExpanded'),\n );\n };\n const title = `${t(layer.name)} ${\n !expandedLayers.includes(layer)\n ? titles.subLayerShow\n : titles.subLayerHide\n }`;\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className=\"rs-layer-tree-toggle\"\n title={title}\n aria-expanded={expandedLayers.includes(layer)}\n aria-label={title}\n onClick={onInputClick}\n onKeyPress={onInputClick}\n >\n <div>{t(layer.name)}</div>\n {this.renderArrow(layer)}\n </div>\n );\n }\n\n renderItemContent(layer) {\n return (\n <>\n {this.renderInput(layer)}\n {this.renderToggleButton(layer)}\n </>\n );\n }\n\n renderItem(layer, level) {\n const { isItemHidden } = this.props;\n const {\n renderItem,\n renderItemContent,\n renderBeforeItem,\n renderAfterItem,\n padding,\n getParentClassName,\n } = this.props;\n const { expandedLayers } = this.state;\n\n const children = expandedLayers.includes(layer)\n ? [\n ...layer.children.filter((c) => {\n return !isItemHidden(c);\n }),\n ]\n : [];\n\n if (renderItem) {\n return renderItem(layer, this.onInputClick, this.onToggle);\n }\n\n return (\n <div className={getParentClassName()} key={layer.key}>\n <div\n className={`rs-layer-tree-item ${layer.visible ? 'rs-visible' : ''}`}\n style={{\n paddingLeft: `${padding * level}px`,\n }}\n >\n {renderItemContent\n ? renderItemContent(layer, this)\n : this.renderItemContent(layer)}\n </div>\n {renderBeforeItem && renderBeforeItem(layer, level, this)}\n {[...children].reverse().map((child) => {\n return this.renderItem(child, level + 1);\n })}\n {renderAfterItem && renderAfterItem(layer, level, this)}\n </div>\n );\n }\n\n renderTree() {\n const { isItemHidden } = this.props;\n const { layers } = this.state;\n\n if (!layers) {\n return null;\n }\n\n return (\n <>\n {layers\n .filter((l) => {\n return !isItemHidden(l);\n })\n .reverse()\n .map((l) => {\n return this.renderItem(l, 0);\n })}\n </>\n );\n }\n\n render() {\n const { className } = this.props;\n return <div className={className}>{this.renderTree()}</div>;\n }\n}\n\nLayerTree.propTypes = propTypes;\nLayerTree.defaultProps = defaultProps;\n\nexport default LayerTree;\n"],"names":["const","super","this","let"],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "react-spatial",
3
3
  "description": "Components to build React map apps.",
4
- "version": "1.1.1",
4
+ "version": "1.1.2-beta.1",
5
5
  "license": "MIT",
6
6
  "dependencies": {
7
- "@geops/geops-ui": "0.1.12",
7
+ "@geops/geops-ui": "0.1.13",
8
8
  "@material-ui/core": "4.12.3",
9
9
  "@material-ui/icons": "4.11.2",
10
10
  "@material-ui/lab": "4.0.0-alpha.60",