svgmap 2.12.2 → 2.14.0

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.
@@ -10,7 +10,7 @@
10
10
  "react-dom": "^18.2.0",
11
11
  "react-scripts": "5.0.1",
12
12
  "web-vitals": "^2.1.4",
13
- "svgmap": "2.10.0"
13
+ "svgmap": "2.12.2"
14
14
  },
15
15
  "scripts": {
16
16
  "start": "react-scripts start",
package/dist/svgMap.css CHANGED
@@ -71,6 +71,9 @@
71
71
  border-radius: 2px;
72
72
  box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);
73
73
  }
74
+ .svgMap-map-wrapper .svgMap-map-controls-wrapper.svgMap-disabled {
75
+ display: none;
76
+ }
74
77
  .svgMap-map-wrapper .svgMap-map-controls-zoom,
75
78
  .svgMap-map-wrapper .svgMap-map-controls-move {
76
79
  display: flex;
package/dist/svgMap.js CHANGED
@@ -12,6 +12,9 @@ function svgMapWrapper(svgPanZoom) {
12
12
  // The element to render the map in
13
13
  targetElementID: '',
14
14
 
15
+ // Allow user to zoom and pan
16
+ allowInteraction: true,
17
+
15
18
  // Minimum and maximum zoom
16
19
  minZoom: 1,
17
20
  maxZoom: 25,
@@ -28,6 +31,9 @@ function svgMapWrapper(svgPanZoom) {
28
31
  // Zoom sensitivity
29
32
  zoomScaleSensitivity: 0.2,
30
33
 
34
+ // Zoom with double-click
35
+ dblClickZoomEnabled: true,
36
+
31
37
  // Zoom with mousewheel
32
38
  mouseWheelZoomEnabled: true,
33
39
 
@@ -45,8 +51,8 @@ function svgMapWrapper(svgPanZoom) {
45
51
  colorMin: '#FFE5D9',
46
52
  colorNoData: '#E2E2E2',
47
53
 
48
- // Color attribute for setting a manual color in the data object
49
- manualColorAttribute: 'color',
54
+ // Ratio type for the color scale, can be 'linear' or 'log' for logarithmic or a custom function (value, min, max) => ratio
55
+ ratioType: 'linear',
50
56
 
51
57
  // The flag type can be 'image' or 'emoji'
52
58
  flagType: 'image',
@@ -114,6 +120,7 @@ function svgMapWrapper(svgPanZoom) {
114
120
 
115
121
  // Block scrolling when option is enabled
116
122
  if (
123
+ this.options.allowInteraction &&
117
124
  this.options.mouseWheelZoomEnabled &&
118
125
  this.options.mouseWheelZoomWithKey
119
126
  ) {
@@ -424,17 +431,45 @@ function svgMapWrapper(svgPanZoom) {
424
431
  min,
425
432
  parseInt(data.values[countryID][data.applyData], 10)
426
433
  );
427
- var ratio = Math.max(0, Math.min(1, (value - min) / (max - min)));
434
+
428
435
  var color = this.getColor(
429
436
  this.toHex(this.options.colorMax),
430
437
  this.toHex(this.options.colorMin),
431
- ratio || ratio === 0 ? ratio : 1
438
+ this.calculateColorRatio(value, min, max, this.options.ratioType)
432
439
  );
433
440
  element.setAttribute('fill', color);
434
441
  }.bind(this)
435
442
  );
436
443
  };
437
444
 
445
+ svgMap.prototype.calculateColorRatio = function (value, min, max, ratioType) {
446
+ var range = max - min;
447
+ var positionInRange = value - min;
448
+
449
+ if (range === 0 || positionInRange === 0) {
450
+ return 0;
451
+ }
452
+
453
+ if (ratioType === 'log') {
454
+ var logValue = Math.log(positionInRange + 1);
455
+ var logMin = Math.log(1);
456
+ var logMax = Math.log(range + 1);
457
+ var ratio = Math.max(0, Math.min(1, (logValue - logMin) / (logMax - logMin)));
458
+ return ratio || ratio === 0 ? ratio : 1;
459
+ }
460
+
461
+ if (ratioType === 'linear') {
462
+ var ratio = Math.max(0, Math.min(1, positionInRange / range));
463
+ return ratio || ratio === 0 ? ratio : 1;
464
+ }
465
+
466
+ if (typeof ratioType === 'function') {
467
+ return ratioType(value, min, max);
468
+ }
469
+
470
+ return 1;
471
+ }
472
+
438
473
  // Emoji flags
439
474
 
440
475
  svgMap.prototype.emojiFlags = {
@@ -795,8 +830,10 @@ function svgMapWrapper(svgPanZoom) {
795
830
  this[zoomControlName].type = 'button';
796
831
  this[zoomControlName].addEventListener(
797
832
  'click',
798
- function () {
799
- this.zoomMap(item);
833
+ function() {
834
+ if (this.options.allowInteraction) {
835
+ this.zoomMap(item);
836
+ }
800
837
  }.bind(this),
801
838
  { passive: true }
802
839
  );
@@ -804,11 +841,16 @@ function svgMapWrapper(svgPanZoom) {
804
841
  }.bind(this)
805
842
  );
806
843
 
844
+ if (!this.options.allowInteraction) {
845
+ mapControlsWrapper.classList.add('svgMap-disabled');
846
+ mapControlsWrapper.setAttribute('aria-disabled', 'true');
847
+ }
848
+
807
849
  // Add accessible names to zoom controls
808
850
  this.zoomControlIn.setAttribute('aria-label', 'Zoom in');
809
851
  this.zoomControlOut.setAttribute('aria-label', 'Zoom out');
810
852
 
811
- if (this.options.showContinentSelector) {
853
+ if (this.options.allowInteraction && this.options.showContinentSelector) {
812
854
  // Add continent controls
813
855
  var mapContinentControlsWrapper = this.createElement(
814
856
  'div',
@@ -1008,14 +1050,16 @@ function svgMapWrapper(svgPanZoom) {
1008
1050
 
1009
1051
  // Init pan zoom
1010
1052
  this.mapPanZoom = svgPanZoom(this.mapImage, {
1011
- zoomEnabled: true,
1053
+ zoomEnabled: this.options.allowInteraction,
1054
+ panEnabled: this.options.allowInteraction,
1012
1055
  fit: true,
1013
1056
  center: true,
1014
1057
  minZoom: this.options.minZoom,
1015
1058
  maxZoom: this.options.maxZoom,
1016
1059
  zoomScaleSensitivity: this.options.zoomScaleSensitivity,
1017
1060
  controlIconsEnabled: false,
1018
- mouseWheelZoomEnabled: this.options.mouseWheelZoomEnabled,
1061
+ dblClickZoomEnabled: this.options.allowInteraction ? this.options.dblClickZoomEnabled : false,
1062
+ mouseWheelZoomEnabled: this.options.allowInteraction ? this.options.mouseWheelZoomEnabled : false,
1019
1063
  preventMouseEventsDefault: true,
1020
1064
  onZoom: function () {
1021
1065
  me.setControlStatuses();
@@ -1,2 +1,2 @@
1
1
  /*! svgMap | https://github.com/StephanWagner/svgMap | MIT License | Copyright Stephan Wagner | https://stephanwagner.me */
2
- .svgMap-container,.svgMap-wrapper{position:relative}.svgMap-block-zoom-notice{position:absolute;z-index:2;top:100%;left:0;right:0;bottom:0;background:rgba(0,0,0,.8);pointer-events:none;opacity:0;color:#fff;transition:opacity 250ms}.svgMap-block-zoom-notice-active .svgMap-block-zoom-notice{pointer-events:all;top:0;opacity:1}.svgMap-block-zoom-notice>div{position:absolute;top:50%;left:0;right:0;text-align:center;padding:0 32px;transform:translateY(-50%);font-size:28px}@media (max-width:900px){.svgMap-block-zoom-notice>div{font-size:22px}}.svgMap-map-wrapper{position:relative;width:100%;padding-top:50%;overflow:hidden;background:#d9ecff;color:#111}.svgMap-map-wrapper *{box-sizing:border-box}.svgMap-map-wrapper :focus:not(:focus-visible){outline:0}.svgMap-map-wrapper .svgMap-map-image{display:block;position:absolute;top:0;left:0;width:100%;height:100%;margin:0}.svgMap-map-wrapper .svgMap-map-controls-wrapper{position:absolute;bottom:10px;left:10px;z-index:1;display:flex;overflow:hidden;border-radius:2px;box-shadow:0 0 0 2px rgba(0,0,0,.1)}.svgMap-map-wrapper .svgMap-map-controls-move,.svgMap-map-wrapper .svgMap-map-controls-zoom{display:flex;margin-right:5px;overflow:hidden;background:#fff}.svgMap-map-wrapper .svgMap-map-controls-move:last-child,.svgMap-map-wrapper .svgMap-map-controls-zoom:last-child{margin-right:0}.svgMap-map-wrapper .svgMap-control-button{background-color:#fff;border:none;border-radius:0;color:#fff;font:inherit;line-height:inherit;margin:0;padding:0;overflow:visible;text-transform:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;width:32px;height:32px;position:relative}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button::before{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#ccc;transition:background-color 250ms}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button::before{width:11px;height:3px}@media (hover:hover){.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:hover::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:hover::before{background:#000}}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:active::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:active::before{background:#000}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button::before{width:11px;height:11px;background:0 0;border:2px solid #ccc;transition:border-color 250ms}@media (hover:hover){.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button:hover::before{background:0 0;border-color:#000}}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button:active::before{background:0 0;border-color:#000}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-disabled::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-disabled::before{background:#eee}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button.svgMap-disabled{cursor:default}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button.svgMap-disabled::before{border:2px solid #eee;background:0 0}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-in-button::after{width:3px;height:11px}.svgMap-map-wrapper .svgMap-map-continent-controls-wrapper{position:absolute;top:10px;right:10px;z-index:1;display:flex;border-radius:2px;box-shadow:0 0 0 2px rgba(0,0,0,.1)}.svgMap-map-wrapper .svgMap-country{stroke:#fff;stroke-width:1;stroke-linejoin:round;vector-effect:non-scaling-stroke;transition:fill 250ms,stroke 250ms}.svgMap-map-wrapper .svgMap-country[data-link]{cursor:pointer}@media (hover:hover){.svgMap-map-wrapper .svgMap-country:hover{stroke:#333;stroke-width:1.5}}.svgMap-map-wrapper .svgMap-country.svgMap-active{stroke:#333;stroke-width:1.5}.svgMap-tooltip{box-shadow:0 0 3px rgba(0,0,0,.2);position:absolute;z-index:2;border-radius:2px;background:#fff;transform:translate(-50%,-100%);border-bottom:1px solid #111;display:none;pointer-events:none;min-width:60px}.svgMap-tooltip.svgMap-tooltip-flipped{transform:translate(-50%,0);border-bottom:0;border-top:1px solid #111}.svgMap-tooltip.svgMap-active{display:block}.svgMap-tooltip .svgMap-tooltip-content-container{position:relative;padding:10px 20px}.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container{text-align:center;margin:2px 0 5px}.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container.svgMap-tooltip-flag-container-emoji{font-size:50px;line-height:0;padding:25px 0 15px}.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container .svgMap-tooltip-flag{display:block;margin:auto;width:auto;height:32px;padding:2px;background:rgba(0,0,0,.15);border-radius:2px}.svgMap-tooltip .svgMap-tooltip-title{white-space:nowrap;font-size:18px;line-height:28px;padding:0 0 8px;text-align:center}.svgMap-tooltip .svgMap-tooltip-content{white-space:nowrap;text-align:center;font-size:14px;color:#777;margin:-5px 0 0}.svgMap-tooltip .svgMap-tooltip-content table{padding:0;border-spacing:0;margin:auto}.svgMap-tooltip .svgMap-tooltip-content table td{padding:2px 0;text-align:left}.svgMap-tooltip .svgMap-tooltip-content table td span{color:#111}.svgMap-tooltip .svgMap-tooltip-content table td:first-child{padding-right:10px;text-align:right}.svgMap-tooltip .svgMap-tooltip-content table td sup{vertical-align:baseline;position:relative;top:-5px}.svgMap-tooltip .svgMap-tooltip-content .svgMap-tooltip-no-data{padding:2px 0;color:#777;font-style:italic}.svgMap-tooltip .svgMap-tooltip-pointer{position:absolute;top:100%;left:50%;transform:translateX(-50%);overflow:hidden;height:10px;width:30px}.svgMap-tooltip .svgMap-tooltip-pointer::after{content:"";width:20px;height:20px;background:#fff;border:1px solid #111;position:absolute;bottom:6px;left:50%;transform:translateX(-50%) rotate(45deg)}.svgMap-tooltip.svgMap-tooltip-flipped .svgMap-tooltip-pointer{bottom:auto;top:-10px;transform:translateX(-50%) scaleY(-1)}
2
+ .svgMap-container,.svgMap-wrapper{position:relative}.svgMap-block-zoom-notice{position:absolute;z-index:2;top:100%;left:0;right:0;bottom:0;background:rgba(0,0,0,.8);pointer-events:none;opacity:0;color:#fff;transition:opacity 250ms}.svgMap-block-zoom-notice-active .svgMap-block-zoom-notice{pointer-events:all;top:0;opacity:1}.svgMap-block-zoom-notice>div{position:absolute;top:50%;left:0;right:0;text-align:center;padding:0 32px;transform:translateY(-50%);font-size:28px}@media (max-width:900px){.svgMap-block-zoom-notice>div{font-size:22px}}.svgMap-map-wrapper{position:relative;width:100%;padding-top:50%;overflow:hidden;background:#d9ecff;color:#111}.svgMap-map-wrapper *{box-sizing:border-box}.svgMap-map-wrapper :focus:not(:focus-visible){outline:0}.svgMap-map-wrapper .svgMap-map-image{display:block;position:absolute;top:0;left:0;width:100%;height:100%;margin:0}.svgMap-map-wrapper .svgMap-map-controls-wrapper{position:absolute;bottom:10px;left:10px;z-index:1;display:flex;overflow:hidden;border-radius:2px;box-shadow:0 0 0 2px rgba(0,0,0,.1)}.svgMap-map-wrapper .svgMap-map-controls-wrapper.svgMap-disabled{display:none}.svgMap-map-wrapper .svgMap-map-controls-move,.svgMap-map-wrapper .svgMap-map-controls-zoom{display:flex;margin-right:5px;overflow:hidden;background:#fff}.svgMap-map-wrapper .svgMap-map-controls-move:last-child,.svgMap-map-wrapper .svgMap-map-controls-zoom:last-child{margin-right:0}.svgMap-map-wrapper .svgMap-control-button{background-color:#fff;border:none;border-radius:0;color:#fff;font:inherit;line-height:inherit;margin:0;padding:0;overflow:visible;text-transform:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;width:32px;height:32px;position:relative}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button::before{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#ccc;transition:background-color 250ms}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button::before{width:11px;height:3px}@media (hover:hover){.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:hover::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:hover::before{background:#000}}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:active::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:active::before{background:#000}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button::before{width:11px;height:11px;background:0 0;border:2px solid #ccc;transition:border-color 250ms}@media (hover:hover){.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button:hover::before{background:0 0;border-color:#000}}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button:active::before{background:0 0;border-color:#000}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-disabled::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-disabled::before{background:#eee}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button.svgMap-disabled{cursor:default}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button.svgMap-disabled::before{border:2px solid #eee;background:0 0}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-in-button::after{width:3px;height:11px}.svgMap-map-wrapper .svgMap-map-continent-controls-wrapper{position:absolute;top:10px;right:10px;z-index:1;display:flex;border-radius:2px;box-shadow:0 0 0 2px rgba(0,0,0,.1)}.svgMap-map-wrapper .svgMap-country{stroke:#fff;stroke-width:1;stroke-linejoin:round;vector-effect:non-scaling-stroke;transition:fill 250ms,stroke 250ms}.svgMap-map-wrapper .svgMap-country[data-link]{cursor:pointer}@media (hover:hover){.svgMap-map-wrapper .svgMap-country:hover{stroke:#333;stroke-width:1.5}}.svgMap-map-wrapper .svgMap-country.svgMap-active{stroke:#333;stroke-width:1.5}.svgMap-tooltip{box-shadow:0 0 3px rgba(0,0,0,.2);position:absolute;z-index:2;border-radius:2px;background:#fff;transform:translate(-50%,-100%);border-bottom:1px solid #111;display:none;pointer-events:none;min-width:60px}.svgMap-tooltip.svgMap-tooltip-flipped{transform:translate(-50%,0);border-bottom:0;border-top:1px solid #111}.svgMap-tooltip.svgMap-active{display:block}.svgMap-tooltip .svgMap-tooltip-content-container{position:relative;padding:10px 20px}.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container{text-align:center;margin:2px 0 5px}.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container.svgMap-tooltip-flag-container-emoji{font-size:50px;line-height:0;padding:25px 0 15px}.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container .svgMap-tooltip-flag{display:block;margin:auto;width:auto;height:32px;padding:2px;background:rgba(0,0,0,.15);border-radius:2px}.svgMap-tooltip .svgMap-tooltip-title{white-space:nowrap;font-size:18px;line-height:28px;padding:0 0 8px;text-align:center}.svgMap-tooltip .svgMap-tooltip-content{white-space:nowrap;text-align:center;font-size:14px;color:#777;margin:-5px 0 0}.svgMap-tooltip .svgMap-tooltip-content table{padding:0;border-spacing:0;margin:auto}.svgMap-tooltip .svgMap-tooltip-content table td{padding:2px 0;text-align:left}.svgMap-tooltip .svgMap-tooltip-content table td span{color:#111}.svgMap-tooltip .svgMap-tooltip-content table td:first-child{padding-right:10px;text-align:right}.svgMap-tooltip .svgMap-tooltip-content table td sup{vertical-align:baseline;position:relative;top:-5px}.svgMap-tooltip .svgMap-tooltip-content .svgMap-tooltip-no-data{padding:2px 0;color:#777;font-style:italic}.svgMap-tooltip .svgMap-tooltip-pointer{position:absolute;top:100%;left:50%;transform:translateX(-50%);overflow:hidden;height:10px;width:30px}.svgMap-tooltip .svgMap-tooltip-pointer::after{content:"";width:20px;height:20px;background:#fff;border:1px solid #111;position:absolute;bottom:6px;left:50%;transform:translateX(-50%) rotate(45deg)}.svgMap-tooltip.svgMap-tooltip-flipped .svgMap-tooltip-pointer{bottom:auto;top:-10px;transform:translateX(-50%) scaleY(-1)}